1/*
2 *  linux/arch/arm/mach-sa1100/leds-graphicsmaster.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
20static unsigned int led_state;
21static 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
29void graphicsmaster_leds_event(led_event_t evt)
30{
31	unsigned long flags;
32
33	save_flags_cli(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	restore_flags(flags);
104}
105