Upgrade rb532 to .23, provide generic GPIO API to this board
[openwrt/openwrt.git] / target / linux / rb532 / files / include / asm-mips / rc32434 / gpio.h
1 /*
2 * Copyright 2002 Integrated Device Technology, Inc.
3 * All rights reserved.
4 *
5 * GPIO register definition.
6 *
7 * Author : ryan.holmQVist@idt.com
8 * Date : 20011005
9 * Copyright (C) 2001, 2002 Ryan Holm <ryan.holmQVist@idt.com>
10 * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
11 */
12
13 #ifndef _RC32434_GPIO_H_
14 #define _RC32434_GPIO_H_
15
16 #include <linux/types.h>
17
18 struct rb500_gpio_reg {
19 u32 gpiofunc; /* GPIO Function Register
20 * gpiofunc[x]==0 bit = gpio
21 * func[x]==1 bit = altfunc
22 */
23 u32 gpiocfg; /* GPIO Configuration Register
24 * gpiocfg[x]==0 bit = input
25 * gpiocfg[x]==1 bit = output
26 */
27 u32 gpiod; /* GPIO Data Register
28 * gpiod[x] read/write gpio pinX status
29 */
30 u32 gpioilevel; /* GPIO Interrupt Status Register
31 * interrupt level (see gpioistat)
32 */
33 u32 gpioistat; /* Gpio Interrupt Status Register
34 * istat[x] = (gpiod[x] == level[x])
35 * cleared in ISR (STICKY bits)
36 */
37 u32 gpionmien; /* GPIO Non-maskable Interrupt Enable Register */
38 };
39
40 enum gpio_regs
41 {
42 GPIO_gpio_v = 0, // gpiofunc use pin as GPIO.
43 GPIO_alt_v = 1, // gpiofunc use pin as alt.
44 GPIO_input_v = 0, // gpiocfg use pin as input.
45 GPIO_output_v = 1, // gpiocfg use pin as output.
46 GPIO_pin0_b = 0,
47 GPIO_pin0_m = 0x00000001,
48 GPIO_pin1_b = 1,
49 GPIO_pin1_m = 0x00000002,
50 GPIO_pin2_b = 2,
51 GPIO_pin2_m = 0x00000004,
52 GPIO_pin3_b = 3,
53 GPIO_pin3_m = 0x00000008,
54 GPIO_pin4_b = 4,
55 GPIO_pin4_m = 0x00000010,
56 GPIO_pin5_b = 5,
57 GPIO_pin5_m = 0x00000020,
58 GPIO_pin6_b = 6,
59 GPIO_pin6_m = 0x00000040,
60 GPIO_pin7_b = 7,
61 GPIO_pin7_m = 0x00000080,
62 GPIO_pin8_b = 8,
63 GPIO_pin8_m = 0x00000100,
64 GPIO_pin9_b = 9,
65 GPIO_pin9_m = 0x00000200,
66 GPIO_pin10_b = 10,
67 GPIO_pin10_m = 0x00000400,
68 GPIO_pin11_b = 11,
69 GPIO_pin11_m = 0x00000800,
70 GPIO_pin12_b = 12,
71 GPIO_pin12_m = 0x00001000,
72 GPIO_pin13_b = 13,
73 GPIO_pin13_m = 0x00002000,
74 GPIO_pin14_b = 14,
75 GPIO_pin14_m = 0x00004000,
76 GPIO_pin15_b = 15,
77 GPIO_pin15_m = 0x00008000,
78 GPIO_pin16_b = 16,
79 GPIO_pin16_m = 0x00010000,
80 GPIO_pin17_b = 17,
81 GPIO_pin17_m = 0x00020000,
82 GPIO_pin18_b = 18,
83 GPIO_pin18_m = 0x00040000,
84 GPIO_pin19_b = 19,
85 GPIO_pin19_m = 0x00080000,
86 GPIO_pin20_b = 20,
87 GPIO_pin20_m = 0x00100000,
88 GPIO_pin21_b = 21,
89 GPIO_pin21_m = 0x00200000,
90 GPIO_pin22_b = 22,
91 GPIO_pin22_m = 0x00400000,
92 GPIO_pin23_b = 23,
93 GPIO_pin23_m = 0x00800000,
94 GPIO_pin24_b = 24,
95 GPIO_pin24_m = 0x01000000,
96 GPIO_pin25_b = 25,
97 GPIO_pin25_m = 0x02000000,
98 GPIO_pin26_b = 26,
99 GPIO_pin26_m = 0x04000000,
100 GPIO_pin27_b = 27,
101 GPIO_pin27_m = 0x08000000,
102 GPIO_pin28_b = 28,
103 GPIO_pin28_m = 0x10000000,
104 GPIO_pin29_b = 29,
105 GPIO_pin29_m = 0x20000000,
106 GPIO_pin30_b = 30,
107 GPIO_pin30_m = 0x40000000,
108 GPIO_pin31_b = 31,
109 GPIO_pin31_m = 0x80000000,
110
111 // Alternate function pins. Corrsponding gpiofunc bit set to GPIO_alt_v.
112
113 GPIO_u0sout_b = GPIO_pin0_b, // UART 0 serial out.
114 GPIO_u0sout_m = GPIO_pin0_m,
115 GPIO_u0sout_cfg_v = GPIO_output_v,
116 GPIO_u0sinp_b = GPIO_pin1_b, // UART 0 serial in.
117 GPIO_u0sinp_m = GPIO_pin1_m,
118 GPIO_u0sinp_cfg_v = GPIO_input_v,
119 GPIO_u0rtsn_b = GPIO_pin2_b, // UART 0 req. to send.
120 GPIO_u0rtsn_m = GPIO_pin2_m,
121 GPIO_u0rtsn_cfg_v = GPIO_output_v,
122 GPIO_u0ctsn_b = GPIO_pin3_b, // UART 0 clear to send.
123 GPIO_u0ctsn_m = GPIO_pin3_m,
124 GPIO_u0ctsn_cfg_v = GPIO_input_v,
125 GPIO_maddr22_b = GPIO_pin4_b, // M&P bus bit 22.
126 GPIO_maddr22_m = GPIO_pin4_m,
127 GPIO_maddr22_cfg_v = GPIO_output_v,
128
129 GPIO_maddr23_b = GPIO_pin5_b, // M&P bus bit 23.
130 GPIO_maddr23_m = GPIO_pin5_m,
131 GPIO_maddr23_cfg_v = GPIO_output_v,
132
133 GPIO_maddr24_b = GPIO_pin6_b, // M&P bus bit 24.
134 GPIO_maddr24_m = GPIO_pin6_m,
135 GPIO_maddr24_cfg_v = GPIO_output_v,
136
137 GPIO_maddr25_b = GPIO_pin7_b, // M&P bus bit 25.
138 GPIO_maddr25_m = GPIO_pin7_m,
139 GPIO_maddr25_cfg_v = GPIO_output_v,
140
141 GPIO_cpu_b = GPIO_pin8_b, // M&P bus bit 25.
142 GPIO_cpu_m = GPIO_pin8_m,
143 GPIO_cpu_cfg_v = GPIO_output_v,
144 GPIO_afspare6_b = GPIO_pin9_b, // reserved.
145 GPIO_afspare6_m = GPIO_pin9_m,
146 GPIO_afspare6_cfg_v = GPIO_input_v,
147 GPIO_afspare4_b = GPIO_pin10_b, // reserved.
148 GPIO_afspare4_m = GPIO_pin10_m,
149 GPIO_afspare4_cfg_v = GPIO_input_v,
150 GPIO_afspare3_b = GPIO_pin11_b, // reserved.
151 GPIO_afspare3_m = GPIO_pin11_m,
152 GPIO_afspare3_cfg_v = GPIO_input_v,
153 GPIO_afspare2_b = GPIO_pin12_b, // reserved.
154 GPIO_afspare2_m = GPIO_pin12_m,
155 GPIO_afspare2_cfg_v = GPIO_input_v,
156 GPIO_pcimuintn_b = GPIO_pin13_b, // PCI messaging int.
157 GPIO_pcimuintn_m = GPIO_pin13_m,
158 GPIO_pcimuintn_cfg_v = GPIO_output_v,
159
160 };
161
162 extern int rb500_gpio_get_value(unsigned gpio);
163 extern void rb500_gpio_set_value(unsigned gpio, int value);
164 extern int rb500_gpio_direction_input(unsigned gpio);
165 extern int rb500_gpio_direction_output(unsigned gpio, int value);
166
167
168 /* Wrappers for the arch-neutral GPIO API */
169
170 static inline int gpio_request(unsigned gpio, const char *label)
171 {
172 /* Not yet implemented */
173 return 0;
174 }
175
176 static inline void gpio_free(unsigned gpio)
177 {
178 /* Not yet implemented */
179 }
180
181 static inline int gpio_direction_input(unsigned gpio)
182 {
183 return rb500_gpio_direction_input(gpio);
184 }
185
186 static inline int gpio_direction_output(unsigned gpio, int value)
187 {
188 return rb500_gpio_direction_output(gpio, value);
189 }
190
191 static inline int gpio_get_value(unsigned gpio)
192 {
193 return rb500_gpio_get_value(gpio);
194 }
195
196 static inline void gpio_set_value(unsigned gpio, int value)
197 {
198 rb500_gpio_set_value(gpio, value);
199 }
200
201 static inline int gpio_to_irq(unsigned gpio)
202 {
203 return gpio;
204 }
205
206 static inline int irq_to_gpio(unsigned irq)
207 {
208 return irq;
209 }
210
211 /* For cansleep */
212 #include <asm-generic/gpio.h>
213
214 #endif /* _RC32434_GPIO_H_ */