]> Pileus Git - ~andy/linux/blobdiff - arch/arm/plat-orion/gpio.c
orion/kirkwood: create a generic function for gpio led blinking
[~andy/linux] / arch / arm / plat-orion / gpio.c
index d3401e77ff3db976bde5ca90b9a4d8a098830b85..af95af2573010caccaa393dff87ebdc5a4529b33 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