diff options
author | Alexander Shiyan <shc_work@mail.ru> | 2013-06-10 12:59:31 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@gmail.com> | 2013-06-20 19:21:34 -0400 |
commit | ae6cdb03ef1d352c489d6c86e0bcec51365a2c64 (patch) | |
tree | 32e4198c16fe247afc09269cfd445ef929e36c95 /drivers/leds/leds-mc13783.c | |
parent | 9d263813c27e2ad3da7ea0877e623f4ff8767ddd (diff) |
leds: leds-mc13783: Add MC13892 LED support
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Tested-by: Philippe Retornaz <philippe.retornaz@epfl.ch>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
Diffstat (limited to 'drivers/leds/leds-mc13783.c')
-rw-r--r-- | drivers/leds/leds-mc13783.c | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/drivers/leds/leds-mc13783.c b/drivers/leds/leds-mc13783.c index da8ec244a641..f4de98052aaa 100644 --- a/drivers/leds/leds-mc13783.c +++ b/drivers/leds/leds-mc13783.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * LEDs driver for Freescale MC13783 | 2 | * LEDs driver for Freescale MC13783/MC13892 |
3 | * | 3 | * |
4 | * Copyright (C) 2010 Philippe Rétornaz | 4 | * Copyright (C) 2010 Philippe Rétornaz |
5 | * | 5 | * |
@@ -85,6 +85,34 @@ static void mc13xxx_led_work(struct work_struct *work) | |||
85 | value = led->new_brightness >> 3; | 85 | value = led->new_brightness >> 3; |
86 | mask = 0x1f; | 86 | mask = 0x1f; |
87 | break; | 87 | break; |
88 | case MC13892_LED_MD: | ||
89 | reg = MC13XXX_REG_LED_CONTROL(0); | ||
90 | shift = 3; | ||
91 | mask = 0x3f; | ||
92 | value = led->new_brightness >> 2; | ||
93 | break; | ||
94 | case MC13892_LED_AD: | ||
95 | reg = MC13XXX_REG_LED_CONTROL(0); | ||
96 | shift = 15; | ||
97 | mask = 0x3f; | ||
98 | value = led->new_brightness >> 2; | ||
99 | break; | ||
100 | case MC13892_LED_KP: | ||
101 | reg = MC13XXX_REG_LED_CONTROL(1); | ||
102 | shift = 3; | ||
103 | mask = 0x3f; | ||
104 | value = led->new_brightness >> 2; | ||
105 | break; | ||
106 | case MC13892_LED_R: | ||
107 | case MC13892_LED_G: | ||
108 | case MC13892_LED_B: | ||
109 | off = led->id - MC13892_LED_R; | ||
110 | bank = off / 2; | ||
111 | reg = MC13XXX_REG_LED_CONTROL(2) + bank; | ||
112 | shift = (off - bank * 2) * 12 + 3; | ||
113 | value = led->new_brightness >> 2; | ||
114 | mask = 0x3f; | ||
115 | break; | ||
88 | default: | 116 | default: |
89 | BUG(); | 117 | BUG(); |
90 | } | 118 | } |
@@ -138,6 +166,29 @@ static int __init mc13xxx_led_setup(struct mc13xxx_led *led, int max_current) | |||
138 | shift = ((led->id - MC13783_LED_R1) - bank * 3) * 2; | 166 | shift = ((led->id - MC13783_LED_R1) - bank * 3) * 2; |
139 | mask = 0x03; | 167 | mask = 0x03; |
140 | break; | 168 | break; |
169 | case MC13892_LED_MD: | ||
170 | reg = MC13XXX_REG_LED_CONTROL(0); | ||
171 | shift = 9; | ||
172 | mask = 0x07; | ||
173 | break; | ||
174 | case MC13892_LED_AD: | ||
175 | reg = MC13XXX_REG_LED_CONTROL(0); | ||
176 | shift = 21; | ||
177 | mask = 0x07; | ||
178 | break; | ||
179 | case MC13892_LED_KP: | ||
180 | reg = MC13XXX_REG_LED_CONTROL(1); | ||
181 | shift = 9; | ||
182 | mask = 0x07; | ||
183 | break; | ||
184 | case MC13892_LED_R: | ||
185 | case MC13892_LED_G: | ||
186 | case MC13892_LED_B: | ||
187 | bank = (led->id - MC13892_LED_R) / 2; | ||
188 | reg = MC13XXX_REG_LED_CONTROL(2) + bank; | ||
189 | shift = ((led->id - MC13892_LED_R) - bank * 2) * 12 + 9; | ||
190 | mask = 0x07; | ||
191 | break; | ||
141 | default: | 192 | default: |
142 | BUG(); | 193 | BUG(); |
143 | } | 194 | } |
@@ -276,8 +327,15 @@ static const struct mc13xxx_led_devtype mc13783_led_devtype = { | |||
276 | .num_regs = 6, | 327 | .num_regs = 6, |
277 | }; | 328 | }; |
278 | 329 | ||
330 | static const struct mc13xxx_led_devtype mc13892_led_devtype = { | ||
331 | .led_min = MC13892_LED_MD, | ||
332 | .led_max = MC13892_LED_B, | ||
333 | .num_regs = 4, | ||
334 | }; | ||
335 | |||
279 | static const struct platform_device_id mc13xxx_led_id_table[] = { | 336 | static const struct platform_device_id mc13xxx_led_id_table[] = { |
280 | { "mc13783-led", (kernel_ulong_t)&mc13783_led_devtype, }, | 337 | { "mc13783-led", (kernel_ulong_t)&mc13783_led_devtype, }, |
338 | { "mc13892-led", (kernel_ulong_t)&mc13892_led_devtype, }, | ||
281 | { } | 339 | { } |
282 | }; | 340 | }; |
283 | MODULE_DEVICE_TABLE(platform, mc13xxx_led_id_table); | 341 | MODULE_DEVICE_TABLE(platform, mc13xxx_led_id_table); |