]> Pileus Git - ~andy/linux/blob - drivers/mfd/stmpe.c
Input: stmpe-ts - add DT support for stmpe touchscreen
[~andy/linux] / drivers / mfd / stmpe.c
1 /*
2  * ST Microelectronics MFD: stmpe's driver
3  *
4  * Copyright (C) ST-Ericsson SA 2010
5  *
6  * License Terms: GNU General Public License, version 2
7  * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
8  */
9
10 #include <linux/gpio.h>
11 #include <linux/export.h>
12 #include <linux/kernel.h>
13 #include <linux/interrupt.h>
14 #include <linux/irq.h>
15 #include <linux/pm.h>
16 #include <linux/slab.h>
17 #include <linux/mfd/core.h>
18 #include "stmpe.h"
19
20 static int __stmpe_enable(struct stmpe *stmpe, unsigned int blocks)
21 {
22         return stmpe->variant->enable(stmpe, blocks, true);
23 }
24
25 static int __stmpe_disable(struct stmpe *stmpe, unsigned int blocks)
26 {
27         return stmpe->variant->enable(stmpe, blocks, false);
28 }
29
30 static int __stmpe_reg_read(struct stmpe *stmpe, u8 reg)
31 {
32         int ret;
33
34         ret = stmpe->ci->read_byte(stmpe, reg);
35         if (ret < 0)
36                 dev_err(stmpe->dev, "failed to read reg %#x: %d\n", reg, ret);
37
38         dev_vdbg(stmpe->dev, "rd: reg %#x => data %#x\n", reg, ret);
39
40         return ret;
41 }
42
43 static int __stmpe_reg_write(struct stmpe *stmpe, u8 reg, u8 val)
44 {
45         int ret;
46
47         dev_vdbg(stmpe->dev, "wr: reg %#x <= %#x\n", reg, val);
48
49         ret = stmpe->ci->write_byte(stmpe, reg, val);
50         if (ret < 0)
51                 dev_err(stmpe->dev, "failed to write reg %#x: %d\n", reg, ret);
52
53         return ret;
54 }
55
56 static int __stmpe_set_bits(struct stmpe *stmpe, u8 reg, u8 mask, u8 val)
57 {
58         int ret;
59
60         ret = __stmpe_reg_read(stmpe, reg);
61         if (ret < 0)
62                 return ret;
63
64         ret &= ~mask;
65         ret |= val;
66
67         return __stmpe_reg_write(stmpe, reg, ret);
68 }
69
70 static int __stmpe_block_read(struct stmpe *stmpe, u8 reg, u8 length,
71                               u8 *values)
72 {
73         int ret;
74
75         ret = stmpe->ci->read_block(stmpe, reg, length, values);
76         if (ret < 0)
77                 dev_err(stmpe->dev, "failed to read regs %#x: %d\n", reg, ret);
78
79         dev_vdbg(stmpe->dev, "rd: reg %#x (%d) => ret %#x\n", reg, length, ret);
80         stmpe_dump_bytes("stmpe rd: ", values, length);
81
82         return ret;
83 }
84
85 static int __stmpe_block_write(struct stmpe *stmpe, u8 reg, u8 length,
86                         const u8 *values)
87 {
88         int ret;
89
90         dev_vdbg(stmpe->dev, "wr: regs %#x (%d)\n", reg, length);
91         stmpe_dump_bytes("stmpe wr: ", values, length);
92
93         ret = stmpe->ci->write_block(stmpe, reg, length, values);
94         if (ret < 0)
95                 dev_err(stmpe->dev, "failed to write regs %#x: %d\n", reg, ret);
96
97         return ret;
98 }
99
100 /**
101  * stmpe_enable - enable blocks on an STMPE device
102  * @stmpe:      Device to work on
103  * @blocks:     Mask of blocks (enum stmpe_block values) to enable
104  */
105 int stmpe_enable(struct stmpe *stmpe, unsigned int blocks)
106 {
107         int ret;
108
109         mutex_lock(&stmpe->lock);
110         ret = __stmpe_enable(stmpe, blocks);
111         mutex_unlock(&stmpe->lock);
112
113         return ret;
114 }
115 EXPORT_SYMBOL_GPL(stmpe_enable);
116
117 /**
118  * stmpe_disable - disable blocks on an STMPE device
119  * @stmpe:      Device to work on
120  * @blocks:     Mask of blocks (enum stmpe_block values) to enable
121  */
122 int stmpe_disable(struct stmpe *stmpe, unsigned int blocks)
123 {
124         int ret;
125
126         mutex_lock(&stmpe->lock);
127         ret = __stmpe_disable(stmpe, blocks);
128         mutex_unlock(&stmpe->lock);
129
130         return ret;
131 }
132 EXPORT_SYMBOL_GPL(stmpe_disable);
133
134 /**
135  * stmpe_reg_read() - read a single STMPE register
136  * @stmpe:      Device to read from
137  * @reg:        Register to read
138  */
139 int stmpe_reg_read(struct stmpe *stmpe, u8 reg)
140 {
141         int ret;
142
143         mutex_lock(&stmpe->lock);
144         ret = __stmpe_reg_read(stmpe, reg);
145         mutex_unlock(&stmpe->lock);
146
147         return ret;
148 }
149 EXPORT_SYMBOL_GPL(stmpe_reg_read);
150
151 /**
152  * stmpe_reg_write() - write a single STMPE register
153  * @stmpe:      Device to write to
154  * @reg:        Register to write
155  * @val:        Value to write
156  */
157 int stmpe_reg_write(struct stmpe *stmpe, u8 reg, u8 val)
158 {
159         int ret;
160
161         mutex_lock(&stmpe->lock);
162         ret = __stmpe_reg_write(stmpe, reg, val);
163         mutex_unlock(&stmpe->lock);
164
165         return ret;
166 }
167 EXPORT_SYMBOL_GPL(stmpe_reg_write);
168
169 /**
170  * stmpe_set_bits() - set the value of a bitfield in a STMPE register
171  * @stmpe:      Device to write to
172  * @reg:        Register to write
173  * @mask:       Mask of bits to set
174  * @val:        Value to set
175  */
176 int stmpe_set_bits(struct stmpe *stmpe, u8 reg, u8 mask, u8 val)
177 {
178         int ret;
179
180         mutex_lock(&stmpe->lock);
181         ret = __stmpe_set_bits(stmpe, reg, mask, val);
182         mutex_unlock(&stmpe->lock);
183
184         return ret;
185 }
186 EXPORT_SYMBOL_GPL(stmpe_set_bits);
187
188 /**
189  * stmpe_block_read() - read multiple STMPE registers
190  * @stmpe:      Device to read from
191  * @reg:        First register
192  * @length:     Number of registers
193  * @values:     Buffer to write to
194  */
195 int stmpe_block_read(struct stmpe *stmpe, u8 reg, u8 length, u8 *values)
196 {
197         int ret;
198
199         mutex_lock(&stmpe->lock);
200         ret = __stmpe_block_read(stmpe, reg, length, values);
201         mutex_unlock(&stmpe->lock);
202
203         return ret;
204 }
205 EXPORT_SYMBOL_GPL(stmpe_block_read);
206
207 /**
208  * stmpe_block_write() - write multiple STMPE registers
209  * @stmpe:      Device to write to
210  * @reg:        First register
211  * @length:     Number of registers
212  * @values:     Values to write
213  */
214 int stmpe_block_write(struct stmpe *stmpe, u8 reg, u8 length,
215                       const u8 *values)
216 {
217         int ret;
218
219         mutex_lock(&stmpe->lock);
220         ret = __stmpe_block_write(stmpe, reg, length, values);
221         mutex_unlock(&stmpe->lock);
222
223         return ret;
224 }
225 EXPORT_SYMBOL_GPL(stmpe_block_write);
226
227 /**
228  * stmpe_set_altfunc()- set the alternate function for STMPE pins
229  * @stmpe:      Device to configure
230  * @pins:       Bitmask of pins to affect
231  * @block:      block to enable alternate functions for
232  *
233  * @pins is assumed to have a bit set for each of the bits whose alternate
234  * function is to be changed, numbered according to the GPIOXY numbers.
235  *
236  * If the GPIO module is not enabled, this function automatically enables it in
237  * order to perform the change.
238  */
239 int stmpe_set_altfunc(struct stmpe *stmpe, u32 pins, enum stmpe_block block)
240 {
241         struct stmpe_variant_info *variant = stmpe->variant;
242         u8 regaddr = stmpe->regs[STMPE_IDX_GPAFR_U_MSB];
243         int af_bits = variant->af_bits;
244         int numregs = DIV_ROUND_UP(stmpe->num_gpios * af_bits, 8);
245         int mask = (1 << af_bits) - 1;
246         u8 regs[numregs];
247         int af, afperreg, ret;
248
249         if (!variant->get_altfunc)
250                 return 0;
251
252         afperreg = 8 / af_bits;
253         mutex_lock(&stmpe->lock);
254
255         ret = __stmpe_enable(stmpe, STMPE_BLOCK_GPIO);
256         if (ret < 0)
257                 goto out;
258
259         ret = __stmpe_block_read(stmpe, regaddr, numregs, regs);
260         if (ret < 0)
261                 goto out;
262
263         af = variant->get_altfunc(stmpe, block);
264
265         while (pins) {
266                 int pin = __ffs(pins);
267                 int regoffset = numregs - (pin / afperreg) - 1;
268                 int pos = (pin % afperreg) * (8 / afperreg);
269
270                 regs[regoffset] &= ~(mask << pos);
271                 regs[regoffset] |= af << pos;
272
273                 pins &= ~(1 << pin);
274         }
275
276         ret = __stmpe_block_write(stmpe, regaddr, numregs, regs);
277
278 out:
279         mutex_unlock(&stmpe->lock);
280         return ret;
281 }
282 EXPORT_SYMBOL_GPL(stmpe_set_altfunc);
283
284 /*
285  * GPIO (all variants)
286  */
287
288 static struct resource stmpe_gpio_resources[] = {
289         /* Start and end filled dynamically */
290         {
291                 .flags  = IORESOURCE_IRQ,
292         },
293 };
294
295 static struct mfd_cell stmpe_gpio_cell = {
296         .name           = "stmpe-gpio",
297         .resources      = stmpe_gpio_resources,
298         .num_resources  = ARRAY_SIZE(stmpe_gpio_resources),
299 };
300
301 static struct mfd_cell stmpe_gpio_cell_noirq = {
302         .name           = "stmpe-gpio",
303         /* gpio cell resources consist of an irq only so no resources here */
304 };
305
306 /*
307  * Keypad (1601, 2401, 2403)
308  */
309
310 static struct resource stmpe_keypad_resources[] = {
311         {
312                 .name   = "KEYPAD",
313                 .start  = 0,
314                 .end    = 0,
315                 .flags  = IORESOURCE_IRQ,
316         },
317         {
318                 .name   = "KEYPAD_OVER",
319                 .start  = 1,
320                 .end    = 1,
321                 .flags  = IORESOURCE_IRQ,
322         },
323 };
324
325 static struct mfd_cell stmpe_keypad_cell = {
326         .name           = "stmpe-keypad",
327         .resources      = stmpe_keypad_resources,
328         .num_resources  = ARRAY_SIZE(stmpe_keypad_resources),
329 };
330
331 /*
332  * STMPE801
333  */
334 static const u8 stmpe801_regs[] = {
335         [STMPE_IDX_CHIP_ID]     = STMPE801_REG_CHIP_ID,
336         [STMPE_IDX_ICR_LSB]     = STMPE801_REG_SYS_CTRL,
337         [STMPE_IDX_GPMR_LSB]    = STMPE801_REG_GPIO_MP_STA,
338         [STMPE_IDX_GPSR_LSB]    = STMPE801_REG_GPIO_SET_PIN,
339         [STMPE_IDX_GPCR_LSB]    = STMPE801_REG_GPIO_SET_PIN,
340         [STMPE_IDX_GPDR_LSB]    = STMPE801_REG_GPIO_DIR,
341         [STMPE_IDX_IEGPIOR_LSB] = STMPE801_REG_GPIO_INT_EN,
342         [STMPE_IDX_ISGPIOR_MSB] = STMPE801_REG_GPIO_INT_STA,
343
344 };
345
346 static struct stmpe_variant_block stmpe801_blocks[] = {
347         {
348                 .cell   = &stmpe_gpio_cell,
349                 .irq    = 0,
350                 .block  = STMPE_BLOCK_GPIO,
351         },
352 };
353
354 static struct stmpe_variant_block stmpe801_blocks_noirq[] = {
355         {
356                 .cell   = &stmpe_gpio_cell_noirq,
357                 .block  = STMPE_BLOCK_GPIO,
358         },
359 };
360
361 static int stmpe801_enable(struct stmpe *stmpe, unsigned int blocks,
362                            bool enable)
363 {
364         if (blocks & STMPE_BLOCK_GPIO)
365                 return 0;
366         else
367                 return -EINVAL;
368 }
369
370 static struct stmpe_variant_info stmpe801 = {
371         .name           = "stmpe801",
372         .id_val         = STMPE801_ID,
373         .id_mask        = 0xffff,
374         .num_gpios      = 8,
375         .regs           = stmpe801_regs,
376         .blocks         = stmpe801_blocks,
377         .num_blocks     = ARRAY_SIZE(stmpe801_blocks),
378         .num_irqs       = STMPE801_NR_INTERNAL_IRQS,
379         .enable         = stmpe801_enable,
380 };
381
382 static struct stmpe_variant_info stmpe801_noirq = {
383         .name           = "stmpe801",
384         .id_val         = STMPE801_ID,
385         .id_mask        = 0xffff,
386         .num_gpios      = 8,
387         .regs           = stmpe801_regs,
388         .blocks         = stmpe801_blocks_noirq,
389         .num_blocks     = ARRAY_SIZE(stmpe801_blocks_noirq),
390         .enable         = stmpe801_enable,
391 };
392
393 /*
394  * Touchscreen (STMPE811 or STMPE610)
395  */
396
397 static struct resource stmpe_ts_resources[] = {
398         {
399                 .name   = "TOUCH_DET",
400                 .start  = 0,
401                 .end    = 0,
402                 .flags  = IORESOURCE_IRQ,
403         },
404         {
405                 .name   = "FIFO_TH",
406                 .start  = 1,
407                 .end    = 1,
408                 .flags  = IORESOURCE_IRQ,
409         },
410 };
411
412 static struct mfd_cell stmpe_ts_cell = {
413         .name           = "stmpe-ts",
414         .of_compatible  = "st,stmpe-ts",
415         .resources      = stmpe_ts_resources,
416         .num_resources  = ARRAY_SIZE(stmpe_ts_resources),
417 };
418
419 /*
420  * STMPE811 or STMPE610
421  */
422
423 static const u8 stmpe811_regs[] = {
424         [STMPE_IDX_CHIP_ID]     = STMPE811_REG_CHIP_ID,
425         [STMPE_IDX_ICR_LSB]     = STMPE811_REG_INT_CTRL,
426         [STMPE_IDX_IER_LSB]     = STMPE811_REG_INT_EN,
427         [STMPE_IDX_ISR_MSB]     = STMPE811_REG_INT_STA,
428         [STMPE_IDX_GPMR_LSB]    = STMPE811_REG_GPIO_MP_STA,
429         [STMPE_IDX_GPSR_LSB]    = STMPE811_REG_GPIO_SET_PIN,
430         [STMPE_IDX_GPCR_LSB]    = STMPE811_REG_GPIO_CLR_PIN,
431         [STMPE_IDX_GPDR_LSB]    = STMPE811_REG_GPIO_DIR,
432         [STMPE_IDX_GPRER_LSB]   = STMPE811_REG_GPIO_RE,
433         [STMPE_IDX_GPFER_LSB]   = STMPE811_REG_GPIO_FE,
434         [STMPE_IDX_GPAFR_U_MSB] = STMPE811_REG_GPIO_AF,
435         [STMPE_IDX_IEGPIOR_LSB] = STMPE811_REG_GPIO_INT_EN,
436         [STMPE_IDX_ISGPIOR_MSB] = STMPE811_REG_GPIO_INT_STA,
437         [STMPE_IDX_GPEDR_MSB]   = STMPE811_REG_GPIO_ED,
438 };
439
440 static struct stmpe_variant_block stmpe811_blocks[] = {
441         {
442                 .cell   = &stmpe_gpio_cell,
443                 .irq    = STMPE811_IRQ_GPIOC,
444                 .block  = STMPE_BLOCK_GPIO,
445         },
446         {
447                 .cell   = &stmpe_ts_cell,
448                 .irq    = STMPE811_IRQ_TOUCH_DET,
449                 .block  = STMPE_BLOCK_TOUCHSCREEN,
450         },
451 };
452
453 static int stmpe811_enable(struct stmpe *stmpe, unsigned int blocks,
454                            bool enable)
455 {
456         unsigned int mask = 0;
457
458         if (blocks & STMPE_BLOCK_GPIO)
459                 mask |= STMPE811_SYS_CTRL2_GPIO_OFF;
460
461         if (blocks & STMPE_BLOCK_ADC)
462                 mask |= STMPE811_SYS_CTRL2_ADC_OFF;
463
464         if (blocks & STMPE_BLOCK_TOUCHSCREEN)
465                 mask |= STMPE811_SYS_CTRL2_TSC_OFF;
466
467         return __stmpe_set_bits(stmpe, STMPE811_REG_SYS_CTRL2, mask,
468                                 enable ? 0 : mask);
469 }
470
471 static int stmpe811_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
472 {
473         /* 0 for touchscreen, 1 for GPIO */
474         return block != STMPE_BLOCK_TOUCHSCREEN;
475 }
476
477 static struct stmpe_variant_info stmpe811 = {
478         .name           = "stmpe811",
479         .id_val         = 0x0811,
480         .id_mask        = 0xffff,
481         .num_gpios      = 8,
482         .af_bits        = 1,
483         .regs           = stmpe811_regs,
484         .blocks         = stmpe811_blocks,
485         .num_blocks     = ARRAY_SIZE(stmpe811_blocks),
486         .num_irqs       = STMPE811_NR_INTERNAL_IRQS,
487         .enable         = stmpe811_enable,
488         .get_altfunc    = stmpe811_get_altfunc,
489 };
490
491 /* Similar to 811, except number of gpios */
492 static struct stmpe_variant_info stmpe610 = {
493         .name           = "stmpe610",
494         .id_val         = 0x0811,
495         .id_mask        = 0xffff,
496         .num_gpios      = 6,
497         .af_bits        = 1,
498         .regs           = stmpe811_regs,
499         .blocks         = stmpe811_blocks,
500         .num_blocks     = ARRAY_SIZE(stmpe811_blocks),
501         .num_irqs       = STMPE811_NR_INTERNAL_IRQS,
502         .enable         = stmpe811_enable,
503         .get_altfunc    = stmpe811_get_altfunc,
504 };
505
506 /*
507  * STMPE1601
508  */
509
510 static const u8 stmpe1601_regs[] = {
511         [STMPE_IDX_CHIP_ID]     = STMPE1601_REG_CHIP_ID,
512         [STMPE_IDX_ICR_LSB]     = STMPE1601_REG_ICR_LSB,
513         [STMPE_IDX_IER_LSB]     = STMPE1601_REG_IER_LSB,
514         [STMPE_IDX_ISR_MSB]     = STMPE1601_REG_ISR_MSB,
515         [STMPE_IDX_GPMR_LSB]    = STMPE1601_REG_GPIO_MP_LSB,
516         [STMPE_IDX_GPSR_LSB]    = STMPE1601_REG_GPIO_SET_LSB,
517         [STMPE_IDX_GPCR_LSB]    = STMPE1601_REG_GPIO_CLR_LSB,
518         [STMPE_IDX_GPDR_LSB]    = STMPE1601_REG_GPIO_SET_DIR_LSB,
519         [STMPE_IDX_GPRER_LSB]   = STMPE1601_REG_GPIO_RE_LSB,
520         [STMPE_IDX_GPFER_LSB]   = STMPE1601_REG_GPIO_FE_LSB,
521         [STMPE_IDX_GPAFR_U_MSB] = STMPE1601_REG_GPIO_AF_U_MSB,
522         [STMPE_IDX_IEGPIOR_LSB] = STMPE1601_REG_INT_EN_GPIO_MASK_LSB,
523         [STMPE_IDX_ISGPIOR_MSB] = STMPE1601_REG_INT_STA_GPIO_MSB,
524         [STMPE_IDX_GPEDR_MSB]   = STMPE1601_REG_GPIO_ED_MSB,
525 };
526
527 static struct stmpe_variant_block stmpe1601_blocks[] = {
528         {
529                 .cell   = &stmpe_gpio_cell,
530                 .irq    = STMPE24XX_IRQ_GPIOC,
531                 .block  = STMPE_BLOCK_GPIO,
532         },
533         {
534                 .cell   = &stmpe_keypad_cell,
535                 .irq    = STMPE24XX_IRQ_KEYPAD,
536                 .block  = STMPE_BLOCK_KEYPAD,
537         },
538 };
539
540 /* supported autosleep timeout delay (in msecs) */
541 static const int stmpe_autosleep_delay[] = {
542         4, 16, 32, 64, 128, 256, 512, 1024,
543 };
544
545 static int stmpe_round_timeout(int timeout)
546 {
547         int i;
548
549         for (i = 0; i < ARRAY_SIZE(stmpe_autosleep_delay); i++) {
550                 if (stmpe_autosleep_delay[i] >= timeout)
551                         return i;
552         }
553
554         /*
555          * requests for delays longer than supported should not return the
556          * longest supported delay
557          */
558         return -EINVAL;
559 }
560
561 static int stmpe_autosleep(struct stmpe *stmpe, int autosleep_timeout)
562 {
563         int ret;
564
565         if (!stmpe->variant->enable_autosleep)
566                 return -ENOSYS;
567
568         mutex_lock(&stmpe->lock);
569         ret = stmpe->variant->enable_autosleep(stmpe, autosleep_timeout);
570         mutex_unlock(&stmpe->lock);
571
572         return ret;
573 }
574
575 /*
576  * Both stmpe 1601/2403 support same layout for autosleep
577  */
578 static int stmpe1601_autosleep(struct stmpe *stmpe,
579                 int autosleep_timeout)
580 {
581         int ret, timeout;
582
583         /* choose the best available timeout */
584         timeout = stmpe_round_timeout(autosleep_timeout);
585         if (timeout < 0) {
586                 dev_err(stmpe->dev, "invalid timeout\n");
587                 return timeout;
588         }
589
590         ret = __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2,
591                         STMPE1601_AUTOSLEEP_TIMEOUT_MASK,
592                         timeout);
593         if (ret < 0)
594                 return ret;
595
596         return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2,
597                         STPME1601_AUTOSLEEP_ENABLE,
598                         STPME1601_AUTOSLEEP_ENABLE);
599 }
600
601 static int stmpe1601_enable(struct stmpe *stmpe, unsigned int blocks,
602                             bool enable)
603 {
604         unsigned int mask = 0;
605
606         if (blocks & STMPE_BLOCK_GPIO)
607                 mask |= STMPE1601_SYS_CTRL_ENABLE_GPIO;
608
609         if (blocks & STMPE_BLOCK_KEYPAD)
610                 mask |= STMPE1601_SYS_CTRL_ENABLE_KPC;
611
612         return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL, mask,
613                                 enable ? mask : 0);
614 }
615
616 static int stmpe1601_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
617 {
618         switch (block) {
619         case STMPE_BLOCK_PWM:
620                 return 2;
621
622         case STMPE_BLOCK_KEYPAD:
623                 return 1;
624
625         case STMPE_BLOCK_GPIO:
626         default:
627                 return 0;
628         }
629 }
630
631 static struct stmpe_variant_info stmpe1601 = {
632         .name           = "stmpe1601",
633         .id_val         = 0x0210,
634         .id_mask        = 0xfff0,       /* at least 0x0210 and 0x0212 */
635         .num_gpios      = 16,
636         .af_bits        = 2,
637         .regs           = stmpe1601_regs,
638         .blocks         = stmpe1601_blocks,
639         .num_blocks     = ARRAY_SIZE(stmpe1601_blocks),
640         .num_irqs       = STMPE1601_NR_INTERNAL_IRQS,
641         .enable         = stmpe1601_enable,
642         .get_altfunc    = stmpe1601_get_altfunc,
643         .enable_autosleep       = stmpe1601_autosleep,
644 };
645
646 /*
647  * STMPE24XX
648  */
649
650 static const u8 stmpe24xx_regs[] = {
651         [STMPE_IDX_CHIP_ID]     = STMPE24XX_REG_CHIP_ID,
652         [STMPE_IDX_ICR_LSB]     = STMPE24XX_REG_ICR_LSB,
653         [STMPE_IDX_IER_LSB]     = STMPE24XX_REG_IER_LSB,
654         [STMPE_IDX_ISR_MSB]     = STMPE24XX_REG_ISR_MSB,
655         [STMPE_IDX_GPMR_LSB]    = STMPE24XX_REG_GPMR_LSB,
656         [STMPE_IDX_GPSR_LSB]    = STMPE24XX_REG_GPSR_LSB,
657         [STMPE_IDX_GPCR_LSB]    = STMPE24XX_REG_GPCR_LSB,
658         [STMPE_IDX_GPDR_LSB]    = STMPE24XX_REG_GPDR_LSB,
659         [STMPE_IDX_GPRER_LSB]   = STMPE24XX_REG_GPRER_LSB,
660         [STMPE_IDX_GPFER_LSB]   = STMPE24XX_REG_GPFER_LSB,
661         [STMPE_IDX_GPAFR_U_MSB] = STMPE24XX_REG_GPAFR_U_MSB,
662         [STMPE_IDX_IEGPIOR_LSB] = STMPE24XX_REG_IEGPIOR_LSB,
663         [STMPE_IDX_ISGPIOR_MSB] = STMPE24XX_REG_ISGPIOR_MSB,
664         [STMPE_IDX_GPEDR_MSB]   = STMPE24XX_REG_GPEDR_MSB,
665 };
666
667 static struct stmpe_variant_block stmpe24xx_blocks[] = {
668         {
669                 .cell   = &stmpe_gpio_cell,
670                 .irq    = STMPE24XX_IRQ_GPIOC,
671                 .block  = STMPE_BLOCK_GPIO,
672         },
673         {
674                 .cell   = &stmpe_keypad_cell,
675                 .irq    = STMPE24XX_IRQ_KEYPAD,
676                 .block  = STMPE_BLOCK_KEYPAD,
677         },
678 };
679
680 static int stmpe24xx_enable(struct stmpe *stmpe, unsigned int blocks,
681                             bool enable)
682 {
683         unsigned int mask = 0;
684
685         if (blocks & STMPE_BLOCK_GPIO)
686                 mask |= STMPE24XX_SYS_CTRL_ENABLE_GPIO;
687
688         if (blocks & STMPE_BLOCK_KEYPAD)
689                 mask |= STMPE24XX_SYS_CTRL_ENABLE_KPC;
690
691         return __stmpe_set_bits(stmpe, STMPE24XX_REG_SYS_CTRL, mask,
692                                 enable ? mask : 0);
693 }
694
695 static int stmpe24xx_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
696 {
697         switch (block) {
698         case STMPE_BLOCK_ROTATOR:
699                 return 2;
700
701         case STMPE_BLOCK_KEYPAD:
702                 return 1;
703
704         case STMPE_BLOCK_GPIO:
705         default:
706                 return 0;
707         }
708 }
709
710 static struct stmpe_variant_info stmpe2401 = {
711         .name           = "stmpe2401",
712         .id_val         = 0x0101,
713         .id_mask        = 0xffff,
714         .num_gpios      = 24,
715         .af_bits        = 2,
716         .regs           = stmpe24xx_regs,
717         .blocks         = stmpe24xx_blocks,
718         .num_blocks     = ARRAY_SIZE(stmpe24xx_blocks),
719         .num_irqs       = STMPE24XX_NR_INTERNAL_IRQS,
720         .enable         = stmpe24xx_enable,
721         .get_altfunc    = stmpe24xx_get_altfunc,
722 };
723
724 static struct stmpe_variant_info stmpe2403 = {
725         .name           = "stmpe2403",
726         .id_val         = 0x0120,
727         .id_mask        = 0xffff,
728         .num_gpios      = 24,
729         .af_bits        = 2,
730         .regs           = stmpe24xx_regs,
731         .blocks         = stmpe24xx_blocks,
732         .num_blocks     = ARRAY_SIZE(stmpe24xx_blocks),
733         .num_irqs       = STMPE24XX_NR_INTERNAL_IRQS,
734         .enable         = stmpe24xx_enable,
735         .get_altfunc    = stmpe24xx_get_altfunc,
736         .enable_autosleep       = stmpe1601_autosleep, /* same as stmpe1601 */
737 };
738
739 static struct stmpe_variant_info *stmpe_variant_info[STMPE_NBR_PARTS] = {
740         [STMPE610]      = &stmpe610,
741         [STMPE801]      = &stmpe801,
742         [STMPE811]      = &stmpe811,
743         [STMPE1601]     = &stmpe1601,
744         [STMPE2401]     = &stmpe2401,
745         [STMPE2403]     = &stmpe2403,
746 };
747
748 /*
749  * These devices can be connected in a 'no-irq' configuration - the irq pin
750  * is not used and the device cannot interrupt the CPU. Here we only list
751  * devices which support this configuration - the driver will fail probing
752  * for any devices not listed here which are configured in this way.
753  */
754 static struct stmpe_variant_info *stmpe_noirq_variant_info[STMPE_NBR_PARTS] = {
755         [STMPE801]      = &stmpe801_noirq,
756 };
757
758 static irqreturn_t stmpe_irq(int irq, void *data)
759 {
760         struct stmpe *stmpe = data;
761         struct stmpe_variant_info *variant = stmpe->variant;
762         int num = DIV_ROUND_UP(variant->num_irqs, 8);
763         u8 israddr = stmpe->regs[STMPE_IDX_ISR_MSB];
764         u8 isr[num];
765         int ret;
766         int i;
767
768         if (variant->id_val == STMPE801_ID) {
769                 handle_nested_irq(stmpe->irq_base);
770                 return IRQ_HANDLED;
771         }
772
773         ret = stmpe_block_read(stmpe, israddr, num, isr);
774         if (ret < 0)
775                 return IRQ_NONE;
776
777         for (i = 0; i < num; i++) {
778                 int bank = num - i - 1;
779                 u8 status = isr[i];
780                 u8 clear;
781
782                 status &= stmpe->ier[bank];
783                 if (!status)
784                         continue;
785
786                 clear = status;
787                 while (status) {
788                         int bit = __ffs(status);
789                         int line = bank * 8 + bit;
790
791                         handle_nested_irq(stmpe->irq_base + line);
792                         status &= ~(1 << bit);
793                 }
794
795                 stmpe_reg_write(stmpe, israddr + i, clear);
796         }
797
798         return IRQ_HANDLED;
799 }
800
801 static void stmpe_irq_lock(struct irq_data *data)
802 {
803         struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
804
805         mutex_lock(&stmpe->irq_lock);
806 }
807
808 static void stmpe_irq_sync_unlock(struct irq_data *data)
809 {
810         struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
811         struct stmpe_variant_info *variant = stmpe->variant;
812         int num = DIV_ROUND_UP(variant->num_irqs, 8);
813         int i;
814
815         for (i = 0; i < num; i++) {
816                 u8 new = stmpe->ier[i];
817                 u8 old = stmpe->oldier[i];
818
819                 if (new == old)
820                         continue;
821
822                 stmpe->oldier[i] = new;
823                 stmpe_reg_write(stmpe, stmpe->regs[STMPE_IDX_IER_LSB] - i, new);
824         }
825
826         mutex_unlock(&stmpe->irq_lock);
827 }
828
829 static void stmpe_irq_mask(struct irq_data *data)
830 {
831         struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
832         int offset = data->irq - stmpe->irq_base;
833         int regoffset = offset / 8;
834         int mask = 1 << (offset % 8);
835
836         stmpe->ier[regoffset] &= ~mask;
837 }
838
839 static void stmpe_irq_unmask(struct irq_data *data)
840 {
841         struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
842         int offset = data->irq - stmpe->irq_base;
843         int regoffset = offset / 8;
844         int mask = 1 << (offset % 8);
845
846         stmpe->ier[regoffset] |= mask;
847 }
848
849 static struct irq_chip stmpe_irq_chip = {
850         .name                   = "stmpe",
851         .irq_bus_lock           = stmpe_irq_lock,
852         .irq_bus_sync_unlock    = stmpe_irq_sync_unlock,
853         .irq_mask               = stmpe_irq_mask,
854         .irq_unmask             = stmpe_irq_unmask,
855 };
856
857 static int __devinit stmpe_irq_init(struct stmpe *stmpe)
858 {
859         struct irq_chip *chip = NULL;
860         int num_irqs = stmpe->variant->num_irqs;
861         int base = stmpe->irq_base;
862         int irq;
863
864         if (stmpe->variant->id_val != STMPE801_ID)
865                 chip = &stmpe_irq_chip;
866
867         for (irq = base; irq < base + num_irqs; irq++) {
868                 irq_set_chip_data(irq, stmpe);
869                 irq_set_chip_and_handler(irq, chip, handle_edge_irq);
870                 irq_set_nested_thread(irq, 1);
871 #ifdef CONFIG_ARM
872                 set_irq_flags(irq, IRQF_VALID);
873 #else
874                 irq_set_noprobe(irq);
875 #endif
876         }
877
878         return 0;
879 }
880
881 static void stmpe_irq_remove(struct stmpe *stmpe)
882 {
883         int num_irqs = stmpe->variant->num_irqs;
884         int base = stmpe->irq_base;
885         int irq;
886
887         for (irq = base; irq < base + num_irqs; irq++) {
888 #ifdef CONFIG_ARM
889                 set_irq_flags(irq, 0);
890 #endif
891                 irq_set_chip_and_handler(irq, NULL, NULL);
892                 irq_set_chip_data(irq, NULL);
893         }
894 }
895
896 static int __devinit stmpe_chip_init(struct stmpe *stmpe)
897 {
898         unsigned int irq_trigger = stmpe->pdata->irq_trigger;
899         int autosleep_timeout = stmpe->pdata->autosleep_timeout;
900         struct stmpe_variant_info *variant = stmpe->variant;
901         u8 icr = 0;
902         unsigned int id;
903         u8 data[2];
904         int ret;
905
906         ret = stmpe_block_read(stmpe, stmpe->regs[STMPE_IDX_CHIP_ID],
907                                ARRAY_SIZE(data), data);
908         if (ret < 0)
909                 return ret;
910
911         id = (data[0] << 8) | data[1];
912         if ((id & variant->id_mask) != variant->id_val) {
913                 dev_err(stmpe->dev, "unknown chip id: %#x\n", id);
914                 return -EINVAL;
915         }
916
917         dev_info(stmpe->dev, "%s detected, chip id: %#x\n", variant->name, id);
918
919         /* Disable all modules -- subdrivers should enable what they need. */
920         ret = stmpe_disable(stmpe, ~0);
921         if (ret)
922                 return ret;
923
924         if (stmpe->irq >= 0) {
925                 if (id == STMPE801_ID)
926                         icr = STMPE801_REG_SYS_CTRL_INT_EN;
927                 else
928                         icr = STMPE_ICR_LSB_GIM;
929
930                 /* STMPE801 doesn't support Edge interrupts */
931                 if (id != STMPE801_ID) {
932                         if (irq_trigger == IRQF_TRIGGER_FALLING ||
933                                         irq_trigger == IRQF_TRIGGER_RISING)
934                                 icr |= STMPE_ICR_LSB_EDGE;
935                 }
936
937                 if (irq_trigger == IRQF_TRIGGER_RISING ||
938                                 irq_trigger == IRQF_TRIGGER_HIGH) {
939                         if (id == STMPE801_ID)
940                                 icr |= STMPE801_REG_SYS_CTRL_INT_HI;
941                         else
942                                 icr |= STMPE_ICR_LSB_HIGH;
943                 }
944
945                 if (stmpe->pdata->irq_invert_polarity) {
946                         if (id == STMPE801_ID)
947                                 icr ^= STMPE801_REG_SYS_CTRL_INT_HI;
948                         else
949                                 icr ^= STMPE_ICR_LSB_HIGH;
950                 }
951         }
952
953         if (stmpe->pdata->autosleep) {
954                 ret = stmpe_autosleep(stmpe, autosleep_timeout);
955                 if (ret)
956                         return ret;
957         }
958
959         return stmpe_reg_write(stmpe, stmpe->regs[STMPE_IDX_ICR_LSB], icr);
960 }
961
962 static int __devinit stmpe_add_device(struct stmpe *stmpe,
963                                       struct mfd_cell *cell, int irq)
964 {
965         return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1,
966                                NULL, stmpe->irq_base + irq, NULL);
967 }
968
969 static int __devinit stmpe_devices_init(struct stmpe *stmpe)
970 {
971         struct stmpe_variant_info *variant = stmpe->variant;
972         unsigned int platform_blocks = stmpe->pdata->blocks;
973         int ret = -EINVAL;
974         int i;
975
976         for (i = 0; i < variant->num_blocks; i++) {
977                 struct stmpe_variant_block *block = &variant->blocks[i];
978
979                 if (!(platform_blocks & block->block))
980                         continue;
981
982                 platform_blocks &= ~block->block;
983                 ret = stmpe_add_device(stmpe, block->cell, block->irq);
984                 if (ret)
985                         return ret;
986         }
987
988         if (platform_blocks)
989                 dev_warn(stmpe->dev,
990                          "platform wants blocks (%#x) not present on variant",
991                          platform_blocks);
992
993         return ret;
994 }
995
996 /* Called from client specific probe routines */
997 int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
998 {
999         struct stmpe_platform_data *pdata = dev_get_platdata(ci->dev);
1000         struct stmpe *stmpe;
1001         int ret;
1002
1003         if (!pdata)
1004                 return -EINVAL;
1005
1006         stmpe = kzalloc(sizeof(struct stmpe), GFP_KERNEL);
1007         if (!stmpe)
1008                 return -ENOMEM;
1009
1010         mutex_init(&stmpe->irq_lock);
1011         mutex_init(&stmpe->lock);
1012
1013         stmpe->dev = ci->dev;
1014         stmpe->client = ci->client;
1015         stmpe->pdata = pdata;
1016         stmpe->irq_base = pdata->irq_base;
1017         stmpe->ci = ci;
1018         stmpe->partnum = partnum;
1019         stmpe->variant = stmpe_variant_info[partnum];
1020         stmpe->regs = stmpe->variant->regs;
1021         stmpe->num_gpios = stmpe->variant->num_gpios;
1022         dev_set_drvdata(stmpe->dev, stmpe);
1023
1024         if (ci->init)
1025                 ci->init(stmpe);
1026
1027         if (pdata->irq_over_gpio) {
1028                 ret = gpio_request_one(pdata->irq_gpio, GPIOF_DIR_IN, "stmpe");
1029                 if (ret) {
1030                         dev_err(stmpe->dev, "failed to request IRQ GPIO: %d\n",
1031                                         ret);
1032                         goto out_free;
1033                 }
1034
1035                 stmpe->irq = gpio_to_irq(pdata->irq_gpio);
1036         } else {
1037                 stmpe->irq = ci->irq;
1038         }
1039
1040         if (stmpe->irq < 0) {
1041                 /* use alternate variant info for no-irq mode, if supported */
1042                 dev_info(stmpe->dev,
1043                         "%s configured in no-irq mode by platform data\n",
1044                         stmpe->variant->name);
1045                 if (!stmpe_noirq_variant_info[stmpe->partnum]) {
1046                         dev_err(stmpe->dev,
1047                                 "%s does not support no-irq mode!\n",
1048                                 stmpe->variant->name);
1049                         ret = -ENODEV;
1050                         goto free_gpio;
1051                 }
1052                 stmpe->variant = stmpe_noirq_variant_info[stmpe->partnum];
1053         }
1054
1055         ret = stmpe_chip_init(stmpe);
1056         if (ret)
1057                 goto free_gpio;
1058
1059         if (stmpe->irq >= 0) {
1060                 ret = stmpe_irq_init(stmpe);
1061                 if (ret)
1062                         goto free_gpio;
1063
1064                 ret = request_threaded_irq(stmpe->irq, NULL, stmpe_irq,
1065                                 pdata->irq_trigger | IRQF_ONESHOT,
1066                                 "stmpe", stmpe);
1067                 if (ret) {
1068                         dev_err(stmpe->dev, "failed to request IRQ: %d\n",
1069                                         ret);
1070                         goto out_removeirq;
1071                 }
1072         }
1073
1074         ret = stmpe_devices_init(stmpe);
1075         if (ret) {
1076                 dev_err(stmpe->dev, "failed to add children\n");
1077                 goto out_removedevs;
1078         }
1079
1080         return 0;
1081
1082 out_removedevs:
1083         mfd_remove_devices(stmpe->dev);
1084         if (stmpe->irq >= 0)
1085                 free_irq(stmpe->irq, stmpe);
1086 out_removeirq:
1087         if (stmpe->irq >= 0)
1088                 stmpe_irq_remove(stmpe);
1089 free_gpio:
1090         if (pdata->irq_over_gpio)
1091                 gpio_free(pdata->irq_gpio);
1092 out_free:
1093         kfree(stmpe);
1094         return ret;
1095 }
1096
1097 int stmpe_remove(struct stmpe *stmpe)
1098 {
1099         mfd_remove_devices(stmpe->dev);
1100
1101         if (stmpe->irq >= 0) {
1102                 free_irq(stmpe->irq, stmpe);
1103                 stmpe_irq_remove(stmpe);
1104         }
1105
1106         if (stmpe->pdata->irq_over_gpio)
1107                 gpio_free(stmpe->pdata->irq_gpio);
1108
1109         kfree(stmpe);
1110
1111         return 0;
1112 }
1113
1114 #ifdef CONFIG_PM
1115 static int stmpe_suspend(struct device *dev)
1116 {
1117         struct stmpe *stmpe = dev_get_drvdata(dev);
1118
1119         if (stmpe->irq >= 0 && device_may_wakeup(dev))
1120                 enable_irq_wake(stmpe->irq);
1121
1122         return 0;
1123 }
1124
1125 static int stmpe_resume(struct device *dev)
1126 {
1127         struct stmpe *stmpe = dev_get_drvdata(dev);
1128
1129         if (stmpe->irq >= 0 && device_may_wakeup(dev))
1130                 disable_irq_wake(stmpe->irq);
1131
1132         return 0;
1133 }
1134
1135 const struct dev_pm_ops stmpe_dev_pm_ops = {
1136         .suspend        = stmpe_suspend,
1137         .resume         = stmpe_resume,
1138 };
1139 #endif