xref: /OK3568_Linux_fs/kernel/include/linux/platform_data/gpio-omap.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * OMAP GPIO handling defines and functions
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2003-2005 Nokia Corporation
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Written by Juha Yrjölä <juha.yrjola@nokia.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __ASM_ARCH_OMAP_GPIO_H
11*4882a593Smuzhiyun #define __ASM_ARCH_OMAP_GPIO_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef __ASSEMBLER__
14*4882a593Smuzhiyun #include <linux/io.h>
15*4882a593Smuzhiyun #include <linux/platform_device.h>
16*4882a593Smuzhiyun #endif
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define OMAP1_MPUIO_BASE			0xfffb5000
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /*
21*4882a593Smuzhiyun  * These are the omap15xx/16xx offsets. The omap7xx offset are
22*4882a593Smuzhiyun  * OMAP_MPUIO_ / 2 offsets below.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun #define OMAP_MPUIO_INPUT_LATCH		0x00
25*4882a593Smuzhiyun #define OMAP_MPUIO_OUTPUT		0x04
26*4882a593Smuzhiyun #define OMAP_MPUIO_IO_CNTL		0x08
27*4882a593Smuzhiyun #define OMAP_MPUIO_KBR_LATCH		0x10
28*4882a593Smuzhiyun #define OMAP_MPUIO_KBC			0x14
29*4882a593Smuzhiyun #define OMAP_MPUIO_GPIO_EVENT_MODE	0x18
30*4882a593Smuzhiyun #define OMAP_MPUIO_GPIO_INT_EDGE	0x1c
31*4882a593Smuzhiyun #define OMAP_MPUIO_KBD_INT		0x20
32*4882a593Smuzhiyun #define OMAP_MPUIO_GPIO_INT		0x24
33*4882a593Smuzhiyun #define OMAP_MPUIO_KBD_MASKIT		0x28
34*4882a593Smuzhiyun #define OMAP_MPUIO_GPIO_MASKIT		0x2c
35*4882a593Smuzhiyun #define OMAP_MPUIO_GPIO_DEBOUNCING	0x30
36*4882a593Smuzhiyun #define OMAP_MPUIO_LATCH		0x34
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #define OMAP34XX_NR_GPIOS		6
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /*
41*4882a593Smuzhiyun  * OMAP1510 GPIO registers
42*4882a593Smuzhiyun  */
43*4882a593Smuzhiyun #define OMAP1510_GPIO_DATA_INPUT	0x00
44*4882a593Smuzhiyun #define OMAP1510_GPIO_DATA_OUTPUT	0x04
45*4882a593Smuzhiyun #define OMAP1510_GPIO_DIR_CONTROL	0x08
46*4882a593Smuzhiyun #define OMAP1510_GPIO_INT_CONTROL	0x0c
47*4882a593Smuzhiyun #define OMAP1510_GPIO_INT_MASK		0x10
48*4882a593Smuzhiyun #define OMAP1510_GPIO_INT_STATUS	0x14
49*4882a593Smuzhiyun #define OMAP1510_GPIO_PIN_CONTROL	0x18
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define OMAP1510_IH_GPIO_BASE		64
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /*
54*4882a593Smuzhiyun  * OMAP1610 specific GPIO registers
55*4882a593Smuzhiyun  */
56*4882a593Smuzhiyun #define OMAP1610_GPIO_REVISION		0x0000
57*4882a593Smuzhiyun #define OMAP1610_GPIO_SYSCONFIG		0x0010
58*4882a593Smuzhiyun #define OMAP1610_GPIO_SYSSTATUS		0x0014
59*4882a593Smuzhiyun #define OMAP1610_GPIO_IRQSTATUS1	0x0018
60*4882a593Smuzhiyun #define OMAP1610_GPIO_IRQENABLE1	0x001c
61*4882a593Smuzhiyun #define OMAP1610_GPIO_WAKEUPENABLE	0x0028
62*4882a593Smuzhiyun #define OMAP1610_GPIO_DATAIN		0x002c
63*4882a593Smuzhiyun #define OMAP1610_GPIO_DATAOUT		0x0030
64*4882a593Smuzhiyun #define OMAP1610_GPIO_DIRECTION		0x0034
65*4882a593Smuzhiyun #define OMAP1610_GPIO_EDGE_CTRL1	0x0038
66*4882a593Smuzhiyun #define OMAP1610_GPIO_EDGE_CTRL2	0x003c
67*4882a593Smuzhiyun #define OMAP1610_GPIO_CLEAR_IRQENABLE1	0x009c
68*4882a593Smuzhiyun #define OMAP1610_GPIO_CLEAR_WAKEUPENA	0x00a8
69*4882a593Smuzhiyun #define OMAP1610_GPIO_CLEAR_DATAOUT	0x00b0
70*4882a593Smuzhiyun #define OMAP1610_GPIO_SET_IRQENABLE1	0x00dc
71*4882a593Smuzhiyun #define OMAP1610_GPIO_SET_WAKEUPENA	0x00e8
72*4882a593Smuzhiyun #define OMAP1610_GPIO_SET_DATAOUT	0x00f0
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /*
75*4882a593Smuzhiyun  * OMAP7XX specific GPIO registers
76*4882a593Smuzhiyun  */
77*4882a593Smuzhiyun #define OMAP7XX_GPIO_DATA_INPUT		0x00
78*4882a593Smuzhiyun #define OMAP7XX_GPIO_DATA_OUTPUT	0x04
79*4882a593Smuzhiyun #define OMAP7XX_GPIO_DIR_CONTROL	0x08
80*4882a593Smuzhiyun #define OMAP7XX_GPIO_INT_CONTROL	0x0c
81*4882a593Smuzhiyun #define OMAP7XX_GPIO_INT_MASK		0x10
82*4882a593Smuzhiyun #define OMAP7XX_GPIO_INT_STATUS		0x14
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /*
85*4882a593Smuzhiyun  * omap2+ specific GPIO registers
86*4882a593Smuzhiyun  */
87*4882a593Smuzhiyun #define OMAP24XX_GPIO_REVISION		0x0000
88*4882a593Smuzhiyun #define OMAP24XX_GPIO_SYSCONFIG		0x0010
89*4882a593Smuzhiyun #define OMAP24XX_GPIO_IRQSTATUS1	0x0018
90*4882a593Smuzhiyun #define OMAP24XX_GPIO_IRQSTATUS2	0x0028
91*4882a593Smuzhiyun #define OMAP24XX_GPIO_IRQENABLE2	0x002c
92*4882a593Smuzhiyun #define OMAP24XX_GPIO_IRQENABLE1	0x001c
93*4882a593Smuzhiyun #define OMAP24XX_GPIO_WAKE_EN		0x0020
94*4882a593Smuzhiyun #define OMAP24XX_GPIO_CTRL		0x0030
95*4882a593Smuzhiyun #define OMAP24XX_GPIO_OE		0x0034
96*4882a593Smuzhiyun #define OMAP24XX_GPIO_DATAIN		0x0038
97*4882a593Smuzhiyun #define OMAP24XX_GPIO_DATAOUT		0x003c
98*4882a593Smuzhiyun #define OMAP24XX_GPIO_LEVELDETECT0	0x0040
99*4882a593Smuzhiyun #define OMAP24XX_GPIO_LEVELDETECT1	0x0044
100*4882a593Smuzhiyun #define OMAP24XX_GPIO_RISINGDETECT	0x0048
101*4882a593Smuzhiyun #define OMAP24XX_GPIO_FALLINGDETECT	0x004c
102*4882a593Smuzhiyun #define OMAP24XX_GPIO_DEBOUNCE_EN	0x0050
103*4882a593Smuzhiyun #define OMAP24XX_GPIO_DEBOUNCE_VAL	0x0054
104*4882a593Smuzhiyun #define OMAP24XX_GPIO_CLEARIRQENABLE1	0x0060
105*4882a593Smuzhiyun #define OMAP24XX_GPIO_SETIRQENABLE1	0x0064
106*4882a593Smuzhiyun #define OMAP24XX_GPIO_CLEARWKUENA	0x0080
107*4882a593Smuzhiyun #define OMAP24XX_GPIO_SETWKUENA		0x0084
108*4882a593Smuzhiyun #define OMAP24XX_GPIO_CLEARDATAOUT	0x0090
109*4882a593Smuzhiyun #define OMAP24XX_GPIO_SETDATAOUT	0x0094
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define OMAP4_GPIO_REVISION		0x0000
112*4882a593Smuzhiyun #define OMAP4_GPIO_SYSCONFIG		0x0010
113*4882a593Smuzhiyun #define OMAP4_GPIO_EOI			0x0020
114*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSRAW0	0x0024
115*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSRAW1	0x0028
116*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUS0		0x002c
117*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUS1		0x0030
118*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSSET0	0x0034
119*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSSET1	0x0038
120*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSCLR0	0x003c
121*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUSCLR1	0x0040
122*4882a593Smuzhiyun #define OMAP4_GPIO_IRQWAKEN0		0x0044
123*4882a593Smuzhiyun #define OMAP4_GPIO_IRQWAKEN1		0x0048
124*4882a593Smuzhiyun #define OMAP4_GPIO_IRQENABLE1		0x011c
125*4882a593Smuzhiyun #define OMAP4_GPIO_WAKE_EN		0x0120
126*4882a593Smuzhiyun #define OMAP4_GPIO_IRQSTATUS2		0x0128
127*4882a593Smuzhiyun #define OMAP4_GPIO_IRQENABLE2		0x012c
128*4882a593Smuzhiyun #define OMAP4_GPIO_CTRL			0x0130
129*4882a593Smuzhiyun #define OMAP4_GPIO_OE			0x0134
130*4882a593Smuzhiyun #define OMAP4_GPIO_DATAIN		0x0138
131*4882a593Smuzhiyun #define OMAP4_GPIO_DATAOUT		0x013c
132*4882a593Smuzhiyun #define OMAP4_GPIO_LEVELDETECT0		0x0140
133*4882a593Smuzhiyun #define OMAP4_GPIO_LEVELDETECT1		0x0144
134*4882a593Smuzhiyun #define OMAP4_GPIO_RISINGDETECT		0x0148
135*4882a593Smuzhiyun #define OMAP4_GPIO_FALLINGDETECT	0x014c
136*4882a593Smuzhiyun #define OMAP4_GPIO_DEBOUNCENABLE	0x0150
137*4882a593Smuzhiyun #define OMAP4_GPIO_DEBOUNCINGTIME	0x0154
138*4882a593Smuzhiyun #define OMAP4_GPIO_CLEARIRQENABLE1	0x0160
139*4882a593Smuzhiyun #define OMAP4_GPIO_SETIRQENABLE1	0x0164
140*4882a593Smuzhiyun #define OMAP4_GPIO_CLEARWKUENA		0x0180
141*4882a593Smuzhiyun #define OMAP4_GPIO_SETWKUENA		0x0184
142*4882a593Smuzhiyun #define OMAP4_GPIO_CLEARDATAOUT		0x0190
143*4882a593Smuzhiyun #define OMAP4_GPIO_SETDATAOUT		0x0194
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun #define OMAP_MAX_GPIO_LINES		192
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define OMAP_MPUIO(nr)		(OMAP_MAX_GPIO_LINES + (nr))
148*4882a593Smuzhiyun #define OMAP_GPIO_IS_MPUIO(nr)	((nr) >= OMAP_MAX_GPIO_LINES)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #ifndef __ASSEMBLER__
151*4882a593Smuzhiyun struct omap_gpio_reg_offs {
152*4882a593Smuzhiyun 	u16 revision;
153*4882a593Smuzhiyun 	u16 sysconfig;
154*4882a593Smuzhiyun 	u16 direction;
155*4882a593Smuzhiyun 	u16 datain;
156*4882a593Smuzhiyun 	u16 dataout;
157*4882a593Smuzhiyun 	u16 set_dataout;
158*4882a593Smuzhiyun 	u16 clr_dataout;
159*4882a593Smuzhiyun 	u16 irqstatus;
160*4882a593Smuzhiyun 	u16 irqstatus2;
161*4882a593Smuzhiyun 	u16 irqstatus_raw0;
162*4882a593Smuzhiyun 	u16 irqstatus_raw1;
163*4882a593Smuzhiyun 	u16 irqenable;
164*4882a593Smuzhiyun 	u16 irqenable2;
165*4882a593Smuzhiyun 	u16 set_irqenable;
166*4882a593Smuzhiyun 	u16 clr_irqenable;
167*4882a593Smuzhiyun 	u16 debounce;
168*4882a593Smuzhiyun 	u16 debounce_en;
169*4882a593Smuzhiyun 	u16 ctrl;
170*4882a593Smuzhiyun 	u16 wkup_en;
171*4882a593Smuzhiyun 	u16 leveldetect0;
172*4882a593Smuzhiyun 	u16 leveldetect1;
173*4882a593Smuzhiyun 	u16 risingdetect;
174*4882a593Smuzhiyun 	u16 fallingdetect;
175*4882a593Smuzhiyun 	u16 irqctrl;
176*4882a593Smuzhiyun 	u16 edgectrl1;
177*4882a593Smuzhiyun 	u16 edgectrl2;
178*4882a593Smuzhiyun 	u16 pinctrl;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun 	bool irqenable_inv;
181*4882a593Smuzhiyun };
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun struct omap_gpio_platform_data {
184*4882a593Smuzhiyun 	int bank_type;
185*4882a593Smuzhiyun 	int bank_width;		/* GPIO bank width */
186*4882a593Smuzhiyun 	int bank_stride;	/* Only needed for omap1 MPUIO */
187*4882a593Smuzhiyun 	bool dbck_flag;		/* dbck required or not - True for OMAP3&4 */
188*4882a593Smuzhiyun 	bool loses_context;	/* whether the bank would ever lose context */
189*4882a593Smuzhiyun 	bool is_mpuio;		/* whether the bank is of type MPUIO */
190*4882a593Smuzhiyun 	u32 non_wakeup_gpios;
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun 	const struct omap_gpio_reg_offs *regs;
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun 	/* Return context loss count due to PM states changing */
195*4882a593Smuzhiyun 	int (*get_context_loss_count)(struct device *dev);
196*4882a593Smuzhiyun };
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun #endif /* __ASSEMBLER__ */
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun #endif
201