orion/kirkwood: create a generic function for gpio led blinking
authorArnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
Wed, 18 Apr 2012 21:16:40 +0000 (23:16 +0200)
committerJason Cooper <jason@lakedaemon.net>
Tue, 15 May 2012 03:12:14 +0000 (03:12 +0000)
dns323 and (at least) iconnect platforms are using hw led blinking, so,
instead of having 2 identicals .gpio_blink_set gpio-led hooks, move
dns323 code into gpio.c

Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
Tested-By: Adam Baker <linux@baker-net.org.uk>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
arch/arm/mach-orion5x/dns323-setup.c
arch/arm/plat-orion/gpio.c
arch/arm/plat-orion/include/plat/gpio.h

index c3ed15b..13d2bec 100644 (file)
@@ -253,27 +253,6 @@ error_fail:
  * GPIO LEDs (simple - doesn't use hardware blinking support)
  */
 
-#define ORION_BLINK_HALF_PERIOD 100 /* ms */
-
-static int dns323_gpio_blink_set(unsigned gpio, int state,
-       unsigned long *delay_on, unsigned long *delay_off)
-{
-
-       if (delay_on && delay_off && !*delay_on && !*delay_off)
-               *delay_on = *delay_off = ORION_BLINK_HALF_PERIOD;
-
-       switch(state) {
-       case GPIO_LED_NO_BLINK_LOW:
-       case GPIO_LED_NO_BLINK_HIGH:
-               orion_gpio_set_blink(gpio, 0);
-               gpio_set_value(gpio, state);
-               break;
-       case GPIO_LED_BLINK:
-               orion_gpio_set_blink(gpio, 1);
-       }
-       return 0;
-}
-
 static struct gpio_led dns323ab_leds[] = {
        {
                .name = "power:blue",
@@ -312,13 +291,13 @@ static struct gpio_led dns323c_leds[] = {
 static struct gpio_led_platform_data dns323ab_led_data = {
        .num_leds       = ARRAY_SIZE(dns323ab_leds),
        .leds           = dns323ab_leds,
-       .gpio_blink_set = dns323_gpio_blink_set,
+       .gpio_blink_set = orion_gpio_led_blink_set,
 };
 
 static struct gpio_led_platform_data dns323c_led_data = {
        .num_leds       = ARRAY_SIZE(dns323c_leds),
        .leds           = dns323c_leds,
-       .gpio_blink_set = dns323_gpio_blink_set,
+       .gpio_blink_set = orion_gpio_led_blink_set,
 };
 
 static struct platform_device dns323_gpio_leds = {
index d3401e7..af95af2 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/bitops.h>
 #include <linux/io.h>
 #include <linux/gpio.h>
+#include <linux/leds.h>
 
 /*
  * GPIO unit register offsets.
@@ -295,6 +296,28 @@ void orion_gpio_set_blink(unsigned pin, int blink)
 }
 EXPORT_SYMBOL(orion_gpio_set_blink);
 
+#define ORION_BLINK_HALF_PERIOD 100 /* ms */
+
+int orion_gpio_led_blink_set(unsigned gpio, int state,
+       unsigned long *delay_on, unsigned long *delay_off)
+{
+
+       if (delay_on && delay_off && !*delay_on && !*delay_off)
+               *delay_on = *delay_off = ORION_BLINK_HALF_PERIOD;
+
+       switch (state) {
+       case GPIO_LED_NO_BLINK_LOW:
+       case GPIO_LED_NO_BLINK_HIGH:
+               orion_gpio_set_blink(gpio, 0);
+               gpio_set_value(gpio, state);
+               break;
+       case GPIO_LED_BLINK:
+               orion_gpio_set_blink(gpio, 1);
+       }
+       return 0;
+}
+EXPORT_SYMBOL_GPL(orion_gpio_led_blink_set);
+
 
 /*****************************************************************************
  * Orion GPIO IRQ
index 3abf304..bec0c98 100644 (file)
@@ -19,6 +19,8 @@
  */
 void orion_gpio_set_unused(unsigned pin);
 void orion_gpio_set_blink(unsigned pin, int blink);
+int orion_gpio_led_blink_set(unsigned gpio, int state,
+       unsigned long *delay_on, unsigned long *delay_off);
 
 #define GPIO_INPUT_OK          (1 << 0)
 #define GPIO_OUTPUT_OK         (1 << 1)