Add set_led_colors
This commit is contained in:
parent
e29b9e2723
commit
cc1deb72bf
1 changed files with 37 additions and 5 deletions
|
@ -39,7 +39,7 @@ struct lnp_fan {
|
||||||
|
|
||||||
struct lnp_device {
|
struct lnp_device {
|
||||||
struct hid_device *hdev;
|
struct hid_device *hdev;
|
||||||
struct mutex lock;
|
spinlock_t lock;
|
||||||
|
|
||||||
const char *dev_name;
|
const char *dev_name;
|
||||||
|
|
||||||
|
@ -47,8 +47,33 @@ struct lnp_device {
|
||||||
int fans_count;
|
int fans_count;
|
||||||
int rgb_leds_per_fan_count;
|
int rgb_leds_per_fan_count;
|
||||||
void *fans_data;
|
void *fans_data;
|
||||||
|
bool update_fans_leds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline void lnp_schedule_work(struct lnp_device *lnp_dev)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&lnp_dev->lock, flags);
|
||||||
|
// if (ds->output_worker_initialized)
|
||||||
|
// schedule_work(&ds->output_worker);
|
||||||
|
spin_unlock_irqrestore(&lnp_dev->lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void lnp_set_led_colors(struct lnp_device *lnp_dev,
|
||||||
|
struct lnp_rgb_led *lnp_rgb_led, uint8_t red,
|
||||||
|
uint8_t green, uint8_t blue)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&lnp_dev->lock, flags);
|
||||||
|
lnp_dev->update_fans_leds = true;
|
||||||
|
lnp_rgb_led->red = red;
|
||||||
|
lnp_rgb_led->green = green;
|
||||||
|
lnp_rgb_led->blue = blue;
|
||||||
|
spin_unlock_irqrestore(&lnp_dev->lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int lnp_extract_fan_and_led_index(struct led_classdev *cdev,
|
static inline int lnp_extract_fan_and_led_index(struct led_classdev *cdev,
|
||||||
int *fan_index, int *led_index)
|
int *fan_index, int *led_index)
|
||||||
{
|
{
|
||||||
|
@ -58,7 +83,7 @@ static inline int lnp_extract_fan_and_led_index(struct led_classdev *cdev,
|
||||||
if (!substr)
|
if (!substr)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ret = ret = sscanf(substr, "fan-%d-led-%d", fan_index, led_index);
|
ret = sscanf(substr, "fan-%d-led-%d", fan_index, led_index);
|
||||||
if (ret != 2)
|
if (ret != 2)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -66,7 +91,7 @@ static inline int lnp_extract_fan_and_led_index(struct led_classdev *cdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lnp_rgb_let_brightness_set(struct led_classdev *cdev,
|
static int lnp_rgb_let_brightness_set(struct led_classdev *cdev,
|
||||||
enum led_brightness)
|
enum led_brightness brightness)
|
||||||
{
|
{
|
||||||
struct hid_device *hdev = to_hid_device(cdev->dev->parent);
|
struct hid_device *hdev = to_hid_device(cdev->dev->parent);
|
||||||
struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(cdev);
|
struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(cdev);
|
||||||
|
@ -83,6 +108,15 @@ static int lnp_rgb_let_brightness_set(struct led_classdev *cdev,
|
||||||
|
|
||||||
struct lnp_fan *lnp_fan = lnp_dev->fans_data + fan_index;
|
struct lnp_fan *lnp_fan = lnp_dev->fans_data + fan_index;
|
||||||
struct lnp_rgb_led *lnp_rgb_led = lnp_fan->rgb_leds_data + led_index;
|
struct lnp_rgb_led *lnp_rgb_led = lnp_fan->rgb_leds_data + led_index;
|
||||||
|
uint8_t red, green, blue;
|
||||||
|
|
||||||
|
led_mc_calc_color_components(mc_cdev, brightness);
|
||||||
|
|
||||||
|
red = mc_cdev->subled_info[0].brightness;
|
||||||
|
green = mc_cdev->subled_info[1].brightness;
|
||||||
|
blue = mc_cdev->subled_info[2].brightness;
|
||||||
|
|
||||||
|
lnp_set_led_colors(lnp_dev, lnp_rgb_led, red, green, blue);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -208,8 +242,6 @@ static inline int lnp_init(struct hid_device *hdev)
|
||||||
|
|
||||||
lnp_dev->hdev = hdev;
|
lnp_dev->hdev = hdev;
|
||||||
lnp_dev->dev_name = dev_name(&hdev->dev);
|
lnp_dev->dev_name = dev_name(&hdev->dev);
|
||||||
mutex_init(&lnp_dev->lock);
|
|
||||||
|
|
||||||
lnp_dev->type = LNP_LED_LL120; // Only support LL120 for now
|
lnp_dev->type = LNP_LED_LL120; // Only support LL120 for now
|
||||||
lnp_dev->fans_count = number_of_fan;
|
lnp_dev->fans_count = number_of_fan;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue