linux/drivers/input/touchscreen/ads7846.c
<<
>>
Prefs
   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/pm.h>
  30#include <linux/gpio.h>
  31#include <linux/spi/spi.h>
  32#include <linux/spi/ads7846.h>
  33#include <linux/regulator/consumer.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
  65struct 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 */
  85struct ads7846_packet {
  86        u8                      read_x, read_y, read_z1, read_z2, pwrdown;
  87        u16                     dummy;          /* for the pwrdown read */
  88        struct ts_event         tc;
  89        /* for ads7845 with mpc5121 psc spi we use 3-byte buffers */
  90        u8                      read_x_cmd[3], read_y_cmd[3], pwrdown_cmd[3];
  91};
  92
  93struct 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
 106        u16                     model;
 107        u16                     vref_mv;
 108        u16                     vref_delay_usecs;
 109        u16                     x_plate_ohms;
 110        u16                     pressure_max;
 111
 112        bool                    swap_xy;
 113        bool                    use_internal;
 114
 115        struct ads7846_packet   *packet;
 116
 117        struct spi_transfer     xfer[18];
 118        struct spi_message      msg[5];
 119        int                     msg_count;
 120        wait_queue_head_t       wait;
 121
 122        bool                    pendown;
 123
 124        int                     read_cnt;
 125        int                     read_rep;
 126        int                     last_read;
 127
 128        u16                     debounce_max;
 129        u16                     debounce_tol;
 130        u16                     debounce_rep;
 131
 132        u16                     penirq_recheck_delay_usecs;
 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;
 141        void                    (*filter_cleanup)(void *data);
 142        int                     (*get_pendown_state)(void);
 143        int                     gpio_pendown;
 144
 145        void                    (*wait_for_sync)(void);
 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 */
 202static 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 */
 214static 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 */
 225static 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 */
 237static void __ads7846_enable(struct ads7846 *ts)
 238{
 239        regulator_enable(ts->reg);
 240        ads7846_restart(ts);
 241}
 242
 243static 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
 258static 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
 281struct ser_req {
 282        u8                      ref_on;
 283        u8                      command;
 284        u8                      ref_off;
 285        u16                     scratch;
 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         */
 292        __be16 sample ____cacheline_aligned;
 293};
 294
 295struct ads7845_ser_req {
 296        u8                      command[3];
 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         */
 303        u8 sample[3] ____cacheline_aligned;
 304};
 305
 306static 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
 380static 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 \
 419name ## _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} \
 428static 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 */
 436static inline unsigned null_adjust(struct ads7846 *ts, ssize_t v)
 437{
 438        return v;
 439}
 440
 441SHOW(temp0, temp0, null_adjust)         /* temp1_input */
 442SHOW(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 */
 449static 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
 460static 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
 471SHOW(in0_input, vaux, vaux_adjust)
 472SHOW(in1_input, vbatt, vbatt_adjust)
 473
 474static 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
 482static struct attribute_group ads7846_attr_group = {
 483        .attrs = ads7846_attributes,
 484};
 485
 486static struct attribute *ads7843_attributes[] = {
 487        &dev_attr_in0_input.attr,
 488        &dev_attr_in1_input.attr,
 489        NULL,
 490};
 491
 492static struct attribute_group ads7843_attr_group = {
 493        .attrs = ads7843_attributes,
 494};
 495
 496static struct attribute *ads7845_attributes[] = {
 497        &dev_attr_in0_input.attr,
 498        NULL,
 499};
 500
 501static struct attribute_group ads7845_attr_group = {
 502        .attrs = ads7845_attributes,
 503};
 504
 505static 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
 560static 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
 570static inline int ads784x_hwmon_register(struct spi_device *spi,
 571                                         struct ads7846 *ts)
 572{
 573        return 0;
 574}
 575
 576static inline void ads784x_hwmon_unregister(struct spi_device *spi,
 577                                            struct ads7846 *ts)
 578{
 579}
 580#endif
 581
 582static 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
 590static DEVICE_ATTR(pen_down, S_IRUGO, ads7846_pen_down_show, NULL);
 591
 592static 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
 600static 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
 620static DEVICE_ATTR(disable, 0664, ads7846_disable_show, ads7846_disable_store);
 621
 622static struct attribute *ads784x_attributes[] = {
 623        &dev_attr_pen_down.attr,
 624        &dev_attr_disable.attr,
 625        NULL,
 626};
 627
 628static struct attribute_group ads784x_attr_group = {
 629        .attrs = ads784x_attributes,
 630};
 631
 632/*--------------------------------------------------------------------------*/
 633
 634static 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
 642static void null_wait_for_sync(void)
 643{
 644}
 645
 646static 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
 688static int ads7846_no_filter(void *ads, int data_idx, int *val)
 689{
 690        return ADS7846_FILTER_OK;
 691}
 692
 693static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m)
 694{
 695        struct spi_transfer *t =
 696                list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
 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
 709static void ads7846_update_value(struct spi_message *m, int val)
 710{
 711        struct spi_transfer *t =
 712                list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
 713
 714        *(u16 *)t->rx_buf = val;
 715}
 716
 717static 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) {
 748                        case ADS7846_FILTER_REPEAT:
 749                                continue;
 750
 751                        case ADS7846_FILTER_IGNORE:
 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
 771static 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) {
 834                udelay(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
 869static irqreturn_t ads7846_hard_irq(int irq, void *handle)
 870{
 871        struct ads7846 *ts = handle;
 872
 873        return get_pendown_state(ts) ? IRQ_WAKE_THREAD : IRQ_HANDLED;
 874}
 875
 876
 877static 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 */
 882        msleep(TS_POLL_DELAY);
 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
 892                wait_event_timeout(ts->wait, ts->stopped,
 893                                   msecs_to_jiffies(TS_POLL_PERIOD));
 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
 911static 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
 933static 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
 956static SIMPLE_DEV_PM_OPS(ads7846_pm, ads7846_suspend, ads7846_resume);
 957
 958static 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) {
 971                ts->get_pendown_state = 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)
 986                        gpio_set_debounce(pdata->gpio_pendown,
 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 */
1000static 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
1199static 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)
1284                ts->penirq_recheck_delay_usecs =
1285                                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
1393static 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
1430static 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
1440module_spi_driver(ads7846_driver);
1441
1442MODULE_DESCRIPTION("ADS7846 TouchScreen Driver");
1443MODULE_LICENSE("GPL");
1444MODULE_ALIAS("spi:ads7846");
1445