1/*
2 * linux/arch/arm/mach-sa1100/leds-simpad.c
3 *
4 * Author: Juergen Messerer <juergen.messerer@siemens.ch>
5 */
6#include <linux/config.h>
7#include <linux/init.h>
8
9#include <asm/hardware.h>
10#include <asm/leds.h>
11#include <asm/system.h>
12
13#include "leds.h"
14
15
16#define LED_STATE_ENABLED	1
17#define LED_STATE_CLAIMED	2
18
19static unsigned int led_state;
20static unsigned int hw_led_state;
21
22#define	LED_GREEN	(1)
23#define	LED_MASK	(1)
24
25extern void set_cs3_bit(int value);
26extern void clear_cs3_bit(int value);
27
28void simpad_leds_event(led_event_t evt)
29{
30	unsigned long flags;
31
32	//local_irq_save(flags);
33
34	switch (evt)
35	{
36	case led_start:
37	        hw_led_state = LED_GREEN;
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_GREEN;
48		break;
49
50	case led_release:
51		led_state &= ~LED_STATE_CLAIMED;
52		hw_led_state = LED_GREEN;
53		break;
54
55#ifdef CONFIG_LEDS_TIMER
56	case led_timer:
57		if (!(led_state & LED_STATE_CLAIMED))
58			hw_led_state ^= LED_GREEN;
59		break;
60#endif
61
62#ifdef CONFIG_LEDS_CPU
63	case led_idle_start:
64		break;
65
66	case led_idle_end:
67		break;
68#endif
69
70	case led_halted:
71		break;
72
73	case led_green_on:
74		if (led_state & LED_STATE_CLAIMED)
75			hw_led_state |= LED_GREEN;
76		break;
77
78	case led_green_off:
79		if (led_state & LED_STATE_CLAIMED)
80			hw_led_state &= ~LED_GREEN;
81		break;
82
83	case led_amber_on:
84		break;
85
86	case led_amber_off:
87		break;
88
89	case led_red_on:
90		break;
91
92	case led_red_off:
93		break;
94
95	default:
96		break;
97	}
98
99	if  (led_state & LED_STATE_ENABLED)
100		set_cs3_bit(LED2_ON);
101	else
102	        clear_cs3_bit(LED2_ON);
103	//local_irq_restore(flags);
104}
105
106