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 Index: arm-soc/arch/arm/mach-orion5x/dns323-setup.c =================================================================== --- arm-soc.orig/arch/arm/mach-orion5x/dns323-setup.c 2012-04-15 21:19:57.879222220 +0200 +++ arm-soc/arch/arm/mach-orion5x/dns323-setup.c 2012-04-18 22:56:04.635564631 +0200 @@ -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: arm-soc/arch/arm/plat-orion/gpio.c =================================================================== --- arm-soc.orig/arch/arm/plat-orion/gpio.c 2012-04-18 22:34:32.115621496 +0200 +++ arm-soc/arch/arm/plat-orion/gpio.c 2012-04-18 23:03:57.227543838 +0200 @@ -16,6 +16,7 @@ #include #include #include +#include /* * GPIO unit register offsets. @@ -295,6 +296,28 @@ void orion_gpio_set_blink(unsigned pin, } 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: arm-soc/arch/arm/plat-orion/include/plat/gpio.h =================================================================== --- arm-soc.orig/arch/arm/plat-orion/include/plat/gpio.h 2012-04-15 20:43:35.251318248 +0200 +++ arm-soc/arch/arm/plat-orion/include/plat/gpio.h 2012-04-18 22:55:14.699566829 +0200 @@ -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)