Upgrade rb532 to .23, provide generic GPIO API to this board
[librecmc/librecmc.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_ */