Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stmpe.c
Go to the documentation of this file.
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 <[email protected]> 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 
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 }
116 
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 }
133 
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 }
150 
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 }
168 
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 }
187 
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 }
206 
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 }
226 
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 }
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[] = {
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  .resources = stmpe_ts_resources,
415  .num_resources = ARRAY_SIZE(stmpe_ts_resources),
416 };
417 
418 /*
419  * STMPE811 or STMPE610
420  */
421 
422 static const u8 stmpe811_regs[] = {
437 };
438 
439 static struct stmpe_variant_block stmpe811_blocks[] = {
440  {
441  .cell = &stmpe_gpio_cell,
442  .irq = STMPE811_IRQ_GPIOC,
443  .block = STMPE_BLOCK_GPIO,
444  },
445  {
446  .cell = &stmpe_ts_cell,
447  .irq = STMPE811_IRQ_TOUCH_DET,
448  .block = STMPE_BLOCK_TOUCHSCREEN,
449  },
450 };
451 
452 static int stmpe811_enable(struct stmpe *stmpe, unsigned int blocks,
453  bool enable)
454 {
455  unsigned int mask = 0;
456 
457  if (blocks & STMPE_BLOCK_GPIO)
459 
460  if (blocks & STMPE_BLOCK_ADC)
462 
463  if (blocks & STMPE_BLOCK_TOUCHSCREEN)
465 
466  return __stmpe_set_bits(stmpe, STMPE811_REG_SYS_CTRL2, mask,
467  enable ? 0 : mask);
468 }
469 
470 static int stmpe811_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
471 {
472  /* 0 for touchscreen, 1 for GPIO */
473  return block != STMPE_BLOCK_TOUCHSCREEN;
474 }
475 
476 static struct stmpe_variant_info stmpe811 = {
477  .name = "stmpe811",
478  .id_val = 0x0811,
479  .id_mask = 0xffff,
480  .num_gpios = 8,
481  .af_bits = 1,
482  .regs = stmpe811_regs,
483  .blocks = stmpe811_blocks,
484  .num_blocks = ARRAY_SIZE(stmpe811_blocks),
485  .num_irqs = STMPE811_NR_INTERNAL_IRQS,
486  .enable = stmpe811_enable,
487  .get_altfunc = stmpe811_get_altfunc,
488 };
489 
490 /* Similar to 811, except number of gpios */
491 static struct stmpe_variant_info stmpe610 = {
492  .name = "stmpe610",
493  .id_val = 0x0811,
494  .id_mask = 0xffff,
495  .num_gpios = 6,
496  .af_bits = 1,
497  .regs = stmpe811_regs,
498  .blocks = stmpe811_blocks,
499  .num_blocks = ARRAY_SIZE(stmpe811_blocks),
500  .num_irqs = STMPE811_NR_INTERNAL_IRQS,
501  .enable = stmpe811_enable,
502  .get_altfunc = stmpe811_get_altfunc,
503 };
504 
505 /*
506  * STMPE1601
507  */
508 
509 static const u8 stmpe1601_regs[] = {
524 };
525 
526 static struct stmpe_variant_block stmpe1601_blocks[] = {
527  {
528  .cell = &stmpe_gpio_cell,
529  .irq = STMPE24XX_IRQ_GPIOC,
530  .block = STMPE_BLOCK_GPIO,
531  },
532  {
533  .cell = &stmpe_keypad_cell,
534  .irq = STMPE24XX_IRQ_KEYPAD,
535  .block = STMPE_BLOCK_KEYPAD,
536  },
537 };
538 
539 /* supported autosleep timeout delay (in msecs) */
540 static const int stmpe_autosleep_delay[] = {
541  4, 16, 32, 64, 128, 256, 512, 1024,
542 };
543 
544 static int stmpe_round_timeout(int timeout)
545 {
546  int i;
547 
548  for (i = 0; i < ARRAY_SIZE(stmpe_autosleep_delay); i++) {
549  if (stmpe_autosleep_delay[i] >= timeout)
550  return i;
551  }
552 
553  /*
554  * requests for delays longer than supported should not return the
555  * longest supported delay
556  */
557  return -EINVAL;
558 }
559 
560 static int stmpe_autosleep(struct stmpe *stmpe, int autosleep_timeout)
561 {
562  int ret;
563 
564  if (!stmpe->variant->enable_autosleep)
565  return -ENOSYS;
566 
567  mutex_lock(&stmpe->lock);
568  ret = stmpe->variant->enable_autosleep(stmpe, autosleep_timeout);
569  mutex_unlock(&stmpe->lock);
570 
571  return ret;
572 }
573 
574 /*
575  * Both stmpe 1601/2403 support same layout for autosleep
576  */
577 static int stmpe1601_autosleep(struct stmpe *stmpe,
578  int autosleep_timeout)
579 {
580  int ret, timeout;
581 
582  /* choose the best available timeout */
583  timeout = stmpe_round_timeout(autosleep_timeout);
584  if (timeout < 0) {
585  dev_err(stmpe->dev, "invalid timeout\n");
586  return timeout;
587  }
588 
589  ret = __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2,
591  timeout);
592  if (ret < 0)
593  return ret;
594 
595  return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2,
598 }
599 
600 static int stmpe1601_enable(struct stmpe *stmpe, unsigned int blocks,
601  bool enable)
602 {
603  unsigned int mask = 0;
604 
605  if (blocks & STMPE_BLOCK_GPIO)
607 
608  if (blocks & STMPE_BLOCK_KEYPAD)
610 
611  return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL, mask,
612  enable ? mask : 0);
613 }
614 
615 static int stmpe1601_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
616 {
617  switch (block) {
618  case STMPE_BLOCK_PWM:
619  return 2;
620 
621  case STMPE_BLOCK_KEYPAD:
622  return 1;
623 
624  case STMPE_BLOCK_GPIO:
625  default:
626  return 0;
627  }
628 }
629 
630 static struct stmpe_variant_info stmpe1601 = {
631  .name = "stmpe1601",
632  .id_val = 0x0210,
633  .id_mask = 0xfff0, /* at least 0x0210 and 0x0212 */
634  .num_gpios = 16,
635  .af_bits = 2,
636  .regs = stmpe1601_regs,
637  .blocks = stmpe1601_blocks,
638  .num_blocks = ARRAY_SIZE(stmpe1601_blocks),
639  .num_irqs = STMPE1601_NR_INTERNAL_IRQS,
640  .enable = stmpe1601_enable,
641  .get_altfunc = stmpe1601_get_altfunc,
642  .enable_autosleep = stmpe1601_autosleep,
643 };
644 
645 /*
646  * STMPE24XX
647  */
648 
649 static const u8 stmpe24xx_regs[] = {
664 };
665 
666 static struct stmpe_variant_block stmpe24xx_blocks[] = {
667  {
668  .cell = &stmpe_gpio_cell,
669  .irq = STMPE24XX_IRQ_GPIOC,
670  .block = STMPE_BLOCK_GPIO,
671  },
672  {
673  .cell = &stmpe_keypad_cell,
674  .irq = STMPE24XX_IRQ_KEYPAD,
675  .block = STMPE_BLOCK_KEYPAD,
676  },
677 };
678 
679 static int stmpe24xx_enable(struct stmpe *stmpe, unsigned int blocks,
680  bool enable)
681 {
682  unsigned int mask = 0;
683 
684  if (blocks & STMPE_BLOCK_GPIO)
686 
687  if (blocks & STMPE_BLOCK_KEYPAD)
689 
690  return __stmpe_set_bits(stmpe, STMPE24XX_REG_SYS_CTRL, mask,
691  enable ? mask : 0);
692 }
693 
694 static int stmpe24xx_get_altfunc(struct stmpe *stmpe, enum stmpe_block block)
695 {
696  switch (block) {
697  case STMPE_BLOCK_ROTATOR:
698  return 2;
699 
700  case STMPE_BLOCK_KEYPAD:
701  return 1;
702 
703  case STMPE_BLOCK_GPIO:
704  default:
705  return 0;
706  }
707 }
708 
709 static struct stmpe_variant_info stmpe2401 = {
710  .name = "stmpe2401",
711  .id_val = 0x0101,
712  .id_mask = 0xffff,
713  .num_gpios = 24,
714  .af_bits = 2,
715  .regs = stmpe24xx_regs,
716  .blocks = stmpe24xx_blocks,
717  .num_blocks = ARRAY_SIZE(stmpe24xx_blocks),
718  .num_irqs = STMPE24XX_NR_INTERNAL_IRQS,
719  .enable = stmpe24xx_enable,
720  .get_altfunc = stmpe24xx_get_altfunc,
721 };
722 
723 static struct stmpe_variant_info stmpe2403 = {
724  .name = "stmpe2403",
725  .id_val = 0x0120,
726  .id_mask = 0xffff,
727  .num_gpios = 24,
728  .af_bits = 2,
729  .regs = stmpe24xx_regs,
730  .blocks = stmpe24xx_blocks,
731  .num_blocks = ARRAY_SIZE(stmpe24xx_blocks),
732  .num_irqs = STMPE24XX_NR_INTERNAL_IRQS,
733  .enable = stmpe24xx_enable,
734  .get_altfunc = stmpe24xx_get_altfunc,
735  .enable_autosleep = stmpe1601_autosleep, /* same as stmpe1601 */
736 };
737 
739  [STMPE610] = &stmpe610,
740  [STMPE801] = &stmpe801,
741  [STMPE811] = &stmpe811,
742  [STMPE1601] = &stmpe1601,
743  [STMPE2401] = &stmpe2401,
744  [STMPE2403] = &stmpe2403,
745 };
746 
747 /*
748  * These devices can be connected in a 'no-irq' configuration - the irq pin
749  * is not used and the device cannot interrupt the CPU. Here we only list
750  * devices which support this configuration - the driver will fail probing
751  * for any devices not listed here which are configured in this way.
752  */
753 static struct stmpe_variant_info *stmpe_noirq_variant_info[STMPE_NBR_PARTS] = {
754  [STMPE801] = &stmpe801_noirq,
755 };
756 
757 static irqreturn_t stmpe_irq(int irq, void *data)
758 {
759  struct stmpe *stmpe = data;
760  struct stmpe_variant_info *variant = stmpe->variant;
761  int num = DIV_ROUND_UP(variant->num_irqs, 8);
762  u8 israddr = stmpe->regs[STMPE_IDX_ISR_MSB];
763  u8 isr[num];
764  int ret;
765  int i;
766 
767  if (variant->id_val == STMPE801_ID) {
768  handle_nested_irq(stmpe->irq_base);
769  return IRQ_HANDLED;
770  }
771 
772  ret = stmpe_block_read(stmpe, israddr, num, isr);
773  if (ret < 0)
774  return IRQ_NONE;
775 
776  for (i = 0; i < num; i++) {
777  int bank = num - i - 1;
778  u8 status = isr[i];
779  u8 clear;
780 
781  status &= stmpe->ier[bank];
782  if (!status)
783  continue;
784 
785  clear = status;
786  while (status) {
787  int bit = __ffs(status);
788  int line = bank * 8 + bit;
789 
790  handle_nested_irq(stmpe->irq_base + line);
791  status &= ~(1 << bit);
792  }
793 
794  stmpe_reg_write(stmpe, israddr + i, clear);
795  }
796 
797  return IRQ_HANDLED;
798 }
799 
800 static void stmpe_irq_lock(struct irq_data *data)
801 {
802  struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
803 
804  mutex_lock(&stmpe->irq_lock);
805 }
806 
807 static void stmpe_irq_sync_unlock(struct irq_data *data)
808 {
809  struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
810  struct stmpe_variant_info *variant = stmpe->variant;
811  int num = DIV_ROUND_UP(variant->num_irqs, 8);
812  int i;
813 
814  for (i = 0; i < num; i++) {
815  u8 new = stmpe->ier[i];
816  u8 old = stmpe->oldier[i];
817 
818  if (new == old)
819  continue;
820 
821  stmpe->oldier[i] = new;
822  stmpe_reg_write(stmpe, stmpe->regs[STMPE_IDX_IER_LSB] - i, new);
823  }
824 
825  mutex_unlock(&stmpe->irq_lock);
826 }
827 
828 static void stmpe_irq_mask(struct irq_data *data)
829 {
830  struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
831  int offset = data->irq - stmpe->irq_base;
832  int regoffset = offset / 8;
833  int mask = 1 << (offset % 8);
834 
835  stmpe->ier[regoffset] &= ~mask;
836 }
837 
838 static void stmpe_irq_unmask(struct irq_data *data)
839 {
840  struct stmpe *stmpe = irq_data_get_irq_chip_data(data);
841  int offset = data->irq - stmpe->irq_base;
842  int regoffset = offset / 8;
843  int mask = 1 << (offset % 8);
844 
845  stmpe->ier[regoffset] |= mask;
846 }
847 
848 static struct irq_chip stmpe_irq_chip = {
849  .name = "stmpe",
850  .irq_bus_lock = stmpe_irq_lock,
851  .irq_bus_sync_unlock = stmpe_irq_sync_unlock,
852  .irq_mask = stmpe_irq_mask,
853  .irq_unmask = stmpe_irq_unmask,
854 };
855 
856 static int __devinit stmpe_irq_init(struct stmpe *stmpe)
857 {
858  struct irq_chip *chip = NULL;
859  int num_irqs = stmpe->variant->num_irqs;
860  int base = stmpe->irq_base;
861  int irq;
862 
863  if (stmpe->variant->id_val != STMPE801_ID)
864  chip = &stmpe_irq_chip;
865 
866  for (irq = base; irq < base + num_irqs; irq++) {
867  irq_set_chip_data(irq, stmpe);
868  irq_set_chip_and_handler(irq, chip, handle_edge_irq);
869  irq_set_nested_thread(irq, 1);
870 #ifdef CONFIG_ARM
872 #else
873  irq_set_noprobe(irq);
874 #endif
875  }
876 
877  return 0;
878 }
879 
880 static void stmpe_irq_remove(struct stmpe *stmpe)
881 {
882  int num_irqs = stmpe->variant->num_irqs;
883  int base = stmpe->irq_base;
884  int irq;
885 
886  for (irq = base; irq < base + num_irqs; irq++) {
887 #ifdef CONFIG_ARM
888  set_irq_flags(irq, 0);
889 #endif
890  irq_set_chip_and_handler(irq, NULL, NULL);
891  irq_set_chip_data(irq, NULL);
892  }
893 }
894 
895 static int __devinit stmpe_chip_init(struct stmpe *stmpe)
896 {
897  unsigned int irq_trigger = stmpe->pdata->irq_trigger;
898  int autosleep_timeout = stmpe->pdata->autosleep_timeout;
899  struct stmpe_variant_info *variant = stmpe->variant;
900  u8 icr = 0;
901  unsigned int id;
902  u8 data[2];
903  int ret;
904 
905  ret = stmpe_block_read(stmpe, stmpe->regs[STMPE_IDX_CHIP_ID],
906  ARRAY_SIZE(data), data);
907  if (ret < 0)
908  return ret;
909 
910  id = (data[0] << 8) | data[1];
911  if ((id & variant->id_mask) != variant->id_val) {
912  dev_err(stmpe->dev, "unknown chip id: %#x\n", id);
913  return -EINVAL;
914  }
915 
916  dev_info(stmpe->dev, "%s detected, chip id: %#x\n", variant->name, id);
917 
918  /* Disable all modules -- subdrivers should enable what they need. */
919  ret = stmpe_disable(stmpe, ~0);
920  if (ret)
921  return ret;
922 
923  if (stmpe->irq >= 0) {
924  if (id == STMPE801_ID)
926  else
927  icr = STMPE_ICR_LSB_GIM;
928 
929  /* STMPE801 doesn't support Edge interrupts */
930  if (id != STMPE801_ID) {
931  if (irq_trigger == IRQF_TRIGGER_FALLING ||
932  irq_trigger == IRQF_TRIGGER_RISING)
933  icr |= STMPE_ICR_LSB_EDGE;
934  }
935 
936  if (irq_trigger == IRQF_TRIGGER_RISING ||
937  irq_trigger == IRQF_TRIGGER_HIGH) {
938  if (id == STMPE801_ID)
940  else
941  icr |= STMPE_ICR_LSB_HIGH;
942  }
943 
944  if (stmpe->pdata->irq_invert_polarity) {
945  if (id == STMPE801_ID)
947  else
948  icr ^= STMPE_ICR_LSB_HIGH;
949  }
950  }
951 
952  if (stmpe->pdata->autosleep) {
953  ret = stmpe_autosleep(stmpe, autosleep_timeout);
954  if (ret)
955  return ret;
956  }
957 
958  return stmpe_reg_write(stmpe, stmpe->regs[STMPE_IDX_ICR_LSB], icr);
959 }
960 
961 static int __devinit stmpe_add_device(struct stmpe *stmpe,
962  struct mfd_cell *cell, int irq)
963 {
964  return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1,
965  NULL, stmpe->irq_base + irq, NULL);
966 }
967 
968 static int __devinit stmpe_devices_init(struct stmpe *stmpe)
969 {
970  struct stmpe_variant_info *variant = stmpe->variant;
971  unsigned int platform_blocks = stmpe->pdata->blocks;
972  int ret = -EINVAL;
973  int i;
974 
975  for (i = 0; i < variant->num_blocks; i++) {
976  struct stmpe_variant_block *block = &variant->blocks[i];
977 
978  if (!(platform_blocks & block->block))
979  continue;
980 
981  platform_blocks &= ~block->block;
982  ret = stmpe_add_device(stmpe, block->cell, block->irq);
983  if (ret)
984  return ret;
985  }
986 
987  if (platform_blocks)
988  dev_warn(stmpe->dev,
989  "platform wants blocks (%#x) not present on variant",
990  platform_blocks);
991 
992  return ret;
993 }
994 
995 /* Called from client specific probe routines */
996 int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
997 {
998  struct stmpe_platform_data *pdata = dev_get_platdata(ci->dev);
999  struct stmpe *stmpe;
1000  int ret;
1001 
1002  if (!pdata)
1003  return -EINVAL;
1004 
1005  stmpe = kzalloc(sizeof(struct stmpe), GFP_KERNEL);
1006  if (!stmpe)
1007  return -ENOMEM;
1008 
1009  mutex_init(&stmpe->irq_lock);
1010  mutex_init(&stmpe->lock);
1011 
1012  stmpe->dev = ci->dev;
1013  stmpe->client = ci->client;
1014  stmpe->pdata = pdata;
1015  stmpe->irq_base = pdata->irq_base;
1016  stmpe->ci = ci;
1017  stmpe->partnum = partnum;
1018  stmpe->variant = stmpe_variant_info[partnum];
1019  stmpe->regs = stmpe->variant->regs;
1020  stmpe->num_gpios = stmpe->variant->num_gpios;
1021  dev_set_drvdata(stmpe->dev, stmpe);
1022 
1023  if (ci->init)
1024  ci->init(stmpe);
1025 
1026  if (pdata->irq_over_gpio) {
1027  ret = gpio_request_one(pdata->irq_gpio, GPIOF_DIR_IN, "stmpe");
1028  if (ret) {
1029  dev_err(stmpe->dev, "failed to request IRQ GPIO: %d\n",
1030  ret);
1031  goto out_free;
1032  }
1033 
1034  stmpe->irq = gpio_to_irq(pdata->irq_gpio);
1035  } else {
1036  stmpe->irq = ci->irq;
1037  }
1038 
1039  if (stmpe->irq < 0) {
1040  /* use alternate variant info for no-irq mode, if supported */
1041  dev_info(stmpe->dev,
1042  "%s configured in no-irq mode by platform data\n",
1043  stmpe->variant->name);
1044  if (!stmpe_noirq_variant_info[stmpe->partnum]) {
1045  dev_err(stmpe->dev,
1046  "%s does not support no-irq mode!\n",
1047  stmpe->variant->name);
1048  ret = -ENODEV;
1049  goto free_gpio;
1050  }
1051  stmpe->variant = stmpe_noirq_variant_info[stmpe->partnum];
1052  }
1053 
1054  ret = stmpe_chip_init(stmpe);
1055  if (ret)
1056  goto free_gpio;
1057 
1058  if (stmpe->irq >= 0) {
1059  ret = stmpe_irq_init(stmpe);
1060  if (ret)
1061  goto free_gpio;
1062 
1063  ret = request_threaded_irq(stmpe->irq, NULL, stmpe_irq,
1064  pdata->irq_trigger | IRQF_ONESHOT,
1065  "stmpe", stmpe);
1066  if (ret) {
1067  dev_err(stmpe->dev, "failed to request IRQ: %d\n",
1068  ret);
1069  goto out_removeirq;
1070  }
1071  }
1072 
1073  ret = stmpe_devices_init(stmpe);
1074  if (ret) {
1075  dev_err(stmpe->dev, "failed to add children\n");
1076  goto out_removedevs;
1077  }
1078 
1079  return 0;
1080 
1081 out_removedevs:
1082  mfd_remove_devices(stmpe->dev);
1083  if (stmpe->irq >= 0)
1084  free_irq(stmpe->irq, stmpe);
1085 out_removeirq:
1086  if (stmpe->irq >= 0)
1087  stmpe_irq_remove(stmpe);
1088 free_gpio:
1089  if (pdata->irq_over_gpio)
1090  gpio_free(pdata->irq_gpio);
1091 out_free:
1092  kfree(stmpe);
1093  return ret;
1094 }
1095 
1096 int stmpe_remove(struct stmpe *stmpe)
1097 {
1098  mfd_remove_devices(stmpe->dev);
1099 
1100  if (stmpe->irq >= 0) {
1101  free_irq(stmpe->irq, stmpe);
1102  stmpe_irq_remove(stmpe);
1103  }
1104 
1105  if (stmpe->pdata->irq_over_gpio)
1106  gpio_free(stmpe->pdata->irq_gpio);
1107 
1108  kfree(stmpe);
1109 
1110  return 0;
1111 }
1112 
1113 #ifdef CONFIG_PM
1114 static int stmpe_suspend(struct device *dev)
1115 {
1116  struct stmpe *stmpe = dev_get_drvdata(dev);
1117 
1118  if (stmpe->irq >= 0 && device_may_wakeup(dev))
1119  enable_irq_wake(stmpe->irq);
1120 
1121  return 0;
1122 }
1123 
1124 static int stmpe_resume(struct device *dev)
1125 {
1126  struct stmpe *stmpe = dev_get_drvdata(dev);
1127 
1128  if (stmpe->irq >= 0 && device_may_wakeup(dev))
1129  disable_irq_wake(stmpe->irq);
1130 
1131  return 0;
1132 }
1133 
1134 const struct dev_pm_ops stmpe_dev_pm_ops = {
1135  .suspend = stmpe_suspend,
1136  .resume = stmpe_resume,
1137 };
1138 #endif