1 /* 2 * linux/arch/arm/mach-sa1100/leds-assabet.c 3 * 4 * Copyright (C) 2000 John Dorsey <john+@cs.cmu.edu> 5 * 6 * Original (leds-footbridge.c) by Russell King 7 * 8 * Assabet uses the LEDs as follows: 9 * - Green - toggles state every 50 timer interrupts 10 * - Red - on if system is not idle 11 */ 12 #include <linux/config.h> 13 #include <linux/init.h> 14 15 #include <asm/hardware.h> 16 #include <asm/leds.h> 17 #include <asm/system.h> 18 #include <asm/arch/assabet.h> 19 20 #include "leds.h" 21 22 23 #define LED_STATE_ENABLED 1 24 #define LED_STATE_CLAIMED 2 25 26 static unsigned int led_state; 27 static unsigned int hw_led_state; 28 29 #define ASSABET_BCR_LED_MASK (ASSABET_BCR_LED_GREEN | ASSABET_BCR_LED_RED) 30 assabet_leds_event(led_event_t evt)31void assabet_leds_event(led_event_t evt) 32 { 33 unsigned long flags; 34 35 local_irq_save(flags); 36 37 switch (evt) { 38 case led_start: 39 hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; 40 led_state = LED_STATE_ENABLED; 41 break; 42 43 case led_stop: 44 led_state &= ~LED_STATE_ENABLED; 45 hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; 46 ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state); 47 break; 48 49 case led_claim: 50 led_state |= LED_STATE_CLAIMED; 51 hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; 52 break; 53 54 case led_release: 55 led_state &= ~LED_STATE_CLAIMED; 56 hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; 57 break; 58 59 #ifdef CONFIG_LEDS_TIMER 60 case led_timer: 61 if (!(led_state & LED_STATE_CLAIMED)) 62 hw_led_state ^= ASSABET_BCR_LED_GREEN; 63 break; 64 #endif 65 66 #ifdef CONFIG_LEDS_CPU 67 case led_idle_start: 68 if (!(led_state & LED_STATE_CLAIMED)) 69 hw_led_state |= ASSABET_BCR_LED_RED; 70 break; 71 72 case led_idle_end: 73 if (!(led_state & LED_STATE_CLAIMED)) 74 hw_led_state &= ~ASSABET_BCR_LED_RED; 75 break; 76 #endif 77 78 case led_halted: 79 break; 80 81 case led_green_on: 82 if (led_state & LED_STATE_CLAIMED) 83 hw_led_state &= ~ASSABET_BCR_LED_GREEN; 84 break; 85 86 case led_green_off: 87 if (led_state & LED_STATE_CLAIMED) 88 hw_led_state |= ASSABET_BCR_LED_GREEN; 89 break; 90 91 case led_amber_on: 92 break; 93 94 case led_amber_off: 95 break; 96 97 case led_red_on: 98 if (led_state & LED_STATE_CLAIMED) 99 hw_led_state &= ~ASSABET_BCR_LED_RED; 100 break; 101 102 case led_red_off: 103 if (led_state & LED_STATE_CLAIMED) 104 hw_led_state |= ASSABET_BCR_LED_RED; 105 break; 106 107 default: 108 break; 109 } 110 111 if (led_state & LED_STATE_ENABLED) 112 ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state); 113 114 local_irq_restore(flags); 115 } 116