diff options
Diffstat (limited to 'arch/arm/plat-orion/gpio.c')
| -rw-r--r-- | arch/arm/plat-orion/gpio.c | 27 | 
1 files changed, 25 insertions, 2 deletions
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index 10d16088813..af95af25730 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c @@ -16,6 +16,7 @@  #include <linux/bitops.h>  #include <linux/io.h>  #include <linux/gpio.h> +#include <linux/leds.h>  /*   * GPIO unit register offsets. @@ -289,12 +290,34 @@ void orion_gpio_set_blink(unsigned pin, int blink)  		return;  	spin_lock_irqsave(&ochip->lock, flags); -	__set_level(ochip, pin, 0); -	__set_blinking(ochip, pin, blink); +	__set_level(ochip, pin & 31, 0); +	__set_blinking(ochip, pin & 31, blink);  	spin_unlock_irqrestore(&ochip->lock, flags);  }  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  |