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