2 * Coldfire generic GPIO support
4 * (C) Copyright 2009, Steven King <sfking@fdwdc.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
16 #include <linux/kernel.h>
17 #include <linux/init.h>
19 #include <asm/coldfire.h>
20 #include <asm/mcfsim.h>
21 #include <asm/mcfgpio.h>
23 static struct mcf_gpio_chip mcf_gpio_chips
[] = {
27 .request
= mcf_gpio_request
,
28 .free
= mcf_gpio_free
,
29 .direction_input
= mcf_gpio_direction_input
,
30 .direction_output
= mcf_gpio_direction_output
,
31 .get
= mcf_gpio_get_value
,
32 .set
= mcf_gpio_set_value
,
35 .pddr
= MCFEPORT_EPDDR
,
36 .podr
= MCFEPORT_EPDR
,
37 .ppdr
= MCFEPORT_EPPDR
,
42 .request
= mcf_gpio_request
,
43 .free
= mcf_gpio_free
,
44 .direction_input
= mcf_gpio_direction_input
,
45 .direction_output
= mcf_gpio_direction_output
,
46 .get
= mcf_gpio_get_value
,
47 .set
= mcf_gpio_set_value_fast
,
51 .pddr
= MCFGPIO_PDDR_ADDR
,
52 .podr
= MCFGPIO_PODR_ADDR
,
53 .ppdr
= MCFGPIO_PPDSDR_ADDR
,
54 .setr
= MCFGPIO_PPDSDR_ADDR
,
55 .clrr
= MCFGPIO_PCLRR_ADDR
,
60 .request
= mcf_gpio_request
,
61 .free
= mcf_gpio_free
,
62 .direction_input
= mcf_gpio_direction_input
,
63 .direction_output
= mcf_gpio_direction_output
,
64 .get
= mcf_gpio_get_value
,
65 .set
= mcf_gpio_set_value_fast
,
69 .pddr
= MCFGPIO_PDDR_DATAH
,
70 .podr
= MCFGPIO_PODR_DATAH
,
71 .ppdr
= MCFGPIO_PPDSDR_DATAH
,
72 .setr
= MCFGPIO_PPDSDR_DATAH
,
73 .clrr
= MCFGPIO_PCLRR_DATAH
,
78 .request
= mcf_gpio_request
,
79 .free
= mcf_gpio_free
,
80 .direction_input
= mcf_gpio_direction_input
,
81 .direction_output
= mcf_gpio_direction_output
,
82 .get
= mcf_gpio_get_value
,
83 .set
= mcf_gpio_set_value_fast
,
87 .pddr
= MCFGPIO_PDDR_DATAL
,
88 .podr
= MCFGPIO_PODR_DATAL
,
89 .ppdr
= MCFGPIO_PPDSDR_DATAL
,
90 .setr
= MCFGPIO_PPDSDR_DATAL
,
91 .clrr
= MCFGPIO_PCLRR_DATAL
,
96 .request
= mcf_gpio_request
,
97 .free
= mcf_gpio_free
,
98 .direction_input
= mcf_gpio_direction_input
,
99 .direction_output
= mcf_gpio_direction_output
,
100 .get
= mcf_gpio_get_value
,
101 .set
= mcf_gpio_set_value_fast
,
105 .pddr
= MCFGPIO_PDDR_BUSCTL
,
106 .podr
= MCFGPIO_PODR_BUSCTL
,
107 .ppdr
= MCFGPIO_PPDSDR_BUSCTL
,
108 .setr
= MCFGPIO_PPDSDR_BUSCTL
,
109 .clrr
= MCFGPIO_PCLRR_BUSCTL
,
114 .request
= mcf_gpio_request
,
115 .free
= mcf_gpio_free
,
116 .direction_input
= mcf_gpio_direction_input
,
117 .direction_output
= mcf_gpio_direction_output
,
118 .get
= mcf_gpio_get_value
,
119 .set
= mcf_gpio_set_value_fast
,
123 .pddr
= MCFGPIO_PDDR_BS
,
124 .podr
= MCFGPIO_PODR_BS
,
125 .ppdr
= MCFGPIO_PPDSDR_BS
,
126 .setr
= MCFGPIO_PPDSDR_BS
,
127 .clrr
= MCFGPIO_PCLRR_BS
,
132 .request
= mcf_gpio_request
,
133 .free
= mcf_gpio_free
,
134 .direction_input
= mcf_gpio_direction_input
,
135 .direction_output
= mcf_gpio_direction_output
,
136 .get
= mcf_gpio_get_value
,
137 .set
= mcf_gpio_set_value_fast
,
141 .pddr
= MCFGPIO_PDDR_CS
,
142 .podr
= MCFGPIO_PODR_CS
,
143 .ppdr
= MCFGPIO_PPDSDR_CS
,
144 .setr
= MCFGPIO_PPDSDR_CS
,
145 .clrr
= MCFGPIO_PCLRR_CS
,
150 .request
= mcf_gpio_request
,
151 .free
= mcf_gpio_free
,
152 .direction_input
= mcf_gpio_direction_input
,
153 .direction_output
= mcf_gpio_direction_output
,
154 .get
= mcf_gpio_get_value
,
155 .set
= mcf_gpio_set_value_fast
,
159 .pddr
= MCFGPIO_PDDR_SDRAM
,
160 .podr
= MCFGPIO_PODR_SDRAM
,
161 .ppdr
= MCFGPIO_PPDSDR_SDRAM
,
162 .setr
= MCFGPIO_PPDSDR_SDRAM
,
163 .clrr
= MCFGPIO_PCLRR_SDRAM
,
168 .request
= mcf_gpio_request
,
169 .free
= mcf_gpio_free
,
170 .direction_input
= mcf_gpio_direction_input
,
171 .direction_output
= mcf_gpio_direction_output
,
172 .get
= mcf_gpio_get_value
,
173 .set
= mcf_gpio_set_value_fast
,
177 .pddr
= MCFGPIO_PDDR_FECI2C
,
178 .podr
= MCFGPIO_PODR_FECI2C
,
179 .ppdr
= MCFGPIO_PPDSDR_FECI2C
,
180 .setr
= MCFGPIO_PPDSDR_FECI2C
,
181 .clrr
= MCFGPIO_PCLRR_FECI2C
,
186 .request
= mcf_gpio_request
,
187 .free
= mcf_gpio_free
,
188 .direction_input
= mcf_gpio_direction_input
,
189 .direction_output
= mcf_gpio_direction_output
,
190 .get
= mcf_gpio_get_value
,
191 .set
= mcf_gpio_set_value_fast
,
195 .pddr
= MCFGPIO_PDDR_UARTH
,
196 .podr
= MCFGPIO_PODR_UARTH
,
197 .ppdr
= MCFGPIO_PPDSDR_UARTH
,
198 .setr
= MCFGPIO_PPDSDR_UARTH
,
199 .clrr
= MCFGPIO_PCLRR_UARTH
,
204 .request
= mcf_gpio_request
,
205 .free
= mcf_gpio_free
,
206 .direction_input
= mcf_gpio_direction_input
,
207 .direction_output
= mcf_gpio_direction_output
,
208 .get
= mcf_gpio_get_value
,
209 .set
= mcf_gpio_set_value_fast
,
213 .pddr
= MCFGPIO_PDDR_UARTL
,
214 .podr
= MCFGPIO_PODR_UARTL
,
215 .ppdr
= MCFGPIO_PPDSDR_UARTL
,
216 .setr
= MCFGPIO_PPDSDR_UARTL
,
217 .clrr
= MCFGPIO_PCLRR_UARTL
,
222 .request
= mcf_gpio_request
,
223 .free
= mcf_gpio_free
,
224 .direction_input
= mcf_gpio_direction_input
,
225 .direction_output
= mcf_gpio_direction_output
,
226 .get
= mcf_gpio_get_value
,
227 .set
= mcf_gpio_set_value_fast
,
231 .pddr
= MCFGPIO_PDDR_QSPI
,
232 .podr
= MCFGPIO_PODR_QSPI
,
233 .ppdr
= MCFGPIO_PPDSDR_QSPI
,
234 .setr
= MCFGPIO_PPDSDR_QSPI
,
235 .clrr
= MCFGPIO_PCLRR_QSPI
,
240 .request
= mcf_gpio_request
,
241 .free
= mcf_gpio_free
,
242 .direction_input
= mcf_gpio_direction_input
,
243 .direction_output
= mcf_gpio_direction_output
,
244 .get
= mcf_gpio_get_value
,
245 .set
= mcf_gpio_set_value_fast
,
249 .pddr
= MCFGPIO_PDDR_TIMER
,
250 .podr
= MCFGPIO_PODR_TIMER
,
251 .ppdr
= MCFGPIO_PPDSDR_TIMER
,
252 .setr
= MCFGPIO_PPDSDR_TIMER
,
253 .clrr
= MCFGPIO_PCLRR_TIMER
,
258 .request
= mcf_gpio_request
,
259 .free
= mcf_gpio_free
,
260 .direction_input
= mcf_gpio_direction_input
,
261 .direction_output
= mcf_gpio_direction_output
,
262 .get
= mcf_gpio_get_value
,
263 .set
= mcf_gpio_set_value_fast
,
267 .pddr
= MCFGPIO_PDDR_ETPU
,
268 .podr
= MCFGPIO_PODR_ETPU
,
269 .ppdr
= MCFGPIO_PPDSDR_ETPU
,
270 .setr
= MCFGPIO_PPDSDR_ETPU
,
271 .clrr
= MCFGPIO_PCLRR_ETPU
,
275 static int __init
mcf_gpio_init(void)
278 while (i
< ARRAY_SIZE(mcf_gpio_chips
))
279 (void)gpiochip_add((struct gpio_chip
*)&mcf_gpio_chips
[i
++]);
283 core_initcall(mcf_gpio_init
);