[U-Boot] [PATCH 0/3] gpio_led driver updates

This simple series enhances the gpio_led driver a bit by some documentation, checking the return value of gpio_request() call, and finally adding support for inverted polarity GPIOs.
Igor Grinberg (3): README: document the CONFIG_GPIO_LED symbol gpio_led: check gpio_request() return value gpio_led: add support for inverted polarity
README | 15 +++++++++++++++ drivers/misc/gpio_led.c | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 3 deletions(-)

The CONFIG_GPIO_LED symbol does not have any documentation in the README file. Document the CONFIG_GPIO_LED symbol.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il --- README | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/README b/README index 09662a4..55c71fa 100644 --- a/README +++ b/README @@ -1951,6 +1951,14 @@ CBFS (Coreboot Filesystem) support kernel). Defining CONFIG_STATUS_LED enables this feature in U-Boot.
+ Additional options: + + CONFIG_GPIO_LED + The status LED can be connected to a GPIO pin. + In such cases, the gpio_led driver can be used as a + status LED backend implementation. Define CONFIG_GPIO_LED + to include the gpio_led driver in the U-Boot binary. + - CAN Support: CONFIG_CAN_DRIVER
Defining CONFIG_CAN_DRIVER enables CAN driver support

On Fri, Nov 08, 2013 at 01:03:50AM +0200, Igor Grinberg wrote:
The CONFIG_GPIO_LED symbol does not have any documentation in the README file. Document the CONFIG_GPIO_LED symbol.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il
Applied to u-boot/master, thanks!

Add a check for the gpio_request() function return value and do not try to configure the GPIO if the gpio_request() call fails. Also, print an error message indicating the gpio_request() has failed.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il --- drivers/misc/gpio_led.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c index 3fedddc..de20419 100644 --- a/drivers/misc/gpio_led.c +++ b/drivers/misc/gpio_led.c @@ -11,7 +11,11 @@
void __led_init(led_id_t mask, int state) { - gpio_request(mask, "gpio_led"); + if (gpio_request(mask, "gpio_led") != 0) { + printf("%s: failed requesting GPIO%lu!\n", __func__, mask); + return; + } + gpio_direction_output(mask, state == STATUS_LED_ON); }

On 11/08/13 01:03, Igor Grinberg wrote:
Add a check for the gpio_request() function return value and do not try to configure the GPIO if the gpio_request() call fails. Also, print an error message indicating the gpio_request() has failed.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il
Tested-by: Ilya Ledvich ilya@compulab.co.il
drivers/misc/gpio_led.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c index 3fedddc..de20419 100644 --- a/drivers/misc/gpio_led.c +++ b/drivers/misc/gpio_led.c @@ -11,7 +11,11 @@
void __led_init(led_id_t mask, int state) {
- gpio_request(mask, "gpio_led");
- if (gpio_request(mask, "gpio_led") != 0) {
printf("%s: failed requesting GPIO%lu!\n", __func__, mask);
return;
- }
- gpio_direction_output(mask, state == STATUS_LED_ON);
}

On Fri, Nov 08, 2013 at 01:03:51AM +0200, Igor Grinberg wrote:
Add a check for the gpio_request() function return value and do not try to configure the GPIO if the gpio_request() call fails. Also, print an error message indicating the gpio_request() has failed.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il Tested-by: Ilya Ledvich ilya@compulab.co.il
Applied to u-boot/master, thanks!

Some GPIO connected LEDs have inverted polarity. Introduce new config option: CONFIG_GPIO_LED_INVERTED_TABLE for the specifying the inverted GPIO LEDs list and add support for this in the gpio_led driver.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il --- README | 7 +++++++ drivers/misc/gpio_led.c | 27 +++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/README b/README index 55c71fa..b8bad51 100644 --- a/README +++ b/README @@ -1959,6 +1959,13 @@ CBFS (Coreboot Filesystem) support status LED backend implementation. Define CONFIG_GPIO_LED to include the gpio_led driver in the U-Boot binary.
+ CONFIG_GPIO_LED_INVERTED_TABLE + Some GPIO connected LEDs may have inverted polarity in which + case the GPIO high value corresponds to LED off state and + GPIO low value corresponds to LED on state. + In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined + with a list of GPIO LEDs that have inverted polarity. + - CAN Support: CONFIG_CAN_DRIVER
Defining CONFIG_CAN_DRIVER enables CAN driver support diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c index de20419..3e95727 100644 --- a/drivers/misc/gpio_led.c +++ b/drivers/misc/gpio_led.c @@ -9,19 +9,42 @@ #include <status_led.h> #include <asm/gpio.h>
+#ifndef CONFIG_GPIO_LED_INVERTED_TABLE +#define CONFIG_GPIO_LED_INVERTED_TABLE {} +#endif + +static led_id_t gpio_led_inv[] = CONFIG_GPIO_LED_INVERTED_TABLE; + +static int gpio_led_gpio_value(led_id_t mask, int state) +{ + int i, gpio_value = (state == STATUS_LED_ON); + + for (i = 0; i < ARRAY_SIZE(gpio_led_inv); i++) { + if (gpio_led_inv[i] == mask) + gpio_value = !gpio_value; + } + + return gpio_value; +} + void __led_init(led_id_t mask, int state) { + int gpio_value; + if (gpio_request(mask, "gpio_led") != 0) { printf("%s: failed requesting GPIO%lu!\n", __func__, mask); return; }
- gpio_direction_output(mask, state == STATUS_LED_ON); + gpio_value = gpio_led_gpio_value(mask, state); + gpio_direction_output(mask, gpio_value); }
void __led_set(led_id_t mask, int state) { - gpio_set_value(mask, state == STATUS_LED_ON); + int gpio_value = gpio_led_gpio_value(mask, state); + + gpio_set_value(mask, gpio_value); }
void __led_toggle(led_id_t mask)

On 11/08/13 01:03, Igor Grinberg wrote:
Some GPIO connected LEDs have inverted polarity. Introduce new config option: CONFIG_GPIO_LED_INVERTED_TABLE for the specifying the inverted GPIO LEDs list and add support for this in the gpio_led driver.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il
Tested-by: Ilya Ledvich ilya@compulab.co.il
on cm-t335.
README | 7 +++++++ drivers/misc/gpio_led.c | 27 +++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/README b/README index 55c71fa..b8bad51 100644 --- a/README +++ b/README @@ -1959,6 +1959,13 @@ CBFS (Coreboot Filesystem) support status LED backend implementation. Define CONFIG_GPIO_LED to include the gpio_led driver in the U-Boot binary.
CONFIG_GPIO_LED_INVERTED_TABLE
Some GPIO connected LEDs may have inverted polarity in which
case the GPIO high value corresponds to LED off state and
GPIO low value corresponds to LED on state.
In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined
with a list of GPIO LEDs that have inverted polarity.
CAN Support: CONFIG_CAN_DRIVER
Defining CONFIG_CAN_DRIVER enables CAN driver support
diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c index de20419..3e95727 100644 --- a/drivers/misc/gpio_led.c +++ b/drivers/misc/gpio_led.c @@ -9,19 +9,42 @@ #include <status_led.h> #include <asm/gpio.h>
+#ifndef CONFIG_GPIO_LED_INVERTED_TABLE +#define CONFIG_GPIO_LED_INVERTED_TABLE {} +#endif
+static led_id_t gpio_led_inv[] = CONFIG_GPIO_LED_INVERTED_TABLE;
+static int gpio_led_gpio_value(led_id_t mask, int state) +{
- int i, gpio_value = (state == STATUS_LED_ON);
- for (i = 0; i < ARRAY_SIZE(gpio_led_inv); i++) {
if (gpio_led_inv[i] == mask)
gpio_value = !gpio_value;
- }
- return gpio_value;
+}
void __led_init(led_id_t mask, int state) {
- int gpio_value;
- if (gpio_request(mask, "gpio_led") != 0) { printf("%s: failed requesting GPIO%lu!\n", __func__, mask); return; }
- gpio_direction_output(mask, state == STATUS_LED_ON);
- gpio_value = gpio_led_gpio_value(mask, state);
- gpio_direction_output(mask, gpio_value);
}
void __led_set(led_id_t mask, int state) {
- gpio_set_value(mask, state == STATUS_LED_ON);
- int gpio_value = gpio_led_gpio_value(mask, state);
- gpio_set_value(mask, gpio_value);
}
void __led_toggle(led_id_t mask)

On Thu, Nov 7, 2013 at 9:03 PM, Igor Grinberg grinberg@compulab.co.il wrote:
Some GPIO connected LEDs have inverted polarity. Introduce new config option: CONFIG_GPIO_LED_INVERTED_TABLE for the specifying the inverted GPIO LEDs list and add support for this in the gpio_led driver.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il
Neat; I will test this in the board I have same situation and see if it works for my case fully but this seems to be a lean and simply solution for the issue.

On Fri, Nov 08, 2013 at 01:03:52AM +0200, Igor Grinberg wrote:
Some GPIO connected LEDs have inverted polarity. Introduce new config option: CONFIG_GPIO_LED_INVERTED_TABLE for the specifying the inverted GPIO LEDs list and add support for this in the gpio_led driver.
Signed-off-by: Igor Grinberg grinberg@compulab.co.il Tested-by: Ilya Ledvich ilya@compulab.co.il
Applied to u-boot/master, thanks!
participants (3)
-
Igor Grinberg
-
Otavio Salvador
-
Tom Rini