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