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