Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/m68k/platform/527x/gpio.c
10818 views
1
/*
2
* Coldfire generic GPIO support
3
*
4
* (C) Copyright 2009, Steven King <[email protected]>
5
*
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.
9
*
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.
14
*/
15
16
#include <linux/kernel.h>
17
#include <linux/init.h>
18
19
#include <asm/coldfire.h>
20
#include <asm/mcfsim.h>
21
#include <asm/mcfgpio.h>
22
23
static struct mcf_gpio_chip mcf_gpio_chips[] = {
24
#if defined(CONFIG_M5271)
25
{
26
.gpio_chip = {
27
.label = "PIRQ",
28
.request = mcf_gpio_request,
29
.free = mcf_gpio_free,
30
.direction_input = mcf_gpio_direction_input,
31
.direction_output = mcf_gpio_direction_output,
32
.get = mcf_gpio_get_value,
33
.set = mcf_gpio_set_value,
34
.base = 1,
35
.ngpio = 7,
36
},
37
.pddr = (void __iomem *) MCFEPORT_EPDDR,
38
.podr = (void __iomem *) MCFEPORT_EPDR,
39
.ppdr = (void __iomem *) MCFEPORT_EPPDR,
40
},
41
{
42
.gpio_chip = {
43
.label = "ADDR",
44
.request = mcf_gpio_request,
45
.free = mcf_gpio_free,
46
.direction_input = mcf_gpio_direction_input,
47
.direction_output = mcf_gpio_direction_output,
48
.get = mcf_gpio_get_value,
49
.set = mcf_gpio_set_value_fast,
50
.base = 13,
51
.ngpio = 3,
52
},
53
.pddr = (void __iomem *) MCFGPIO_PDDR_ADDR,
54
.podr = (void __iomem *) MCFGPIO_PODR_ADDR,
55
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_ADDR,
56
.setr = (void __iomem *) MCFGPIO_PPDSDR_ADDR,
57
.clrr = (void __iomem *) MCFGPIO_PCLRR_ADDR,
58
},
59
{
60
.gpio_chip = {
61
.label = "DATAH",
62
.request = mcf_gpio_request,
63
.free = mcf_gpio_free,
64
.direction_input = mcf_gpio_direction_input,
65
.direction_output = mcf_gpio_direction_output,
66
.get = mcf_gpio_get_value,
67
.set = mcf_gpio_set_value_fast,
68
.base = 16,
69
.ngpio = 8,
70
},
71
.pddr = (void __iomem *) MCFGPIO_PDDR_DATAH,
72
.podr = (void __iomem *) MCFGPIO_PODR_DATAH,
73
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_DATAH,
74
.setr = (void __iomem *) MCFGPIO_PPDSDR_DATAH,
75
.clrr = (void __iomem *) MCFGPIO_PCLRR_DATAH,
76
},
77
{
78
.gpio_chip = {
79
.label = "DATAL",
80
.request = mcf_gpio_request,
81
.free = mcf_gpio_free,
82
.direction_input = mcf_gpio_direction_input,
83
.direction_output = mcf_gpio_direction_output,
84
.get = mcf_gpio_get_value,
85
.set = mcf_gpio_set_value_fast,
86
.base = 24,
87
.ngpio = 8,
88
},
89
.pddr = (void __iomem *) MCFGPIO_PDDR_DATAL,
90
.podr = (void __iomem *) MCFGPIO_PODR_DATAL,
91
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_DATAL,
92
.setr = (void __iomem *) MCFGPIO_PPDSDR_DATAL,
93
.clrr = (void __iomem *) MCFGPIO_PCLRR_DATAL,
94
},
95
{
96
.gpio_chip = {
97
.label = "BUSCTL",
98
.request = mcf_gpio_request,
99
.free = mcf_gpio_free,
100
.direction_input = mcf_gpio_direction_input,
101
.direction_output = mcf_gpio_direction_output,
102
.get = mcf_gpio_get_value,
103
.set = mcf_gpio_set_value_fast,
104
.base = 32,
105
.ngpio = 8,
106
},
107
.pddr = (void __iomem *) MCFGPIO_PDDR_BUSCTL,
108
.podr = (void __iomem *) MCFGPIO_PODR_BUSCTL,
109
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_BUSCTL,
110
.setr = (void __iomem *) MCFGPIO_PPDSDR_BUSCTL,
111
.clrr = (void __iomem *) MCFGPIO_PCLRR_BUSCTL,
112
},
113
{
114
.gpio_chip = {
115
.label = "BS",
116
.request = mcf_gpio_request,
117
.free = mcf_gpio_free,
118
.direction_input = mcf_gpio_direction_input,
119
.direction_output = mcf_gpio_direction_output,
120
.get = mcf_gpio_get_value,
121
.set = mcf_gpio_set_value_fast,
122
.base = 40,
123
.ngpio = 4,
124
},
125
.pddr = (void __iomem *) MCFGPIO_PDDR_BS,
126
.podr = (void __iomem *) MCFGPIO_PODR_BS,
127
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_BS,
128
.setr = (void __iomem *) MCFGPIO_PPDSDR_BS,
129
.clrr = (void __iomem *) MCFGPIO_PCLRR_BS,
130
},
131
{
132
.gpio_chip = {
133
.label = "CS",
134
.request = mcf_gpio_request,
135
.free = mcf_gpio_free,
136
.direction_input = mcf_gpio_direction_input,
137
.direction_output = mcf_gpio_direction_output,
138
.get = mcf_gpio_get_value,
139
.set = mcf_gpio_set_value_fast,
140
.base = 49,
141
.ngpio = 7,
142
},
143
.pddr = (void __iomem *) MCFGPIO_PDDR_CS,
144
.podr = (void __iomem *) MCFGPIO_PODR_CS,
145
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_CS,
146
.setr = (void __iomem *) MCFGPIO_PPDSDR_CS,
147
.clrr = (void __iomem *) MCFGPIO_PCLRR_CS,
148
},
149
{
150
.gpio_chip = {
151
.label = "SDRAM",
152
.request = mcf_gpio_request,
153
.free = mcf_gpio_free,
154
.direction_input = mcf_gpio_direction_input,
155
.direction_output = mcf_gpio_direction_output,
156
.get = mcf_gpio_get_value,
157
.set = mcf_gpio_set_value_fast,
158
.base = 56,
159
.ngpio = 6,
160
},
161
.pddr = (void __iomem *) MCFGPIO_PDDR_SDRAM,
162
.podr = (void __iomem *) MCFGPIO_PODR_SDRAM,
163
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_SDRAM,
164
.setr = (void __iomem *) MCFGPIO_PPDSDR_SDRAM,
165
.clrr = (void __iomem *) MCFGPIO_PCLRR_SDRAM,
166
},
167
{
168
.gpio_chip = {
169
.label = "FECI2C",
170
.request = mcf_gpio_request,
171
.free = mcf_gpio_free,
172
.direction_input = mcf_gpio_direction_input,
173
.direction_output = mcf_gpio_direction_output,
174
.get = mcf_gpio_get_value,
175
.set = mcf_gpio_set_value_fast,
176
.base = 64,
177
.ngpio = 4,
178
},
179
.pddr = (void __iomem *) MCFGPIO_PDDR_FECI2C,
180
.podr = (void __iomem *) MCFGPIO_PODR_FECI2C,
181
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FECI2C,
182
.setr = (void __iomem *) MCFGPIO_PPDSDR_FECI2C,
183
.clrr = (void __iomem *) MCFGPIO_PCLRR_FECI2C,
184
},
185
{
186
.gpio_chip = {
187
.label = "UARTH",
188
.request = mcf_gpio_request,
189
.free = mcf_gpio_free,
190
.direction_input = mcf_gpio_direction_input,
191
.direction_output = mcf_gpio_direction_output,
192
.get = mcf_gpio_get_value,
193
.set = mcf_gpio_set_value_fast,
194
.base = 72,
195
.ngpio = 2,
196
},
197
.pddr = (void __iomem *) MCFGPIO_PDDR_UARTH,
198
.podr = (void __iomem *) MCFGPIO_PODR_UARTH,
199
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_UARTH,
200
.setr = (void __iomem *) MCFGPIO_PPDSDR_UARTH,
201
.clrr = (void __iomem *) MCFGPIO_PCLRR_UARTH,
202
},
203
{
204
.gpio_chip = {
205
.label = "UARTL",
206
.request = mcf_gpio_request,
207
.free = mcf_gpio_free,
208
.direction_input = mcf_gpio_direction_input,
209
.direction_output = mcf_gpio_direction_output,
210
.get = mcf_gpio_get_value,
211
.set = mcf_gpio_set_value_fast,
212
.base = 80,
213
.ngpio = 8,
214
},
215
.pddr = (void __iomem *) MCFGPIO_PDDR_UARTL,
216
.podr = (void __iomem *) MCFGPIO_PODR_UARTL,
217
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_UARTL,
218
.setr = (void __iomem *) MCFGPIO_PPDSDR_UARTL,
219
.clrr = (void __iomem *) MCFGPIO_PCLRR_UARTL,
220
},
221
{
222
.gpio_chip = {
223
.label = "QSPI",
224
.request = mcf_gpio_request,
225
.free = mcf_gpio_free,
226
.direction_input = mcf_gpio_direction_input,
227
.direction_output = mcf_gpio_direction_output,
228
.get = mcf_gpio_get_value,
229
.set = mcf_gpio_set_value_fast,
230
.base = 88,
231
.ngpio = 5,
232
},
233
.pddr = (void __iomem *) MCFGPIO_PDDR_QSPI,
234
.podr = (void __iomem *) MCFGPIO_PODR_QSPI,
235
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_QSPI,
236
.setr = (void __iomem *) MCFGPIO_PPDSDR_QSPI,
237
.clrr = (void __iomem *) MCFGPIO_PCLRR_QSPI,
238
},
239
{
240
.gpio_chip = {
241
.label = "TIMER",
242
.request = mcf_gpio_request,
243
.free = mcf_gpio_free,
244
.direction_input = mcf_gpio_direction_input,
245
.direction_output = mcf_gpio_direction_output,
246
.get = mcf_gpio_get_value,
247
.set = mcf_gpio_set_value_fast,
248
.base = 96,
249
.ngpio = 8,
250
},
251
.pddr = (void __iomem *) MCFGPIO_PDDR_TIMER,
252
.podr = (void __iomem *) MCFGPIO_PODR_TIMER,
253
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_TIMER,
254
.setr = (void __iomem *) MCFGPIO_PPDSDR_TIMER,
255
.clrr = (void __iomem *) MCFGPIO_PCLRR_TIMER,
256
},
257
#elif defined(CONFIG_M5275)
258
{
259
.gpio_chip = {
260
.label = "PIRQ",
261
.request = mcf_gpio_request,
262
.free = mcf_gpio_free,
263
.direction_input = mcf_gpio_direction_input,
264
.direction_output = mcf_gpio_direction_output,
265
.get = mcf_gpio_get_value,
266
.set = mcf_gpio_set_value,
267
.base = 1,
268
.ngpio = 7,
269
},
270
.pddr = (void __iomem *) MCFEPORT_EPDDR,
271
.podr = (void __iomem *) MCFEPORT_EPDR,
272
.ppdr = (void __iomem *) MCFEPORT_EPPDR,
273
},
274
{
275
.gpio_chip = {
276
.label = "BUSCTL",
277
.request = mcf_gpio_request,
278
.free = mcf_gpio_free,
279
.direction_input = mcf_gpio_direction_input,
280
.direction_output = mcf_gpio_direction_output,
281
.get = mcf_gpio_get_value,
282
.set = mcf_gpio_set_value_fast,
283
.base = 8,
284
.ngpio = 8,
285
},
286
.pddr = (void __iomem *) MCFGPIO_PDDR_BUSCTL,
287
.podr = (void __iomem *) MCFGPIO_PODR_BUSCTL,
288
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_BUSCTL,
289
.setr = (void __iomem *) MCFGPIO_PPDSDR_BUSCTL,
290
.clrr = (void __iomem *) MCFGPIO_PCLRR_BUSCTL,
291
},
292
{
293
.gpio_chip = {
294
.label = "ADDR",
295
.request = mcf_gpio_request,
296
.free = mcf_gpio_free,
297
.direction_input = mcf_gpio_direction_input,
298
.direction_output = mcf_gpio_direction_output,
299
.get = mcf_gpio_get_value,
300
.set = mcf_gpio_set_value_fast,
301
.base = 21,
302
.ngpio = 3,
303
},
304
.pddr = (void __iomem *) MCFGPIO_PDDR_ADDR,
305
.podr = (void __iomem *) MCFGPIO_PODR_ADDR,
306
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_ADDR,
307
.setr = (void __iomem *) MCFGPIO_PPDSDR_ADDR,
308
.clrr = (void __iomem *) MCFGPIO_PCLRR_ADDR,
309
},
310
{
311
.gpio_chip = {
312
.label = "CS",
313
.request = mcf_gpio_request,
314
.free = mcf_gpio_free,
315
.direction_input = mcf_gpio_direction_input,
316
.direction_output = mcf_gpio_direction_output,
317
.get = mcf_gpio_get_value,
318
.set = mcf_gpio_set_value_fast,
319
.base = 25,
320
.ngpio = 7,
321
},
322
.pddr = (void __iomem *) MCFGPIO_PDDR_CS,
323
.podr = (void __iomem *) MCFGPIO_PODR_CS,
324
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_CS,
325
.setr = (void __iomem *) MCFGPIO_PPDSDR_CS,
326
.clrr = (void __iomem *) MCFGPIO_PCLRR_CS,
327
},
328
{
329
.gpio_chip = {
330
.label = "FEC0H",
331
.request = mcf_gpio_request,
332
.free = mcf_gpio_free,
333
.direction_input = mcf_gpio_direction_input,
334
.direction_output = mcf_gpio_direction_output,
335
.get = mcf_gpio_get_value,
336
.set = mcf_gpio_set_value_fast,
337
.base = 32,
338
.ngpio = 8,
339
},
340
.pddr = (void __iomem *) MCFGPIO_PDDR_FEC0H,
341
.podr = (void __iomem *) MCFGPIO_PODR_FEC0H,
342
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FEC0H,
343
.setr = (void __iomem *) MCFGPIO_PPDSDR_FEC0H,
344
.clrr = (void __iomem *) MCFGPIO_PCLRR_FEC0H,
345
},
346
{
347
.gpio_chip = {
348
.label = "FEC0L",
349
.request = mcf_gpio_request,
350
.free = mcf_gpio_free,
351
.direction_input = mcf_gpio_direction_input,
352
.direction_output = mcf_gpio_direction_output,
353
.get = mcf_gpio_get_value,
354
.set = mcf_gpio_set_value_fast,
355
.base = 40,
356
.ngpio = 8,
357
},
358
.pddr = (void __iomem *) MCFGPIO_PDDR_FEC0L,
359
.podr = (void __iomem *) MCFGPIO_PODR_FEC0L,
360
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FEC0L,
361
.setr = (void __iomem *) MCFGPIO_PPDSDR_FEC0L,
362
.clrr = (void __iomem *) MCFGPIO_PCLRR_FEC0L,
363
},
364
{
365
.gpio_chip = {
366
.label = "FECI2C",
367
.request = mcf_gpio_request,
368
.free = mcf_gpio_free,
369
.direction_input = mcf_gpio_direction_input,
370
.direction_output = mcf_gpio_direction_output,
371
.get = mcf_gpio_get_value,
372
.set = mcf_gpio_set_value_fast,
373
.base = 48,
374
.ngpio = 6,
375
},
376
.pddr = (void __iomem *) MCFGPIO_PDDR_FECI2C,
377
.podr = (void __iomem *) MCFGPIO_PODR_FECI2C,
378
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FECI2C,
379
.setr = (void __iomem *) MCFGPIO_PPDSDR_FECI2C,
380
.clrr = (void __iomem *) MCFGPIO_PCLRR_FECI2C,
381
},
382
{
383
.gpio_chip = {
384
.label = "QSPI",
385
.request = mcf_gpio_request,
386
.free = mcf_gpio_free,
387
.direction_input = mcf_gpio_direction_input,
388
.direction_output = mcf_gpio_direction_output,
389
.get = mcf_gpio_get_value,
390
.set = mcf_gpio_set_value_fast,
391
.base = 56,
392
.ngpio = 7,
393
},
394
.pddr = (void __iomem *) MCFGPIO_PDDR_QSPI,
395
.podr = (void __iomem *) MCFGPIO_PODR_QSPI,
396
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_QSPI,
397
.setr = (void __iomem *) MCFGPIO_PPDSDR_QSPI,
398
.clrr = (void __iomem *) MCFGPIO_PCLRR_QSPI,
399
},
400
{
401
.gpio_chip = {
402
.label = "SDRAM",
403
.request = mcf_gpio_request,
404
.free = mcf_gpio_free,
405
.direction_input = mcf_gpio_direction_input,
406
.direction_output = mcf_gpio_direction_output,
407
.get = mcf_gpio_get_value,
408
.set = mcf_gpio_set_value_fast,
409
.base = 64,
410
.ngpio = 8,
411
},
412
.pddr = (void __iomem *) MCFGPIO_PDDR_SDRAM,
413
.podr = (void __iomem *) MCFGPIO_PODR_SDRAM,
414
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_SDRAM,
415
.setr = (void __iomem *) MCFGPIO_PPDSDR_SDRAM,
416
.clrr = (void __iomem *) MCFGPIO_PCLRR_SDRAM,
417
},
418
{
419
.gpio_chip = {
420
.label = "TIMERH",
421
.request = mcf_gpio_request,
422
.free = mcf_gpio_free,
423
.direction_input = mcf_gpio_direction_input,
424
.direction_output = mcf_gpio_direction_output,
425
.get = mcf_gpio_get_value,
426
.set = mcf_gpio_set_value_fast,
427
.base = 72,
428
.ngpio = 4,
429
},
430
.pddr = (void __iomem *) MCFGPIO_PDDR_TIMERH,
431
.podr = (void __iomem *) MCFGPIO_PODR_TIMERH,
432
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_TIMERH,
433
.setr = (void __iomem *) MCFGPIO_PPDSDR_TIMERH,
434
.clrr = (void __iomem *) MCFGPIO_PCLRR_TIMERH,
435
},
436
{
437
.gpio_chip = {
438
.label = "TIMERL",
439
.request = mcf_gpio_request,
440
.free = mcf_gpio_free,
441
.direction_input = mcf_gpio_direction_input,
442
.direction_output = mcf_gpio_direction_output,
443
.get = mcf_gpio_get_value,
444
.set = mcf_gpio_set_value_fast,
445
.base = 80,
446
.ngpio = 4,
447
},
448
.pddr = (void __iomem *) MCFGPIO_PDDR_TIMERL,
449
.podr = (void __iomem *) MCFGPIO_PODR_TIMERL,
450
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_TIMERL,
451
.setr = (void __iomem *) MCFGPIO_PPDSDR_TIMERL,
452
.clrr = (void __iomem *) MCFGPIO_PCLRR_TIMERL,
453
},
454
{
455
.gpio_chip = {
456
.label = "UARTL",
457
.request = mcf_gpio_request,
458
.free = mcf_gpio_free,
459
.direction_input = mcf_gpio_direction_input,
460
.direction_output = mcf_gpio_direction_output,
461
.get = mcf_gpio_get_value,
462
.set = mcf_gpio_set_value_fast,
463
.base = 88,
464
.ngpio = 8,
465
},
466
.pddr = (void __iomem *) MCFGPIO_PDDR_UARTL,
467
.podr = (void __iomem *) MCFGPIO_PODR_UARTL,
468
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_UARTL,
469
.setr = (void __iomem *) MCFGPIO_PPDSDR_UARTL,
470
.clrr = (void __iomem *) MCFGPIO_PCLRR_UARTL,
471
},
472
{
473
.gpio_chip = {
474
.label = "FEC1H",
475
.request = mcf_gpio_request,
476
.free = mcf_gpio_free,
477
.direction_input = mcf_gpio_direction_input,
478
.direction_output = mcf_gpio_direction_output,
479
.get = mcf_gpio_get_value,
480
.set = mcf_gpio_set_value_fast,
481
.base = 96,
482
.ngpio = 8,
483
},
484
.pddr = (void __iomem *) MCFGPIO_PDDR_FEC1H,
485
.podr = (void __iomem *) MCFGPIO_PODR_FEC1H,
486
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FEC1H,
487
.setr = (void __iomem *) MCFGPIO_PPDSDR_FEC1H,
488
.clrr = (void __iomem *) MCFGPIO_PCLRR_FEC1H,
489
},
490
{
491
.gpio_chip = {
492
.label = "FEC1L",
493
.request = mcf_gpio_request,
494
.free = mcf_gpio_free,
495
.direction_input = mcf_gpio_direction_input,
496
.direction_output = mcf_gpio_direction_output,
497
.get = mcf_gpio_get_value,
498
.set = mcf_gpio_set_value_fast,
499
.base = 104,
500
.ngpio = 8,
501
},
502
.pddr = (void __iomem *) MCFGPIO_PDDR_FEC1L,
503
.podr = (void __iomem *) MCFGPIO_PODR_FEC1L,
504
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_FEC1L,
505
.setr = (void __iomem *) MCFGPIO_PPDSDR_FEC1L,
506
.clrr = (void __iomem *) MCFGPIO_PCLRR_FEC1L,
507
},
508
{
509
.gpio_chip = {
510
.label = "BS",
511
.request = mcf_gpio_request,
512
.free = mcf_gpio_free,
513
.direction_input = mcf_gpio_direction_input,
514
.direction_output = mcf_gpio_direction_output,
515
.get = mcf_gpio_get_value,
516
.set = mcf_gpio_set_value_fast,
517
.base = 114,
518
.ngpio = 2,
519
},
520
.pddr = (void __iomem *) MCFGPIO_PDDR_BS,
521
.podr = (void __iomem *) MCFGPIO_PODR_BS,
522
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_BS,
523
.setr = (void __iomem *) MCFGPIO_PPDSDR_BS,
524
.clrr = (void __iomem *) MCFGPIO_PCLRR_BS,
525
},
526
{
527
.gpio_chip = {
528
.label = "IRQ",
529
.request = mcf_gpio_request,
530
.free = mcf_gpio_free,
531
.direction_input = mcf_gpio_direction_input,
532
.direction_output = mcf_gpio_direction_output,
533
.get = mcf_gpio_get_value,
534
.set = mcf_gpio_set_value_fast,
535
.base = 121,
536
.ngpio = 7,
537
},
538
.pddr = (void __iomem *) MCFGPIO_PDDR_IRQ,
539
.podr = (void __iomem *) MCFGPIO_PODR_IRQ,
540
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_IRQ,
541
.setr = (void __iomem *) MCFGPIO_PPDSDR_IRQ,
542
.clrr = (void __iomem *) MCFGPIO_PCLRR_IRQ,
543
},
544
{
545
.gpio_chip = {
546
.label = "USBH",
547
.request = mcf_gpio_request,
548
.free = mcf_gpio_free,
549
.direction_input = mcf_gpio_direction_input,
550
.direction_output = mcf_gpio_direction_output,
551
.get = mcf_gpio_get_value,
552
.set = mcf_gpio_set_value_fast,
553
.base = 128,
554
.ngpio = 1,
555
},
556
.pddr = (void __iomem *) MCFGPIO_PDDR_USBH,
557
.podr = (void __iomem *) MCFGPIO_PODR_USBH,
558
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_USBH,
559
.setr = (void __iomem *) MCFGPIO_PPDSDR_USBH,
560
.clrr = (void __iomem *) MCFGPIO_PCLRR_USBH,
561
},
562
{
563
.gpio_chip = {
564
.label = "USBL",
565
.request = mcf_gpio_request,
566
.free = mcf_gpio_free,
567
.direction_input = mcf_gpio_direction_input,
568
.direction_output = mcf_gpio_direction_output,
569
.get = mcf_gpio_get_value,
570
.set = mcf_gpio_set_value_fast,
571
.base = 136,
572
.ngpio = 8,
573
},
574
.pddr = (void __iomem *) MCFGPIO_PDDR_USBL,
575
.podr = (void __iomem *) MCFGPIO_PODR_USBL,
576
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_USBL,
577
.setr = (void __iomem *) MCFGPIO_PPDSDR_USBL,
578
.clrr = (void __iomem *) MCFGPIO_PCLRR_USBL,
579
},
580
{
581
.gpio_chip = {
582
.label = "UARTH",
583
.request = mcf_gpio_request,
584
.free = mcf_gpio_free,
585
.direction_input = mcf_gpio_direction_input,
586
.direction_output = mcf_gpio_direction_output,
587
.get = mcf_gpio_get_value,
588
.set = mcf_gpio_set_value_fast,
589
.base = 144,
590
.ngpio = 4,
591
},
592
.pddr = (void __iomem *) MCFGPIO_PDDR_UARTH,
593
.podr = (void __iomem *) MCFGPIO_PODR_UARTH,
594
.ppdr = (void __iomem *) MCFGPIO_PPDSDR_UARTH,
595
.setr = (void __iomem *) MCFGPIO_PPDSDR_UARTH,
596
.clrr = (void __iomem *) MCFGPIO_PCLRR_UARTH,
597
},
598
#endif
599
};
600
601
static int __init mcf_gpio_init(void)
602
{
603
unsigned i = 0;
604
while (i < ARRAY_SIZE(mcf_gpio_chips))
605
(void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]);
606
return 0;
607
}
608
609
core_initcall(mcf_gpio_init);
610
611