1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (C) ST-Ericsson SA 2010
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #ifndef __STMPE_H
9*4882a593Smuzhiyun #define __STMPE_H
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #include <linux/device.h>
12*4882a593Smuzhiyun #include <linux/mfd/core.h>
13*4882a593Smuzhiyun #include <linux/mfd/stmpe.h>
14*4882a593Smuzhiyun #include <linux/printk.h>
15*4882a593Smuzhiyun #include <linux/types.h>
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun extern const struct dev_pm_ops stmpe_dev_pm_ops;
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun #ifdef STMPE_DUMP_BYTES
stmpe_dump_bytes(const char * str,const void * buf,size_t len)20*4882a593Smuzhiyun static inline void stmpe_dump_bytes(const char *str, const void *buf,
21*4882a593Smuzhiyun size_t len)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun print_hex_dump_bytes(str, DUMP_PREFIX_OFFSET, buf, len);
24*4882a593Smuzhiyun }
25*4882a593Smuzhiyun #else
stmpe_dump_bytes(const char * str,const void * buf,size_t len)26*4882a593Smuzhiyun static inline void stmpe_dump_bytes(const char *str, const void *buf,
27*4882a593Smuzhiyun size_t len)
28*4882a593Smuzhiyun {
29*4882a593Smuzhiyun }
30*4882a593Smuzhiyun #endif
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun /**
33*4882a593Smuzhiyun * struct stmpe_variant_block - information about block
34*4882a593Smuzhiyun * @cell: base mfd cell
35*4882a593Smuzhiyun * @irq: interrupt number to be added to each IORESOURCE_IRQ
36*4882a593Smuzhiyun * in the cell
37*4882a593Smuzhiyun * @block: block id; used for identification with platform data and for
38*4882a593Smuzhiyun * enable and altfunc callbacks
39*4882a593Smuzhiyun */
40*4882a593Smuzhiyun struct stmpe_variant_block {
41*4882a593Smuzhiyun const struct mfd_cell *cell;
42*4882a593Smuzhiyun int irq;
43*4882a593Smuzhiyun enum stmpe_block block;
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun /**
47*4882a593Smuzhiyun * struct stmpe_variant_info - variant-specific information
48*4882a593Smuzhiyun * @name: part name
49*4882a593Smuzhiyun * @id_val: content of CHIPID register
50*4882a593Smuzhiyun * @id_mask: bits valid in CHIPID register for comparison with id_val
51*4882a593Smuzhiyun * @num_gpios: number of GPIOS
52*4882a593Smuzhiyun * @af_bits: number of bits used to specify the alternate function
53*4882a593Smuzhiyun * @regs: variant specific registers.
54*4882a593Smuzhiyun * @blocks: list of blocks present on this device
55*4882a593Smuzhiyun * @num_blocks: number of blocks present on this device
56*4882a593Smuzhiyun * @num_irqs: number of internal IRQs available on this device
57*4882a593Smuzhiyun * @enable: callback to enable the specified blocks.
58*4882a593Smuzhiyun * Called with the I/O lock held.
59*4882a593Smuzhiyun * @get_altfunc: callback to get the alternate function number for the
60*4882a593Smuzhiyun * specific block
61*4882a593Smuzhiyun * @enable_autosleep: callback to configure autosleep with specified timeout
62*4882a593Smuzhiyun */
63*4882a593Smuzhiyun struct stmpe_variant_info {
64*4882a593Smuzhiyun const char *name;
65*4882a593Smuzhiyun u16 id_val;
66*4882a593Smuzhiyun u16 id_mask;
67*4882a593Smuzhiyun int num_gpios;
68*4882a593Smuzhiyun int af_bits;
69*4882a593Smuzhiyun const u8 *regs;
70*4882a593Smuzhiyun struct stmpe_variant_block *blocks;
71*4882a593Smuzhiyun int num_blocks;
72*4882a593Smuzhiyun int num_irqs;
73*4882a593Smuzhiyun int (*enable)(struct stmpe *stmpe, unsigned int blocks, bool enable);
74*4882a593Smuzhiyun int (*get_altfunc)(struct stmpe *stmpe, enum stmpe_block block);
75*4882a593Smuzhiyun int (*enable_autosleep)(struct stmpe *stmpe, int autosleep_timeout);
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun /**
79*4882a593Smuzhiyun * struct stmpe_client_info - i2c or spi specific routines/info
80*4882a593Smuzhiyun * @data: client specific data
81*4882a593Smuzhiyun * @read_byte: read single byte
82*4882a593Smuzhiyun * @write_byte: write single byte
83*4882a593Smuzhiyun * @read_block: read block or multiple bytes
84*4882a593Smuzhiyun * @write_block: write block or multiple bytes
85*4882a593Smuzhiyun * @init: client init routine, called during probe
86*4882a593Smuzhiyun */
87*4882a593Smuzhiyun struct stmpe_client_info {
88*4882a593Smuzhiyun void *data;
89*4882a593Smuzhiyun int irq;
90*4882a593Smuzhiyun void *client;
91*4882a593Smuzhiyun struct device *dev;
92*4882a593Smuzhiyun int (*read_byte)(struct stmpe *stmpe, u8 reg);
93*4882a593Smuzhiyun int (*write_byte)(struct stmpe *stmpe, u8 reg, u8 val);
94*4882a593Smuzhiyun int (*read_block)(struct stmpe *stmpe, u8 reg, u8 len, u8 *values);
95*4882a593Smuzhiyun int (*write_block)(struct stmpe *stmpe, u8 reg, u8 len,
96*4882a593Smuzhiyun const u8 *values);
97*4882a593Smuzhiyun void (*init)(struct stmpe *stmpe);
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun int stmpe_probe(struct stmpe_client_info *ci, enum stmpe_partnum partnum);
101*4882a593Smuzhiyun int stmpe_remove(struct stmpe *stmpe);
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun #define STMPE_ICR_LSB_HIGH (1 << 2)
104*4882a593Smuzhiyun #define STMPE_ICR_LSB_EDGE (1 << 1)
105*4882a593Smuzhiyun #define STMPE_ICR_LSB_GIM (1 << 0)
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun #define STMPE_SYS_CTRL_RESET (1 << 7)
108*4882a593Smuzhiyun #define STMPE_SYS_CTRL_INT_EN (1 << 2)
109*4882a593Smuzhiyun #define STMPE_SYS_CTRL_INT_HI (1 << 0)
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun /*
112*4882a593Smuzhiyun * STMPE801
113*4882a593Smuzhiyun */
114*4882a593Smuzhiyun #define STMPE801_ID 0x0108
115*4882a593Smuzhiyun #define STMPE801_NR_INTERNAL_IRQS 1
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun #define STMPE801_REG_CHIP_ID 0x00
118*4882a593Smuzhiyun #define STMPE801_REG_VERSION_ID 0x02
119*4882a593Smuzhiyun #define STMPE801_REG_SYS_CTRL 0x04
120*4882a593Smuzhiyun #define STMPE801_REG_GPIO_INT_EN 0x08
121*4882a593Smuzhiyun #define STMPE801_REG_GPIO_INT_STA 0x09
122*4882a593Smuzhiyun #define STMPE801_REG_GPIO_MP_STA 0x10
123*4882a593Smuzhiyun #define STMPE801_REG_GPIO_SET_PIN 0x11
124*4882a593Smuzhiyun #define STMPE801_REG_GPIO_DIR 0x12
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun /*
127*4882a593Smuzhiyun * STMPE811
128*4882a593Smuzhiyun */
129*4882a593Smuzhiyun #define STMPE811_ID 0x0811
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun #define STMPE811_IRQ_TOUCH_DET 0
132*4882a593Smuzhiyun #define STMPE811_IRQ_FIFO_TH 1
133*4882a593Smuzhiyun #define STMPE811_IRQ_FIFO_OFLOW 2
134*4882a593Smuzhiyun #define STMPE811_IRQ_FIFO_FULL 3
135*4882a593Smuzhiyun #define STMPE811_IRQ_FIFO_EMPTY 4
136*4882a593Smuzhiyun #define STMPE811_IRQ_TEMP_SENS 5
137*4882a593Smuzhiyun #define STMPE811_IRQ_ADC 6
138*4882a593Smuzhiyun #define STMPE811_IRQ_GPIOC 7
139*4882a593Smuzhiyun #define STMPE811_NR_INTERNAL_IRQS 8
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun #define STMPE811_REG_CHIP_ID 0x00
142*4882a593Smuzhiyun #define STMPE811_REG_SYS_CTRL 0x03
143*4882a593Smuzhiyun #define STMPE811_REG_SYS_CTRL2 0x04
144*4882a593Smuzhiyun #define STMPE811_REG_SPI_CFG 0x08
145*4882a593Smuzhiyun #define STMPE811_REG_INT_CTRL 0x09
146*4882a593Smuzhiyun #define STMPE811_REG_INT_EN 0x0A
147*4882a593Smuzhiyun #define STMPE811_REG_INT_STA 0x0B
148*4882a593Smuzhiyun #define STMPE811_REG_GPIO_INT_EN 0x0C
149*4882a593Smuzhiyun #define STMPE811_REG_GPIO_INT_STA 0x0D
150*4882a593Smuzhiyun #define STMPE811_REG_GPIO_SET_PIN 0x10
151*4882a593Smuzhiyun #define STMPE811_REG_GPIO_CLR_PIN 0x11
152*4882a593Smuzhiyun #define STMPE811_REG_GPIO_MP_STA 0x12
153*4882a593Smuzhiyun #define STMPE811_REG_GPIO_DIR 0x13
154*4882a593Smuzhiyun #define STMPE811_REG_GPIO_ED 0x14
155*4882a593Smuzhiyun #define STMPE811_REG_GPIO_RE 0x15
156*4882a593Smuzhiyun #define STMPE811_REG_GPIO_FE 0x16
157*4882a593Smuzhiyun #define STMPE811_REG_GPIO_AF 0x17
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun #define STMPE811_SYS_CTRL_RESET (1 << 1)
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun #define STMPE811_SYS_CTRL2_ADC_OFF (1 << 0)
162*4882a593Smuzhiyun #define STMPE811_SYS_CTRL2_TSC_OFF (1 << 1)
163*4882a593Smuzhiyun #define STMPE811_SYS_CTRL2_GPIO_OFF (1 << 2)
164*4882a593Smuzhiyun #define STMPE811_SYS_CTRL2_TS_OFF (1 << 3)
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun /*
167*4882a593Smuzhiyun * STMPE1600
168*4882a593Smuzhiyun */
169*4882a593Smuzhiyun #define STMPE1600_ID 0x0016
170*4882a593Smuzhiyun #define STMPE1600_NR_INTERNAL_IRQS 16
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun #define STMPE1600_REG_CHIP_ID 0x00
173*4882a593Smuzhiyun #define STMPE1600_REG_SYS_CTRL 0x03
174*4882a593Smuzhiyun #define STMPE1600_REG_IEGPIOR_LSB 0x08
175*4882a593Smuzhiyun #define STMPE1600_REG_IEGPIOR_MSB 0x09
176*4882a593Smuzhiyun #define STMPE1600_REG_ISGPIOR_LSB 0x0A
177*4882a593Smuzhiyun #define STMPE1600_REG_ISGPIOR_MSB 0x0B
178*4882a593Smuzhiyun #define STMPE1600_REG_GPMR_LSB 0x10
179*4882a593Smuzhiyun #define STMPE1600_REG_GPMR_MSB 0x11
180*4882a593Smuzhiyun #define STMPE1600_REG_GPSR_LSB 0x12
181*4882a593Smuzhiyun #define STMPE1600_REG_GPSR_MSB 0x13
182*4882a593Smuzhiyun #define STMPE1600_REG_GPDR_LSB 0x14
183*4882a593Smuzhiyun #define STMPE1600_REG_GPDR_MSB 0x15
184*4882a593Smuzhiyun #define STMPE1600_REG_GPPIR_LSB 0x16
185*4882a593Smuzhiyun #define STMPE1600_REG_GPPIR_MSB 0x17
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun /*
188*4882a593Smuzhiyun * STMPE1601
189*4882a593Smuzhiyun */
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun #define STMPE1601_IRQ_GPIOC 8
192*4882a593Smuzhiyun #define STMPE1601_IRQ_PWM3 7
193*4882a593Smuzhiyun #define STMPE1601_IRQ_PWM2 6
194*4882a593Smuzhiyun #define STMPE1601_IRQ_PWM1 5
195*4882a593Smuzhiyun #define STMPE1601_IRQ_PWM0 4
196*4882a593Smuzhiyun #define STMPE1601_IRQ_KEYPAD_OVER 2
197*4882a593Smuzhiyun #define STMPE1601_IRQ_KEYPAD 1
198*4882a593Smuzhiyun #define STMPE1601_IRQ_WAKEUP 0
199*4882a593Smuzhiyun #define STMPE1601_NR_INTERNAL_IRQS 9
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun #define STMPE1601_REG_SYS_CTRL 0x02
202*4882a593Smuzhiyun #define STMPE1601_REG_SYS_CTRL2 0x03
203*4882a593Smuzhiyun #define STMPE1601_REG_ICR_MSB 0x10
204*4882a593Smuzhiyun #define STMPE1601_REG_ICR_LSB 0x11
205*4882a593Smuzhiyun #define STMPE1601_REG_IER_MSB 0x12
206*4882a593Smuzhiyun #define STMPE1601_REG_IER_LSB 0x13
207*4882a593Smuzhiyun #define STMPE1601_REG_ISR_MSB 0x14
208*4882a593Smuzhiyun #define STMPE1601_REG_ISR_LSB 0x15
209*4882a593Smuzhiyun #define STMPE1601_REG_INT_EN_GPIO_MASK_MSB 0x16
210*4882a593Smuzhiyun #define STMPE1601_REG_INT_EN_GPIO_MASK_LSB 0x17
211*4882a593Smuzhiyun #define STMPE1601_REG_INT_STA_GPIO_MSB 0x18
212*4882a593Smuzhiyun #define STMPE1601_REG_INT_STA_GPIO_LSB 0x19
213*4882a593Smuzhiyun #define STMPE1601_REG_CHIP_ID 0x80
214*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_SET_MSB 0x82
215*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_SET_LSB 0x83
216*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_CLR_MSB 0x84
217*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_CLR_LSB 0x85
218*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_MP_MSB 0x86
219*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_MP_LSB 0x87
220*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_SET_DIR_MSB 0x88
221*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_SET_DIR_LSB 0x89
222*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_ED_MSB 0x8A
223*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_ED_LSB 0x8B
224*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_RE_MSB 0x8C
225*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_RE_LSB 0x8D
226*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_FE_MSB 0x8E
227*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_FE_LSB 0x8F
228*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_PU_MSB 0x90
229*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_PU_LSB 0x91
230*4882a593Smuzhiyun #define STMPE1601_REG_GPIO_AF_U_MSB 0x92
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun #define STMPE1601_SYS_CTRL_ENABLE_GPIO (1 << 3)
233*4882a593Smuzhiyun #define STMPE1601_SYS_CTRL_ENABLE_KPC (1 << 1)
234*4882a593Smuzhiyun #define STMPE1601_SYS_CTRL_ENABLE_SPWM (1 << 0)
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun /* The 1601/2403 share the same masks */
237*4882a593Smuzhiyun #define STMPE1601_AUTOSLEEP_TIMEOUT_MASK (0x7)
238*4882a593Smuzhiyun #define STPME1601_AUTOSLEEP_ENABLE (1 << 3)
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun /*
241*4882a593Smuzhiyun * STMPE1801
242*4882a593Smuzhiyun */
243*4882a593Smuzhiyun #define STMPE1801_ID 0xc110
244*4882a593Smuzhiyun #define STMPE1801_NR_INTERNAL_IRQS 5
245*4882a593Smuzhiyun #define STMPE1801_IRQ_KEYPAD_COMBI 4
246*4882a593Smuzhiyun #define STMPE1801_IRQ_GPIOC 3
247*4882a593Smuzhiyun #define STMPE1801_IRQ_KEYPAD_OVER 2
248*4882a593Smuzhiyun #define STMPE1801_IRQ_KEYPAD 1
249*4882a593Smuzhiyun #define STMPE1801_IRQ_WAKEUP 0
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun #define STMPE1801_REG_CHIP_ID 0x00
252*4882a593Smuzhiyun #define STMPE1801_REG_SYS_CTRL 0x02
253*4882a593Smuzhiyun #define STMPE1801_REG_INT_CTRL_LOW 0x04
254*4882a593Smuzhiyun #define STMPE1801_REG_INT_EN_MASK_LOW 0x06
255*4882a593Smuzhiyun #define STMPE1801_REG_INT_STA_LOW 0x08
256*4882a593Smuzhiyun #define STMPE1801_REG_INT_EN_GPIO_MASK_LOW 0x0A
257*4882a593Smuzhiyun #define STMPE1801_REG_INT_EN_GPIO_MASK_MID 0x0B
258*4882a593Smuzhiyun #define STMPE1801_REG_INT_EN_GPIO_MASK_HIGH 0x0C
259*4882a593Smuzhiyun #define STMPE1801_REG_INT_STA_GPIO_LOW 0x0D
260*4882a593Smuzhiyun #define STMPE1801_REG_INT_STA_GPIO_MID 0x0E
261*4882a593Smuzhiyun #define STMPE1801_REG_INT_STA_GPIO_HIGH 0x0F
262*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_LOW 0x10
263*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_MID 0x11
264*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_HIGH 0x12
265*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_CLR_LOW 0x13
266*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_CLR_MID 0x14
267*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_CLR_HIGH 0x15
268*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_MP_LOW 0x16
269*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_MP_MID 0x17
270*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_MP_HIGH 0x18
271*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_DIR_LOW 0x19
272*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_DIR_MID 0x1A
273*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_SET_DIR_HIGH 0x1B
274*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_RE_LOW 0x1C
275*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_RE_MID 0x1D
276*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_RE_HIGH 0x1E
277*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_FE_LOW 0x1F
278*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_FE_MID 0x20
279*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_FE_HIGH 0x21
280*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_PULL_UP_LOW 0x22
281*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_PULL_UP_MID 0x23
282*4882a593Smuzhiyun #define STMPE1801_REG_GPIO_PULL_UP_HIGH 0x24
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun #define STMPE1801_MSK_INT_EN_KPC (1 << 1)
285*4882a593Smuzhiyun #define STMPE1801_MSK_INT_EN_GPIO (1 << 3)
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun /*
288*4882a593Smuzhiyun * STMPE24xx
289*4882a593Smuzhiyun */
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun #define STMPE24XX_IRQ_GPIOC 8
292*4882a593Smuzhiyun #define STMPE24XX_IRQ_PWM2 7
293*4882a593Smuzhiyun #define STMPE24XX_IRQ_PWM1 6
294*4882a593Smuzhiyun #define STMPE24XX_IRQ_PWM0 5
295*4882a593Smuzhiyun #define STMPE24XX_IRQ_ROT_OVER 4
296*4882a593Smuzhiyun #define STMPE24XX_IRQ_ROT 3
297*4882a593Smuzhiyun #define STMPE24XX_IRQ_KEYPAD_OVER 2
298*4882a593Smuzhiyun #define STMPE24XX_IRQ_KEYPAD 1
299*4882a593Smuzhiyun #define STMPE24XX_IRQ_WAKEUP 0
300*4882a593Smuzhiyun #define STMPE24XX_NR_INTERNAL_IRQS 9
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun #define STMPE24XX_REG_SYS_CTRL 0x02
303*4882a593Smuzhiyun #define STMPE24XX_REG_SYS_CTRL2 0x03
304*4882a593Smuzhiyun #define STMPE24XX_REG_ICR_MSB 0x10
305*4882a593Smuzhiyun #define STMPE24XX_REG_ICR_LSB 0x11
306*4882a593Smuzhiyun #define STMPE24XX_REG_IER_MSB 0x12
307*4882a593Smuzhiyun #define STMPE24XX_REG_IER_LSB 0x13
308*4882a593Smuzhiyun #define STMPE24XX_REG_ISR_MSB 0x14
309*4882a593Smuzhiyun #define STMPE24XX_REG_ISR_LSB 0x15
310*4882a593Smuzhiyun #define STMPE24XX_REG_IEGPIOR_MSB 0x16
311*4882a593Smuzhiyun #define STMPE24XX_REG_IEGPIOR_CSB 0x17
312*4882a593Smuzhiyun #define STMPE24XX_REG_IEGPIOR_LSB 0x18
313*4882a593Smuzhiyun #define STMPE24XX_REG_ISGPIOR_MSB 0x19
314*4882a593Smuzhiyun #define STMPE24XX_REG_ISGPIOR_CSB 0x1A
315*4882a593Smuzhiyun #define STMPE24XX_REG_ISGPIOR_LSB 0x1B
316*4882a593Smuzhiyun #define STMPE24XX_REG_CHIP_ID 0x80
317*4882a593Smuzhiyun #define STMPE24XX_REG_GPSR_MSB 0x83
318*4882a593Smuzhiyun #define STMPE24XX_REG_GPSR_CSB 0x84
319*4882a593Smuzhiyun #define STMPE24XX_REG_GPSR_LSB 0x85
320*4882a593Smuzhiyun #define STMPE24XX_REG_GPCR_MSB 0x86
321*4882a593Smuzhiyun #define STMPE24XX_REG_GPCR_CSB 0x87
322*4882a593Smuzhiyun #define STMPE24XX_REG_GPCR_LSB 0x88
323*4882a593Smuzhiyun #define STMPE24XX_REG_GPDR_MSB 0x89
324*4882a593Smuzhiyun #define STMPE24XX_REG_GPDR_CSB 0x8A
325*4882a593Smuzhiyun #define STMPE24XX_REG_GPDR_LSB 0x8B
326*4882a593Smuzhiyun #define STMPE24XX_REG_GPEDR_MSB 0x8C
327*4882a593Smuzhiyun #define STMPE24XX_REG_GPEDR_CSB 0x8D
328*4882a593Smuzhiyun #define STMPE24XX_REG_GPEDR_LSB 0x8E
329*4882a593Smuzhiyun #define STMPE24XX_REG_GPRER_MSB 0x8F
330*4882a593Smuzhiyun #define STMPE24XX_REG_GPRER_CSB 0x90
331*4882a593Smuzhiyun #define STMPE24XX_REG_GPRER_LSB 0x91
332*4882a593Smuzhiyun #define STMPE24XX_REG_GPFER_MSB 0x92
333*4882a593Smuzhiyun #define STMPE24XX_REG_GPFER_CSB 0x93
334*4882a593Smuzhiyun #define STMPE24XX_REG_GPFER_LSB 0x94
335*4882a593Smuzhiyun #define STMPE24XX_REG_GPPUR_MSB 0x95
336*4882a593Smuzhiyun #define STMPE24XX_REG_GPPUR_CSB 0x96
337*4882a593Smuzhiyun #define STMPE24XX_REG_GPPUR_LSB 0x97
338*4882a593Smuzhiyun #define STMPE24XX_REG_GPPDR_MSB 0x98
339*4882a593Smuzhiyun #define STMPE24XX_REG_GPPDR_CSB 0x99
340*4882a593Smuzhiyun #define STMPE24XX_REG_GPPDR_LSB 0x9A
341*4882a593Smuzhiyun #define STMPE24XX_REG_GPAFR_U_MSB 0x9B
342*4882a593Smuzhiyun #define STMPE24XX_REG_GPMR_MSB 0xA2
343*4882a593Smuzhiyun #define STMPE24XX_REG_GPMR_CSB 0xA3
344*4882a593Smuzhiyun #define STMPE24XX_REG_GPMR_LSB 0xA4
345*4882a593Smuzhiyun #define STMPE24XX_SYS_CTRL_ENABLE_GPIO (1 << 3)
346*4882a593Smuzhiyun #define STMPE24XX_SYSCON_ENABLE_PWM (1 << 2)
347*4882a593Smuzhiyun #define STMPE24XX_SYS_CTRL_ENABLE_KPC (1 << 1)
348*4882a593Smuzhiyun #define STMPE24XX_SYSCON_ENABLE_ROT (1 << 0)
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun #endif
351