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