# BRCM_VERSION=3
[bcm963xx.git] / kernel / linux / arch / arm / mach-sa1100 / leds-graphicsclient.c
1 /*
2  *  linux/arch/arm/mach-sa1100/leds-graphicsclient.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
20 static unsigned int led_state;
21 static 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
29 void graphicsclient_leds_event(led_event_t evt)
30 {
31         unsigned long flags;
32
33         local_irq_save(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         local_irq_restore(flags);
104 }