Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/gpio/gpio-omap.c
15109 views
1
/*
2
* Support functions for OMAP GPIO
3
*
4
* Copyright (C) 2003-2005 Nokia Corporation
5
* Written by Juha Yrjölä <[email protected]>
6
*
7
* Copyright (C) 2009 Texas Instruments
8
* Added OMAP4 support - Santosh Shilimkar <[email protected]>
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License version 2 as
12
* published by the Free Software Foundation.
13
*/
14
15
#include <linux/init.h>
16
#include <linux/module.h>
17
#include <linux/interrupt.h>
18
#include <linux/syscore_ops.h>
19
#include <linux/err.h>
20
#include <linux/clk.h>
21
#include <linux/io.h>
22
#include <linux/slab.h>
23
#include <linux/pm_runtime.h>
24
25
#include <mach/hardware.h>
26
#include <asm/irq.h>
27
#include <mach/irqs.h>
28
#include <mach/gpio.h>
29
#include <asm/mach/irq.h>
30
31
struct gpio_bank {
32
unsigned long pbase;
33
void __iomem *base;
34
u16 irq;
35
u16 virtual_irq_start;
36
int method;
37
#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
38
u32 suspend_wakeup;
39
u32 saved_wakeup;
40
#endif
41
u32 non_wakeup_gpios;
42
u32 enabled_non_wakeup_gpios;
43
44
u32 saved_datain;
45
u32 saved_fallingdetect;
46
u32 saved_risingdetect;
47
u32 level_mask;
48
u32 toggle_mask;
49
spinlock_t lock;
50
struct gpio_chip chip;
51
struct clk *dbck;
52
u32 mod_usage;
53
u32 dbck_enable_mask;
54
struct device *dev;
55
bool dbck_flag;
56
int stride;
57
};
58
59
#ifdef CONFIG_ARCH_OMAP3
60
struct omap3_gpio_regs {
61
u32 irqenable1;
62
u32 irqenable2;
63
u32 wake_en;
64
u32 ctrl;
65
u32 oe;
66
u32 leveldetect0;
67
u32 leveldetect1;
68
u32 risingdetect;
69
u32 fallingdetect;
70
u32 dataout;
71
};
72
73
static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS];
74
#endif
75
76
/*
77
* TODO: Cleanup gpio_bank usage as it is having information
78
* related to all instances of the device
79
*/
80
static struct gpio_bank *gpio_bank;
81
82
static int bank_width;
83
84
/* TODO: Analyze removing gpio_bank_count usage from driver code */
85
int gpio_bank_count;
86
87
static inline struct gpio_bank *get_gpio_bank(int gpio)
88
{
89
if (cpu_is_omap15xx()) {
90
if (OMAP_GPIO_IS_MPUIO(gpio))
91
return &gpio_bank[0];
92
return &gpio_bank[1];
93
}
94
if (cpu_is_omap16xx()) {
95
if (OMAP_GPIO_IS_MPUIO(gpio))
96
return &gpio_bank[0];
97
return &gpio_bank[1 + (gpio >> 4)];
98
}
99
if (cpu_is_omap7xx()) {
100
if (OMAP_GPIO_IS_MPUIO(gpio))
101
return &gpio_bank[0];
102
return &gpio_bank[1 + (gpio >> 5)];
103
}
104
if (cpu_is_omap24xx())
105
return &gpio_bank[gpio >> 5];
106
if (cpu_is_omap34xx() || cpu_is_omap44xx())
107
return &gpio_bank[gpio >> 5];
108
BUG();
109
return NULL;
110
}
111
112
static inline int get_gpio_index(int gpio)
113
{
114
if (cpu_is_omap7xx())
115
return gpio & 0x1f;
116
if (cpu_is_omap24xx())
117
return gpio & 0x1f;
118
if (cpu_is_omap34xx() || cpu_is_omap44xx())
119
return gpio & 0x1f;
120
return gpio & 0x0f;
121
}
122
123
static inline int gpio_valid(int gpio)
124
{
125
if (gpio < 0)
126
return -1;
127
if (cpu_class_is_omap1() && OMAP_GPIO_IS_MPUIO(gpio)) {
128
if (gpio >= OMAP_MAX_GPIO_LINES + 16)
129
return -1;
130
return 0;
131
}
132
if (cpu_is_omap15xx() && gpio < 16)
133
return 0;
134
if ((cpu_is_omap16xx()) && gpio < 64)
135
return 0;
136
if (cpu_is_omap7xx() && gpio < 192)
137
return 0;
138
if (cpu_is_omap2420() && gpio < 128)
139
return 0;
140
if (cpu_is_omap2430() && gpio < 160)
141
return 0;
142
if ((cpu_is_omap34xx() || cpu_is_omap44xx()) && gpio < 192)
143
return 0;
144
return -1;
145
}
146
147
static int check_gpio(int gpio)
148
{
149
if (unlikely(gpio_valid(gpio) < 0)) {
150
printk(KERN_ERR "omap-gpio: invalid GPIO %d\n", gpio);
151
dump_stack();
152
return -1;
153
}
154
return 0;
155
}
156
157
static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
158
{
159
void __iomem *reg = bank->base;
160
u32 l;
161
162
switch (bank->method) {
163
#ifdef CONFIG_ARCH_OMAP1
164
case METHOD_MPUIO:
165
reg += OMAP_MPUIO_IO_CNTL / bank->stride;
166
break;
167
#endif
168
#ifdef CONFIG_ARCH_OMAP15XX
169
case METHOD_GPIO_1510:
170
reg += OMAP1510_GPIO_DIR_CONTROL;
171
break;
172
#endif
173
#ifdef CONFIG_ARCH_OMAP16XX
174
case METHOD_GPIO_1610:
175
reg += OMAP1610_GPIO_DIRECTION;
176
break;
177
#endif
178
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
179
case METHOD_GPIO_7XX:
180
reg += OMAP7XX_GPIO_DIR_CONTROL;
181
break;
182
#endif
183
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
184
case METHOD_GPIO_24XX:
185
reg += OMAP24XX_GPIO_OE;
186
break;
187
#endif
188
#if defined(CONFIG_ARCH_OMAP4)
189
case METHOD_GPIO_44XX:
190
reg += OMAP4_GPIO_OE;
191
break;
192
#endif
193
default:
194
WARN_ON(1);
195
return;
196
}
197
l = __raw_readl(reg);
198
if (is_input)
199
l |= 1 << gpio;
200
else
201
l &= ~(1 << gpio);
202
__raw_writel(l, reg);
203
}
204
205
static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
206
{
207
void __iomem *reg = bank->base;
208
u32 l = 0;
209
210
switch (bank->method) {
211
#ifdef CONFIG_ARCH_OMAP1
212
case METHOD_MPUIO:
213
reg += OMAP_MPUIO_OUTPUT / bank->stride;
214
l = __raw_readl(reg);
215
if (enable)
216
l |= 1 << gpio;
217
else
218
l &= ~(1 << gpio);
219
break;
220
#endif
221
#ifdef CONFIG_ARCH_OMAP15XX
222
case METHOD_GPIO_1510:
223
reg += OMAP1510_GPIO_DATA_OUTPUT;
224
l = __raw_readl(reg);
225
if (enable)
226
l |= 1 << gpio;
227
else
228
l &= ~(1 << gpio);
229
break;
230
#endif
231
#ifdef CONFIG_ARCH_OMAP16XX
232
case METHOD_GPIO_1610:
233
if (enable)
234
reg += OMAP1610_GPIO_SET_DATAOUT;
235
else
236
reg += OMAP1610_GPIO_CLEAR_DATAOUT;
237
l = 1 << gpio;
238
break;
239
#endif
240
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
241
case METHOD_GPIO_7XX:
242
reg += OMAP7XX_GPIO_DATA_OUTPUT;
243
l = __raw_readl(reg);
244
if (enable)
245
l |= 1 << gpio;
246
else
247
l &= ~(1 << gpio);
248
break;
249
#endif
250
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
251
case METHOD_GPIO_24XX:
252
if (enable)
253
reg += OMAP24XX_GPIO_SETDATAOUT;
254
else
255
reg += OMAP24XX_GPIO_CLEARDATAOUT;
256
l = 1 << gpio;
257
break;
258
#endif
259
#ifdef CONFIG_ARCH_OMAP4
260
case METHOD_GPIO_44XX:
261
if (enable)
262
reg += OMAP4_GPIO_SETDATAOUT;
263
else
264
reg += OMAP4_GPIO_CLEARDATAOUT;
265
l = 1 << gpio;
266
break;
267
#endif
268
default:
269
WARN_ON(1);
270
return;
271
}
272
__raw_writel(l, reg);
273
}
274
275
static int _get_gpio_datain(struct gpio_bank *bank, int gpio)
276
{
277
void __iomem *reg;
278
279
if (check_gpio(gpio) < 0)
280
return -EINVAL;
281
reg = bank->base;
282
switch (bank->method) {
283
#ifdef CONFIG_ARCH_OMAP1
284
case METHOD_MPUIO:
285
reg += OMAP_MPUIO_INPUT_LATCH / bank->stride;
286
break;
287
#endif
288
#ifdef CONFIG_ARCH_OMAP15XX
289
case METHOD_GPIO_1510:
290
reg += OMAP1510_GPIO_DATA_INPUT;
291
break;
292
#endif
293
#ifdef CONFIG_ARCH_OMAP16XX
294
case METHOD_GPIO_1610:
295
reg += OMAP1610_GPIO_DATAIN;
296
break;
297
#endif
298
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
299
case METHOD_GPIO_7XX:
300
reg += OMAP7XX_GPIO_DATA_INPUT;
301
break;
302
#endif
303
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
304
case METHOD_GPIO_24XX:
305
reg += OMAP24XX_GPIO_DATAIN;
306
break;
307
#endif
308
#ifdef CONFIG_ARCH_OMAP4
309
case METHOD_GPIO_44XX:
310
reg += OMAP4_GPIO_DATAIN;
311
break;
312
#endif
313
default:
314
return -EINVAL;
315
}
316
return (__raw_readl(reg)
317
& (1 << get_gpio_index(gpio))) != 0;
318
}
319
320
static int _get_gpio_dataout(struct gpio_bank *bank, int gpio)
321
{
322
void __iomem *reg;
323
324
if (check_gpio(gpio) < 0)
325
return -EINVAL;
326
reg = bank->base;
327
328
switch (bank->method) {
329
#ifdef CONFIG_ARCH_OMAP1
330
case METHOD_MPUIO:
331
reg += OMAP_MPUIO_OUTPUT / bank->stride;
332
break;
333
#endif
334
#ifdef CONFIG_ARCH_OMAP15XX
335
case METHOD_GPIO_1510:
336
reg += OMAP1510_GPIO_DATA_OUTPUT;
337
break;
338
#endif
339
#ifdef CONFIG_ARCH_OMAP16XX
340
case METHOD_GPIO_1610:
341
reg += OMAP1610_GPIO_DATAOUT;
342
break;
343
#endif
344
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
345
case METHOD_GPIO_7XX:
346
reg += OMAP7XX_GPIO_DATA_OUTPUT;
347
break;
348
#endif
349
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
350
case METHOD_GPIO_24XX:
351
reg += OMAP24XX_GPIO_DATAOUT;
352
break;
353
#endif
354
#ifdef CONFIG_ARCH_OMAP4
355
case METHOD_GPIO_44XX:
356
reg += OMAP4_GPIO_DATAOUT;
357
break;
358
#endif
359
default:
360
return -EINVAL;
361
}
362
363
return (__raw_readl(reg) & (1 << get_gpio_index(gpio))) != 0;
364
}
365
366
#define MOD_REG_BIT(reg, bit_mask, set) \
367
do { \
368
int l = __raw_readl(base + reg); \
369
if (set) l |= bit_mask; \
370
else l &= ~bit_mask; \
371
__raw_writel(l, base + reg); \
372
} while(0)
373
374
/**
375
* _set_gpio_debounce - low level gpio debounce time
376
* @bank: the gpio bank we're acting upon
377
* @gpio: the gpio number on this @gpio
378
* @debounce: debounce time to use
379
*
380
* OMAP's debounce time is in 31us steps so we need
381
* to convert and round up to the closest unit.
382
*/
383
static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
384
unsigned debounce)
385
{
386
void __iomem *reg = bank->base;
387
u32 val;
388
u32 l;
389
390
if (!bank->dbck_flag)
391
return;
392
393
if (debounce < 32)
394
debounce = 0x01;
395
else if (debounce > 7936)
396
debounce = 0xff;
397
else
398
debounce = (debounce / 0x1f) - 1;
399
400
l = 1 << get_gpio_index(gpio);
401
402
if (bank->method == METHOD_GPIO_44XX)
403
reg += OMAP4_GPIO_DEBOUNCINGTIME;
404
else
405
reg += OMAP24XX_GPIO_DEBOUNCE_VAL;
406
407
__raw_writel(debounce, reg);
408
409
reg = bank->base;
410
if (bank->method == METHOD_GPIO_44XX)
411
reg += OMAP4_GPIO_DEBOUNCENABLE;
412
else
413
reg += OMAP24XX_GPIO_DEBOUNCE_EN;
414
415
val = __raw_readl(reg);
416
417
if (debounce) {
418
val |= l;
419
clk_enable(bank->dbck);
420
} else {
421
val &= ~l;
422
clk_disable(bank->dbck);
423
}
424
bank->dbck_enable_mask = val;
425
426
__raw_writel(val, reg);
427
}
428
429
#ifdef CONFIG_ARCH_OMAP2PLUS
430
static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio,
431
int trigger)
432
{
433
void __iomem *base = bank->base;
434
u32 gpio_bit = 1 << gpio;
435
436
if (cpu_is_omap44xx()) {
437
MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT0, gpio_bit,
438
trigger & IRQ_TYPE_LEVEL_LOW);
439
MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT1, gpio_bit,
440
trigger & IRQ_TYPE_LEVEL_HIGH);
441
MOD_REG_BIT(OMAP4_GPIO_RISINGDETECT, gpio_bit,
442
trigger & IRQ_TYPE_EDGE_RISING);
443
MOD_REG_BIT(OMAP4_GPIO_FALLINGDETECT, gpio_bit,
444
trigger & IRQ_TYPE_EDGE_FALLING);
445
} else {
446
MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
447
trigger & IRQ_TYPE_LEVEL_LOW);
448
MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
449
trigger & IRQ_TYPE_LEVEL_HIGH);
450
MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
451
trigger & IRQ_TYPE_EDGE_RISING);
452
MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
453
trigger & IRQ_TYPE_EDGE_FALLING);
454
}
455
if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
456
if (cpu_is_omap44xx()) {
457
MOD_REG_BIT(OMAP4_GPIO_IRQWAKEN0, gpio_bit,
458
trigger != 0);
459
} else {
460
/*
461
* GPIO wakeup request can only be generated on edge
462
* transitions
463
*/
464
if (trigger & IRQ_TYPE_EDGE_BOTH)
465
__raw_writel(1 << gpio, bank->base
466
+ OMAP24XX_GPIO_SETWKUENA);
467
else
468
__raw_writel(1 << gpio, bank->base
469
+ OMAP24XX_GPIO_CLEARWKUENA);
470
}
471
}
472
/* This part needs to be executed always for OMAP{34xx, 44xx} */
473
if (cpu_is_omap34xx() || cpu_is_omap44xx() ||
474
(bank->non_wakeup_gpios & gpio_bit)) {
475
/*
476
* Log the edge gpio and manually trigger the IRQ
477
* after resume if the input level changes
478
* to avoid irq lost during PER RET/OFF mode
479
* Applies for omap2 non-wakeup gpio and all omap3 gpios
480
*/
481
if (trigger & IRQ_TYPE_EDGE_BOTH)
482
bank->enabled_non_wakeup_gpios |= gpio_bit;
483
else
484
bank->enabled_non_wakeup_gpios &= ~gpio_bit;
485
}
486
487
if (cpu_is_omap44xx()) {
488
bank->level_mask =
489
__raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0) |
490
__raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT1);
491
} else {
492
bank->level_mask =
493
__raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0) |
494
__raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
495
}
496
}
497
#endif
498
499
#ifdef CONFIG_ARCH_OMAP1
500
/*
501
* This only applies to chips that can't do both rising and falling edge
502
* detection at once. For all other chips, this function is a noop.
503
*/
504
static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
505
{
506
void __iomem *reg = bank->base;
507
u32 l = 0;
508
509
switch (bank->method) {
510
case METHOD_MPUIO:
511
reg += OMAP_MPUIO_GPIO_INT_EDGE / bank->stride;
512
break;
513
#ifdef CONFIG_ARCH_OMAP15XX
514
case METHOD_GPIO_1510:
515
reg += OMAP1510_GPIO_INT_CONTROL;
516
break;
517
#endif
518
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
519
case METHOD_GPIO_7XX:
520
reg += OMAP7XX_GPIO_INT_CONTROL;
521
break;
522
#endif
523
default:
524
return;
525
}
526
527
l = __raw_readl(reg);
528
if ((l >> gpio) & 1)
529
l &= ~(1 << gpio);
530
else
531
l |= 1 << gpio;
532
533
__raw_writel(l, reg);
534
}
535
#endif
536
537
static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
538
{
539
void __iomem *reg = bank->base;
540
u32 l = 0;
541
542
switch (bank->method) {
543
#ifdef CONFIG_ARCH_OMAP1
544
case METHOD_MPUIO:
545
reg += OMAP_MPUIO_GPIO_INT_EDGE / bank->stride;
546
l = __raw_readl(reg);
547
if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
548
bank->toggle_mask |= 1 << gpio;
549
if (trigger & IRQ_TYPE_EDGE_RISING)
550
l |= 1 << gpio;
551
else if (trigger & IRQ_TYPE_EDGE_FALLING)
552
l &= ~(1 << gpio);
553
else
554
goto bad;
555
break;
556
#endif
557
#ifdef CONFIG_ARCH_OMAP15XX
558
case METHOD_GPIO_1510:
559
reg += OMAP1510_GPIO_INT_CONTROL;
560
l = __raw_readl(reg);
561
if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
562
bank->toggle_mask |= 1 << gpio;
563
if (trigger & IRQ_TYPE_EDGE_RISING)
564
l |= 1 << gpio;
565
else if (trigger & IRQ_TYPE_EDGE_FALLING)
566
l &= ~(1 << gpio);
567
else
568
goto bad;
569
break;
570
#endif
571
#ifdef CONFIG_ARCH_OMAP16XX
572
case METHOD_GPIO_1610:
573
if (gpio & 0x08)
574
reg += OMAP1610_GPIO_EDGE_CTRL2;
575
else
576
reg += OMAP1610_GPIO_EDGE_CTRL1;
577
gpio &= 0x07;
578
l = __raw_readl(reg);
579
l &= ~(3 << (gpio << 1));
580
if (trigger & IRQ_TYPE_EDGE_RISING)
581
l |= 2 << (gpio << 1);
582
if (trigger & IRQ_TYPE_EDGE_FALLING)
583
l |= 1 << (gpio << 1);
584
if (trigger)
585
/* Enable wake-up during idle for dynamic tick */
586
__raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_SET_WAKEUPENA);
587
else
588
__raw_writel(1 << gpio, bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA);
589
break;
590
#endif
591
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
592
case METHOD_GPIO_7XX:
593
reg += OMAP7XX_GPIO_INT_CONTROL;
594
l = __raw_readl(reg);
595
if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
596
bank->toggle_mask |= 1 << gpio;
597
if (trigger & IRQ_TYPE_EDGE_RISING)
598
l |= 1 << gpio;
599
else if (trigger & IRQ_TYPE_EDGE_FALLING)
600
l &= ~(1 << gpio);
601
else
602
goto bad;
603
break;
604
#endif
605
#ifdef CONFIG_ARCH_OMAP2PLUS
606
case METHOD_GPIO_24XX:
607
case METHOD_GPIO_44XX:
608
set_24xx_gpio_triggering(bank, gpio, trigger);
609
return 0;
610
#endif
611
default:
612
goto bad;
613
}
614
__raw_writel(l, reg);
615
return 0;
616
bad:
617
return -EINVAL;
618
}
619
620
static int gpio_irq_type(struct irq_data *d, unsigned type)
621
{
622
struct gpio_bank *bank;
623
unsigned gpio;
624
int retval;
625
unsigned long flags;
626
627
if (!cpu_class_is_omap2() && d->irq > IH_MPUIO_BASE)
628
gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
629
else
630
gpio = d->irq - IH_GPIO_BASE;
631
632
if (check_gpio(gpio) < 0)
633
return -EINVAL;
634
635
if (type & ~IRQ_TYPE_SENSE_MASK)
636
return -EINVAL;
637
638
/* OMAP1 allows only only edge triggering */
639
if (!cpu_class_is_omap2()
640
&& (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH)))
641
return -EINVAL;
642
643
bank = irq_data_get_irq_chip_data(d);
644
spin_lock_irqsave(&bank->lock, flags);
645
retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type);
646
spin_unlock_irqrestore(&bank->lock, flags);
647
648
if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
649
__irq_set_handler_locked(d->irq, handle_level_irq);
650
else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
651
__irq_set_handler_locked(d->irq, handle_edge_irq);
652
653
return retval;
654
}
655
656
static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
657
{
658
void __iomem *reg = bank->base;
659
660
switch (bank->method) {
661
#ifdef CONFIG_ARCH_OMAP1
662
case METHOD_MPUIO:
663
/* MPUIO irqstatus is reset by reading the status register,
664
* so do nothing here */
665
return;
666
#endif
667
#ifdef CONFIG_ARCH_OMAP15XX
668
case METHOD_GPIO_1510:
669
reg += OMAP1510_GPIO_INT_STATUS;
670
break;
671
#endif
672
#ifdef CONFIG_ARCH_OMAP16XX
673
case METHOD_GPIO_1610:
674
reg += OMAP1610_GPIO_IRQSTATUS1;
675
break;
676
#endif
677
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
678
case METHOD_GPIO_7XX:
679
reg += OMAP7XX_GPIO_INT_STATUS;
680
break;
681
#endif
682
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
683
case METHOD_GPIO_24XX:
684
reg += OMAP24XX_GPIO_IRQSTATUS1;
685
break;
686
#endif
687
#if defined(CONFIG_ARCH_OMAP4)
688
case METHOD_GPIO_44XX:
689
reg += OMAP4_GPIO_IRQSTATUS0;
690
break;
691
#endif
692
default:
693
WARN_ON(1);
694
return;
695
}
696
__raw_writel(gpio_mask, reg);
697
698
/* Workaround for clearing DSP GPIO interrupts to allow retention */
699
if (cpu_is_omap24xx() || cpu_is_omap34xx())
700
reg = bank->base + OMAP24XX_GPIO_IRQSTATUS2;
701
else if (cpu_is_omap44xx())
702
reg = bank->base + OMAP4_GPIO_IRQSTATUS1;
703
704
if (cpu_is_omap24xx() || cpu_is_omap34xx() || cpu_is_omap44xx()) {
705
__raw_writel(gpio_mask, reg);
706
707
/* Flush posted write for the irq status to avoid spurious interrupts */
708
__raw_readl(reg);
709
}
710
}
711
712
static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
713
{
714
_clear_gpio_irqbank(bank, 1 << get_gpio_index(gpio));
715
}
716
717
static u32 _get_gpio_irqbank_mask(struct gpio_bank *bank)
718
{
719
void __iomem *reg = bank->base;
720
int inv = 0;
721
u32 l;
722
u32 mask;
723
724
switch (bank->method) {
725
#ifdef CONFIG_ARCH_OMAP1
726
case METHOD_MPUIO:
727
reg += OMAP_MPUIO_GPIO_MASKIT / bank->stride;
728
mask = 0xffff;
729
inv = 1;
730
break;
731
#endif
732
#ifdef CONFIG_ARCH_OMAP15XX
733
case METHOD_GPIO_1510:
734
reg += OMAP1510_GPIO_INT_MASK;
735
mask = 0xffff;
736
inv = 1;
737
break;
738
#endif
739
#ifdef CONFIG_ARCH_OMAP16XX
740
case METHOD_GPIO_1610:
741
reg += OMAP1610_GPIO_IRQENABLE1;
742
mask = 0xffff;
743
break;
744
#endif
745
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
746
case METHOD_GPIO_7XX:
747
reg += OMAP7XX_GPIO_INT_MASK;
748
mask = 0xffffffff;
749
inv = 1;
750
break;
751
#endif
752
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
753
case METHOD_GPIO_24XX:
754
reg += OMAP24XX_GPIO_IRQENABLE1;
755
mask = 0xffffffff;
756
break;
757
#endif
758
#if defined(CONFIG_ARCH_OMAP4)
759
case METHOD_GPIO_44XX:
760
reg += OMAP4_GPIO_IRQSTATUSSET0;
761
mask = 0xffffffff;
762
break;
763
#endif
764
default:
765
WARN_ON(1);
766
return 0;
767
}
768
769
l = __raw_readl(reg);
770
if (inv)
771
l = ~l;
772
l &= mask;
773
return l;
774
}
775
776
static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask, int enable)
777
{
778
void __iomem *reg = bank->base;
779
u32 l;
780
781
switch (bank->method) {
782
#ifdef CONFIG_ARCH_OMAP1
783
case METHOD_MPUIO:
784
reg += OMAP_MPUIO_GPIO_MASKIT / bank->stride;
785
l = __raw_readl(reg);
786
if (enable)
787
l &= ~(gpio_mask);
788
else
789
l |= gpio_mask;
790
break;
791
#endif
792
#ifdef CONFIG_ARCH_OMAP15XX
793
case METHOD_GPIO_1510:
794
reg += OMAP1510_GPIO_INT_MASK;
795
l = __raw_readl(reg);
796
if (enable)
797
l &= ~(gpio_mask);
798
else
799
l |= gpio_mask;
800
break;
801
#endif
802
#ifdef CONFIG_ARCH_OMAP16XX
803
case METHOD_GPIO_1610:
804
if (enable)
805
reg += OMAP1610_GPIO_SET_IRQENABLE1;
806
else
807
reg += OMAP1610_GPIO_CLEAR_IRQENABLE1;
808
l = gpio_mask;
809
break;
810
#endif
811
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
812
case METHOD_GPIO_7XX:
813
reg += OMAP7XX_GPIO_INT_MASK;
814
l = __raw_readl(reg);
815
if (enable)
816
l &= ~(gpio_mask);
817
else
818
l |= gpio_mask;
819
break;
820
#endif
821
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
822
case METHOD_GPIO_24XX:
823
if (enable)
824
reg += OMAP24XX_GPIO_SETIRQENABLE1;
825
else
826
reg += OMAP24XX_GPIO_CLEARIRQENABLE1;
827
l = gpio_mask;
828
break;
829
#endif
830
#ifdef CONFIG_ARCH_OMAP4
831
case METHOD_GPIO_44XX:
832
if (enable)
833
reg += OMAP4_GPIO_IRQSTATUSSET0;
834
else
835
reg += OMAP4_GPIO_IRQSTATUSCLR0;
836
l = gpio_mask;
837
break;
838
#endif
839
default:
840
WARN_ON(1);
841
return;
842
}
843
__raw_writel(l, reg);
844
}
845
846
static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable)
847
{
848
_enable_gpio_irqbank(bank, 1 << get_gpio_index(gpio), enable);
849
}
850
851
/*
852
* Note that ENAWAKEUP needs to be enabled in GPIO_SYSCONFIG register.
853
* 1510 does not seem to have a wake-up register. If JTAG is connected
854
* to the target, system will wake up always on GPIO events. While
855
* system is running all registered GPIO interrupts need to have wake-up
856
* enabled. When system is suspended, only selected GPIO interrupts need
857
* to have wake-up enabled.
858
*/
859
static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
860
{
861
unsigned long uninitialized_var(flags);
862
863
switch (bank->method) {
864
#ifdef CONFIG_ARCH_OMAP16XX
865
case METHOD_MPUIO:
866
case METHOD_GPIO_1610:
867
spin_lock_irqsave(&bank->lock, flags);
868
if (enable)
869
bank->suspend_wakeup |= (1 << gpio);
870
else
871
bank->suspend_wakeup &= ~(1 << gpio);
872
spin_unlock_irqrestore(&bank->lock, flags);
873
return 0;
874
#endif
875
#ifdef CONFIG_ARCH_OMAP2PLUS
876
case METHOD_GPIO_24XX:
877
case METHOD_GPIO_44XX:
878
if (bank->non_wakeup_gpios & (1 << gpio)) {
879
printk(KERN_ERR "Unable to modify wakeup on "
880
"non-wakeup GPIO%d\n",
881
(bank - gpio_bank) * 32 + gpio);
882
return -EINVAL;
883
}
884
spin_lock_irqsave(&bank->lock, flags);
885
if (enable)
886
bank->suspend_wakeup |= (1 << gpio);
887
else
888
bank->suspend_wakeup &= ~(1 << gpio);
889
spin_unlock_irqrestore(&bank->lock, flags);
890
return 0;
891
#endif
892
default:
893
printk(KERN_ERR "Can't enable GPIO wakeup for method %i\n",
894
bank->method);
895
return -EINVAL;
896
}
897
}
898
899
static void _reset_gpio(struct gpio_bank *bank, int gpio)
900
{
901
_set_gpio_direction(bank, get_gpio_index(gpio), 1);
902
_set_gpio_irqenable(bank, gpio, 0);
903
_clear_gpio_irqstatus(bank, gpio);
904
_set_gpio_triggering(bank, get_gpio_index(gpio), IRQ_TYPE_NONE);
905
}
906
907
/* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
908
static int gpio_wake_enable(struct irq_data *d, unsigned int enable)
909
{
910
unsigned int gpio = d->irq - IH_GPIO_BASE;
911
struct gpio_bank *bank;
912
int retval;
913
914
if (check_gpio(gpio) < 0)
915
return -ENODEV;
916
bank = irq_data_get_irq_chip_data(d);
917
retval = _set_gpio_wakeup(bank, get_gpio_index(gpio), enable);
918
919
return retval;
920
}
921
922
static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
923
{
924
struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
925
unsigned long flags;
926
927
spin_lock_irqsave(&bank->lock, flags);
928
929
/* Set trigger to none. You need to enable the desired trigger with
930
* request_irq() or set_irq_type().
931
*/
932
_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
933
934
#ifdef CONFIG_ARCH_OMAP15XX
935
if (bank->method == METHOD_GPIO_1510) {
936
void __iomem *reg;
937
938
/* Claim the pin for MPU */
939
reg = bank->base + OMAP1510_GPIO_PIN_CONTROL;
940
__raw_writel(__raw_readl(reg) | (1 << offset), reg);
941
}
942
#endif
943
if (!cpu_class_is_omap1()) {
944
if (!bank->mod_usage) {
945
void __iomem *reg = bank->base;
946
u32 ctrl;
947
948
if (cpu_is_omap24xx() || cpu_is_omap34xx())
949
reg += OMAP24XX_GPIO_CTRL;
950
else if (cpu_is_omap44xx())
951
reg += OMAP4_GPIO_CTRL;
952
ctrl = __raw_readl(reg);
953
/* Module is enabled, clocks are not gated */
954
ctrl &= 0xFFFFFFFE;
955
__raw_writel(ctrl, reg);
956
}
957
bank->mod_usage |= 1 << offset;
958
}
959
spin_unlock_irqrestore(&bank->lock, flags);
960
961
return 0;
962
}
963
964
static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
965
{
966
struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
967
unsigned long flags;
968
969
spin_lock_irqsave(&bank->lock, flags);
970
#ifdef CONFIG_ARCH_OMAP16XX
971
if (bank->method == METHOD_GPIO_1610) {
972
/* Disable wake-up during idle for dynamic tick */
973
void __iomem *reg = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
974
__raw_writel(1 << offset, reg);
975
}
976
#endif
977
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
978
if (bank->method == METHOD_GPIO_24XX) {
979
/* Disable wake-up during idle for dynamic tick */
980
void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
981
__raw_writel(1 << offset, reg);
982
}
983
#endif
984
#ifdef CONFIG_ARCH_OMAP4
985
if (bank->method == METHOD_GPIO_44XX) {
986
/* Disable wake-up during idle for dynamic tick */
987
void __iomem *reg = bank->base + OMAP4_GPIO_IRQWAKEN0;
988
__raw_writel(1 << offset, reg);
989
}
990
#endif
991
if (!cpu_class_is_omap1()) {
992
bank->mod_usage &= ~(1 << offset);
993
if (!bank->mod_usage) {
994
void __iomem *reg = bank->base;
995
u32 ctrl;
996
997
if (cpu_is_omap24xx() || cpu_is_omap34xx())
998
reg += OMAP24XX_GPIO_CTRL;
999
else if (cpu_is_omap44xx())
1000
reg += OMAP4_GPIO_CTRL;
1001
ctrl = __raw_readl(reg);
1002
/* Module is disabled, clocks are gated */
1003
ctrl |= 1;
1004
__raw_writel(ctrl, reg);
1005
}
1006
}
1007
_reset_gpio(bank, bank->chip.base + offset);
1008
spin_unlock_irqrestore(&bank->lock, flags);
1009
}
1010
1011
/*
1012
* We need to unmask the GPIO bank interrupt as soon as possible to
1013
* avoid missing GPIO interrupts for other lines in the bank.
1014
* Then we need to mask-read-clear-unmask the triggered GPIO lines
1015
* in the bank to avoid missing nested interrupts for a GPIO line.
1016
* If we wait to unmask individual GPIO lines in the bank after the
1017
* line's interrupt handler has been run, we may miss some nested
1018
* interrupts.
1019
*/
1020
static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
1021
{
1022
void __iomem *isr_reg = NULL;
1023
u32 isr;
1024
unsigned int gpio_irq, gpio_index;
1025
struct gpio_bank *bank;
1026
u32 retrigger = 0;
1027
int unmasked = 0;
1028
struct irq_chip *chip = irq_desc_get_chip(desc);
1029
1030
chained_irq_enter(chip, desc);
1031
1032
bank = irq_get_handler_data(irq);
1033
#ifdef CONFIG_ARCH_OMAP1
1034
if (bank->method == METHOD_MPUIO)
1035
isr_reg = bank->base +
1036
OMAP_MPUIO_GPIO_INT / bank->stride;
1037
#endif
1038
#ifdef CONFIG_ARCH_OMAP15XX
1039
if (bank->method == METHOD_GPIO_1510)
1040
isr_reg = bank->base + OMAP1510_GPIO_INT_STATUS;
1041
#endif
1042
#if defined(CONFIG_ARCH_OMAP16XX)
1043
if (bank->method == METHOD_GPIO_1610)
1044
isr_reg = bank->base + OMAP1610_GPIO_IRQSTATUS1;
1045
#endif
1046
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
1047
if (bank->method == METHOD_GPIO_7XX)
1048
isr_reg = bank->base + OMAP7XX_GPIO_INT_STATUS;
1049
#endif
1050
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
1051
if (bank->method == METHOD_GPIO_24XX)
1052
isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
1053
#endif
1054
#if defined(CONFIG_ARCH_OMAP4)
1055
if (bank->method == METHOD_GPIO_44XX)
1056
isr_reg = bank->base + OMAP4_GPIO_IRQSTATUS0;
1057
#endif
1058
1059
if (WARN_ON(!isr_reg))
1060
goto exit;
1061
1062
while(1) {
1063
u32 isr_saved, level_mask = 0;
1064
u32 enabled;
1065
1066
enabled = _get_gpio_irqbank_mask(bank);
1067
isr_saved = isr = __raw_readl(isr_reg) & enabled;
1068
1069
if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
1070
isr &= 0x0000ffff;
1071
1072
if (cpu_class_is_omap2()) {
1073
level_mask = bank->level_mask & enabled;
1074
}
1075
1076
/* clear edge sensitive interrupts before handler(s) are
1077
called so that we don't miss any interrupt occurred while
1078
executing them */
1079
_enable_gpio_irqbank(bank, isr_saved & ~level_mask, 0);
1080
_clear_gpio_irqbank(bank, isr_saved & ~level_mask);
1081
_enable_gpio_irqbank(bank, isr_saved & ~level_mask, 1);
1082
1083
/* if there is only edge sensitive GPIO pin interrupts
1084
configured, we could unmask GPIO bank interrupt immediately */
1085
if (!level_mask && !unmasked) {
1086
unmasked = 1;
1087
chained_irq_exit(chip, desc);
1088
}
1089
1090
isr |= retrigger;
1091
retrigger = 0;
1092
if (!isr)
1093
break;
1094
1095
gpio_irq = bank->virtual_irq_start;
1096
for (; isr != 0; isr >>= 1, gpio_irq++) {
1097
gpio_index = get_gpio_index(irq_to_gpio(gpio_irq));
1098
1099
if (!(isr & 1))
1100
continue;
1101
1102
#ifdef CONFIG_ARCH_OMAP1
1103
/*
1104
* Some chips can't respond to both rising and falling
1105
* at the same time. If this irq was requested with
1106
* both flags, we need to flip the ICR data for the IRQ
1107
* to respond to the IRQ for the opposite direction.
1108
* This will be indicated in the bank toggle_mask.
1109
*/
1110
if (bank->toggle_mask & (1 << gpio_index))
1111
_toggle_gpio_edge_triggering(bank, gpio_index);
1112
#endif
1113
1114
generic_handle_irq(gpio_irq);
1115
}
1116
}
1117
/* if bank has any level sensitive GPIO pin interrupt
1118
configured, we must unmask the bank interrupt only after
1119
handler(s) are executed in order to avoid spurious bank
1120
interrupt */
1121
exit:
1122
if (!unmasked)
1123
chained_irq_exit(chip, desc);
1124
}
1125
1126
static void gpio_irq_shutdown(struct irq_data *d)
1127
{
1128
unsigned int gpio = d->irq - IH_GPIO_BASE;
1129
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1130
unsigned long flags;
1131
1132
spin_lock_irqsave(&bank->lock, flags);
1133
_reset_gpio(bank, gpio);
1134
spin_unlock_irqrestore(&bank->lock, flags);
1135
}
1136
1137
static void gpio_ack_irq(struct irq_data *d)
1138
{
1139
unsigned int gpio = d->irq - IH_GPIO_BASE;
1140
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1141
1142
_clear_gpio_irqstatus(bank, gpio);
1143
}
1144
1145
static void gpio_mask_irq(struct irq_data *d)
1146
{
1147
unsigned int gpio = d->irq - IH_GPIO_BASE;
1148
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1149
unsigned long flags;
1150
1151
spin_lock_irqsave(&bank->lock, flags);
1152
_set_gpio_irqenable(bank, gpio, 0);
1153
_set_gpio_triggering(bank, get_gpio_index(gpio), IRQ_TYPE_NONE);
1154
spin_unlock_irqrestore(&bank->lock, flags);
1155
}
1156
1157
static void gpio_unmask_irq(struct irq_data *d)
1158
{
1159
unsigned int gpio = d->irq - IH_GPIO_BASE;
1160
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1161
unsigned int irq_mask = 1 << get_gpio_index(gpio);
1162
u32 trigger = irqd_get_trigger_type(d);
1163
unsigned long flags;
1164
1165
spin_lock_irqsave(&bank->lock, flags);
1166
if (trigger)
1167
_set_gpio_triggering(bank, get_gpio_index(gpio), trigger);
1168
1169
/* For level-triggered GPIOs, the clearing must be done after
1170
* the HW source is cleared, thus after the handler has run */
1171
if (bank->level_mask & irq_mask) {
1172
_set_gpio_irqenable(bank, gpio, 0);
1173
_clear_gpio_irqstatus(bank, gpio);
1174
}
1175
1176
_set_gpio_irqenable(bank, gpio, 1);
1177
spin_unlock_irqrestore(&bank->lock, flags);
1178
}
1179
1180
static struct irq_chip gpio_irq_chip = {
1181
.name = "GPIO",
1182
.irq_shutdown = gpio_irq_shutdown,
1183
.irq_ack = gpio_ack_irq,
1184
.irq_mask = gpio_mask_irq,
1185
.irq_unmask = gpio_unmask_irq,
1186
.irq_set_type = gpio_irq_type,
1187
.irq_set_wake = gpio_wake_enable,
1188
};
1189
1190
/*---------------------------------------------------------------------*/
1191
1192
#ifdef CONFIG_ARCH_OMAP1
1193
1194
/* MPUIO uses the always-on 32k clock */
1195
1196
static void mpuio_ack_irq(struct irq_data *d)
1197
{
1198
/* The ISR is reset automatically, so do nothing here. */
1199
}
1200
1201
static void mpuio_mask_irq(struct irq_data *d)
1202
{
1203
unsigned int gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
1204
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1205
1206
_set_gpio_irqenable(bank, gpio, 0);
1207
}
1208
1209
static void mpuio_unmask_irq(struct irq_data *d)
1210
{
1211
unsigned int gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
1212
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
1213
1214
_set_gpio_irqenable(bank, gpio, 1);
1215
}
1216
1217
static struct irq_chip mpuio_irq_chip = {
1218
.name = "MPUIO",
1219
.irq_ack = mpuio_ack_irq,
1220
.irq_mask = mpuio_mask_irq,
1221
.irq_unmask = mpuio_unmask_irq,
1222
.irq_set_type = gpio_irq_type,
1223
#ifdef CONFIG_ARCH_OMAP16XX
1224
/* REVISIT: assuming only 16xx supports MPUIO wake events */
1225
.irq_set_wake = gpio_wake_enable,
1226
#endif
1227
};
1228
1229
1230
#define bank_is_mpuio(bank) ((bank)->method == METHOD_MPUIO)
1231
1232
1233
#ifdef CONFIG_ARCH_OMAP16XX
1234
1235
#include <linux/platform_device.h>
1236
1237
static int omap_mpuio_suspend_noirq(struct device *dev)
1238
{
1239
struct platform_device *pdev = to_platform_device(dev);
1240
struct gpio_bank *bank = platform_get_drvdata(pdev);
1241
void __iomem *mask_reg = bank->base +
1242
OMAP_MPUIO_GPIO_MASKIT / bank->stride;
1243
unsigned long flags;
1244
1245
spin_lock_irqsave(&bank->lock, flags);
1246
bank->saved_wakeup = __raw_readl(mask_reg);
1247
__raw_writel(0xffff & ~bank->suspend_wakeup, mask_reg);
1248
spin_unlock_irqrestore(&bank->lock, flags);
1249
1250
return 0;
1251
}
1252
1253
static int omap_mpuio_resume_noirq(struct device *dev)
1254
{
1255
struct platform_device *pdev = to_platform_device(dev);
1256
struct gpio_bank *bank = platform_get_drvdata(pdev);
1257
void __iomem *mask_reg = bank->base +
1258
OMAP_MPUIO_GPIO_MASKIT / bank->stride;
1259
unsigned long flags;
1260
1261
spin_lock_irqsave(&bank->lock, flags);
1262
__raw_writel(bank->saved_wakeup, mask_reg);
1263
spin_unlock_irqrestore(&bank->lock, flags);
1264
1265
return 0;
1266
}
1267
1268
static const struct dev_pm_ops omap_mpuio_dev_pm_ops = {
1269
.suspend_noirq = omap_mpuio_suspend_noirq,
1270
.resume_noirq = omap_mpuio_resume_noirq,
1271
};
1272
1273
/* use platform_driver for this. */
1274
static struct platform_driver omap_mpuio_driver = {
1275
.driver = {
1276
.name = "mpuio",
1277
.pm = &omap_mpuio_dev_pm_ops,
1278
},
1279
};
1280
1281
static struct platform_device omap_mpuio_device = {
1282
.name = "mpuio",
1283
.id = -1,
1284
.dev = {
1285
.driver = &omap_mpuio_driver.driver,
1286
}
1287
/* could list the /proc/iomem resources */
1288
};
1289
1290
static inline void mpuio_init(void)
1291
{
1292
struct gpio_bank *bank = get_gpio_bank(OMAP_MPUIO(0));
1293
platform_set_drvdata(&omap_mpuio_device, bank);
1294
1295
if (platform_driver_register(&omap_mpuio_driver) == 0)
1296
(void) platform_device_register(&omap_mpuio_device);
1297
}
1298
1299
#else
1300
static inline void mpuio_init(void) {}
1301
#endif /* 16xx */
1302
1303
#else
1304
1305
extern struct irq_chip mpuio_irq_chip;
1306
1307
#define bank_is_mpuio(bank) 0
1308
static inline void mpuio_init(void) {}
1309
1310
#endif
1311
1312
/*---------------------------------------------------------------------*/
1313
1314
/* REVISIT these are stupid implementations! replace by ones that
1315
* don't switch on METHOD_* and which mostly avoid spinlocks
1316
*/
1317
1318
static int gpio_input(struct gpio_chip *chip, unsigned offset)
1319
{
1320
struct gpio_bank *bank;
1321
unsigned long flags;
1322
1323
bank = container_of(chip, struct gpio_bank, chip);
1324
spin_lock_irqsave(&bank->lock, flags);
1325
_set_gpio_direction(bank, offset, 1);
1326
spin_unlock_irqrestore(&bank->lock, flags);
1327
return 0;
1328
}
1329
1330
static int gpio_is_input(struct gpio_bank *bank, int mask)
1331
{
1332
void __iomem *reg = bank->base;
1333
1334
switch (bank->method) {
1335
case METHOD_MPUIO:
1336
reg += OMAP_MPUIO_IO_CNTL / bank->stride;
1337
break;
1338
case METHOD_GPIO_1510:
1339
reg += OMAP1510_GPIO_DIR_CONTROL;
1340
break;
1341
case METHOD_GPIO_1610:
1342
reg += OMAP1610_GPIO_DIRECTION;
1343
break;
1344
case METHOD_GPIO_7XX:
1345
reg += OMAP7XX_GPIO_DIR_CONTROL;
1346
break;
1347
case METHOD_GPIO_24XX:
1348
reg += OMAP24XX_GPIO_OE;
1349
break;
1350
case METHOD_GPIO_44XX:
1351
reg += OMAP4_GPIO_OE;
1352
break;
1353
default:
1354
WARN_ONCE(1, "gpio_is_input: incorrect OMAP GPIO method");
1355
return -EINVAL;
1356
}
1357
return __raw_readl(reg) & mask;
1358
}
1359
1360
static int gpio_get(struct gpio_chip *chip, unsigned offset)
1361
{
1362
struct gpio_bank *bank;
1363
void __iomem *reg;
1364
int gpio;
1365
u32 mask;
1366
1367
gpio = chip->base + offset;
1368
bank = get_gpio_bank(gpio);
1369
reg = bank->base;
1370
mask = 1 << get_gpio_index(gpio);
1371
1372
if (gpio_is_input(bank, mask))
1373
return _get_gpio_datain(bank, gpio);
1374
else
1375
return _get_gpio_dataout(bank, gpio);
1376
}
1377
1378
static int gpio_output(struct gpio_chip *chip, unsigned offset, int value)
1379
{
1380
struct gpio_bank *bank;
1381
unsigned long flags;
1382
1383
bank = container_of(chip, struct gpio_bank, chip);
1384
spin_lock_irqsave(&bank->lock, flags);
1385
_set_gpio_dataout(bank, offset, value);
1386
_set_gpio_direction(bank, offset, 0);
1387
spin_unlock_irqrestore(&bank->lock, flags);
1388
return 0;
1389
}
1390
1391
static int gpio_debounce(struct gpio_chip *chip, unsigned offset,
1392
unsigned debounce)
1393
{
1394
struct gpio_bank *bank;
1395
unsigned long flags;
1396
1397
bank = container_of(chip, struct gpio_bank, chip);
1398
1399
if (!bank->dbck) {
1400
bank->dbck = clk_get(bank->dev, "dbclk");
1401
if (IS_ERR(bank->dbck))
1402
dev_err(bank->dev, "Could not get gpio dbck\n");
1403
}
1404
1405
spin_lock_irqsave(&bank->lock, flags);
1406
_set_gpio_debounce(bank, offset, debounce);
1407
spin_unlock_irqrestore(&bank->lock, flags);
1408
1409
return 0;
1410
}
1411
1412
static void gpio_set(struct gpio_chip *chip, unsigned offset, int value)
1413
{
1414
struct gpio_bank *bank;
1415
unsigned long flags;
1416
1417
bank = container_of(chip, struct gpio_bank, chip);
1418
spin_lock_irqsave(&bank->lock, flags);
1419
_set_gpio_dataout(bank, offset, value);
1420
spin_unlock_irqrestore(&bank->lock, flags);
1421
}
1422
1423
static int gpio_2irq(struct gpio_chip *chip, unsigned offset)
1424
{
1425
struct gpio_bank *bank;
1426
1427
bank = container_of(chip, struct gpio_bank, chip);
1428
return bank->virtual_irq_start + offset;
1429
}
1430
1431
/*---------------------------------------------------------------------*/
1432
1433
static void __init omap_gpio_show_rev(struct gpio_bank *bank)
1434
{
1435
u32 rev;
1436
1437
if (cpu_is_omap16xx() && !(bank->method != METHOD_MPUIO))
1438
rev = __raw_readw(bank->base + OMAP1610_GPIO_REVISION);
1439
else if (cpu_is_omap24xx() || cpu_is_omap34xx())
1440
rev = __raw_readl(bank->base + OMAP24XX_GPIO_REVISION);
1441
else if (cpu_is_omap44xx())
1442
rev = __raw_readl(bank->base + OMAP4_GPIO_REVISION);
1443
else
1444
return;
1445
1446
printk(KERN_INFO "OMAP GPIO hardware version %d.%d\n",
1447
(rev >> 4) & 0x0f, rev & 0x0f);
1448
}
1449
1450
/* This lock class tells lockdep that GPIO irqs are in a different
1451
* category than their parents, so it won't report false recursion.
1452
*/
1453
static struct lock_class_key gpio_lock_class;
1454
1455
static inline int init_gpio_info(struct platform_device *pdev)
1456
{
1457
/* TODO: Analyze removing gpio_bank_count usage from driver code */
1458
gpio_bank = kzalloc(gpio_bank_count * sizeof(struct gpio_bank),
1459
GFP_KERNEL);
1460
if (!gpio_bank) {
1461
dev_err(&pdev->dev, "Memory alloc failed for gpio_bank\n");
1462
return -ENOMEM;
1463
}
1464
return 0;
1465
}
1466
1467
/* TODO: Cleanup cpu_is_* checks */
1468
static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
1469
{
1470
if (cpu_class_is_omap2()) {
1471
if (cpu_is_omap44xx()) {
1472
__raw_writel(0xffffffff, bank->base +
1473
OMAP4_GPIO_IRQSTATUSCLR0);
1474
__raw_writel(0x00000000, bank->base +
1475
OMAP4_GPIO_DEBOUNCENABLE);
1476
/* Initialize interface clk ungated, module enabled */
1477
__raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
1478
} else if (cpu_is_omap34xx()) {
1479
__raw_writel(0x00000000, bank->base +
1480
OMAP24XX_GPIO_IRQENABLE1);
1481
__raw_writel(0xffffffff, bank->base +
1482
OMAP24XX_GPIO_IRQSTATUS1);
1483
__raw_writel(0x00000000, bank->base +
1484
OMAP24XX_GPIO_DEBOUNCE_EN);
1485
1486
/* Initialize interface clk ungated, module enabled */
1487
__raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
1488
} else if (cpu_is_omap24xx()) {
1489
static const u32 non_wakeup_gpios[] = {
1490
0xe203ffc0, 0x08700040
1491
};
1492
if (id < ARRAY_SIZE(non_wakeup_gpios))
1493
bank->non_wakeup_gpios = non_wakeup_gpios[id];
1494
}
1495
} else if (cpu_class_is_omap1()) {
1496
if (bank_is_mpuio(bank))
1497
__raw_writew(0xffff, bank->base +
1498
OMAP_MPUIO_GPIO_MASKIT / bank->stride);
1499
if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
1500
__raw_writew(0xffff, bank->base
1501
+ OMAP1510_GPIO_INT_MASK);
1502
__raw_writew(0x0000, bank->base
1503
+ OMAP1510_GPIO_INT_STATUS);
1504
}
1505
if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
1506
__raw_writew(0x0000, bank->base
1507
+ OMAP1610_GPIO_IRQENABLE1);
1508
__raw_writew(0xffff, bank->base
1509
+ OMAP1610_GPIO_IRQSTATUS1);
1510
__raw_writew(0x0014, bank->base
1511
+ OMAP1610_GPIO_SYSCONFIG);
1512
1513
/*
1514
* Enable system clock for GPIO module.
1515
* The CAM_CLK_CTRL *is* really the right place.
1516
*/
1517
omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
1518
ULPD_CAM_CLK_CTRL);
1519
}
1520
if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
1521
__raw_writel(0xffffffff, bank->base
1522
+ OMAP7XX_GPIO_INT_MASK);
1523
__raw_writel(0x00000000, bank->base
1524
+ OMAP7XX_GPIO_INT_STATUS);
1525
}
1526
}
1527
}
1528
1529
static void __devinit omap_gpio_chip_init(struct gpio_bank *bank)
1530
{
1531
int j;
1532
static int gpio;
1533
1534
bank->mod_usage = 0;
1535
/*
1536
* REVISIT eventually switch from OMAP-specific gpio structs
1537
* over to the generic ones
1538
*/
1539
bank->chip.request = omap_gpio_request;
1540
bank->chip.free = omap_gpio_free;
1541
bank->chip.direction_input = gpio_input;
1542
bank->chip.get = gpio_get;
1543
bank->chip.direction_output = gpio_output;
1544
bank->chip.set_debounce = gpio_debounce;
1545
bank->chip.set = gpio_set;
1546
bank->chip.to_irq = gpio_2irq;
1547
if (bank_is_mpuio(bank)) {
1548
bank->chip.label = "mpuio";
1549
#ifdef CONFIG_ARCH_OMAP16XX
1550
bank->chip.dev = &omap_mpuio_device.dev;
1551
#endif
1552
bank->chip.base = OMAP_MPUIO(0);
1553
} else {
1554
bank->chip.label = "gpio";
1555
bank->chip.base = gpio;
1556
gpio += bank_width;
1557
}
1558
bank->chip.ngpio = bank_width;
1559
1560
gpiochip_add(&bank->chip);
1561
1562
for (j = bank->virtual_irq_start;
1563
j < bank->virtual_irq_start + bank_width; j++) {
1564
irq_set_lockdep_class(j, &gpio_lock_class);
1565
irq_set_chip_data(j, bank);
1566
if (bank_is_mpuio(bank))
1567
irq_set_chip(j, &mpuio_irq_chip);
1568
else
1569
irq_set_chip(j, &gpio_irq_chip);
1570
irq_set_handler(j, handle_simple_irq);
1571
set_irq_flags(j, IRQF_VALID);
1572
}
1573
irq_set_chained_handler(bank->irq, gpio_irq_handler);
1574
irq_set_handler_data(bank->irq, bank);
1575
}
1576
1577
static int __devinit omap_gpio_probe(struct platform_device *pdev)
1578
{
1579
static int gpio_init_done;
1580
struct omap_gpio_platform_data *pdata;
1581
struct resource *res;
1582
int id;
1583
struct gpio_bank *bank;
1584
1585
if (!pdev->dev.platform_data)
1586
return -EINVAL;
1587
1588
pdata = pdev->dev.platform_data;
1589
1590
if (!gpio_init_done) {
1591
int ret;
1592
1593
ret = init_gpio_info(pdev);
1594
if (ret)
1595
return ret;
1596
}
1597
1598
id = pdev->id;
1599
bank = &gpio_bank[id];
1600
1601
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1602
if (unlikely(!res)) {
1603
dev_err(&pdev->dev, "GPIO Bank %i Invalid IRQ resource\n", id);
1604
return -ENODEV;
1605
}
1606
1607
bank->irq = res->start;
1608
bank->virtual_irq_start = pdata->virtual_irq_start;
1609
bank->method = pdata->bank_type;
1610
bank->dev = &pdev->dev;
1611
bank->dbck_flag = pdata->dbck_flag;
1612
bank->stride = pdata->bank_stride;
1613
bank_width = pdata->bank_width;
1614
1615
spin_lock_init(&bank->lock);
1616
1617
/* Static mapping, never released */
1618
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1619
if (unlikely(!res)) {
1620
dev_err(&pdev->dev, "GPIO Bank %i Invalid mem resource\n", id);
1621
return -ENODEV;
1622
}
1623
1624
bank->base = ioremap(res->start, resource_size(res));
1625
if (!bank->base) {
1626
dev_err(&pdev->dev, "Could not ioremap gpio bank%i\n", id);
1627
return -ENOMEM;
1628
}
1629
1630
pm_runtime_enable(bank->dev);
1631
pm_runtime_get_sync(bank->dev);
1632
1633
omap_gpio_mod_init(bank, id);
1634
omap_gpio_chip_init(bank);
1635
omap_gpio_show_rev(bank);
1636
1637
if (!gpio_init_done)
1638
gpio_init_done = 1;
1639
1640
return 0;
1641
}
1642
1643
#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
1644
static int omap_gpio_suspend(void)
1645
{
1646
int i;
1647
1648
if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
1649
return 0;
1650
1651
for (i = 0; i < gpio_bank_count; i++) {
1652
struct gpio_bank *bank = &gpio_bank[i];
1653
void __iomem *wake_status;
1654
void __iomem *wake_clear;
1655
void __iomem *wake_set;
1656
unsigned long flags;
1657
1658
switch (bank->method) {
1659
#ifdef CONFIG_ARCH_OMAP16XX
1660
case METHOD_GPIO_1610:
1661
wake_status = bank->base + OMAP1610_GPIO_WAKEUPENABLE;
1662
wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
1663
wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
1664
break;
1665
#endif
1666
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
1667
case METHOD_GPIO_24XX:
1668
wake_status = bank->base + OMAP24XX_GPIO_WAKE_EN;
1669
wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
1670
wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
1671
break;
1672
#endif
1673
#ifdef CONFIG_ARCH_OMAP4
1674
case METHOD_GPIO_44XX:
1675
wake_status = bank->base + OMAP4_GPIO_IRQWAKEN0;
1676
wake_clear = bank->base + OMAP4_GPIO_IRQWAKEN0;
1677
wake_set = bank->base + OMAP4_GPIO_IRQWAKEN0;
1678
break;
1679
#endif
1680
default:
1681
continue;
1682
}
1683
1684
spin_lock_irqsave(&bank->lock, flags);
1685
bank->saved_wakeup = __raw_readl(wake_status);
1686
__raw_writel(0xffffffff, wake_clear);
1687
__raw_writel(bank->suspend_wakeup, wake_set);
1688
spin_unlock_irqrestore(&bank->lock, flags);
1689
}
1690
1691
return 0;
1692
}
1693
1694
static void omap_gpio_resume(void)
1695
{
1696
int i;
1697
1698
if (!cpu_class_is_omap2() && !cpu_is_omap16xx())
1699
return;
1700
1701
for (i = 0; i < gpio_bank_count; i++) {
1702
struct gpio_bank *bank = &gpio_bank[i];
1703
void __iomem *wake_clear;
1704
void __iomem *wake_set;
1705
unsigned long flags;
1706
1707
switch (bank->method) {
1708
#ifdef CONFIG_ARCH_OMAP16XX
1709
case METHOD_GPIO_1610:
1710
wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
1711
wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
1712
break;
1713
#endif
1714
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
1715
case METHOD_GPIO_24XX:
1716
wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
1717
wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
1718
break;
1719
#endif
1720
#ifdef CONFIG_ARCH_OMAP4
1721
case METHOD_GPIO_44XX:
1722
wake_clear = bank->base + OMAP4_GPIO_IRQWAKEN0;
1723
wake_set = bank->base + OMAP4_GPIO_IRQWAKEN0;
1724
break;
1725
#endif
1726
default:
1727
continue;
1728
}
1729
1730
spin_lock_irqsave(&bank->lock, flags);
1731
__raw_writel(0xffffffff, wake_clear);
1732
__raw_writel(bank->saved_wakeup, wake_set);
1733
spin_unlock_irqrestore(&bank->lock, flags);
1734
}
1735
}
1736
1737
static struct syscore_ops omap_gpio_syscore_ops = {
1738
.suspend = omap_gpio_suspend,
1739
.resume = omap_gpio_resume,
1740
};
1741
1742
#endif
1743
1744
#ifdef CONFIG_ARCH_OMAP2PLUS
1745
1746
static int workaround_enabled;
1747
1748
void omap2_gpio_prepare_for_idle(int off_mode)
1749
{
1750
int i, c = 0;
1751
int min = 0;
1752
1753
if (cpu_is_omap34xx())
1754
min = 1;
1755
1756
for (i = min; i < gpio_bank_count; i++) {
1757
struct gpio_bank *bank = &gpio_bank[i];
1758
u32 l1 = 0, l2 = 0;
1759
int j;
1760
1761
for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
1762
clk_disable(bank->dbck);
1763
1764
if (!off_mode)
1765
continue;
1766
1767
/* If going to OFF, remove triggering for all
1768
* non-wakeup GPIOs. Otherwise spurious IRQs will be
1769
* generated. See OMAP2420 Errata item 1.101. */
1770
if (!(bank->enabled_non_wakeup_gpios))
1771
continue;
1772
1773
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1774
bank->saved_datain = __raw_readl(bank->base +
1775
OMAP24XX_GPIO_DATAIN);
1776
l1 = __raw_readl(bank->base +
1777
OMAP24XX_GPIO_FALLINGDETECT);
1778
l2 = __raw_readl(bank->base +
1779
OMAP24XX_GPIO_RISINGDETECT);
1780
}
1781
1782
if (cpu_is_omap44xx()) {
1783
bank->saved_datain = __raw_readl(bank->base +
1784
OMAP4_GPIO_DATAIN);
1785
l1 = __raw_readl(bank->base +
1786
OMAP4_GPIO_FALLINGDETECT);
1787
l2 = __raw_readl(bank->base +
1788
OMAP4_GPIO_RISINGDETECT);
1789
}
1790
1791
bank->saved_fallingdetect = l1;
1792
bank->saved_risingdetect = l2;
1793
l1 &= ~bank->enabled_non_wakeup_gpios;
1794
l2 &= ~bank->enabled_non_wakeup_gpios;
1795
1796
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1797
__raw_writel(l1, bank->base +
1798
OMAP24XX_GPIO_FALLINGDETECT);
1799
__raw_writel(l2, bank->base +
1800
OMAP24XX_GPIO_RISINGDETECT);
1801
}
1802
1803
if (cpu_is_omap44xx()) {
1804
__raw_writel(l1, bank->base + OMAP4_GPIO_FALLINGDETECT);
1805
__raw_writel(l2, bank->base + OMAP4_GPIO_RISINGDETECT);
1806
}
1807
1808
c++;
1809
}
1810
if (!c) {
1811
workaround_enabled = 0;
1812
return;
1813
}
1814
workaround_enabled = 1;
1815
}
1816
1817
void omap2_gpio_resume_after_idle(void)
1818
{
1819
int i;
1820
int min = 0;
1821
1822
if (cpu_is_omap34xx())
1823
min = 1;
1824
for (i = min; i < gpio_bank_count; i++) {
1825
struct gpio_bank *bank = &gpio_bank[i];
1826
u32 l = 0, gen, gen0, gen1;
1827
int j;
1828
1829
for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
1830
clk_enable(bank->dbck);
1831
1832
if (!workaround_enabled)
1833
continue;
1834
1835
if (!(bank->enabled_non_wakeup_gpios))
1836
continue;
1837
1838
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1839
__raw_writel(bank->saved_fallingdetect,
1840
bank->base + OMAP24XX_GPIO_FALLINGDETECT);
1841
__raw_writel(bank->saved_risingdetect,
1842
bank->base + OMAP24XX_GPIO_RISINGDETECT);
1843
l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN);
1844
}
1845
1846
if (cpu_is_omap44xx()) {
1847
__raw_writel(bank->saved_fallingdetect,
1848
bank->base + OMAP4_GPIO_FALLINGDETECT);
1849
__raw_writel(bank->saved_risingdetect,
1850
bank->base + OMAP4_GPIO_RISINGDETECT);
1851
l = __raw_readl(bank->base + OMAP4_GPIO_DATAIN);
1852
}
1853
1854
/* Check if any of the non-wakeup interrupt GPIOs have changed
1855
* state. If so, generate an IRQ by software. This is
1856
* horribly racy, but it's the best we can do to work around
1857
* this silicon bug. */
1858
l ^= bank->saved_datain;
1859
l &= bank->enabled_non_wakeup_gpios;
1860
1861
/*
1862
* No need to generate IRQs for the rising edge for gpio IRQs
1863
* configured with falling edge only; and vice versa.
1864
*/
1865
gen0 = l & bank->saved_fallingdetect;
1866
gen0 &= bank->saved_datain;
1867
1868
gen1 = l & bank->saved_risingdetect;
1869
gen1 &= ~(bank->saved_datain);
1870
1871
/* FIXME: Consider GPIO IRQs with level detections properly! */
1872
gen = l & (~(bank->saved_fallingdetect) &
1873
~(bank->saved_risingdetect));
1874
/* Consider all GPIO IRQs needed to be updated */
1875
gen |= gen0 | gen1;
1876
1877
if (gen) {
1878
u32 old0, old1;
1879
1880
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1881
old0 = __raw_readl(bank->base +
1882
OMAP24XX_GPIO_LEVELDETECT0);
1883
old1 = __raw_readl(bank->base +
1884
OMAP24XX_GPIO_LEVELDETECT1);
1885
__raw_writel(old0 | gen, bank->base +
1886
OMAP24XX_GPIO_LEVELDETECT0);
1887
__raw_writel(old1 | gen, bank->base +
1888
OMAP24XX_GPIO_LEVELDETECT1);
1889
__raw_writel(old0, bank->base +
1890
OMAP24XX_GPIO_LEVELDETECT0);
1891
__raw_writel(old1, bank->base +
1892
OMAP24XX_GPIO_LEVELDETECT1);
1893
}
1894
1895
if (cpu_is_omap44xx()) {
1896
old0 = __raw_readl(bank->base +
1897
OMAP4_GPIO_LEVELDETECT0);
1898
old1 = __raw_readl(bank->base +
1899
OMAP4_GPIO_LEVELDETECT1);
1900
__raw_writel(old0 | l, bank->base +
1901
OMAP4_GPIO_LEVELDETECT0);
1902
__raw_writel(old1 | l, bank->base +
1903
OMAP4_GPIO_LEVELDETECT1);
1904
__raw_writel(old0, bank->base +
1905
OMAP4_GPIO_LEVELDETECT0);
1906
__raw_writel(old1, bank->base +
1907
OMAP4_GPIO_LEVELDETECT1);
1908
}
1909
}
1910
}
1911
1912
}
1913
1914
#endif
1915
1916
#ifdef CONFIG_ARCH_OMAP3
1917
/* save the registers of bank 2-6 */
1918
void omap_gpio_save_context(void)
1919
{
1920
int i;
1921
1922
/* saving banks from 2-6 only since GPIO1 is in WKUP */
1923
for (i = 1; i < gpio_bank_count; i++) {
1924
struct gpio_bank *bank = &gpio_bank[i];
1925
gpio_context[i].irqenable1 =
1926
__raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1);
1927
gpio_context[i].irqenable2 =
1928
__raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE2);
1929
gpio_context[i].wake_en =
1930
__raw_readl(bank->base + OMAP24XX_GPIO_WAKE_EN);
1931
gpio_context[i].ctrl =
1932
__raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
1933
gpio_context[i].oe =
1934
__raw_readl(bank->base + OMAP24XX_GPIO_OE);
1935
gpio_context[i].leveldetect0 =
1936
__raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
1937
gpio_context[i].leveldetect1 =
1938
__raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
1939
gpio_context[i].risingdetect =
1940
__raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
1941
gpio_context[i].fallingdetect =
1942
__raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
1943
gpio_context[i].dataout =
1944
__raw_readl(bank->base + OMAP24XX_GPIO_DATAOUT);
1945
}
1946
}
1947
1948
/* restore the required registers of bank 2-6 */
1949
void omap_gpio_restore_context(void)
1950
{
1951
int i;
1952
1953
for (i = 1; i < gpio_bank_count; i++) {
1954
struct gpio_bank *bank = &gpio_bank[i];
1955
__raw_writel(gpio_context[i].irqenable1,
1956
bank->base + OMAP24XX_GPIO_IRQENABLE1);
1957
__raw_writel(gpio_context[i].irqenable2,
1958
bank->base + OMAP24XX_GPIO_IRQENABLE2);
1959
__raw_writel(gpio_context[i].wake_en,
1960
bank->base + OMAP24XX_GPIO_WAKE_EN);
1961
__raw_writel(gpio_context[i].ctrl,
1962
bank->base + OMAP24XX_GPIO_CTRL);
1963
__raw_writel(gpio_context[i].oe,
1964
bank->base + OMAP24XX_GPIO_OE);
1965
__raw_writel(gpio_context[i].leveldetect0,
1966
bank->base + OMAP24XX_GPIO_LEVELDETECT0);
1967
__raw_writel(gpio_context[i].leveldetect1,
1968
bank->base + OMAP24XX_GPIO_LEVELDETECT1);
1969
__raw_writel(gpio_context[i].risingdetect,
1970
bank->base + OMAP24XX_GPIO_RISINGDETECT);
1971
__raw_writel(gpio_context[i].fallingdetect,
1972
bank->base + OMAP24XX_GPIO_FALLINGDETECT);
1973
__raw_writel(gpio_context[i].dataout,
1974
bank->base + OMAP24XX_GPIO_DATAOUT);
1975
}
1976
}
1977
#endif
1978
1979
static struct platform_driver omap_gpio_driver = {
1980
.probe = omap_gpio_probe,
1981
.driver = {
1982
.name = "omap_gpio",
1983
},
1984
};
1985
1986
/*
1987
* gpio driver register needs to be done before
1988
* machine_init functions access gpio APIs.
1989
* Hence omap_gpio_drv_reg() is a postcore_initcall.
1990
*/
1991
static int __init omap_gpio_drv_reg(void)
1992
{
1993
return platform_driver_register(&omap_gpio_driver);
1994
}
1995
postcore_initcall(omap_gpio_drv_reg);
1996
1997
static int __init omap_gpio_sysinit(void)
1998
{
1999
mpuio_init();
2000
2001
#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
2002
if (cpu_is_omap16xx() || cpu_class_is_omap2())
2003
register_syscore_ops(&omap_gpio_syscore_ops);
2004
#endif
2005
2006
return 0;
2007
}
2008
2009
arch_initcall(omap_gpio_sysinit);
2010
2011