import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / arm / mach-sa1100 / leds-adsbitsyplus.c
1 /*
2  *  linux/arch/arm/mach-sa1100/leds-adsbitsy.c
3  *
4  * ADS Bitsy LED
5  * 2/7/2003 Robert Whaley
6  * This file comes from leds-adsbitsy.c of Woojung Huh <whuh@applieddata.net>
7  */
8 #include <linux/config.h>
9 #include <linux/init.h>
10
11 #include <asm/hardware.h>
12 #include <asm/leds.h>
13 #include <asm/system.h>
14
15 #include "leds.h"
16
17
18 #define LED_STATE_ENABLED       1
19 #define LED_STATE_CLAIMED       2
20
21 static unsigned int led_state;
22 static unsigned int hw_led_state;
23
24 #define LED_TIMER       GPIO_GPIO20  /* green heartbeat */
25
26 #define LED_MASK                (LED_TIMER)
27
28 void adsbitsyplus_leds_event(led_event_t evt)
29 {
30         unsigned long flags;
31
32         local_irq_save(flags);
33
34         switch (evt) {
35         case led_start:
36                 hw_led_state = 0;        /* gc leds are positive logic */
37                 led_state = LED_STATE_ENABLED;
38                 break;
39
40         case led_stop:
41                 led_state &= ~LED_STATE_ENABLED;
42                 break;
43
44         case led_claim:
45                 led_state |= LED_STATE_CLAIMED;
46                 hw_led_state = LED_MASK;
47                 break;
48
49         case led_release:
50                 led_state &= ~LED_STATE_CLAIMED;
51                 hw_led_state = LED_MASK;
52                 break;
53
54 #ifdef CONFIG_LEDS_TIMER
55         case led_timer:
56                 if (!(led_state & LED_STATE_CLAIMED))
57                         hw_led_state ^= LED_TIMER;
58                 break;
59 #endif
60
61 #ifdef CONFIG_LEDS_CPU
62         case led_idle_start:
63                 break;
64
65         case led_idle_end:
66                 break;
67 #endif
68
69         case led_green_on:
70                 break;
71
72         case led_green_off:
73                 break;
74
75         case led_amber_on:
76                 break;
77
78         case led_amber_off:
79                 break;
80
81         case led_red_on:
82                 break;
83
84         case led_red_off:
85                 break;
86
87         default:
88                 break;
89         }
90
91         if  (led_state & LED_STATE_ENABLED) {
92                 GPSR = hw_led_state;
93                 GPCR = hw_led_state ^ LED_MASK;
94         }
95
96         local_irq_restore(flags);
97 }