]> git.sur5r.net Git - u-boot/blob - include/asm-nios/status_led.h
Add NAND environment support for PPC440EPx Sequoia NAND boot config
[u-boot] / include / asm-nios / status_led.h
1 /*
2  * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net>
3  * Stephan Linz <linz@li-pro.net>
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  *
23  * asm-nios/status_led.h
24  *
25  * NIOS PIO based status led support functions
26  */
27
28 #ifndef __ASM_STATUS_LED_H__
29 #define __ASM_STATUS_LED_H__
30
31 #include <nios-io.h>
32
33 /* led_id_t is unsigned int mask */
34 typedef unsigned int led_id_t;
35
36 #ifdef  STATUS_LED_WRONLY       /* emulate read access */
37 static led_id_t __led_portval = 0;
38 #endif
39
40 static inline void __led_init (led_id_t mask, int state)
41 {
42         nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
43
44 #ifdef  STATUS_LED_WRONLY       /* emulate read access */
45
46 #if (STATUS_LED_ACTIVE == 0)
47         if (state == STATUS_LED_ON)
48                 __led_portval &= ~mask;
49         else
50                 __led_portval |= mask;
51 #else
52         if (state == STATUS_LED_ON)
53                 __led_portval |= mask;
54         else
55                 __led_portval &= ~mask;
56 #endif
57
58         piop->data = __led_portval;
59
60 #else   /* !STATUS_LED_WRONLY */
61
62 #if (STATUS_LED_ACTIVE == 0)
63         if (state == STATUS_LED_ON)
64                 piop->data &= ~mask;
65         else
66                 piop->data |= mask;
67 #else
68         if (state == STATUS_LED_ON)
69                 piop->data |= mask;
70         else
71                 piop->data &= ~mask;
72 #endif
73
74         piop->direction |= mask;
75
76 #endif  /* STATUS_LED_WRONLY */
77 }
78
79 static inline void __led_toggle (led_id_t mask)
80 {
81         nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
82
83 #ifdef  STATUS_LED_WRONLY       /* emulate read access */
84
85         __led_portval ^= mask;
86         piop->data = __led_portval;
87
88 #else   /* !STATUS_LED_WRONLY */
89
90         piop->data ^= mask;
91
92 #endif  /* STATUS_LED_WRONLY */
93 }
94
95 static inline void __led_set (led_id_t mask, int state)
96 {
97         nios_pio_t *piop = (nios_pio_t*)STATUS_LED_BASE;
98
99 #ifdef  STATUS_LED_WRONLY       /* emulate read access */
100
101 #if (STATUS_LED_ACTIVE == 0)
102         if (state == STATUS_LED_ON)
103                 __led_portval &= ~mask;
104         else
105                 __led_portval |= mask;
106 #else
107         if (state == STATUS_LED_ON)
108                 __led_portval |= mask;
109         else
110                 __led_portval &= ~mask;
111 #endif
112
113         piop->data = __led_portval;
114
115 #else   /* !STATUS_LED_WRONLY */
116
117 #if (STATUS_LED_ACTIVE == 0)
118         if (state == STATUS_LED_ON)
119                 piop->data &= ~mask;
120         else
121                 piop->data |= mask;
122 #else
123         if (state == STATUS_LED_ON)
124                 piop->data |= mask;
125         else
126                 piop->data &= ~mask;
127 #endif
128
129 #endif  /* STATUS_LED_WRONLY */
130 }
131
132 #endif  /* __ASM_STATUS_LED_H__ */