MOXA linux-2.6.x / linux-2.6.19-uc1 from UC-7110-LX-BOOTLOADER-1.9_VERSION-4.2.tgz
[linux-2.6.19-moxart.git] / arch / arm / mach-s3c24a0 / leds-smdk.c
blob0f3d35a44d52762c8600ca3393c8d2f39e266c8e
1 /*
2 * arch/arm/mach-s3c24a0/leds-smdk.c
4 * $Id: leds-smdk.c,v 1.3 2006/12/12 13:38:48 gerg Exp $
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
11 #include <linux/init.h>
13 #include <asm/hardware.h>
14 #include <asm/leds.h>
15 #include <asm/system.h>
16 #include <asm/arch/smdk.h>
18 #include "leds.h"
20 #define LED_STATE_ENABLED 1
21 #define LED_STATE_CLAIMED 2
23 #define LED0 (1 << 0)
24 #define LED1 (1 << 1)
25 #define LED2 (1 << 2)
26 #define LED3 (1 << 3)
28 static unsigned int led_state;
29 static unsigned int hw_led_state;
31 static inline void
32 led_update(unsigned int state)
34 write_gpio_bit(SMDK_LED4, (state & LED0));
35 write_gpio_bit(SMDK_LED5, ((state & LED1) >> 1));
36 write_gpio_bit(SMDK_LED6, ((state & LED2) >> 2));
37 write_gpio_bit(SMDK_LED7, ((state & LED3) >> 3));
40 void
41 smdk_leds_event(led_event_t evt)
43 unsigned long flags;
45 local_irq_save(flags);
47 switch (evt) {
48 case led_start:
49 hw_led_state = (LED1 | LED2 | LED3);
50 led_state = LED_STATE_ENABLED;
51 break;
53 case led_stop:
54 led_state &= ~LED_STATE_ENABLED;
55 hw_led_state = (LED0 | LED1 | LED2 | LED3);
56 led_update(hw_led_state);
57 break;
59 case led_claim:
60 led_state |= LED_STATE_CLAIMED;
61 hw_led_state = (LED0 | LED1 | LED2 | LED3);
62 break;
64 case led_release:
65 led_state &= ~LED_STATE_CLAIMED;
66 hw_led_state = (LED1 | LED2 | LED3);
67 break;
69 #ifdef CONFIG_LEDS_TIMER
70 case led_timer:
71 if (!(led_state & LED_STATE_CLAIMED))
72 hw_led_state ^= LED3;
73 break;
74 #endif
76 #ifdef CONFIG_LEDS_CPU
77 case led_idle_start:
78 if (!(led_state & LED_STATE_CLAIMED))
79 hw_led_state |= LED2;
80 break;
82 case led_idle_end:
83 if (!(led_state & LED_STATE_CLAIMED))
84 hw_led_state &= ~LED2;
85 break;
86 #endif
88 case led_halted:
89 break;
91 case led_green_on:
92 if (led_state & LED_STATE_CLAIMED)
93 hw_led_state &= ~LED2;
94 break;
96 case led_green_off:
97 if (led_state & LED_STATE_CLAIMED)
98 hw_led_state |= LED2;
99 break;
101 case led_amber_on:
102 break;
104 case led_amber_off:
105 break;
107 case led_red_on:
108 break;
110 case led_red_off:
111 break;
113 default:
114 break;
117 if (led_state & LED_STATE_ENABLED)
118 led_update(hw_led_state);
120 local_irq_restore(flags);