xref: /openbmc/linux/drivers/mfd/stmpe.c (revision 3b64b188)
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 	.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[] = {
423 	[STMPE_IDX_CHIP_ID]	= STMPE811_REG_CHIP_ID,
424 	[STMPE_IDX_ICR_LSB]	= STMPE811_REG_INT_CTRL,
425 	[STMPE_IDX_IER_LSB]	= STMPE811_REG_INT_EN,
426 	[STMPE_IDX_ISR_MSB]	= STMPE811_REG_INT_STA,
427 	[STMPE_IDX_GPMR_LSB]	= STMPE811_REG_GPIO_MP_STA,
428 	[STMPE_IDX_GPSR_LSB]	= STMPE811_REG_GPIO_SET_PIN,
429 	[STMPE_IDX_GPCR_LSB]	= STMPE811_REG_GPIO_CLR_PIN,
430 	[STMPE_IDX_GPDR_LSB]	= STMPE811_REG_GPIO_DIR,
431 	[STMPE_IDX_GPRER_LSB]	= STMPE811_REG_GPIO_RE,
432 	[STMPE_IDX_GPFER_LSB]	= STMPE811_REG_GPIO_FE,
433 	[STMPE_IDX_GPAFR_U_MSB]	= STMPE811_REG_GPIO_AF,
434 	[STMPE_IDX_IEGPIOR_LSB]	= STMPE811_REG_GPIO_INT_EN,
435 	[STMPE_IDX_ISGPIOR_MSB]	= STMPE811_REG_GPIO_INT_STA,
436 	[STMPE_IDX_GPEDR_MSB]	= STMPE811_REG_GPIO_ED,
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)
458 		mask |= STMPE811_SYS_CTRL2_GPIO_OFF;
459 
460 	if (blocks & STMPE_BLOCK_ADC)
461 		mask |= STMPE811_SYS_CTRL2_ADC_OFF;
462 
463 	if (blocks & STMPE_BLOCK_TOUCHSCREEN)
464 		mask |= STMPE811_SYS_CTRL2_TSC_OFF;
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[] = {
510 	[STMPE_IDX_CHIP_ID]	= STMPE1601_REG_CHIP_ID,
511 	[STMPE_IDX_ICR_LSB]	= STMPE1601_REG_ICR_LSB,
512 	[STMPE_IDX_IER_LSB]	= STMPE1601_REG_IER_LSB,
513 	[STMPE_IDX_ISR_MSB]	= STMPE1601_REG_ISR_MSB,
514 	[STMPE_IDX_GPMR_LSB]	= STMPE1601_REG_GPIO_MP_LSB,
515 	[STMPE_IDX_GPSR_LSB]	= STMPE1601_REG_GPIO_SET_LSB,
516 	[STMPE_IDX_GPCR_LSB]	= STMPE1601_REG_GPIO_CLR_LSB,
517 	[STMPE_IDX_GPDR_LSB]	= STMPE1601_REG_GPIO_SET_DIR_LSB,
518 	[STMPE_IDX_GPRER_LSB]	= STMPE1601_REG_GPIO_RE_LSB,
519 	[STMPE_IDX_GPFER_LSB]	= STMPE1601_REG_GPIO_FE_LSB,
520 	[STMPE_IDX_GPAFR_U_MSB]	= STMPE1601_REG_GPIO_AF_U_MSB,
521 	[STMPE_IDX_IEGPIOR_LSB]	= STMPE1601_REG_INT_EN_GPIO_MASK_LSB,
522 	[STMPE_IDX_ISGPIOR_MSB]	= STMPE1601_REG_INT_STA_GPIO_MSB,
523 	[STMPE_IDX_GPEDR_MSB]	= STMPE1601_REG_GPIO_ED_MSB,
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,
590 			STMPE1601_AUTOSLEEP_TIMEOUT_MASK,
591 			timeout);
592 	if (ret < 0)
593 		return ret;
594 
595 	return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL2,
596 			STPME1601_AUTOSLEEP_ENABLE,
597 			STPME1601_AUTOSLEEP_ENABLE);
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)
606 		mask |= STMPE1601_SYS_CTRL_ENABLE_GPIO;
607 
608 	if (blocks & STMPE_BLOCK_KEYPAD)
609 		mask |= STMPE1601_SYS_CTRL_ENABLE_KPC;
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[] = {
650 	[STMPE_IDX_CHIP_ID]	= STMPE24XX_REG_CHIP_ID,
651 	[STMPE_IDX_ICR_LSB]	= STMPE24XX_REG_ICR_LSB,
652 	[STMPE_IDX_IER_LSB]	= STMPE24XX_REG_IER_LSB,
653 	[STMPE_IDX_ISR_MSB]	= STMPE24XX_REG_ISR_MSB,
654 	[STMPE_IDX_GPMR_LSB]	= STMPE24XX_REG_GPMR_LSB,
655 	[STMPE_IDX_GPSR_LSB]	= STMPE24XX_REG_GPSR_LSB,
656 	[STMPE_IDX_GPCR_LSB]	= STMPE24XX_REG_GPCR_LSB,
657 	[STMPE_IDX_GPDR_LSB]	= STMPE24XX_REG_GPDR_LSB,
658 	[STMPE_IDX_GPRER_LSB]	= STMPE24XX_REG_GPRER_LSB,
659 	[STMPE_IDX_GPFER_LSB]	= STMPE24XX_REG_GPFER_LSB,
660 	[STMPE_IDX_GPAFR_U_MSB]	= STMPE24XX_REG_GPAFR_U_MSB,
661 	[STMPE_IDX_IEGPIOR_LSB]	= STMPE24XX_REG_IEGPIOR_LSB,
662 	[STMPE_IDX_ISGPIOR_MSB]	= STMPE24XX_REG_ISGPIOR_MSB,
663 	[STMPE_IDX_GPEDR_MSB]	= STMPE24XX_REG_GPEDR_MSB,
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)
685 		mask |= STMPE24XX_SYS_CTRL_ENABLE_GPIO;
686 
687 	if (blocks & STMPE_BLOCK_KEYPAD)
688 		mask |= STMPE24XX_SYS_CTRL_ENABLE_KPC;
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 
738 static struct stmpe_variant_info *stmpe_variant_info[STMPE_NBR_PARTS] = {
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
871 		set_irq_flags(irq, IRQF_VALID);
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)
925 			icr = STMPE801_REG_SYS_CTRL_INT_EN;
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)
939 				icr |= STMPE801_REG_SYS_CTRL_INT_HI;
940 			else
941 				icr |= STMPE_ICR_LSB_HIGH;
942 		}
943 
944 		if (stmpe->pdata->irq_invert_polarity) {
945 			if (id == STMPE801_ID)
946 				icr ^= STMPE801_REG_SYS_CTRL_INT_HI;
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
1139