Merge branch 'linux-next' of git://git.infradead.org/ubifs-2.6
[pandora-kernel.git] / 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/types.h>
21 #include <linux/hwmon.h>
22 #include <linux/init.h>
23 #include <linux/err.h>
24 #include <linux/sched.h>
25 #include <linux/delay.h>
26 #include <linux/input.h>
27 #include <linux/interrupt.h>
28 #include <linux/slab.h>
29 #include <linux/gpio.h>
30 #include <linux/spi/spi.h>
31 #include <linux/spi/ads7846.h>
32 #include <linux/regulator/consumer.h>
33 #include <asm/irq.h>
34
35 /*
36  * This code has been heavily tested on a Nokia 770, and lightly
37  * tested on other ads7846 devices (OSK/Mistral, Lubbock, Spitz).
38  * TSC2046 is just newer ads7846 silicon.
39  * Support for ads7843 tested on Atmel at91sam926x-EK.
40  * Support for ads7845 has only been stubbed in.
41  * Support for Analog Devices AD7873 and AD7843 tested.
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_DELAY   1       /* ms delay before the first sample */
58 #define TS_POLL_PERIOD  5       /* ms delay between samples */
59
60 /* this driver doesn't aim at the peak continuous sample rate */
61 #define SAMPLE_BITS     (8 /*cmd*/ + 16 /*sample*/ + 2 /* before, after */)
62
63 struct ts_event {
64         /*
65          * For portability, we can't read 12 bit values using SPI (which
66          * would make the controller deliver them as native byte order u16
67          * with msbs zeroed).  Instead, we read them as two 8-bit values,
68          * *** WHICH NEED BYTESWAPPING *** and range adjustment.
69          */
70         u16     x;
71         u16     y;
72         u16     z1, z2;
73         bool    ignore;
74         u8      x_buf[3];
75         u8      y_buf[3];
76 };
77
78 /*
79  * We allocate this separately to avoid cache line sharing issues when
80  * driver is used with DMA-based SPI controllers (like atmel_spi) on
81  * systems where main memory is not DMA-coherent (most non-x86 boards).
82  */
83 struct ads7846_packet {
84         u8                      read_x, read_y, read_z1, read_z2, pwrdown;
85         u16                     dummy;          /* for the pwrdown read */
86         struct ts_event         tc;
87         /* for ads7845 with mpc5121 psc spi we use 3-byte buffers */
88         u8                      read_x_cmd[3], read_y_cmd[3], pwrdown_cmd[3];
89 };
90
91 struct ads7846 {
92         struct input_dev        *input;
93         char                    phys[32];
94         char                    name[32];
95
96         struct spi_device       *spi;
97         struct regulator        *reg;
98
99 #if defined(CONFIG_HWMON) || defined(CONFIG_HWMON_MODULE)
100         struct attribute_group  *attr_group;
101         struct device           *hwmon;
102 #endif
103
104         u16                     model;
105         u16                     vref_mv;
106         u16                     vref_delay_usecs;
107         u16                     x_plate_ohms;
108         u16                     pressure_max;
109
110         bool                    swap_xy;
111
112         struct ads7846_packet   *packet;
113
114         struct spi_transfer     xfer[18];
115         struct spi_message      msg[5];
116         int                     msg_count;
117         wait_queue_head_t       wait;
118
119         bool                    pendown;
120
121         int                     read_cnt;
122         int                     read_rep;
123         int                     last_read;
124
125         u16                     debounce_max;
126         u16                     debounce_tol;
127         u16                     debounce_rep;
128
129         u16                     penirq_recheck_delay_usecs;
130
131         struct mutex            lock;
132         bool                    stopped;        /* P: lock */
133         bool                    disabled;       /* P: lock */
134         bool                    suspended;      /* P: lock */
135
136         int                     (*filter)(void *data, int data_idx, int *val);
137         void                    *filter_data;
138         void                    (*filter_cleanup)(void *data);
139         int                     (*get_pendown_state)(void);
140         int                     gpio_pendown;
141
142         void                    (*wait_for_sync)(void);
143 };
144
145 /* leave chip selected when we're done, for quicker re-select? */
146 #if     0
147 #define CS_CHANGE(xfer) ((xfer).cs_change = 1)
148 #else
149 #define CS_CHANGE(xfer) ((xfer).cs_change = 0)
150 #endif
151
152 /*--------------------------------------------------------------------------*/
153
154 /* The ADS7846 has touchscreen and other sensors.
155  * Earlier ads784x chips are somewhat compatible.
156  */
157 #define ADS_START               (1 << 7)
158 #define ADS_A2A1A0_d_y          (1 << 4)        /* differential */
159 #define ADS_A2A1A0_d_z1         (3 << 4)        /* differential */
160 #define ADS_A2A1A0_d_z2         (4 << 4)        /* differential */
161 #define ADS_A2A1A0_d_x          (5 << 4)        /* differential */
162 #define ADS_A2A1A0_temp0        (0 << 4)        /* non-differential */
163 #define ADS_A2A1A0_vbatt        (2 << 4)        /* non-differential */
164 #define ADS_A2A1A0_vaux         (6 << 4)        /* non-differential */
165 #define ADS_A2A1A0_temp1        (7 << 4)        /* non-differential */
166 #define ADS_8_BIT               (1 << 3)
167 #define ADS_12_BIT              (0 << 3)
168 #define ADS_SER                 (1 << 2)        /* non-differential */
169 #define ADS_DFR                 (0 << 2)        /* differential */
170 #define ADS_PD10_PDOWN          (0 << 0)        /* low power mode + penirq */
171 #define ADS_PD10_ADC_ON         (1 << 0)        /* ADC on */
172 #define ADS_PD10_REF_ON         (2 << 0)        /* vREF on + penirq */
173 #define ADS_PD10_ALL_ON         (3 << 0)        /* ADC + vREF on */
174
175 #define MAX_12BIT       ((1<<12)-1)
176
177 /* leave ADC powered up (disables penirq) between differential samples */
178 #define READ_12BIT_DFR(x, adc, vref) (ADS_START | ADS_A2A1A0_d_ ## x \
179         | ADS_12_BIT | ADS_DFR | \
180         (adc ? ADS_PD10_ADC_ON : 0) | (vref ? ADS_PD10_REF_ON : 0))
181
182 #define READ_Y(vref)    (READ_12BIT_DFR(y,  1, vref))
183 #define READ_Z1(vref)   (READ_12BIT_DFR(z1, 1, vref))
184 #define READ_Z2(vref)   (READ_12BIT_DFR(z2, 1, vref))
185
186 #define READ_X(vref)    (READ_12BIT_DFR(x,  1, vref))
187 #define PWRDOWN         (READ_12BIT_DFR(y,  0, 0))      /* LAST */
188
189 /* single-ended samples need to first power up reference voltage;
190  * we leave both ADC and VREF powered
191  */
192 #define READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \
193         | ADS_12_BIT | ADS_SER)
194
195 #define REF_ON  (READ_12BIT_DFR(x, 1, 1))
196 #define REF_OFF (READ_12BIT_DFR(y, 0, 0))
197
198 /* Must be called with ts->lock held */
199 static void ads7846_stop(struct ads7846 *ts)
200 {
201         if (!ts->disabled && !ts->suspended) {
202                 /* Signal IRQ thread to stop polling and disable the handler. */
203                 ts->stopped = true;
204                 mb();
205                 wake_up(&ts->wait);
206                 disable_irq(ts->spi->irq);
207         }
208 }
209
210 /* Must be called with ts->lock held */
211 static void ads7846_restart(struct ads7846 *ts)
212 {
213         if (!ts->disabled && !ts->suspended) {
214                 /* Tell IRQ thread that it may poll the device. */
215                 ts->stopped = false;
216                 mb();
217                 enable_irq(ts->spi->irq);
218         }
219 }
220
221 /* Must be called with ts->lock held */
222 static void __ads7846_disable(struct ads7846 *ts)
223 {
224         ads7846_stop(ts);
225         regulator_disable(ts->reg);
226
227         /*
228          * We know the chip's in low power mode since we always
229          * leave it that way after every request
230          */
231 }
232
233 /* Must be called with ts->lock held */
234 static void __ads7846_enable(struct ads7846 *ts)
235 {
236         regulator_enable(ts->reg);
237         ads7846_restart(ts);
238 }
239
240 static void ads7846_disable(struct ads7846 *ts)
241 {
242         mutex_lock(&ts->lock);
243
244         if (!ts->disabled) {
245
246                 if  (!ts->suspended)
247                         __ads7846_disable(ts);
248
249                 ts->disabled = true;
250         }
251
252         mutex_unlock(&ts->lock);
253 }
254
255 static void ads7846_enable(struct ads7846 *ts)
256 {
257         mutex_lock(&ts->lock);
258
259         if (ts->disabled) {
260
261                 ts->disabled = false;
262
263                 if (!ts->suspended)
264                         __ads7846_enable(ts);
265         }
266
267         mutex_unlock(&ts->lock);
268 }
269
270 /*--------------------------------------------------------------------------*/
271
272 /*
273  * Non-touchscreen sensors only use single-ended conversions.
274  * The range is GND..vREF. The ads7843 and ads7835 must use external vREF;
275  * ads7846 lets that pin be unconnected, to use internal vREF.
276  */
277
278 struct ser_req {
279         u8                      ref_on;
280         u8                      command;
281         u8                      ref_off;
282         u16                     scratch;
283         __be16                  sample;
284         struct spi_message      msg;
285         struct spi_transfer     xfer[6];
286 };
287
288 struct ads7845_ser_req {
289         u8                      command[3];
290         u8                      pwrdown[3];
291         u8                      sample[3];
292         struct spi_message      msg;
293         struct spi_transfer     xfer[2];
294 };
295
296 static int ads7846_read12_ser(struct device *dev, unsigned command)
297 {
298         struct spi_device *spi = to_spi_device(dev);
299         struct ads7846 *ts = dev_get_drvdata(dev);
300         struct ser_req *req;
301         int status;
302         int use_internal;
303
304         req = kzalloc(sizeof *req, GFP_KERNEL);
305         if (!req)
306                 return -ENOMEM;
307
308         spi_message_init(&req->msg);
309
310         /* FIXME boards with ads7846 might use external vref instead ... */
311         use_internal = (ts->model == 7846);
312
313         /* maybe turn on internal vREF, and let it settle */
314         if (use_internal) {
315                 req->ref_on = REF_ON;
316                 req->xfer[0].tx_buf = &req->ref_on;
317                 req->xfer[0].len = 1;
318                 spi_message_add_tail(&req->xfer[0], &req->msg);
319
320                 req->xfer[1].rx_buf = &req->scratch;
321                 req->xfer[1].len = 2;
322
323                 /* for 1uF, settle for 800 usec; no cap, 100 usec.  */
324                 req->xfer[1].delay_usecs = ts->vref_delay_usecs;
325                 spi_message_add_tail(&req->xfer[1], &req->msg);
326         }
327
328         /* take sample */
329         req->command = (u8) command;
330         req->xfer[2].tx_buf = &req->command;
331         req->xfer[2].len = 1;
332         spi_message_add_tail(&req->xfer[2], &req->msg);
333
334         req->xfer[3].rx_buf = &req->sample;
335         req->xfer[3].len = 2;
336         spi_message_add_tail(&req->xfer[3], &req->msg);
337
338         /* REVISIT:  take a few more samples, and compare ... */
339
340         /* converter in low power mode & enable PENIRQ */
341         req->ref_off = PWRDOWN;
342         req->xfer[4].tx_buf = &req->ref_off;
343         req->xfer[4].len = 1;
344         spi_message_add_tail(&req->xfer[4], &req->msg);
345
346         req->xfer[5].rx_buf = &req->scratch;
347         req->xfer[5].len = 2;
348         CS_CHANGE(req->xfer[5]);
349         spi_message_add_tail(&req->xfer[5], &req->msg);
350
351         mutex_lock(&ts->lock);
352         ads7846_stop(ts);
353         status = spi_sync(spi, &req->msg);
354         ads7846_restart(ts);
355         mutex_unlock(&ts->lock);
356
357         if (status == 0) {
358                 /* on-wire is a must-ignore bit, a BE12 value, then padding */
359                 status = be16_to_cpu(req->sample);
360                 status = status >> 3;
361                 status &= 0x0fff;
362         }
363
364         kfree(req);
365         return status;
366 }
367
368 static int ads7845_read12_ser(struct device *dev, unsigned command)
369 {
370         struct spi_device *spi = to_spi_device(dev);
371         struct ads7846 *ts = dev_get_drvdata(dev);
372         struct ads7845_ser_req *req;
373         int status;
374
375         req = kzalloc(sizeof *req, GFP_KERNEL);
376         if (!req)
377                 return -ENOMEM;
378
379         spi_message_init(&req->msg);
380
381         req->command[0] = (u8) command;
382         req->xfer[0].tx_buf = req->command;
383         req->xfer[0].rx_buf = req->sample;
384         req->xfer[0].len = 3;
385         spi_message_add_tail(&req->xfer[0], &req->msg);
386
387         mutex_lock(&ts->lock);
388         ads7846_stop(ts);
389         status = spi_sync(spi, &req->msg);
390         ads7846_restart(ts);
391         mutex_unlock(&ts->lock);
392
393         if (status == 0) {
394                 /* BE12 value, then padding */
395                 status = be16_to_cpu(*((u16 *)&req->sample[1]));
396                 status = status >> 3;
397                 status &= 0x0fff;
398         }
399
400         kfree(req);
401         return status;
402 }
403
404 #if defined(CONFIG_HWMON) || defined(CONFIG_HWMON_MODULE)
405
406 #define SHOW(name, var, adjust) static ssize_t \
407 name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \
408 { \
409         struct ads7846 *ts = dev_get_drvdata(dev); \
410         ssize_t v = ads7846_read12_ser(dev, \
411                         READ_12BIT_SER(var) | ADS_PD10_ALL_ON); \
412         if (v < 0) \
413                 return v; \
414         return sprintf(buf, "%u\n", adjust(ts, v)); \
415 } \
416 static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL);
417
418
419 /* Sysfs conventions report temperatures in millidegrees Celsius.
420  * ADS7846 could use the low-accuracy two-sample scheme, but can't do the high
421  * accuracy scheme without calibration data.  For now we won't try either;
422  * userspace sees raw sensor values, and must scale/calibrate appropriately.
423  */
424 static inline unsigned null_adjust(struct ads7846 *ts, ssize_t v)
425 {
426         return v;
427 }
428
429 SHOW(temp0, temp0, null_adjust)         /* temp1_input */
430 SHOW(temp1, temp1, null_adjust)         /* temp2_input */
431
432
433 /* sysfs conventions report voltages in millivolts.  We can convert voltages
434  * if we know vREF.  userspace may need to scale vAUX to match the board's
435  * external resistors; we assume that vBATT only uses the internal ones.
436  */
437 static inline unsigned vaux_adjust(struct ads7846 *ts, ssize_t v)
438 {
439         unsigned retval = v;
440
441         /* external resistors may scale vAUX into 0..vREF */
442         retval *= ts->vref_mv;
443         retval = retval >> 12;
444
445         return retval;
446 }
447
448 static inline unsigned vbatt_adjust(struct ads7846 *ts, ssize_t v)
449 {
450         unsigned retval = vaux_adjust(ts, v);
451
452         /* ads7846 has a resistor ladder to scale this signal down */
453         if (ts->model == 7846)
454                 retval *= 4;
455
456         return retval;
457 }
458
459 SHOW(in0_input, vaux, vaux_adjust)
460 SHOW(in1_input, vbatt, vbatt_adjust)
461
462 static struct attribute *ads7846_attributes[] = {
463         &dev_attr_temp0.attr,
464         &dev_attr_temp1.attr,
465         &dev_attr_in0_input.attr,
466         &dev_attr_in1_input.attr,
467         NULL,
468 };
469
470 static struct attribute_group ads7846_attr_group = {
471         .attrs = ads7846_attributes,
472 };
473
474 static struct attribute *ads7843_attributes[] = {
475         &dev_attr_in0_input.attr,
476         &dev_attr_in1_input.attr,
477         NULL,
478 };
479
480 static struct attribute_group ads7843_attr_group = {
481         .attrs = ads7843_attributes,
482 };
483
484 static struct attribute *ads7845_attributes[] = {
485         &dev_attr_in0_input.attr,
486         NULL,
487 };
488
489 static struct attribute_group ads7845_attr_group = {
490         .attrs = ads7845_attributes,
491 };
492
493 static int ads784x_hwmon_register(struct spi_device *spi, struct ads7846 *ts)
494 {
495         struct device *hwmon;
496         int err;
497
498         /* hwmon sensors need a reference voltage */
499         switch (ts->model) {
500         case 7846:
501                 if (!ts->vref_mv) {
502                         dev_dbg(&spi->dev, "assuming 2.5V internal vREF\n");
503                         ts->vref_mv = 2500;
504                 }
505                 break;
506         case 7845:
507         case 7843:
508                 if (!ts->vref_mv) {
509                         dev_warn(&spi->dev,
510                                 "external vREF for ADS%d not specified\n",
511                                 ts->model);
512                         return 0;
513                 }
514                 break;
515         }
516
517         /* different chips have different sensor groups */
518         switch (ts->model) {
519         case 7846:
520                 ts->attr_group = &ads7846_attr_group;
521                 break;
522         case 7845:
523                 ts->attr_group = &ads7845_attr_group;
524                 break;
525         case 7843:
526                 ts->attr_group = &ads7843_attr_group;
527                 break;
528         default:
529                 dev_dbg(&spi->dev, "ADS%d not recognized\n", ts->model);
530                 return 0;
531         }
532
533         err = sysfs_create_group(&spi->dev.kobj, ts->attr_group);
534         if (err)
535                 return err;
536
537         hwmon = hwmon_device_register(&spi->dev);
538         if (IS_ERR(hwmon)) {
539                 sysfs_remove_group(&spi->dev.kobj, ts->attr_group);
540                 return PTR_ERR(hwmon);
541         }
542
543         ts->hwmon = hwmon;
544         return 0;
545 }
546
547 static void ads784x_hwmon_unregister(struct spi_device *spi,
548                                      struct ads7846 *ts)
549 {
550         if (ts->hwmon) {
551                 sysfs_remove_group(&spi->dev.kobj, ts->attr_group);
552                 hwmon_device_unregister(ts->hwmon);
553         }
554 }
555
556 #else
557 static inline int ads784x_hwmon_register(struct spi_device *spi,
558                                          struct ads7846 *ts)
559 {
560         return 0;
561 }
562
563 static inline void ads784x_hwmon_unregister(struct spi_device *spi,
564                                             struct ads7846 *ts)
565 {
566 }
567 #endif
568
569 static ssize_t ads7846_pen_down_show(struct device *dev,
570                                      struct device_attribute *attr, char *buf)
571 {
572         struct ads7846 *ts = dev_get_drvdata(dev);
573
574         return sprintf(buf, "%u\n", ts->pendown);
575 }
576
577 static DEVICE_ATTR(pen_down, S_IRUGO, ads7846_pen_down_show, NULL);
578
579 static ssize_t ads7846_disable_show(struct device *dev,
580                                      struct device_attribute *attr, char *buf)
581 {
582         struct ads7846 *ts = dev_get_drvdata(dev);
583
584         return sprintf(buf, "%u\n", ts->disabled);
585 }
586
587 static ssize_t ads7846_disable_store(struct device *dev,
588                                      struct device_attribute *attr,
589                                      const char *buf, size_t count)
590 {
591         struct ads7846 *ts = dev_get_drvdata(dev);
592         unsigned long i;
593
594         if (strict_strtoul(buf, 10, &i))
595                 return -EINVAL;
596
597         if (i)
598                 ads7846_disable(ts);
599         else
600                 ads7846_enable(ts);
601
602         return count;
603 }
604
605 static DEVICE_ATTR(disable, 0664, ads7846_disable_show, ads7846_disable_store);
606
607 static struct attribute *ads784x_attributes[] = {
608         &dev_attr_pen_down.attr,
609         &dev_attr_disable.attr,
610         NULL,
611 };
612
613 static struct attribute_group ads784x_attr_group = {
614         .attrs = ads784x_attributes,
615 };
616
617 /*--------------------------------------------------------------------------*/
618
619 static int get_pendown_state(struct ads7846 *ts)
620 {
621         if (ts->get_pendown_state)
622                 return ts->get_pendown_state();
623
624         return !gpio_get_value(ts->gpio_pendown);
625 }
626
627 static void null_wait_for_sync(void)
628 {
629 }
630
631 static int ads7846_debounce_filter(void *ads, int data_idx, int *val)
632 {
633         struct ads7846 *ts = ads;
634
635         if (!ts->read_cnt || (abs(ts->last_read - *val) > ts->debounce_tol)) {
636                 /* Start over collecting consistent readings. */
637                 ts->read_rep = 0;
638                 /*
639                  * Repeat it, if this was the first read or the read
640                  * wasn't consistent enough.
641                  */
642                 if (ts->read_cnt < ts->debounce_max) {
643                         ts->last_read = *val;
644                         ts->read_cnt++;
645                         return ADS7846_FILTER_REPEAT;
646                 } else {
647                         /*
648                          * Maximum number of debouncing reached and still
649                          * not enough number of consistent readings. Abort
650                          * the whole sample, repeat it in the next sampling
651                          * period.
652                          */
653                         ts->read_cnt = 0;
654                         return ADS7846_FILTER_IGNORE;
655                 }
656         } else {
657                 if (++ts->read_rep > ts->debounce_rep) {
658                         /*
659                          * Got a good reading for this coordinate,
660                          * go for the next one.
661                          */
662                         ts->read_cnt = 0;
663                         ts->read_rep = 0;
664                         return ADS7846_FILTER_OK;
665                 } else {
666                         /* Read more values that are consistent. */
667                         ts->read_cnt++;
668                         return ADS7846_FILTER_REPEAT;
669                 }
670         }
671 }
672
673 static int ads7846_no_filter(void *ads, int data_idx, int *val)
674 {
675         return ADS7846_FILTER_OK;
676 }
677
678 static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m)
679 {
680         struct spi_transfer *t =
681                 list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
682
683         if (ts->model == 7845) {
684                 return be16_to_cpup((__be16 *)&(((char*)t->rx_buf)[1])) >> 3;
685         } else {
686                 /*
687                  * adjust:  on-wire is a must-ignore bit, a BE12 value, then
688                  * padding; built from two 8 bit values written msb-first.
689                  */
690                 return be16_to_cpup((__be16 *)t->rx_buf) >> 3;
691         }
692 }
693
694 static void ads7846_update_value(struct spi_message *m, int val)
695 {
696         struct spi_transfer *t =
697                 list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
698
699         *(u16 *)t->rx_buf = val;
700 }
701
702 static void ads7846_read_state(struct ads7846 *ts)
703 {
704         struct ads7846_packet *packet = ts->packet;
705         struct spi_message *m;
706         int msg_idx = 0;
707         int val;
708         int action;
709         int error;
710
711         while (msg_idx < ts->msg_count) {
712
713                 ts->wait_for_sync();
714
715                 m = &ts->msg[msg_idx];
716                 error = spi_sync(ts->spi, m);
717                 if (error) {
718                         dev_err(&ts->spi->dev, "spi_async --> %d\n", error);
719                         packet->tc.ignore = true;
720                         return;
721                 }
722
723                 /*
724                  * Last message is power down request, no need to convert
725                  * or filter the value.
726                  */
727                 if (msg_idx < ts->msg_count - 1) {
728
729                         val = ads7846_get_value(ts, m);
730
731                         action = ts->filter(ts->filter_data, msg_idx, &val);
732                         switch (action) {
733                         case ADS7846_FILTER_REPEAT:
734                                 continue;
735
736                         case ADS7846_FILTER_IGNORE:
737                                 packet->tc.ignore = true;
738                                 msg_idx = ts->msg_count - 1;
739                                 continue;
740
741                         case ADS7846_FILTER_OK:
742                                 ads7846_update_value(m, val);
743                                 packet->tc.ignore = false;
744                                 msg_idx++;
745                                 break;
746
747                         default:
748                                 BUG();
749                         }
750                 } else {
751                         msg_idx++;
752                 }
753         }
754 }
755
756 static void ads7846_report_state(struct ads7846 *ts)
757 {
758         struct ads7846_packet *packet = ts->packet;
759         unsigned int Rt;
760         u16 x, y, z1, z2;
761
762         /*
763          * ads7846_get_value() does in-place conversion (including byte swap)
764          * from on-the-wire format as part of debouncing to get stable
765          * readings.
766          */
767         if (ts->model == 7845) {
768                 x = *(u16 *)packet->tc.x_buf;
769                 y = *(u16 *)packet->tc.y_buf;
770                 z1 = 0;
771                 z2 = 0;
772         } else {
773                 x = packet->tc.x;
774                 y = packet->tc.y;
775                 z1 = packet->tc.z1;
776                 z2 = packet->tc.z2;
777         }
778
779         /* range filtering */
780         if (x == MAX_12BIT)
781                 x = 0;
782
783         if (ts->model == 7843) {
784                 Rt = ts->pressure_max / 2;
785         } else if (ts->model == 7845) {
786                 if (get_pendown_state(ts))
787                         Rt = ts->pressure_max / 2;
788                 else
789                         Rt = 0;
790                 dev_vdbg(&ts->spi->dev, "x/y: %d/%d, PD %d\n", x, y, Rt);
791         } else if (likely(x && z1)) {
792                 /* compute touch pressure resistance using equation #2 */
793                 Rt = z2;
794                 Rt -= z1;
795                 Rt *= x;
796                 Rt *= ts->x_plate_ohms;
797                 Rt /= z1;
798                 Rt = (Rt + 2047) >> 12;
799         } else {
800                 Rt = 0;
801         }
802
803         /*
804          * Sample found inconsistent by debouncing or pressure is beyond
805          * the maximum. Don't report it to user space, repeat at least
806          * once more the measurement
807          */
808         if (packet->tc.ignore || Rt > ts->pressure_max) {
809                 dev_vdbg(&ts->spi->dev, "ignored %d pressure %d\n",
810                          packet->tc.ignore, Rt);
811                 return;
812         }
813
814         /*
815          * Maybe check the pendown state before reporting. This discards
816          * false readings when the pen is lifted.
817          */
818         if (ts->penirq_recheck_delay_usecs) {
819                 udelay(ts->penirq_recheck_delay_usecs);
820                 if (!get_pendown_state(ts))
821                         Rt = 0;
822         }
823
824         /*
825          * NOTE: We can't rely on the pressure to determine the pen down
826          * state, even this controller has a pressure sensor. The pressure
827          * value can fluctuate for quite a while after lifting the pen and
828          * in some cases may not even settle at the expected value.
829          *
830          * The only safe way to check for the pen up condition is in the
831          * timer by reading the pen signal state (it's a GPIO _and_ IRQ).
832          */
833         if (Rt) {
834                 struct input_dev *input = ts->input;
835
836                 if (ts->swap_xy)
837                         swap(x, y);
838
839                 if (!ts->pendown) {
840                         input_report_key(input, BTN_TOUCH, 1);
841                         ts->pendown = true;
842                         dev_vdbg(&ts->spi->dev, "DOWN\n");
843                 }
844
845                 input_report_abs(input, ABS_X, x);
846                 input_report_abs(input, ABS_Y, y);
847                 input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
848
849                 input_sync(input);
850                 dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
851         }
852 }
853
854 static irqreturn_t ads7846_hard_irq(int irq, void *handle)
855 {
856         struct ads7846 *ts = handle;
857
858         return get_pendown_state(ts) ? IRQ_WAKE_THREAD : IRQ_HANDLED;
859 }
860
861
862 static irqreturn_t ads7846_irq(int irq, void *handle)
863 {
864         struct ads7846 *ts = handle;
865
866         /* Start with a small delay before checking pendown state */
867         msleep(TS_POLL_DELAY);
868
869         while (!ts->stopped && get_pendown_state(ts)) {
870
871                 /* pen is down, continue with the measurement */
872                 ads7846_read_state(ts);
873
874                 if (!ts->stopped)
875                         ads7846_report_state(ts);
876
877                 wait_event_timeout(ts->wait, ts->stopped,
878                                    msecs_to_jiffies(TS_POLL_PERIOD));
879         }
880
881         if (ts->pendown) {
882                 struct input_dev *input = ts->input;
883
884                 input_report_key(input, BTN_TOUCH, 0);
885                 input_report_abs(input, ABS_PRESSURE, 0);
886                 input_sync(input);
887
888                 ts->pendown = false;
889                 dev_vdbg(&ts->spi->dev, "UP\n");
890         }
891
892         return IRQ_HANDLED;
893 }
894
895 static int ads7846_suspend(struct spi_device *spi, pm_message_t message)
896 {
897         struct ads7846 *ts = dev_get_drvdata(&spi->dev);
898
899         mutex_lock(&ts->lock);
900
901         if (!ts->suspended) {
902
903                 if (!ts->disabled)
904                         __ads7846_disable(ts);
905
906                 if (device_may_wakeup(&ts->spi->dev))
907                         enable_irq_wake(ts->spi->irq);
908
909                 ts->suspended = true;
910         }
911
912         mutex_unlock(&ts->lock);
913
914         return 0;
915 }
916
917 static int ads7846_resume(struct spi_device *spi)
918 {
919         struct ads7846 *ts = dev_get_drvdata(&spi->dev);
920
921         mutex_lock(&ts->lock);
922
923         if (ts->suspended) {
924
925                 ts->suspended = false;
926
927                 if (device_may_wakeup(&ts->spi->dev))
928                         disable_irq_wake(ts->spi->irq);
929
930                 if (!ts->disabled)
931                         __ads7846_enable(ts);
932         }
933
934         mutex_unlock(&ts->lock);
935
936         return 0;
937 }
938
939 static int __devinit ads7846_setup_pendown(struct spi_device *spi, struct ads7846 *ts)
940 {
941         struct ads7846_platform_data *pdata = spi->dev.platform_data;
942         int err;
943
944         /*
945          * REVISIT when the irq can be triggered active-low, or if for some
946          * reason the touchscreen isn't hooked up, we don't need to access
947          * the pendown state.
948          */
949
950         if (pdata->get_pendown_state) {
951                 ts->get_pendown_state = pdata->get_pendown_state;
952         } else if (gpio_is_valid(pdata->gpio_pendown)) {
953
954                 err = gpio_request(pdata->gpio_pendown, "ads7846_pendown");
955                 if (err) {
956                         dev_err(&spi->dev, "failed to request pendown GPIO%d\n",
957                                 pdata->gpio_pendown);
958                         return err;
959                 }
960
961                 ts->gpio_pendown = pdata->gpio_pendown;
962
963         } else {
964                 dev_err(&spi->dev, "no get_pendown_state nor gpio_pendown?\n");
965                 return -EINVAL;
966         }
967
968         return 0;
969 }
970
971 /*
972  * Set up the transfers to read touchscreen state; this assumes we
973  * use formula #2 for pressure, not #3.
974  */
975 static void __devinit ads7846_setup_spi_msg(struct ads7846 *ts,
976                                 const struct ads7846_platform_data *pdata)
977 {
978         struct spi_message *m = &ts->msg[0];
979         struct spi_transfer *x = ts->xfer;
980         struct ads7846_packet *packet = ts->packet;
981         int vref = pdata->keep_vref_on;
982
983         if (ts->model == 7873) {
984                 /*
985                  * The AD7873 is almost identical to the ADS7846
986                  * keep VREF off during differential/ratiometric
987                  * conversion modes.
988                  */
989                 ts->model = 7846;
990                 vref = 0;
991         }
992
993         ts->msg_count = 1;
994         spi_message_init(m);
995         m->context = ts;
996
997         if (ts->model == 7845) {
998                 packet->read_y_cmd[0] = READ_Y(vref);
999                 packet->read_y_cmd[1] = 0;
1000                 packet->read_y_cmd[2] = 0;
1001                 x->tx_buf = &packet->read_y_cmd[0];
1002                 x->rx_buf = &packet->tc.y_buf[0];
1003                 x->len = 3;
1004                 spi_message_add_tail(x, m);
1005         } else {
1006                 /* y- still on; turn on only y+ (and ADC) */
1007                 packet->read_y = READ_Y(vref);
1008                 x->tx_buf = &packet->read_y;
1009                 x->len = 1;
1010                 spi_message_add_tail(x, m);
1011
1012                 x++;
1013                 x->rx_buf = &packet->tc.y;
1014                 x->len = 2;
1015                 spi_message_add_tail(x, m);
1016         }
1017
1018         /*
1019          * The first sample after switching drivers can be low quality;
1020          * optionally discard it, using a second one after the signals
1021          * have had enough time to stabilize.
1022          */
1023         if (pdata->settle_delay_usecs) {
1024                 x->delay_usecs = pdata->settle_delay_usecs;
1025
1026                 x++;
1027                 x->tx_buf = &packet->read_y;
1028                 x->len = 1;
1029                 spi_message_add_tail(x, m);
1030
1031                 x++;
1032                 x->rx_buf = &packet->tc.y;
1033                 x->len = 2;
1034                 spi_message_add_tail(x, m);
1035         }
1036
1037         ts->msg_count++;
1038         m++;
1039         spi_message_init(m);
1040         m->context = ts;
1041
1042         if (ts->model == 7845) {
1043                 x++;
1044                 packet->read_x_cmd[0] = READ_X(vref);
1045                 packet->read_x_cmd[1] = 0;
1046                 packet->read_x_cmd[2] = 0;
1047                 x->tx_buf = &packet->read_x_cmd[0];
1048                 x->rx_buf = &packet->tc.x_buf[0];
1049                 x->len = 3;
1050                 spi_message_add_tail(x, m);
1051         } else {
1052                 /* turn y- off, x+ on, then leave in lowpower */
1053                 x++;
1054                 packet->read_x = READ_X(vref);
1055                 x->tx_buf = &packet->read_x;
1056                 x->len = 1;
1057                 spi_message_add_tail(x, m);
1058
1059                 x++;
1060                 x->rx_buf = &packet->tc.x;
1061                 x->len = 2;
1062                 spi_message_add_tail(x, m);
1063         }
1064
1065         /* ... maybe discard first sample ... */
1066         if (pdata->settle_delay_usecs) {
1067                 x->delay_usecs = pdata->settle_delay_usecs;
1068
1069                 x++;
1070                 x->tx_buf = &packet->read_x;
1071                 x->len = 1;
1072                 spi_message_add_tail(x, m);
1073
1074                 x++;
1075                 x->rx_buf = &packet->tc.x;
1076                 x->len = 2;
1077                 spi_message_add_tail(x, m);
1078         }
1079
1080         /* turn y+ off, x- on; we'll use formula #2 */
1081         if (ts->model == 7846) {
1082                 ts->msg_count++;
1083                 m++;
1084                 spi_message_init(m);
1085                 m->context = ts;
1086
1087                 x++;
1088                 packet->read_z1 = READ_Z1(vref);
1089                 x->tx_buf = &packet->read_z1;
1090                 x->len = 1;
1091                 spi_message_add_tail(x, m);
1092
1093                 x++;
1094                 x->rx_buf = &packet->tc.z1;
1095                 x->len = 2;
1096                 spi_message_add_tail(x, m);
1097
1098                 /* ... maybe discard first sample ... */
1099                 if (pdata->settle_delay_usecs) {
1100                         x->delay_usecs = pdata->settle_delay_usecs;
1101
1102                         x++;
1103                         x->tx_buf = &packet->read_z1;
1104                         x->len = 1;
1105                         spi_message_add_tail(x, m);
1106
1107                         x++;
1108                         x->rx_buf = &packet->tc.z1;
1109                         x->len = 2;
1110                         spi_message_add_tail(x, m);
1111                 }
1112
1113                 ts->msg_count++;
1114                 m++;
1115                 spi_message_init(m);
1116                 m->context = ts;
1117
1118                 x++;
1119                 packet->read_z2 = READ_Z2(vref);
1120                 x->tx_buf = &packet->read_z2;
1121                 x->len = 1;
1122                 spi_message_add_tail(x, m);
1123
1124                 x++;
1125                 x->rx_buf = &packet->tc.z2;
1126                 x->len = 2;
1127                 spi_message_add_tail(x, m);
1128
1129                 /* ... maybe discard first sample ... */
1130                 if (pdata->settle_delay_usecs) {
1131                         x->delay_usecs = pdata->settle_delay_usecs;
1132
1133                         x++;
1134                         x->tx_buf = &packet->read_z2;
1135                         x->len = 1;
1136                         spi_message_add_tail(x, m);
1137
1138                         x++;
1139                         x->rx_buf = &packet->tc.z2;
1140                         x->len = 2;
1141                         spi_message_add_tail(x, m);
1142                 }
1143         }
1144
1145         /* power down */
1146         ts->msg_count++;
1147         m++;
1148         spi_message_init(m);
1149         m->context = ts;
1150
1151         if (ts->model == 7845) {
1152                 x++;
1153                 packet->pwrdown_cmd[0] = PWRDOWN;
1154                 packet->pwrdown_cmd[1] = 0;
1155                 packet->pwrdown_cmd[2] = 0;
1156                 x->tx_buf = &packet->pwrdown_cmd[0];
1157                 x->len = 3;
1158         } else {
1159                 x++;
1160                 packet->pwrdown = PWRDOWN;
1161                 x->tx_buf = &packet->pwrdown;
1162                 x->len = 1;
1163                 spi_message_add_tail(x, m);
1164
1165                 x++;
1166                 x->rx_buf = &packet->dummy;
1167                 x->len = 2;
1168         }
1169
1170         CS_CHANGE(*x);
1171         spi_message_add_tail(x, m);
1172 }
1173
1174 static int __devinit ads7846_probe(struct spi_device *spi)
1175 {
1176         struct ads7846 *ts;
1177         struct ads7846_packet *packet;
1178         struct input_dev *input_dev;
1179         struct ads7846_platform_data *pdata = spi->dev.platform_data;
1180         unsigned long irq_flags;
1181         int err;
1182
1183         if (!spi->irq) {
1184                 dev_dbg(&spi->dev, "no IRQ?\n");
1185                 return -ENODEV;
1186         }
1187
1188         if (!pdata) {
1189                 dev_dbg(&spi->dev, "no platform data?\n");
1190                 return -ENODEV;
1191         }
1192
1193         /* don't exceed max specified sample rate */
1194         if (spi->max_speed_hz > (125000 * SAMPLE_BITS)) {
1195                 dev_dbg(&spi->dev, "f(sample) %d KHz?\n",
1196                                 (spi->max_speed_hz/SAMPLE_BITS)/1000);
1197                 return -EINVAL;
1198         }
1199
1200         /* We'd set TX word size 8 bits and RX word size to 13 bits ... except
1201          * that even if the hardware can do that, the SPI controller driver
1202          * may not.  So we stick to very-portable 8 bit words, both RX and TX.
1203          */
1204         spi->bits_per_word = 8;
1205         spi->mode = SPI_MODE_0;
1206         err = spi_setup(spi);
1207         if (err < 0)
1208                 return err;
1209
1210         ts = kzalloc(sizeof(struct ads7846), GFP_KERNEL);
1211         packet = kzalloc(sizeof(struct ads7846_packet), GFP_KERNEL);
1212         input_dev = input_allocate_device();
1213         if (!ts || !packet || !input_dev) {
1214                 err = -ENOMEM;
1215                 goto err_free_mem;
1216         }
1217
1218         dev_set_drvdata(&spi->dev, ts);
1219
1220         ts->packet = packet;
1221         ts->spi = spi;
1222         ts->input = input_dev;
1223         ts->vref_mv = pdata->vref_mv;
1224         ts->swap_xy = pdata->swap_xy;
1225
1226         mutex_init(&ts->lock);
1227         init_waitqueue_head(&ts->wait);
1228
1229         ts->model = pdata->model ? : 7846;
1230         ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100;
1231         ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
1232         ts->pressure_max = pdata->pressure_max ? : ~0;
1233
1234         if (pdata->filter != NULL) {
1235                 if (pdata->filter_init != NULL) {
1236                         err = pdata->filter_init(pdata, &ts->filter_data);
1237                         if (err < 0)
1238                                 goto err_free_mem;
1239                 }
1240                 ts->filter = pdata->filter;
1241                 ts->filter_cleanup = pdata->filter_cleanup;
1242         } else if (pdata->debounce_max) {
1243                 ts->debounce_max = pdata->debounce_max;
1244                 if (ts->debounce_max < 2)
1245                         ts->debounce_max = 2;
1246                 ts->debounce_tol = pdata->debounce_tol;
1247                 ts->debounce_rep = pdata->debounce_rep;
1248                 ts->filter = ads7846_debounce_filter;
1249                 ts->filter_data = ts;
1250         } else {
1251                 ts->filter = ads7846_no_filter;
1252         }
1253
1254         err = ads7846_setup_pendown(spi, ts);
1255         if (err)
1256                 goto err_cleanup_filter;
1257
1258         if (pdata->penirq_recheck_delay_usecs)
1259                 ts->penirq_recheck_delay_usecs =
1260                                 pdata->penirq_recheck_delay_usecs;
1261
1262         ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync;
1263
1264         snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
1265         snprintf(ts->name, sizeof(ts->name), "ADS%d Touchscreen", ts->model);
1266
1267         input_dev->name = ts->name;
1268         input_dev->phys = ts->phys;
1269         input_dev->dev.parent = &spi->dev;
1270
1271         input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
1272         input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
1273         input_set_abs_params(input_dev, ABS_X,
1274                         pdata->x_min ? : 0,
1275                         pdata->x_max ? : MAX_12BIT,
1276                         0, 0);
1277         input_set_abs_params(input_dev, ABS_Y,
1278                         pdata->y_min ? : 0,
1279                         pdata->y_max ? : MAX_12BIT,
1280                         0, 0);
1281         input_set_abs_params(input_dev, ABS_PRESSURE,
1282                         pdata->pressure_min, pdata->pressure_max, 0, 0);
1283
1284         ads7846_setup_spi_msg(ts, pdata);
1285
1286         ts->reg = regulator_get(&spi->dev, "vcc");
1287         if (IS_ERR(ts->reg)) {
1288                 err = PTR_ERR(ts->reg);
1289                 dev_err(&spi->dev, "unable to get regulator: %d\n", err);
1290                 goto err_free_gpio;
1291         }
1292
1293         err = regulator_enable(ts->reg);
1294         if (err) {
1295                 dev_err(&spi->dev, "unable to enable regulator: %d\n", err);
1296                 goto err_put_regulator;
1297         }
1298
1299         irq_flags = pdata->irq_flags ? : IRQF_TRIGGER_FALLING;
1300         irq_flags |= IRQF_ONESHOT;
1301
1302         err = request_threaded_irq(spi->irq, ads7846_hard_irq, ads7846_irq,
1303                                    irq_flags, spi->dev.driver->name, ts);
1304         if (err && !pdata->irq_flags) {
1305                 dev_info(&spi->dev,
1306                         "trying pin change workaround on irq %d\n", spi->irq);
1307                 irq_flags |= IRQF_TRIGGER_RISING;
1308                 err = request_threaded_irq(spi->irq,
1309                                   ads7846_hard_irq, ads7846_irq,
1310                                   irq_flags, spi->dev.driver->name, ts);
1311         }
1312
1313         if (err) {
1314                 dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
1315                 goto err_disable_regulator;
1316         }
1317
1318         err = ads784x_hwmon_register(spi, ts);
1319         if (err)
1320                 goto err_free_irq;
1321
1322         dev_info(&spi->dev, "touchscreen, irq %d\n", spi->irq);
1323
1324         /*
1325          * Take a first sample, leaving nPENIRQ active and vREF off; avoid
1326          * the touchscreen, in case it's not connected.
1327          */
1328         if (ts->model == 7845)
1329                 ads7845_read12_ser(&spi->dev, PWRDOWN);
1330         else
1331                 (void) ads7846_read12_ser(&spi->dev,
1332                                 READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON);
1333
1334         err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group);
1335         if (err)
1336                 goto err_remove_hwmon;
1337
1338         err = input_register_device(input_dev);
1339         if (err)
1340                 goto err_remove_attr_group;
1341
1342         device_init_wakeup(&spi->dev, pdata->wakeup);
1343
1344         return 0;
1345
1346  err_remove_attr_group:
1347         sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);
1348  err_remove_hwmon:
1349         ads784x_hwmon_unregister(spi, ts);
1350  err_free_irq:
1351         free_irq(spi->irq, ts);
1352  err_disable_regulator:
1353         regulator_disable(ts->reg);
1354  err_put_regulator:
1355         regulator_put(ts->reg);
1356  err_free_gpio:
1357         if (!ts->get_pendown_state)
1358                 gpio_free(ts->gpio_pendown);
1359  err_cleanup_filter:
1360         if (ts->filter_cleanup)
1361                 ts->filter_cleanup(ts->filter_data);
1362  err_free_mem:
1363         input_free_device(input_dev);
1364         kfree(packet);
1365         kfree(ts);
1366         return err;
1367 }
1368
1369 static int __devexit ads7846_remove(struct spi_device *spi)
1370 {
1371         struct ads7846 *ts = dev_get_drvdata(&spi->dev);
1372
1373         device_init_wakeup(&spi->dev, false);
1374
1375         sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);
1376
1377         ads7846_disable(ts);
1378         free_irq(ts->spi->irq, ts);
1379
1380         input_unregister_device(ts->input);
1381
1382         ads784x_hwmon_unregister(spi, ts);
1383
1384         regulator_disable(ts->reg);
1385         regulator_put(ts->reg);
1386
1387         if (!ts->get_pendown_state) {
1388                 /*
1389                  * If we are not using specialized pendown method we must
1390                  * have been relying on gpio we set up ourselves.
1391                  */
1392                 gpio_free(ts->gpio_pendown);
1393         }
1394
1395         if (ts->filter_cleanup)
1396                 ts->filter_cleanup(ts->filter_data);
1397
1398         kfree(ts->packet);
1399         kfree(ts);
1400
1401         dev_dbg(&spi->dev, "unregistered touchscreen\n");
1402
1403         return 0;
1404 }
1405
1406 static struct spi_driver ads7846_driver = {
1407         .driver = {
1408                 .name   = "ads7846",
1409                 .bus    = &spi_bus_type,
1410                 .owner  = THIS_MODULE,
1411         },
1412         .probe          = ads7846_probe,
1413         .remove         = __devexit_p(ads7846_remove),
1414         .suspend        = ads7846_suspend,
1415         .resume         = ads7846_resume,
1416 };
1417
1418 static int __init ads7846_init(void)
1419 {
1420         return spi_register_driver(&ads7846_driver);
1421 }
1422 module_init(ads7846_init);
1423
1424 static void __exit ads7846_exit(void)
1425 {
1426         spi_unregister_driver(&ads7846_driver);
1427 }
1428 module_exit(ads7846_exit);
1429
1430 MODULE_DESCRIPTION("ADS7846 TouchScreen Driver");
1431 MODULE_LICENSE("GPL");
1432 MODULE_ALIAS("spi:ads7846");