1/* 2 * linux/arch/arm/mach-sa1100/leds-graphicsmaster.c 3 * 4 * GraphicsClient Plus LEDs support 5 * Woojung Huh, Feb 13, 2001 6 */ 7#include <linux/config.h> 8#include <linux/init.h> 9 10#include <asm/hardware.h> 11#include <asm/leds.h> 12#include <asm/system.h> 13 14#include "leds.h" 15 16 17#define LED_STATE_ENABLED 1 18#define LED_STATE_CLAIMED 2 19 20static unsigned int led_state; 21static unsigned int hw_led_state; 22 23#define LED_TIMER ADS_LED0 /* green heartbeat */ 24#define LED_USER ADS_LED1 /* amber, boots to on */ 25#define LED_IDLE ADS_LED2 /* red has the idle led, if any */ 26 27#define LED_MASK (ADS_LED0|ADS_LED1|ADS_LED2) 28 29void graphicsmaster_leds_event(led_event_t evt) 30{ 31 unsigned long flags; 32 33 save_flags_cli(flags); 34 35 switch (evt) { 36 case led_start: 37 hw_led_state = 0; /* gc leds are positive logic */ 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_MASK; 48 break; 49 50 case led_release: 51 led_state &= ~LED_STATE_CLAIMED; 52 hw_led_state = LED_MASK; 53 break; 54 55#ifdef CONFIG_LEDS_TIMER 56 case led_timer: 57 if (!(led_state & LED_STATE_CLAIMED)) 58 hw_led_state ^= LED_TIMER; 59 break; 60#endif 61 62#ifdef CONFIG_LEDS_CPU 63 case led_idle_start: 64 if (!(led_state & LED_STATE_CLAIMED)) 65 hw_led_state &= ~LED_IDLE; 66 break; 67 68 case led_idle_end: 69 if (!(led_state & LED_STATE_CLAIMED)) 70 hw_led_state |= LED_IDLE; 71 break; 72#endif 73 74 case led_green_on: 75 break; 76 77 case led_green_off: 78 break; 79 80 case led_amber_on: 81 hw_led_state |= LED_USER; 82 break; 83 84 case led_amber_off: 85 hw_led_state &= ~LED_USER; 86 break; 87 88 case led_red_on: 89 break; 90 91 case led_red_off: 92 break; 93 94 default: 95 break; 96 } 97 98 if (led_state & LED_STATE_ENABLED) { 99 GPSR = hw_led_state; 100 GPCR = hw_led_state ^ LED_MASK; 101 } 102 103 restore_flags(flags); 104} 105