1/* 2 * linux/arch/arm/mach-sa1100/leds-cerf.c 3 * 4 * Author: ??? 5 */ 6#include <linux/init.h> 7 8#include <asm/hardware.h> 9#include <asm/leds.h> 10#include <asm/system.h> 11 12#include "leds.h" 13 14 15#define LED_STATE_ENABLED 1 16#define LED_STATE_CLAIMED 2 17 18static unsigned int led_state; 19static unsigned int hw_led_state; 20 21#define LED_D0 GPIO_GPIO(0) 22#define LED_D1 GPIO_GPIO(1) 23#define LED_D2 GPIO_GPIO(2) 24#define LED_D3 GPIO_GPIO(3) 25#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) 26 27void cerf_leds_event(led_event_t evt) 28{ 29 unsigned long flags; 30 31 local_irq_save(flags); 32 33 switch (evt) { 34 case led_start: 35 hw_led_state = LED_MASK; 36 led_state = LED_STATE_ENABLED; 37 break; 38 39 case led_stop: 40 led_state &= ~LED_STATE_ENABLED; 41 break; 42 43 case led_claim: 44 led_state |= LED_STATE_CLAIMED; 45 hw_led_state = LED_MASK; 46 break; 47 case led_release: 48 led_state &= ~LED_STATE_CLAIMED; 49 hw_led_state = LED_MASK; 50 break; 51 52#ifdef CONFIG_LEDS_TIMER 53 case led_timer: 54 if (!(led_state & LED_STATE_CLAIMED)) 55 hw_led_state ^= LED_D0; 56 break; 57#endif 58 59#ifdef CONFIG_LEDS_CPU 60 case led_idle_start: 61 if (!(led_state & LED_STATE_CLAIMED)) 62 hw_led_state &= ~LED_D1; 63 break; 64 65 case led_idle_end: 66 if (!(led_state & LED_STATE_CLAIMED)) 67 hw_led_state |= LED_D1; 68 break; 69#endif 70 case led_green_on: 71 if (!(led_state & LED_STATE_CLAIMED)) 72 hw_led_state &= ~LED_D2; 73 break; 74 75 case led_green_off: 76 if (!(led_state & LED_STATE_CLAIMED)) 77 hw_led_state |= LED_D2; 78 break; 79 80 case led_amber_on: 81 if (!(led_state & LED_STATE_CLAIMED)) 82 hw_led_state &= ~LED_D3; 83 break; 84 85 case led_amber_off: 86 if (!(led_state & LED_STATE_CLAIMED)) 87 hw_led_state |= LED_D3; 88 break; 89 90 case led_red_on: 91 if (!(led_state & LED_STATE_CLAIMED)) 92 hw_led_state &= ~LED_D1; 93 break; 94 95 case led_red_off: 96 if (!(led_state & LED_STATE_CLAIMED)) 97 hw_led_state |= LED_D1; 98 break; 99 100 default: 101 break; 102 } 103 104 if (led_state & LED_STATE_ENABLED) { 105 GPSR = hw_led_state; 106 GPCR = hw_led_state ^ LED_MASK; 107 } 108 109 local_irq_restore(flags); 110} 111