1 /*
2  * ADS7846 based touchscreen and sensor driver
3  *
4  * Copyright (c) 2005 David Brownell
5  * Copyright (c) 2006 Nokia Corporation
6  * Various changes: Imre Deak <imre.deak@nokia.com>
7  *
8  * Using code from:
9  *  - corgi_ts.c
10  *	Copyright (C) 2004-2005 Richard Purdie
11  *  - omap_ts.[hc], ads7846.h, ts_osk.c
12  *	Copyright (C) 2002 MontaVista Software
13  *	Copyright (C) 2004 Texas Instruments
14  *	Copyright (C) 2005 Dirk Behme
15  *
16  *  This program is free software; you can redistribute it and/or modify
17  *  it under the terms of the GNU General Public License version 2 as
18  *  published by the Free Software Foundation.
19  */
20 #include <linux/device.h>
21 #include <linux/init.h>
22 #include <linux/delay.h>
23 #include <linux/input.h>
24 #include <linux/interrupt.h>
25 #include <linux/slab.h>
26 #include <linux/spi/spi.h>
27 #include <linux/spi/ads7846.h>
28 #include <asm/irq.h>
29 
30 #ifdef	CONFIG_ARM
31 #include <asm/mach-types.h>
32 #ifdef	CONFIG_ARCH_OMAP
33 #include <asm/arch/gpio.h>
34 #endif
35 #endif
36 
37 
38 /*
39  * This code has been heavily tested on a Nokia 770, and lightly
40  * tested on other ads7846 devices (OSK/Mistral, Lubbock).
41  * Support for ads7843 and ads7845 has only been stubbed in.
42  *
43  * IRQ handling needs a workaround because of a shortcoming in handling
44  * edge triggered IRQs on some platforms like the OMAP1/2. These
45  * platforms don't handle the ARM lazy IRQ disabling properly, thus we
46  * have to maintain our own SW IRQ disabled status. This should be
47  * removed as soon as the affected platform's IRQ handling is fixed.
48  *
49  * app note sbaa036 talks in more detail about accurate sampling...
50  * that ought to help in situations like LCDs inducing noise (which
51  * can also be helped by using synch signals) and more generally.
52  * This driver tries to utilize the measures described in the app
53  * note. The strength of filtering can be set in the board-* specific
54  * files.
55  */
56 
57 #define	TS_POLL_PERIOD	msecs_to_jiffies(10)
58 
59 /* this driver doesn't aim at the peak continuous sample rate */
60 #define	SAMPLE_BITS	(8 /*cmd*/ + 16 /*sample*/ + 2 /* before, after */)
61 
62 struct ts_event {
63 	/* For portability, we can't read 12 bit values using SPI (which
64 	 * would make the controller deliver them as native byteorder u16
65 	 * with msbs zeroed).  Instead, we read them as two 8-bit values,
66 	 * *** WHICH NEED BYTESWAPPING *** and range adjustment.
67 	 */
68 	u16	x;
69 	u16	y;
70 	u16	z1, z2;
71 	int    ignore;
72 };
73 
74 struct ads7846 {
75 	struct input_dev	*input;
76 	char			phys[32];
77 
78 	struct spi_device	*spi;
79 	struct attribute_group	*attr_group;
80 	u16			model;
81 	u16			vref_delay_usecs;
82 	u16			x_plate_ohms;
83 	u16			pressure_max;
84 
85 	u8			read_x, read_y, read_z1, read_z2, pwrdown;
86 	u16			dummy;		/* for the pwrdown read */
87 	struct ts_event		tc;
88 
89 	struct spi_transfer	xfer[10];
90 	struct spi_message	msg[5];
91 	struct spi_message	*last_msg;
92 	int			msg_idx;
93 	int			read_cnt;
94 	int			read_rep;
95 	int			last_read;
96 
97 	u16			debounce_max;
98 	u16			debounce_tol;
99 	u16			debounce_rep;
100 
101 	spinlock_t		lock;
102 	struct timer_list	timer;		/* P: lock */
103 	unsigned		pendown:1;	/* P: lock */
104 	unsigned		pending:1;	/* P: lock */
105 // FIXME remove "irq_disabled"
106 	unsigned		irq_disabled:1;	/* P: lock */
107 	unsigned		disabled:1;
108 
109 	int			(*filter)(void *data, int data_idx, int *val);
110 	void			*filter_data;
111 	void			(*filter_cleanup)(void *data);
112 	int			(*get_pendown_state)(void);
113 };
114 
115 /* leave chip selected when we're done, for quicker re-select? */
116 #if	0
117 #define	CS_CHANGE(xfer)	((xfer).cs_change = 1)
118 #else
119 #define	CS_CHANGE(xfer)	((xfer).cs_change = 0)
120 #endif
121 
122 /*--------------------------------------------------------------------------*/
123 
124 /* The ADS7846 has touchscreen and other sensors.
125  * Earlier ads784x chips are somewhat compatible.
126  */
127 #define	ADS_START		(1 << 7)
128 #define	ADS_A2A1A0_d_y		(1 << 4)	/* differential */
129 #define	ADS_A2A1A0_d_z1		(3 << 4)	/* differential */
130 #define	ADS_A2A1A0_d_z2		(4 << 4)	/* differential */
131 #define	ADS_A2A1A0_d_x		(5 << 4)	/* differential */
132 #define	ADS_A2A1A0_temp0	(0 << 4)	/* non-differential */
133 #define	ADS_A2A1A0_vbatt	(2 << 4)	/* non-differential */
134 #define	ADS_A2A1A0_vaux		(6 << 4)	/* non-differential */
135 #define	ADS_A2A1A0_temp1	(7 << 4)	/* non-differential */
136 #define	ADS_8_BIT		(1 << 3)
137 #define	ADS_12_BIT		(0 << 3)
138 #define	ADS_SER			(1 << 2)	/* non-differential */
139 #define	ADS_DFR			(0 << 2)	/* differential */
140 #define	ADS_PD10_PDOWN		(0 << 0)	/* lowpower mode + penirq */
141 #define	ADS_PD10_ADC_ON		(1 << 0)	/* ADC on */
142 #define	ADS_PD10_REF_ON		(2 << 0)	/* vREF on + penirq */
143 #define	ADS_PD10_ALL_ON		(3 << 0)	/* ADC + vREF on */
144 
145 #define	MAX_12BIT	((1<<12)-1)
146 
147 /* leave ADC powered up (disables penirq) between differential samples */
148 #define	READ_12BIT_DFR(x) (ADS_START | ADS_A2A1A0_d_ ## x \
149 	| ADS_12_BIT | ADS_DFR)
150 
151 #define	READ_Y	(READ_12BIT_DFR(y)  | ADS_PD10_ADC_ON)
152 #define	READ_Z1	(READ_12BIT_DFR(z1) | ADS_PD10_ADC_ON)
153 #define	READ_Z2	(READ_12BIT_DFR(z2) | ADS_PD10_ADC_ON)
154 
155 #define	READ_X	(READ_12BIT_DFR(x)  | ADS_PD10_ADC_ON)
156 #define	PWRDOWN	(READ_12BIT_DFR(y)  | ADS_PD10_PDOWN)	/* LAST */
157 
158 /* single-ended samples need to first power up reference voltage;
159  * we leave both ADC and VREF powered
160  */
161 #define	READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \
162 	| ADS_12_BIT | ADS_SER)
163 
164 #define	REF_ON	(READ_12BIT_DFR(x) | ADS_PD10_ALL_ON)
165 #define	REF_OFF	(READ_12BIT_DFR(y) | ADS_PD10_PDOWN)
166 
167 /*--------------------------------------------------------------------------*/
168 
169 /*
170  * Non-touchscreen sensors only use single-ended conversions.
171  */
172 
173 struct ser_req {
174 	u8			ref_on;
175 	u8			command;
176 	u8			ref_off;
177 	u16			scratch;
178 	__be16			sample;
179 	struct spi_message	msg;
180 	struct spi_transfer	xfer[6];
181 };
182 
183 static void ads7846_enable(struct ads7846 *ts);
184 static void ads7846_disable(struct ads7846 *ts);
185 
186 static int device_suspended(struct device *dev)
187 {
188 	struct ads7846 *ts = dev_get_drvdata(dev);
189 	return dev->power.power_state.event != PM_EVENT_ON || ts->disabled;
190 }
191 
192 static int ads7846_read12_ser(struct device *dev, unsigned command)
193 {
194 	struct spi_device	*spi = to_spi_device(dev);
195 	struct ads7846		*ts = dev_get_drvdata(dev);
196 	struct ser_req		*req = kzalloc(sizeof *req, GFP_KERNEL);
197 	int			status;
198 	int			sample;
199 	int			i;
200 
201 	if (!req)
202 		return -ENOMEM;
203 
204 	spi_message_init(&req->msg);
205 
206 	/* activate reference, so it has time to settle; */
207 	req->ref_on = REF_ON;
208 	req->xfer[0].tx_buf = &req->ref_on;
209 	req->xfer[0].len = 1;
210 	req->xfer[1].rx_buf = &req->scratch;
211 	req->xfer[1].len = 2;
212 
213 	/*
214 	 * for external VREF, 0 usec (and assume it's always on);
215 	 * for 1uF, use 800 usec;
216 	 * no cap, 100 usec.
217 	 */
218 	req->xfer[1].delay_usecs = ts->vref_delay_usecs;
219 
220 	/* take sample */
221 	req->command = (u8) command;
222 	req->xfer[2].tx_buf = &req->command;
223 	req->xfer[2].len = 1;
224 	req->xfer[3].rx_buf = &req->sample;
225 	req->xfer[3].len = 2;
226 
227 	/* REVISIT:  take a few more samples, and compare ... */
228 
229 	/* turn off reference */
230 	req->ref_off = REF_OFF;
231 	req->xfer[4].tx_buf = &req->ref_off;
232 	req->xfer[4].len = 1;
233 	req->xfer[5].rx_buf = &req->scratch;
234 	req->xfer[5].len = 2;
235 
236 	CS_CHANGE(req->xfer[5]);
237 
238 	/* group all the transfers together, so we can't interfere with
239 	 * reading touchscreen state; disable penirq while sampling
240 	 */
241 	for (i = 0; i < 6; i++)
242 		spi_message_add_tail(&req->xfer[i], &req->msg);
243 
244 	ts->irq_disabled = 1;
245 	disable_irq(spi->irq);
246 	status = spi_sync(spi, &req->msg);
247 	ts->irq_disabled = 0;
248 	enable_irq(spi->irq);
249 
250 	if (req->msg.status)
251 		status = req->msg.status;
252 
253 	/* on-wire is a must-ignore bit, a BE12 value, then padding */
254 	sample = be16_to_cpu(req->sample);
255 	sample = sample >> 3;
256 	sample &= 0x0fff;
257 
258 	kfree(req);
259 	return status ? status : sample;
260 }
261 
262 #define SHOW(name) static ssize_t \
263 name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \
264 { \
265 	ssize_t v = ads7846_read12_ser(dev, \
266 			READ_12BIT_SER(name) | ADS_PD10_ALL_ON); \
267 	if (v < 0) \
268 		return v; \
269 	return sprintf(buf, "%u\n", (unsigned) v); \
270 } \
271 static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL);
272 
273 SHOW(temp0)
274 SHOW(temp1)
275 SHOW(vaux)
276 SHOW(vbatt)
277 
278 static int is_pen_down(struct device *dev)
279 {
280 	struct ads7846		*ts = dev_get_drvdata(dev);
281 
282 	return ts->pendown;
283 }
284 
285 static ssize_t ads7846_pen_down_show(struct device *dev,
286 				     struct device_attribute *attr, char *buf)
287 {
288 	return sprintf(buf, "%u\n", is_pen_down(dev));
289 }
290 
291 static DEVICE_ATTR(pen_down, S_IRUGO, ads7846_pen_down_show, NULL);
292 
293 static ssize_t ads7846_disable_show(struct device *dev,
294 				     struct device_attribute *attr, char *buf)
295 {
296 	struct ads7846	*ts = dev_get_drvdata(dev);
297 
298 	return sprintf(buf, "%u\n", ts->disabled);
299 }
300 
301 static ssize_t ads7846_disable_store(struct device *dev,
302 				     struct device_attribute *attr,
303 				     const char *buf, size_t count)
304 {
305 	struct ads7846 *ts = dev_get_drvdata(dev);
306 	char *endp;
307 	int i;
308 
309 	i = simple_strtoul(buf, &endp, 10);
310 	spin_lock_irq(&ts->lock);
311 
312 	if (i)
313 		ads7846_disable(ts);
314 	else
315 		ads7846_enable(ts);
316 
317 	spin_unlock_irq(&ts->lock);
318 
319 	return count;
320 }
321 
322 static DEVICE_ATTR(disable, 0664, ads7846_disable_show, ads7846_disable_store);
323 
324 static struct attribute *ads7846_attributes[] = {
325 	&dev_attr_temp0.attr,
326 	&dev_attr_temp1.attr,
327 	&dev_attr_vbatt.attr,
328 	&dev_attr_vaux.attr,
329 	&dev_attr_pen_down.attr,
330 	&dev_attr_disable.attr,
331 	NULL,
332 };
333 
334 static struct attribute_group ads7846_attr_group = {
335 	.attrs = ads7846_attributes,
336 };
337 
338 /*
339  * ads7843/7845 don't have temperature sensors, and
340  * use the other sensors a bit differently too
341  */
342 
343 static struct attribute *ads7843_attributes[] = {
344 	&dev_attr_vbatt.attr,
345 	&dev_attr_vaux.attr,
346 	&dev_attr_pen_down.attr,
347 	&dev_attr_disable.attr,
348 	NULL,
349 };
350 
351 static struct attribute_group ads7843_attr_group = {
352 	.attrs = ads7843_attributes,
353 };
354 
355 static struct attribute *ads7845_attributes[] = {
356 	&dev_attr_vaux.attr,
357 	&dev_attr_pen_down.attr,
358 	&dev_attr_disable.attr,
359 	NULL,
360 };
361 
362 static struct attribute_group ads7845_attr_group = {
363 	.attrs = ads7845_attributes,
364 };
365 
366 /*--------------------------------------------------------------------------*/
367 
368 /*
369  * PENIRQ only kicks the timer.  The timer only reissues the SPI transfer,
370  * to retrieve touchscreen status.
371  *
372  * The SPI transfer completion callback does the real work.  It reports
373  * touchscreen events and reactivates the timer (or IRQ) as appropriate.
374  */
375 
376 static void ads7846_rx(void *ads)
377 {
378 	struct ads7846		*ts = ads;
379 	struct input_dev	*input_dev = ts->input;
380 	unsigned		Rt;
381 	unsigned		sync = 0;
382 	u16			x, y, z1, z2;
383 	unsigned long		flags;
384 
385 	/* ads7846_rx_val() did in-place conversion (including byteswap) from
386 	 * on-the-wire format as part of debouncing to get stable readings.
387 	 */
388 	x = ts->tc.x;
389 	y = ts->tc.y;
390 	z1 = ts->tc.z1;
391 	z2 = ts->tc.z2;
392 
393 	/* range filtering */
394 	if (x == MAX_12BIT)
395 		x = 0;
396 
397 	if (likely(x && z1 && !device_suspended(&ts->spi->dev))) {
398 		/* compute touch pressure resistance using equation #2 */
399 		Rt = z2;
400 		Rt -= z1;
401 		Rt *= x;
402 		Rt *= ts->x_plate_ohms;
403 		Rt /= z1;
404 		Rt = (Rt + 2047) >> 12;
405 	} else
406 		Rt = 0;
407 
408 	/* Sample found inconsistent by debouncing or pressure is beyond
409 	* the maximum. Don't report it to user space, repeat at least
410 	* once more the measurement */
411 	if (ts->tc.ignore || Rt > ts->pressure_max) {
412 		mod_timer(&ts->timer, jiffies + TS_POLL_PERIOD);
413 		return;
414 	}
415 
416 	/* NOTE:  "pendown" is inferred from pressure; we don't rely on
417 	 * being able to check nPENIRQ status, or "friendly" trigger modes
418 	 * (both-edges is much better than just-falling or low-level).
419 	 *
420 	 * REVISIT:  some boards may require reading nPENIRQ; it's
421 	 * needed on 7843.  and 7845 reads pressure differently...
422 	 *
423 	 * REVISIT:  the touchscreen might not be connected; this code
424 	 * won't notice that, even if nPENIRQ never fires ...
425 	 */
426 	if (!ts->pendown && Rt != 0) {
427 		input_report_key(input_dev, BTN_TOUCH, 1);
428 		sync = 1;
429 	} else if (ts->pendown && Rt == 0) {
430 		input_report_key(input_dev, BTN_TOUCH, 0);
431 		sync = 1;
432 	}
433 
434 	if (Rt) {
435 		input_report_abs(input_dev, ABS_X, x);
436 		input_report_abs(input_dev, ABS_Y, y);
437 		sync = 1;
438 	}
439 
440 	if (sync) {
441 		input_report_abs(input_dev, ABS_PRESSURE, Rt);
442 		input_sync(input_dev);
443 	}
444 
445 #ifdef	VERBOSE
446 	if (Rt || ts->pendown)
447 		pr_debug("%s: %d/%d/%d%s\n", ts->spi->dev.bus_id,
448 			x, y, Rt, Rt ? "" : " UP");
449 #endif
450 
451 	spin_lock_irqsave(&ts->lock, flags);
452 
453 	ts->pendown = (Rt != 0);
454 	mod_timer(&ts->timer, jiffies + TS_POLL_PERIOD);
455 
456 	spin_unlock_irqrestore(&ts->lock, flags);
457 }
458 
459 static int ads7846_debounce(void *ads, int data_idx, int *val)
460 {
461 	struct ads7846		*ts = ads;
462 
463 	if (!ts->read_cnt || (abs(ts->last_read - *val) > ts->debounce_tol)) {
464 		/* Start over collecting consistent readings. */
465 		ts->read_rep = 0;
466 		/* Repeat it, if this was the first read or the read
467 		 * wasn't consistent enough. */
468 		if (ts->read_cnt < ts->debounce_max) {
469 			ts->last_read = *val;
470 			ts->read_cnt++;
471 			return ADS7846_FILTER_REPEAT;
472 		} else {
473 			/* Maximum number of debouncing reached and still
474 			 * not enough number of consistent readings. Abort
475 			 * the whole sample, repeat it in the next sampling
476 			 * period.
477 			 */
478 			ts->read_cnt = 0;
479 			return ADS7846_FILTER_IGNORE;
480 		}
481 	} else {
482 		if (++ts->read_rep > ts->debounce_rep) {
483 			/* Got a good reading for this coordinate,
484 			 * go for the next one. */
485 			ts->read_cnt = 0;
486 			ts->read_rep = 0;
487 			return ADS7846_FILTER_OK;
488 		} else {
489 			/* Read more values that are consistent. */
490 			ts->read_cnt++;
491 			return ADS7846_FILTER_REPEAT;
492 		}
493 	}
494 }
495 
496 static int ads7846_no_filter(void *ads, int data_idx, int *val)
497 {
498 	return ADS7846_FILTER_OK;
499 }
500 
501 static void ads7846_rx_val(void *ads)
502 {
503 	struct ads7846 *ts = ads;
504 	struct spi_message *m;
505 	struct spi_transfer *t;
506 	u16 *rx_val;
507 	int val;
508 	int action;
509 	int status;
510 
511 	m = &ts->msg[ts->msg_idx];
512 	t = list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
513 	rx_val = t->rx_buf;
514 
515 	/* adjust:  on-wire is a must-ignore bit, a BE12 value, then padding;
516 	 * built from two 8 bit values written msb-first.
517 	 */
518 	val = be16_to_cpu(*rx_val) >> 3;
519 
520 	action = ts->filter(ts->filter_data, ts->msg_idx, &val);
521 	switch (action) {
522 	case ADS7846_FILTER_REPEAT:
523 		break;
524 	case ADS7846_FILTER_IGNORE:
525 		ts->tc.ignore = 1;
526 		/* Last message will contain ads7846_rx() as the
527 		 * completion function.
528 		 */
529 		m = ts->last_msg;
530 		break;
531 	case ADS7846_FILTER_OK:
532 		*rx_val = val;
533 		ts->tc.ignore = 0;
534 		m = &ts->msg[++ts->msg_idx];
535 		break;
536 	default:
537 		BUG();
538 	}
539 	status = spi_async(ts->spi, m);
540 	if (status)
541 		dev_err(&ts->spi->dev, "spi_async --> %d\n",
542 				status);
543 }
544 
545 static void ads7846_timer(unsigned long handle)
546 {
547 	struct ads7846	*ts = (void *)handle;
548 	int		status = 0;
549 
550 	spin_lock_irq(&ts->lock);
551 
552 	if (unlikely(ts->msg_idx && !ts->pendown)) {
553 		/* measurement cycle ended */
554 		if (!device_suspended(&ts->spi->dev)) {
555 			ts->irq_disabled = 0;
556 			enable_irq(ts->spi->irq);
557 		}
558 		ts->pending = 0;
559 		ts->msg_idx = 0;
560 	} else {
561 		/* pen is still down, continue with the measurement */
562 		ts->msg_idx = 0;
563 		status = spi_async(ts->spi, &ts->msg[0]);
564 		if (status)
565 			dev_err(&ts->spi->dev, "spi_async --> %d\n", status);
566 	}
567 
568 	spin_unlock_irq(&ts->lock);
569 }
570 
571 static irqreturn_t ads7846_irq(int irq, void *handle)
572 {
573 	struct ads7846 *ts = handle;
574 	unsigned long flags;
575 
576 	spin_lock_irqsave(&ts->lock, flags);
577 	if (likely(ts->get_pendown_state())) {
578 		if (!ts->irq_disabled) {
579 			/* The ARM do_simple_IRQ() dispatcher doesn't act
580 			 * like the other dispatchers:  it will report IRQs
581 			 * even after they've been disabled.  We work around
582 			 * that here.  (The "generic irq" framework may help...)
583 			 */
584 			ts->irq_disabled = 1;
585 			disable_irq(ts->spi->irq);
586 			ts->pending = 1;
587 			mod_timer(&ts->timer, jiffies);
588 		}
589 	}
590 	spin_unlock_irqrestore(&ts->lock, flags);
591 
592 	return IRQ_HANDLED;
593 }
594 
595 /*--------------------------------------------------------------------------*/
596 
597 /* Must be called with ts->lock held */
598 static void ads7846_disable(struct ads7846 *ts)
599 {
600 	if (ts->disabled)
601 		return;
602 
603 	ts->disabled = 1;
604 
605 	/* are we waiting for IRQ, or polling? */
606 	if (!ts->pending) {
607 		ts->irq_disabled = 1;
608 		disable_irq(ts->spi->irq);
609 	} else {
610 		/* the timer will run at least once more, and
611 		 * leave everything in a clean state, IRQ disabled
612 		 */
613 		while (ts->pending) {
614 			spin_unlock_irq(&ts->lock);
615 			msleep(1);
616 			spin_lock_irq(&ts->lock);
617 		}
618 	}
619 
620 	/* we know the chip's in lowpower mode since we always
621 	 * leave it that way after every request
622 	 */
623 
624 }
625 
626 /* Must be called with ts->lock held */
627 static void ads7846_enable(struct ads7846 *ts)
628 {
629 	if (!ts->disabled)
630 		return;
631 
632 	ts->disabled = 0;
633 	ts->irq_disabled = 0;
634 	enable_irq(ts->spi->irq);
635 }
636 
637 static int ads7846_suspend(struct spi_device *spi, pm_message_t message)
638 {
639 	struct ads7846 *ts = dev_get_drvdata(&spi->dev);
640 
641 	spin_lock_irq(&ts->lock);
642 
643 	spi->dev.power.power_state = message;
644 	ads7846_disable(ts);
645 
646 	spin_unlock_irq(&ts->lock);
647 
648 	return 0;
649 
650 }
651 
652 static int ads7846_resume(struct spi_device *spi)
653 {
654 	struct ads7846 *ts = dev_get_drvdata(&spi->dev);
655 
656 	spin_lock_irq(&ts->lock);
657 
658 	spi->dev.power.power_state = PMSG_ON;
659 	ads7846_enable(ts);
660 
661 	spin_unlock_irq(&ts->lock);
662 
663 	return 0;
664 }
665 
666 static int __devinit ads7846_probe(struct spi_device *spi)
667 {
668 	struct ads7846			*ts;
669 	struct input_dev		*input_dev;
670 	struct ads7846_platform_data	*pdata = spi->dev.platform_data;
671 	struct spi_message		*m;
672 	struct spi_transfer		*x;
673 	int				err;
674 
675 	if (!spi->irq) {
676 		dev_dbg(&spi->dev, "no IRQ?\n");
677 		return -ENODEV;
678 	}
679 
680 	if (!pdata) {
681 		dev_dbg(&spi->dev, "no platform data?\n");
682 		return -ENODEV;
683 	}
684 
685 	/* don't exceed max specified sample rate */
686 	if (spi->max_speed_hz > (125000 * SAMPLE_BITS)) {
687 		dev_dbg(&spi->dev, "f(sample) %d KHz?\n",
688 				(spi->max_speed_hz/SAMPLE_BITS)/1000);
689 		return -EINVAL;
690 	}
691 
692 	/* REVISIT when the irq can be triggered active-low, or if for some
693 	 * reason the touchscreen isn't hooked up, we don't need to access
694 	 * the pendown state.
695 	 */
696 	if (pdata->get_pendown_state == NULL) {
697 		dev_dbg(&spi->dev, "no get_pendown_state function?\n");
698 		return -EINVAL;
699 	}
700 
701 	/* We'd set TX wordsize 8 bits and RX wordsize to 13 bits ... except
702 	 * that even if the hardware can do that, the SPI controller driver
703 	 * may not.  So we stick to very-portable 8 bit words, both RX and TX.
704 	 */
705 	spi->bits_per_word = 8;
706 
707 	ts = kzalloc(sizeof(struct ads7846), GFP_KERNEL);
708 	input_dev = input_allocate_device();
709 	if (!ts || !input_dev) {
710 		err = -ENOMEM;
711 		goto err_free_mem;
712 	}
713 
714 	dev_set_drvdata(&spi->dev, ts);
715 	spi->dev.power.power_state = PMSG_ON;
716 
717 	ts->spi = spi;
718 	ts->input = input_dev;
719 
720 	init_timer(&ts->timer);
721 	ts->timer.data = (unsigned long) ts;
722 	ts->timer.function = ads7846_timer;
723 
724 	spin_lock_init(&ts->lock);
725 
726 	ts->model = pdata->model ? : 7846;
727 	ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100;
728 	ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
729 	ts->pressure_max = pdata->pressure_max ? : ~0;
730 
731 	if (pdata->filter != NULL) {
732 		if (pdata->filter_init != NULL) {
733 			err = pdata->filter_init(pdata, &ts->filter_data);
734 			if (err < 0)
735 				goto err_free_mem;
736 		}
737 		ts->filter = pdata->filter;
738 		ts->filter_cleanup = pdata->filter_cleanup;
739 	} else if (pdata->debounce_max) {
740 		ts->debounce_max = pdata->debounce_max;
741 		if (ts->debounce_max < 2)
742 			ts->debounce_max = 2;
743 		ts->debounce_tol = pdata->debounce_tol;
744 		ts->debounce_rep = pdata->debounce_rep;
745 		ts->filter = ads7846_debounce;
746 		ts->filter_data = ts;
747 	} else
748 		ts->filter = ads7846_no_filter;
749 	ts->get_pendown_state = pdata->get_pendown_state;
750 
751 	snprintf(ts->phys, sizeof(ts->phys), "%s/input0", spi->dev.bus_id);
752 
753 	input_dev->name = "ADS784x Touchscreen";
754 	input_dev->phys = ts->phys;
755 	input_dev->cdev.dev = &spi->dev;
756 
757 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
758 	input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
759 	input_set_abs_params(input_dev, ABS_X,
760 			pdata->x_min ? : 0,
761 			pdata->x_max ? : MAX_12BIT,
762 			0, 0);
763 	input_set_abs_params(input_dev, ABS_Y,
764 			pdata->y_min ? : 0,
765 			pdata->y_max ? : MAX_12BIT,
766 			0, 0);
767 	input_set_abs_params(input_dev, ABS_PRESSURE,
768 			pdata->pressure_min, pdata->pressure_max, 0, 0);
769 
770 	/* set up the transfers to read touchscreen state; this assumes we
771 	 * use formula #2 for pressure, not #3.
772 	 */
773 	m = &ts->msg[0];
774 	x = ts->xfer;
775 
776 	spi_message_init(m);
777 
778 	/* y- still on; turn on only y+ (and ADC) */
779 	ts->read_y = READ_Y;
780 	x->tx_buf = &ts->read_y;
781 	x->len = 1;
782 	spi_message_add_tail(x, m);
783 
784 	x++;
785 	x->rx_buf = &ts->tc.y;
786 	x->len = 2;
787 	spi_message_add_tail(x, m);
788 
789 	m->complete = ads7846_rx_val;
790 	m->context = ts;
791 
792 	m++;
793 	spi_message_init(m);
794 
795 	/* turn y- off, x+ on, then leave in lowpower */
796 	x++;
797 	ts->read_x = READ_X;
798 	x->tx_buf = &ts->read_x;
799 	x->len = 1;
800 	spi_message_add_tail(x, m);
801 
802 	x++;
803 	x->rx_buf = &ts->tc.x;
804 	x->len = 2;
805 	spi_message_add_tail(x, m);
806 
807 	m->complete = ads7846_rx_val;
808 	m->context = ts;
809 
810 	/* turn y+ off, x- on; we'll use formula #2 */
811 	if (ts->model == 7846) {
812 		m++;
813 		spi_message_init(m);
814 
815 		x++;
816 		ts->read_z1 = READ_Z1;
817 		x->tx_buf = &ts->read_z1;
818 		x->len = 1;
819 		spi_message_add_tail(x, m);
820 
821 		x++;
822 		x->rx_buf = &ts->tc.z1;
823 		x->len = 2;
824 		spi_message_add_tail(x, m);
825 
826 		m->complete = ads7846_rx_val;
827 		m->context = ts;
828 
829 		m++;
830 		spi_message_init(m);
831 
832 		x++;
833 		ts->read_z2 = READ_Z2;
834 		x->tx_buf = &ts->read_z2;
835 		x->len = 1;
836 		spi_message_add_tail(x, m);
837 
838 		x++;
839 		x->rx_buf = &ts->tc.z2;
840 		x->len = 2;
841 		spi_message_add_tail(x, m);
842 
843 		m->complete = ads7846_rx_val;
844 		m->context = ts;
845 	}
846 
847 	/* power down */
848 	m++;
849 	spi_message_init(m);
850 
851 	x++;
852 	ts->pwrdown = PWRDOWN;
853 	x->tx_buf = &ts->pwrdown;
854 	x->len = 1;
855 	spi_message_add_tail(x, m);
856 
857 	x++;
858 	x->rx_buf = &ts->dummy;
859 	x->len = 2;
860 	CS_CHANGE(*x);
861 	spi_message_add_tail(x, m);
862 
863 	m->complete = ads7846_rx;
864 	m->context = ts;
865 
866 	ts->last_msg = m;
867 
868 	if (request_irq(spi->irq, ads7846_irq, IRQF_TRIGGER_FALLING,
869 			spi->dev.driver->name, ts)) {
870 		dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
871 		err = -EBUSY;
872 		goto err_cleanup_filter;
873 	}
874 
875 	dev_info(&spi->dev, "touchscreen, irq %d\n", spi->irq);
876 
877 	/* take a first sample, leaving nPENIRQ active; avoid
878 	 * the touchscreen, in case it's not connected.
879 	 */
880 	(void) ads7846_read12_ser(&spi->dev,
881 			  READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON);
882 
883 	switch (ts->model) {
884 	case 7846:
885 		ts->attr_group = &ads7846_attr_group;
886 		break;
887 	case 7845:
888 		ts->attr_group = &ads7845_attr_group;
889 		break;
890 	default:
891 		ts->attr_group = &ads7843_attr_group;
892 		break;
893 	}
894 	err = sysfs_create_group(&spi->dev.kobj, ts->attr_group);
895 	if (err)
896 		goto err_free_irq;
897 
898 	err = input_register_device(input_dev);
899 	if (err)
900 		goto err_remove_attr_group;
901 
902 	return 0;
903 
904  err_remove_attr_group:
905 	sysfs_remove_group(&spi->dev.kobj, ts->attr_group);
906  err_free_irq:
907 	free_irq(spi->irq, ts);
908  err_cleanup_filter:
909 	if (ts->filter_cleanup)
910 		ts->filter_cleanup(ts->filter_data);
911  err_free_mem:
912 	input_free_device(input_dev);
913 	kfree(ts);
914 	return err;
915 }
916 
917 static int __devexit ads7846_remove(struct spi_device *spi)
918 {
919 	struct ads7846		*ts = dev_get_drvdata(&spi->dev);
920 
921 	input_unregister_device(ts->input);
922 
923 	ads7846_suspend(spi, PMSG_SUSPEND);
924 
925 	sysfs_remove_group(&spi->dev.kobj, ts->attr_group);
926 
927 	free_irq(ts->spi->irq, ts);
928 	/* suspend left the IRQ disabled */
929 	enable_irq(ts->spi->irq);
930 
931 	if (ts->filter_cleanup)
932 		ts->filter_cleanup(ts->filter_data);
933 
934 	kfree(ts);
935 
936 	dev_dbg(&spi->dev, "unregistered touchscreen\n");
937 	return 0;
938 }
939 
940 static struct spi_driver ads7846_driver = {
941 	.driver = {
942 		.name	= "ads7846",
943 		.bus	= &spi_bus_type,
944 		.owner	= THIS_MODULE,
945 	},
946 	.probe		= ads7846_probe,
947 	.remove		= __devexit_p(ads7846_remove),
948 	.suspend	= ads7846_suspend,
949 	.resume		= ads7846_resume,
950 };
951 
952 static int __init ads7846_init(void)
953 {
954 	/* grr, board-specific init should stay out of drivers!! */
955 
956 #ifdef	CONFIG_ARCH_OMAP
957 	if (machine_is_omap_osk()) {
958 		/* GPIO4 = PENIRQ; GPIO6 = BUSY */
959 		omap_request_gpio(4);
960 		omap_set_gpio_direction(4, 1);
961 		omap_request_gpio(6);
962 		omap_set_gpio_direction(6, 1);
963 	}
964 	// also TI 1510 Innovator, bitbanging through FPGA
965 	// also Nokia 770
966 	// also Palm Tungsten T2
967 #endif
968 
969 	// PXA:
970 	// also Dell Axim X50
971 	// also HP iPaq H191x/H192x/H415x/H435x
972 	// also Intel Lubbock (additional to UCB1400; as temperature sensor)
973 	// also Sharp Zaurus C7xx, C8xx (corgi/sheperd/husky)
974 
975 	// Atmel at91sam9261-EK uses ads7843
976 
977 	// also various AMD Au1x00 devel boards
978 
979 	return spi_register_driver(&ads7846_driver);
980 }
981 module_init(ads7846_init);
982 
983 static void __exit ads7846_exit(void)
984 {
985 	spi_unregister_driver(&ads7846_driver);
986 
987 #ifdef	CONFIG_ARCH_OMAP
988 	if (machine_is_omap_osk()) {
989 		omap_free_gpio(4);
990 		omap_free_gpio(6);
991 	}
992 #endif
993 
994 }
995 module_exit(ads7846_exit);
996 
997 MODULE_DESCRIPTION("ADS7846 TouchScreen Driver");
998 MODULE_LICENSE("GPL");
999