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 hid_device *hdev;
|
||||
struct mutex lock;
|
||||
spinlock_t lock;
|
||||
|
||||
const char *dev_name;
|
||||
|
||||
|
@ -47,8 +47,33 @@ struct lnp_device {
|
|||
int fans_count;
|
||||
int rgb_leds_per_fan_count;
|
||||
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,
|
||||
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)
|
||||
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)
|
||||
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,
|
||||
enum led_brightness)
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
struct hid_device *hdev = to_hid_device(cdev->dev->parent);
|
||||
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_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;
|
||||
}
|
||||
|
@ -208,8 +242,6 @@ static inline int lnp_init(struct hid_device *hdev)
|
|||
|
||||
lnp_dev->hdev = hdev;
|
||||
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->fans_count = number_of_fan;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue