Re: [U-Boot] [PATCH 3/3] gpio_led: add support for inverted polarity

2013-11-10 Thread Igor Grinberg


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 grinb...@compulab.co.il

Tested-by: Ilya Ledvich i...@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)
 

-- 
Regards,
Igor.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 3/3] gpio_led: add support for inverted polarity

2013-11-10 Thread Otavio Salvador
On Thu, Nov 7, 2013 at 9:03 PM, Igor Grinberg grinb...@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 grinb...@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.

-- 
Otavio Salvador O.S. Systems
http://www.ossystems.com.brhttp://code.ossystems.com.br
Mobile: +55 (53) 9981-7854Mobile: +1 (347) 903-9750
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 3/3] gpio_led: add support for inverted polarity

2013-11-07 Thread Igor Grinberg
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 grinb...@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)
-- 
1.8.1.5

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot