[U-Boot] [PATCH] TWL4030: make LEDs selectable in twl4030_led_init()

Not all boards have both LEDs hooked, so enabling both on boards with single LED will just waste power. Make it possible to choose LEDs by adding argument to twl4030_led_init().
Using this turn on only LEDB for pandora, leave both LEDs on for all other boards, as it was before this patch.
Signed-off-by: Grazvydas Ignotas notasas@gmail.com --- board/logicpd/zoom1/zoom1.c | 2 +- board/logicpd/zoom2/zoom2.c | 2 +- board/overo/overo.c | 2 +- board/pandora/pandora.c | 2 +- board/ti/beagle/beagle.c | 2 +- board/timll/devkit8000/devkit8000.c | 2 +- drivers/misc/twl4030_led.c | 11 +++++++---- include/twl4030.h | 5 ++++- 8 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/board/logicpd/zoom1/zoom1.c b/board/logicpd/zoom1/zoom1.c index f4d3754..9b308da 100644 --- a/board/logicpd/zoom1/zoom1.c +++ b/board/logicpd/zoom1/zoom1.c @@ -62,7 +62,7 @@ int board_init(void) int misc_init_r(void) { twl4030_power_init(); - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB); dieid_num_r();
/* diff --git a/board/logicpd/zoom2/zoom2.c b/board/logicpd/zoom2/zoom2.c index dadbeb6..f40bbc6 100644 --- a/board/logicpd/zoom2/zoom2.c +++ b/board/logicpd/zoom2/zoom2.c @@ -148,7 +148,7 @@ int misc_init_r(void) { zoom2_identify(); twl4030_power_init(); - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB); dieid_num_r();
/* diff --git a/board/overo/overo.c b/board/overo/overo.c index d42dc13..a2942ce 100644 --- a/board/overo/overo.c +++ b/board/overo/overo.c @@ -67,7 +67,7 @@ int board_init(void) int misc_init_r(void) { twl4030_power_init(); - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB);
#if defined(CONFIG_CMD_NET) setup_net_chip(); diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c index 460ed12..df2c71a 100644 --- a/board/pandora/pandora.c +++ b/board/pandora/pandora.c @@ -66,7 +66,7 @@ int misc_init_r(void) struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
twl4030_power_init(); - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDB);
/* Configure GPIOs to output */ writel(~(GPIO14 | GPIO15 | GPIO16 | GPIO23), &gpio1_base->oe); diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index 32d501e..e23f7ee 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -107,7 +107,7 @@ int misc_init_r(void) struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
twl4030_power_init(); - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB);
/* Configure GPIOs to output */ writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe); diff --git a/board/timll/devkit8000/devkit8000.c b/board/timll/devkit8000/devkit8000.c index db7d2e2..997a7cf 100644 --- a/board/timll/devkit8000/devkit8000.c +++ b/board/timll/devkit8000/devkit8000.c @@ -76,7 +76,7 @@ int misc_init_r(void)
twl4030_power_init(); #ifdef CONFIG_TWL4030_LED - twl4030_led_init(); + twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB); #endif
#ifdef CONFIG_DRIVER_DM9000 diff --git a/drivers/misc/twl4030_led.c b/drivers/misc/twl4030_led.c index bfdafef..d2cc3c8 100644 --- a/drivers/misc/twl4030_led.c +++ b/drivers/misc/twl4030_led.c @@ -39,12 +39,15 @@ #define LEDAPWM (0x1 << 4) #define LEDBPWM (0x1 << 5)
-void twl4030_led_init(void) +void twl4030_led_init(unsigned int ledon_mask) { - unsigned char byte; + unsigned char byte = 0;
- /* enable LED */ - byte = LEDBPWM | LEDAPWM | LEDBON | LEDAON; + /* enable LEDs */ + if (ledon_mask & TWL4030_LEDON_LEDA) + byte |= LEDAPWM | LEDAON; + if (ledon_mask & TWL4030_LEDON_LEDB) + byte |= LEDBPWM | LEDBON;
twl4030_i2c_write_u8(TWL4030_CHIP_LED, byte, TWL4030_LED_LEDEN); diff --git a/include/twl4030.h b/include/twl4030.h index f260ecb..d0c62c3 100644 --- a/include/twl4030.h +++ b/include/twl4030.h @@ -396,6 +396,9 @@ void twl4030_power_mmc_init(void); /* * LED */ -void twl4030_led_init(void); +#define TWL4030_LEDON_LEDA (1 << 0) +#define TWL4030_LEDON_LEDB (1 << 1) + +void twl4030_led_init(unsigned int ledon_mask);
#endif /* TWL4030_H */

Grazvydas Ignotas wrote:
Not all boards have both LEDs hooked, so enabling both on boards with single LED will just waste power. Make it possible to choose LEDs by adding argument to twl4030_led_init().
Using this turn on only LEDB for pandora, leave both LEDs on for all other boards, as it was before this patch.
Signed-off-by: Grazvydas Ignotas notasas@gmail.com
board/logicpd/zoom1/zoom1.c | 2 +- board/logicpd/zoom2/zoom2.c | 2 +- board/overo/overo.c | 2 +- board/pandora/pandora.c | 2 +- board/ti/beagle/beagle.c | 2 +- board/timll/devkit8000/devkit8000.c | 2 +- drivers/misc/twl4030_led.c | 11 +++++++---- include/twl4030.h | 5 ++++- 8 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/board/logicpd/zoom1/zoom1.c b/board/logicpd/zoom1/zoom1.c index f4d3754..9b308da 100644 --- a/board/logicpd/zoom1/zoom1.c +++ b/board/logicpd/zoom1/zoom1.c @@ -62,7 +62,7 @@ int board_init(void) int misc_init_r(void) { twl4030_power_init();
- twl4030_led_init();
twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB); dieid_num_r();
/*
diff --git a/board/logicpd/zoom2/zoom2.c b/board/logicpd/zoom2/zoom2.c index dadbeb6..f40bbc6 100644 --- a/board/logicpd/zoom2/zoom2.c +++ b/board/logicpd/zoom2/zoom2.c @@ -148,7 +148,7 @@ int misc_init_r(void) { zoom2_identify(); twl4030_power_init();
- twl4030_led_init();
twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB); dieid_num_r();
/*
diff --git a/board/overo/overo.c b/board/overo/overo.c index d42dc13..a2942ce 100644 --- a/board/overo/overo.c +++ b/board/overo/overo.c @@ -67,7 +67,7 @@ int board_init(void) int misc_init_r(void) { twl4030_power_init();
- twl4030_led_init();
- twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB);
#if defined(CONFIG_CMD_NET) setup_net_chip(); diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c index 460ed12..df2c71a 100644 --- a/board/pandora/pandora.c +++ b/board/pandora/pandora.c @@ -66,7 +66,7 @@ int misc_init_r(void) struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
twl4030_power_init();
- twl4030_led_init();
twl4030_led_init(TWL4030_LEDON_LEDB);
/* Configure GPIOs to output */ writel(~(GPIO14 | GPIO15 | GPIO16 | GPIO23), &gpio1_base->oe);
diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index 32d501e..e23f7ee 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -107,7 +107,7 @@ int misc_init_r(void) struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
twl4030_power_init();
- twl4030_led_init();
twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB);
/* Configure GPIOs to output */ writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe);
diff --git a/board/timll/devkit8000/devkit8000.c b/board/timll/devkit8000/devkit8000.c index db7d2e2..997a7cf 100644 --- a/board/timll/devkit8000/devkit8000.c +++ b/board/timll/devkit8000/devkit8000.c @@ -76,7 +76,7 @@ int misc_init_r(void)
twl4030_power_init(); #ifdef CONFIG_TWL4030_LED
- twl4030_led_init();
- twl4030_led_init(TWL4030_LEDON_LEDA | TWL4030_LEDON_LEDB);
#endif
#ifdef CONFIG_DRIVER_DM9000 diff --git a/drivers/misc/twl4030_led.c b/drivers/misc/twl4030_led.c index bfdafef..d2cc3c8 100644 --- a/drivers/misc/twl4030_led.c +++ b/drivers/misc/twl4030_led.c @@ -39,12 +39,15 @@ #define LEDAPWM (0x1 << 4) #define LEDBPWM (0x1 << 5)
-void twl4030_led_init(void) +void twl4030_led_init(unsigned int ledon_mask) {
- unsigned char byte;
- unsigned char byte = 0;
- /* enable LED */
- byte = LEDBPWM | LEDAPWM | LEDBON | LEDAON;
- /* enable LEDs */
- if (ledon_mask & TWL4030_LEDON_LEDA)
byte |= LEDAPWM | LEDAON;
TWL4030_LEDON_LEDA and LEDAON are the same. You can move all the #defined twl4030 bits to twl4030. So there there should be
#define TWL4030_LED_LEDEN_LEDAON (0x1 << 0) #define TWL4030_LED_LEDEN_LEDBON (0x1 << 1) #define TWL4030_LED_LEDEN_LEDAPWM (0x1 << 4) #define TWL4030_LED_LEDEN_LEDBPWM (0x1 << 5)
These should be listed under the LED define
/* LED */ #define TWL4030_LED_LEDEN 0xEE
if (ledon_mask & TWL4030_LEDON_LEDB)
byte |= LEDBPWM | LEDBON;
twl4030_i2c_write_u8(TWL4030_CHIP_LED, byte, TWL4030_LED_LEDEN);
diff --git a/include/twl4030.h b/include/twl4030.h index f260ecb..d0c62c3 100644 --- a/include/twl4030.h +++ b/include/twl4030.h @@ -396,6 +396,9 @@ void twl4030_power_mmc_init(void); /*
- LED
*/ -void twl4030_led_init(void); +#define TWL4030_LEDON_LEDA (1 << 0) +#define TWL4030_LEDON_LEDB (1 << 1)
+void twl4030_led_init(unsigned int ledon_mask);
#endif /* TWL4030_H */

On Wed, Dec 2, 2009 at 4:55 PM, Tom Tom.Rix@windriver.com wrote:
Grazvydas Ignotas wrote:
<snip>
diff --git a/drivers/misc/twl4030_led.c b/drivers/misc/twl4030_led.c index bfdafef..d2cc3c8 100644 --- a/drivers/misc/twl4030_led.c +++ b/drivers/misc/twl4030_led.c @@ -39,12 +39,15 @@ #define LEDAPWM (0x1 << 4) #define LEDBPWM (0x1 << 5) -void twl4030_led_init(void) +void twl4030_led_init(unsigned int ledon_mask) {
- unsigned char byte;
- unsigned char byte = 0;
- /* enable LED */
- byte = LEDBPWM | LEDAPWM | LEDBON | LEDAON;
- /* enable LEDs */
- if (ledon_mask & TWL4030_LEDON_LEDA)
- byte |= LEDAPWM | LEDAON;
TWL4030_LEDON_LEDA and LEDAON are the same. You can move all the #defined twl4030 bits to twl4030. So there there should be
#define TWL4030_LED_LEDEN_LEDAON (0x1 << 0) #define TWL4030_LED_LEDEN_LEDBON (0x1 << 1) #define TWL4030_LED_LEDEN_LEDAPWM (0x1 << 4) #define TWL4030_LED_LEDEN_LEDBPWM (0x1 << 5)
These should be listed under the LED define
/* LED */ #define TWL4030_LED_LEDEN 0xEE
So, do you want twl4030_led_init() argument to take raw LEDEN register value, or just move TWL4030_LED* defines to twl4030.h? If twl4030_led_init() will just take register value now, maybe it can be replaced with twl4030_i2c_write_u8() and drivers/misc/twl4030_led.c removed, as it just becomes wrapper?
- if (ledon_mask & TWL4030_LEDON_LEDB)
- byte |= LEDBPWM | LEDBON;
twl4030_i2c_write_u8(TWL4030_CHIP_LED, byte, TWL4030_LED_LEDEN); diff --git a/include/twl4030.h b/include/twl4030.h index f260ecb..d0c62c3 100644 --- a/include/twl4030.h +++ b/include/twl4030.h @@ -396,6 +396,9 @@ void twl4030_power_mmc_init(void); /* * LED */ -void twl4030_led_init(void); +#define TWL4030_LEDON_LEDA (1 << 0) +#define TWL4030_LEDON_LEDB (1 << 1)
+void twl4030_led_init(unsigned int ledon_mask); #endif /* TWL4030_H */
participants (2)
-
Grazvydas Ignotas
-
Tom