diff options
author | Milo(Woogyom) Kim <milo.kim@ti.com> | 2013-02-05 05:08:40 -0500 |
---|---|---|
committer | Bryan Wu <cooloney@gmail.com> | 2013-02-06 18:59:28 -0500 |
commit | a6e4679a09a0a2bcfa63074272fc9fb2a40f11ad (patch) | |
tree | 53405497f05e27c0c69e008f9dfcce05b9e48b25 /drivers/leds | |
parent | 0e2023463a3c9412728cb2c36c79aca0bb731cc8 (diff) |
leds-lp55xx: use lp55xx_set_brightness()
lp5521_set_brightness() and lp5523_set_brightness() are replaced with
common function, lp55xx_set_brightness().
This function is invoked when the brightness of each LED channel is updated.
LP5521 and LP5523 have different register address for the brightness control,
so this work is done by chip specific brightness_work_fn().
lp5521/5523_led_brightness_work():
use lp55xx_led and lp55xx_chip data structure.
use lp55xx write function.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
Diffstat (limited to 'drivers/leds')
-rw-r--r-- | drivers/leds/leds-lp5521.c | 19 | ||||
-rw-r--r-- | drivers/leds/leds-lp5523.c | 23 | ||||
-rw-r--r-- | drivers/leds/leds-lp55xx-common.c | 9 |
3 files changed, 17 insertions, 34 deletions
diff --git a/drivers/leds/leds-lp5521.c b/drivers/leds/leds-lp5521.c index bda03049fb3c..6efbb7ec0e2d 100644 --- a/drivers/leds/leds-lp5521.c +++ b/drivers/leds/leds-lp5521.c | |||
@@ -151,8 +151,6 @@ static inline struct lp5521_chip *led_to_lp5521(struct lp5521_led *led) | |||
151 | leds[led->id]); | 151 | leds[led->id]); |
152 | } | 152 | } |
153 | 153 | ||
154 | static void lp5521_led_brightness_work(struct work_struct *work); | ||
155 | |||
156 | static inline int lp5521_write(struct i2c_client *client, u8 reg, u8 value) | 154 | static inline int lp5521_write(struct i2c_client *client, u8 reg, u8 value) |
157 | { | 155 | { |
158 | return i2c_smbus_write_byte_data(client, reg, value); | 156 | return i2c_smbus_write_byte_data(client, reg, value); |
@@ -303,24 +301,14 @@ static int lp5521_run_selftest(struct lp5521_chip *chip, char *buf) | |||
303 | return 0; | 301 | return 0; |
304 | } | 302 | } |
305 | 303 | ||
306 | static void lp5521_set_brightness(struct led_classdev *cdev, | ||
307 | enum led_brightness brightness) | ||
308 | { | ||
309 | struct lp5521_led *led = cdev_to_led(cdev); | ||
310 | led->brightness = (u8)brightness; | ||
311 | schedule_work(&led->brightness_work); | ||
312 | } | ||
313 | |||
314 | static void lp5521_led_brightness_work(struct work_struct *work) | 304 | static void lp5521_led_brightness_work(struct work_struct *work) |
315 | { | 305 | { |
316 | struct lp5521_led *led = container_of(work, | 306 | struct lp55xx_led *led = container_of(work, struct lp55xx_led, |
317 | struct lp5521_led, | ||
318 | brightness_work); | 307 | brightness_work); |
319 | struct lp5521_chip *chip = led_to_lp5521(led); | 308 | struct lp55xx_chip *chip = led->chip; |
320 | struct i2c_client *client = chip->client; | ||
321 | 309 | ||
322 | mutex_lock(&chip->lock); | 310 | mutex_lock(&chip->lock); |
323 | lp5521_write(client, LP5521_REG_LED_PWM_BASE + led->chan_nr, | 311 | lp55xx_write(chip, LP5521_REG_LED_PWM_BASE + led->chan_nr, |
324 | led->brightness); | 312 | led->brightness); |
325 | mutex_unlock(&chip->lock); | 313 | mutex_unlock(&chip->lock); |
326 | } | 314 | } |
@@ -711,6 +699,7 @@ static struct lp55xx_device_config lp5521_cfg = { | |||
711 | }, | 699 | }, |
712 | .max_channel = LP5521_MAX_LEDS, | 700 | .max_channel = LP5521_MAX_LEDS, |
713 | .post_init_device = lp5521_post_init_device, | 701 | .post_init_device = lp5521_post_init_device, |
702 | .brightness_work_fn = lp5521_led_brightness_work, | ||
714 | }; | 703 | }; |
715 | 704 | ||
716 | static int lp5521_probe(struct i2c_client *client, | 705 | static int lp5521_probe(struct i2c_client *client, |
diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c index ca2f8134909f..43db2429616b 100644 --- a/drivers/leds/leds-lp5523.c +++ b/drivers/leds/leds-lp5523.c | |||
@@ -163,8 +163,6 @@ static void lp5523_set_mode(struct lp5523_engine *engine, u8 mode); | |||
163 | static int lp5523_set_engine_mode(struct lp5523_engine *engine, u8 mode); | 163 | static int lp5523_set_engine_mode(struct lp5523_engine *engine, u8 mode); |
164 | static int lp5523_load_program(struct lp5523_engine *engine, const u8 *pattern); | 164 | static int lp5523_load_program(struct lp5523_engine *engine, const u8 *pattern); |
165 | 165 | ||
166 | static void lp5523_led_brightness_work(struct work_struct *work); | ||
167 | |||
168 | static int lp5523_write(struct i2c_client *client, u8 reg, u8 value) | 166 | static int lp5523_write(struct i2c_client *client, u8 reg, u8 value) |
169 | { | 167 | { |
170 | return i2c_smbus_write_byte_data(client, reg, value); | 168 | return i2c_smbus_write_byte_data(client, reg, value); |
@@ -468,29 +466,15 @@ release_lock: | |||
468 | return pos; | 466 | return pos; |
469 | } | 467 | } |
470 | 468 | ||
471 | static void lp5523_set_brightness(struct led_classdev *cdev, | ||
472 | enum led_brightness brightness) | ||
473 | { | ||
474 | struct lp5523_led *led = cdev_to_led(cdev); | ||
475 | |||
476 | led->brightness = (u8)brightness; | ||
477 | |||
478 | schedule_work(&led->brightness_work); | ||
479 | } | ||
480 | |||
481 | static void lp5523_led_brightness_work(struct work_struct *work) | 469 | static void lp5523_led_brightness_work(struct work_struct *work) |
482 | { | 470 | { |
483 | struct lp5523_led *led = container_of(work, | 471 | struct lp55xx_led *led = container_of(work, struct lp55xx_led, |
484 | struct lp5523_led, | ||
485 | brightness_work); | 472 | brightness_work); |
486 | struct lp5523_chip *chip = led_to_lp5523(led); | 473 | struct lp55xx_chip *chip = led->chip; |
487 | struct i2c_client *client = chip->client; | ||
488 | 474 | ||
489 | mutex_lock(&chip->lock); | 475 | mutex_lock(&chip->lock); |
490 | 476 | lp55xx_write(chip, LP5523_REG_LED_PWM_BASE + led->chan_nr, | |
491 | lp5523_write(client, LP5523_REG_LED_PWM_BASE + led->chan_nr, | ||
492 | led->brightness); | 477 | led->brightness); |
493 | |||
494 | mutex_unlock(&chip->lock); | 478 | mutex_unlock(&chip->lock); |
495 | } | 479 | } |
496 | 480 | ||
@@ -795,6 +779,7 @@ static struct lp55xx_device_config lp5523_cfg = { | |||
795 | }, | 779 | }, |
796 | .max_channel = LP5523_MAX_LEDS, | 780 | .max_channel = LP5523_MAX_LEDS, |
797 | .post_init_device = lp5523_post_init_device, | 781 | .post_init_device = lp5523_post_init_device, |
782 | .brightness_work_fn = lp5523_led_brightness_work, | ||
798 | }; | 783 | }; |
799 | 784 | ||
800 | static int lp5523_probe(struct i2c_client *client, | 785 | static int lp5523_probe(struct i2c_client *client, |
diff --git a/drivers/leds/leds-lp55xx-common.c b/drivers/leds/leds-lp55xx-common.c index 75ab1c3c03ed..8244d78447f4 100644 --- a/drivers/leds/leds-lp55xx-common.c +++ b/drivers/leds/leds-lp55xx-common.c | |||
@@ -20,6 +20,11 @@ | |||
20 | 20 | ||
21 | #include "leds-lp55xx-common.h" | 21 | #include "leds-lp55xx-common.h" |
22 | 22 | ||
23 | static struct lp55xx_led *cdev_to_lp55xx_led(struct led_classdev *cdev) | ||
24 | { | ||
25 | return container_of(cdev, struct lp55xx_led, cdev); | ||
26 | } | ||
27 | |||
23 | static void lp55xx_reset_device(struct lp55xx_chip *chip) | 28 | static void lp55xx_reset_device(struct lp55xx_chip *chip) |
24 | { | 29 | { |
25 | struct lp55xx_device_config *cfg = chip->cfg; | 30 | struct lp55xx_device_config *cfg = chip->cfg; |
@@ -74,6 +79,10 @@ static struct attribute_group lp55xx_led_attr_group = { | |||
74 | static void lp55xx_set_brightness(struct led_classdev *cdev, | 79 | static void lp55xx_set_brightness(struct led_classdev *cdev, |
75 | enum led_brightness brightness) | 80 | enum led_brightness brightness) |
76 | { | 81 | { |
82 | struct lp55xx_led *led = cdev_to_lp55xx_led(cdev); | ||
83 | |||
84 | led->brightness = (u8)brightness; | ||
85 | schedule_work(&led->brightness_work); | ||
77 | } | 86 | } |
78 | 87 | ||
79 | static int lp55xx_init_led(struct lp55xx_led *led, | 88 | static int lp55xx_init_led(struct lp55xx_led *led, |