• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/arch/arm/mach-pxa/
1/*
2 * linux/arch/arm/mach-pxa/leds-mainstone.c
3 *
4 * Author:     Nicolas Pitre
5 * Created:    Nov 05, 2002
6 * Copyright:  MontaVista Software Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/init.h>
14
15#include <mach/hardware.h>
16#include <asm/leds.h>
17#include <asm/system.h>
18
19#include <mach/pxa27x.h>
20#include <mach/mainstone.h>
21
22#include "leds.h"
23
24
25/* 8 discrete leds available for general use: */
26#define D28			(1 << 0)
27#define D27			(1 << 1)
28#define D26			(1 << 2)
29#define D25			(1 << 3)
30#define D24			(1 << 4)
31#define D23			(1 << 5)
32#define D22			(1 << 6)
33#define D21			(1 << 7)
34
35#define LED_STATE_ENABLED	1
36#define LED_STATE_CLAIMED	2
37
38static unsigned int led_state;
39static unsigned int hw_led_state;
40
41void mainstone_leds_event(led_event_t evt)
42{
43	unsigned long flags;
44
45	local_irq_save(flags);
46
47	switch (evt) {
48	case led_start:
49		hw_led_state = 0;
50		led_state = LED_STATE_ENABLED;
51		break;
52
53	case led_stop:
54		led_state &= ~LED_STATE_ENABLED;
55		break;
56
57	case led_claim:
58		led_state |= LED_STATE_CLAIMED;
59		hw_led_state = 0;
60		break;
61
62	case led_release:
63		led_state &= ~LED_STATE_CLAIMED;
64		hw_led_state = 0;
65		break;
66
67#ifdef CONFIG_LEDS_TIMER
68	case led_timer:
69		hw_led_state ^= D26;
70		break;
71#endif
72
73#ifdef CONFIG_LEDS_CPU
74	case led_idle_start:
75		hw_led_state &= ~D27;
76		break;
77
78	case led_idle_end:
79		hw_led_state |= D27;
80		break;
81#endif
82
83	case led_halted:
84		break;
85
86	case led_green_on:
87		hw_led_state |= D21;
88		break;
89
90	case led_green_off:
91		hw_led_state &= ~D21;
92		break;
93
94	case led_amber_on:
95		hw_led_state |= D22;
96		break;
97
98	case led_amber_off:
99		hw_led_state &= ~D22;
100		break;
101
102	case led_red_on:
103		hw_led_state |= D23;
104		break;
105
106	case led_red_off:
107		hw_led_state &= ~D23;
108		break;
109
110	default:
111		break;
112	}
113
114	if  (led_state & LED_STATE_ENABLED)
115		MST_LEDCTRL = (MST_LEDCTRL | 0xff) & ~hw_led_state;
116	else
117		MST_LEDCTRL |= 0xff;
118
119	local_irq_restore(flags);
120}
121