Input: ads7846 - pluggable filtering logic
[safe/jmp/linux-2.6] / drivers / input / touchscreen / ads7846.c
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");