linux/drivers/input/touchscreen/tsc2005.c
<<
>>
Prefs
   1/*
   2 * TSC2005 touchscreen driver
   3 *
   4 * Copyright (C) 2006-2010 Nokia Corporation
   5 *
   6 * Author: Lauri Leukkunen <lauri.leukkunen@nokia.com>
   7 * based on TSC2301 driver by Klaus K. Pedersen <klaus.k.pedersen@nokia.com>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 * GNU General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; if not, write to the Free Software
  21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22 *
  23 */
  24
  25#include <linux/kernel.h>
  26#include <linux/module.h>
  27#include <linux/input.h>
  28#include <linux/interrupt.h>
  29#include <linux/delay.h>
  30#include <linux/pm.h>
  31#include <linux/spi/spi.h>
  32#include <linux/spi/tsc2005.h>
  33
  34/*
  35 * The touchscreen interface operates as follows:
  36 *
  37 * 1) Pen is pressed against the touchscreen.
  38 * 2) TSC2005 performs AD conversion.
  39 * 3) After the conversion is done TSC2005 drives DAV line down.
  40 * 4) GPIO IRQ is received and tsc2005_irq_thread() is scheduled.
  41 * 5) tsc2005_irq_thread() queues up an spi transfer to fetch the x, y, z1, z2
  42 *    values.
  43 * 6) tsc2005_irq_thread() reports coordinates to input layer and sets up
  44 *    tsc2005_penup_timer() to be called after TSC2005_PENUP_TIME_MS (40ms).
  45 * 7) When the penup timer expires, there have not been touch or DAV interrupts
  46 *    during the last 40ms which means the pen has been lifted.
  47 *
  48 * ESD recovery via a hardware reset is done if the TSC2005 doesn't respond
  49 * after a configurable period (in ms) of activity. If esd_timeout is 0, the
  50 * watchdog is disabled.
  51 */
  52
  53/* control byte 1 */
  54#define TSC2005_CMD                     0x80
  55#define TSC2005_CMD_NORMAL              0x00
  56#define TSC2005_CMD_STOP                0x01
  57#define TSC2005_CMD_12BIT               0x04
  58
  59/* control byte 0 */
  60#define TSC2005_REG_READ                0x0001
  61#define TSC2005_REG_PND0                0x0002
  62#define TSC2005_REG_X                   0x0000
  63#define TSC2005_REG_Y                   0x0008
  64#define TSC2005_REG_Z1                  0x0010
  65#define TSC2005_REG_Z2                  0x0018
  66#define TSC2005_REG_TEMP_HIGH           0x0050
  67#define TSC2005_REG_CFR0                0x0060
  68#define TSC2005_REG_CFR1                0x0068
  69#define TSC2005_REG_CFR2                0x0070
  70
  71/* configuration register 0 */
  72#define TSC2005_CFR0_PRECHARGE_276US    0x0040
  73#define TSC2005_CFR0_STABTIME_1MS       0x0300
  74#define TSC2005_CFR0_CLOCK_1MHZ         0x1000
  75#define TSC2005_CFR0_RESOLUTION12       0x2000
  76#define TSC2005_CFR0_PENMODE            0x8000
  77#define TSC2005_CFR0_INITVALUE          (TSC2005_CFR0_STABTIME_1MS    | \
  78                                         TSC2005_CFR0_CLOCK_1MHZ      | \
  79                                         TSC2005_CFR0_RESOLUTION12    | \
  80                                         TSC2005_CFR0_PRECHARGE_276US | \
  81                                         TSC2005_CFR0_PENMODE)
  82
  83/* bits common to both read and write of configuration register 0 */
  84#define TSC2005_CFR0_RW_MASK            0x3fff
  85
  86/* configuration register 1 */
  87#define TSC2005_CFR1_BATCHDELAY_4MS     0x0003
  88#define TSC2005_CFR1_INITVALUE          TSC2005_CFR1_BATCHDELAY_4MS
  89
  90/* configuration register 2 */
  91#define TSC2005_CFR2_MAVE_Z             0x0004
  92#define TSC2005_CFR2_MAVE_Y             0x0008
  93#define TSC2005_CFR2_MAVE_X             0x0010
  94#define TSC2005_CFR2_AVG_7              0x0800
  95#define TSC2005_CFR2_MEDIUM_15          0x3000
  96#define TSC2005_CFR2_INITVALUE          (TSC2005_CFR2_MAVE_X    | \
  97                                         TSC2005_CFR2_MAVE_Y    | \
  98                                         TSC2005_CFR2_MAVE_Z    | \
  99                                         TSC2005_CFR2_MEDIUM_15 | \
 100                                         TSC2005_CFR2_AVG_7)
 101
 102#define MAX_12BIT                       0xfff
 103#define TSC2005_SPI_MAX_SPEED_HZ        10000000
 104#define TSC2005_PENUP_TIME_MS           40
 105
 106struct tsc2005_spi_rd {
 107        struct spi_transfer     spi_xfer;
 108        u32                     spi_tx;
 109        u32                     spi_rx;
 110};
 111
 112struct tsc2005 {
 113        struct spi_device       *spi;
 114
 115        struct spi_message      spi_read_msg;
 116        struct tsc2005_spi_rd   spi_x;
 117        struct tsc2005_spi_rd   spi_y;
 118        struct tsc2005_spi_rd   spi_z1;
 119        struct tsc2005_spi_rd   spi_z2;
 120
 121        struct input_dev        *idev;
 122        char                    phys[32];
 123
 124        struct mutex            mutex;
 125
 126        /* raw copy of previous x,y,z */
 127        int                     in_x;
 128        int                     in_y;
 129        int                     in_z1;
 130        int                     in_z2;
 131
 132        spinlock_t              lock;
 133        struct timer_list       penup_timer;
 134
 135        unsigned int            esd_timeout;
 136        struct delayed_work     esd_work;
 137        unsigned long           last_valid_interrupt;
 138
 139        unsigned int            x_plate_ohm;
 140
 141        bool                    opened;
 142        bool                    suspended;
 143
 144        bool                    pen_down;
 145
 146        void                    (*set_reset)(bool enable);
 147};
 148
 149static int tsc2005_cmd(struct tsc2005 *ts, u8 cmd)
 150{
 151        u8 tx = TSC2005_CMD | TSC2005_CMD_12BIT | cmd;
 152        struct spi_transfer xfer = {
 153                .tx_buf         = &tx,
 154                .len            = 1,
 155                .bits_per_word  = 8,
 156        };
 157        struct spi_message msg;
 158        int error;
 159
 160        spi_message_init(&msg);
 161        spi_message_add_tail(&xfer, &msg);
 162
 163        error = spi_sync(ts->spi, &msg);
 164        if (error) {
 165                dev_err(&ts->spi->dev, "%s: failed, command: %x, error: %d\n",
 166                        __func__, cmd, error);
 167                return error;
 168        }
 169
 170        return 0;
 171}
 172
 173static int tsc2005_write(struct tsc2005 *ts, u8 reg, u16 value)
 174{
 175        u32 tx = ((reg | TSC2005_REG_PND0) << 16) | value;
 176        struct spi_transfer xfer = {
 177                .tx_buf         = &tx,
 178                .len            = 4,
 179                .bits_per_word  = 24,
 180        };
 181        struct spi_message msg;
 182        int error;
 183
 184        spi_message_init(&msg);
 185        spi_message_add_tail(&xfer, &msg);
 186
 187        error = spi_sync(ts->spi, &msg);
 188        if (error) {
 189                dev_err(&ts->spi->dev,
 190                        "%s: failed, register: %x, value: %x, error: %d\n",
 191                        __func__, reg, value, error);
 192                return error;
 193        }
 194
 195        return 0;
 196}
 197
 198static void tsc2005_setup_read(struct tsc2005_spi_rd *rd, u8 reg, bool last)
 199{
 200        memset(rd, 0, sizeof(*rd));
 201
 202        rd->spi_tx                 = (reg | TSC2005_REG_READ) << 16;
 203        rd->spi_xfer.tx_buf        = &rd->spi_tx;
 204        rd->spi_xfer.rx_buf        = &rd->spi_rx;
 205        rd->spi_xfer.len           = 4;
 206        rd->spi_xfer.bits_per_word = 24;
 207        rd->spi_xfer.cs_change     = !last;
 208}
 209
 210static int tsc2005_read(struct tsc2005 *ts, u8 reg, u16 *value)
 211{
 212        struct tsc2005_spi_rd spi_rd;
 213        struct spi_message msg;
 214        int error;
 215
 216        tsc2005_setup_read(&spi_rd, reg, true);
 217
 218        spi_message_init(&msg);
 219        spi_message_add_tail(&spi_rd.spi_xfer, &msg);
 220
 221        error = spi_sync(ts->spi, &msg);
 222        if (error)
 223                return error;
 224
 225        *value = spi_rd.spi_rx;
 226        return 0;
 227}
 228
 229static void tsc2005_update_pen_state(struct tsc2005 *ts,
 230                                     int x, int y, int pressure)
 231{
 232        if (pressure) {
 233                input_report_abs(ts->idev, ABS_X, x);
 234                input_report_abs(ts->idev, ABS_Y, y);
 235                input_report_abs(ts->idev, ABS_PRESSURE, pressure);
 236                if (!ts->pen_down) {
 237                        input_report_key(ts->idev, BTN_TOUCH, !!pressure);
 238                        ts->pen_down = true;
 239                }
 240        } else {
 241                input_report_abs(ts->idev, ABS_PRESSURE, 0);
 242                if (ts->pen_down) {
 243                        input_report_key(ts->idev, BTN_TOUCH, 0);
 244                        ts->pen_down = false;
 245                }
 246        }
 247        input_sync(ts->idev);
 248        dev_dbg(&ts->spi->dev, "point(%4d,%4d), pressure (%4d)\n", x, y,
 249                pressure);
 250}
 251
 252static irqreturn_t tsc2005_irq_thread(int irq, void *_ts)
 253{
 254        struct tsc2005 *ts = _ts;
 255        unsigned long flags;
 256        unsigned int pressure;
 257        u32 x, y;
 258        u32 z1, z2;
 259        int error;
 260
 261        /* read the coordinates */
 262        error = spi_sync(ts->spi, &ts->spi_read_msg);
 263        if (unlikely(error))
 264                goto out;
 265
 266        x = ts->spi_x.spi_rx;
 267        y = ts->spi_y.spi_rx;
 268        z1 = ts->spi_z1.spi_rx;
 269        z2 = ts->spi_z2.spi_rx;
 270
 271        /* validate position */
 272        if (unlikely(x > MAX_12BIT || y > MAX_12BIT))
 273                goto out;
 274
 275        /* Skip reading if the pressure components are out of range */
 276        if (unlikely(z1 == 0 || z2 > MAX_12BIT || z1 >= z2))
 277                goto out;
 278
 279       /*
 280        * Skip point if this is a pen down with the exact same values as
 281        * the value before pen-up - that implies SPI fed us stale data
 282        */
 283        if (!ts->pen_down &&
 284            ts->in_x == x && ts->in_y == y &&
 285            ts->in_z1 == z1 && ts->in_z2 == z2) {
 286                goto out;
 287        }
 288
 289        /*
 290         * At this point we are happy we have a valid and useful reading.
 291         * Remember it for later comparisons. We may now begin downsampling.
 292         */
 293        ts->in_x = x;
 294        ts->in_y = y;
 295        ts->in_z1 = z1;
 296        ts->in_z2 = z2;
 297
 298        /* Compute touch pressure resistance using equation #1 */
 299        pressure = x * (z2 - z1) / z1;
 300        pressure = pressure * ts->x_plate_ohm / 4096;
 301        if (unlikely(pressure > MAX_12BIT))
 302                goto out;
 303
 304        spin_lock_irqsave(&ts->lock, flags);
 305
 306        tsc2005_update_pen_state(ts, x, y, pressure);
 307        mod_timer(&ts->penup_timer,
 308                  jiffies + msecs_to_jiffies(TSC2005_PENUP_TIME_MS));
 309
 310        spin_unlock_irqrestore(&ts->lock, flags);
 311
 312        ts->last_valid_interrupt = jiffies;
 313out:
 314        return IRQ_HANDLED;
 315}
 316
 317static void tsc2005_penup_timer(unsigned long data)
 318{
 319        struct tsc2005 *ts = (struct tsc2005 *)data;
 320        unsigned long flags;
 321
 322        spin_lock_irqsave(&ts->lock, flags);
 323        tsc2005_update_pen_state(ts, 0, 0, 0);
 324        spin_unlock_irqrestore(&ts->lock, flags);
 325}
 326
 327static void tsc2005_start_scan(struct tsc2005 *ts)
 328{
 329        tsc2005_write(ts, TSC2005_REG_CFR0, TSC2005_CFR0_INITVALUE);
 330        tsc2005_write(ts, TSC2005_REG_CFR1, TSC2005_CFR1_INITVALUE);
 331        tsc2005_write(ts, TSC2005_REG_CFR2, TSC2005_CFR2_INITVALUE);
 332        tsc2005_cmd(ts, TSC2005_CMD_NORMAL);
 333}
 334
 335static void tsc2005_stop_scan(struct tsc2005 *ts)
 336{
 337        tsc2005_cmd(ts, TSC2005_CMD_STOP);
 338}
 339
 340/* must be called with ts->mutex held */
 341static void __tsc2005_disable(struct tsc2005 *ts)
 342{
 343        tsc2005_stop_scan(ts);
 344
 345        disable_irq(ts->spi->irq);
 346        del_timer_sync(&ts->penup_timer);
 347
 348        cancel_delayed_work_sync(&ts->esd_work);
 349
 350        enable_irq(ts->spi->irq);
 351}
 352
 353/* must be called with ts->mutex held */
 354static void __tsc2005_enable(struct tsc2005 *ts)
 355{
 356        tsc2005_start_scan(ts);
 357
 358        if (ts->esd_timeout && ts->set_reset) {
 359                ts->last_valid_interrupt = jiffies;
 360                schedule_delayed_work(&ts->esd_work,
 361                                round_jiffies_relative(
 362                                        msecs_to_jiffies(ts->esd_timeout)));
 363        }
 364
 365}
 366
 367static ssize_t tsc2005_selftest_show(struct device *dev,
 368                                     struct device_attribute *attr,
 369                                     char *buf)
 370{
 371        struct spi_device *spi = to_spi_device(dev);
 372        struct tsc2005 *ts = spi_get_drvdata(spi);
 373        u16 temp_high;
 374        u16 temp_high_orig;
 375        u16 temp_high_test;
 376        bool success = true;
 377        int error;
 378
 379        mutex_lock(&ts->mutex);
 380
 381        /*
 382         * Test TSC2005 communications via temp high register.
 383         */
 384        __tsc2005_disable(ts);
 385
 386        error = tsc2005_read(ts, TSC2005_REG_TEMP_HIGH, &temp_high_orig);
 387        if (error) {
 388                dev_warn(dev, "selftest failed: read error %d\n", error);
 389                success = false;
 390                goto out;
 391        }
 392
 393        temp_high_test = (temp_high_orig - 1) & MAX_12BIT;
 394
 395        error = tsc2005_write(ts, TSC2005_REG_TEMP_HIGH, temp_high_test);
 396        if (error) {
 397                dev_warn(dev, "selftest failed: write error %d\n", error);
 398                success = false;
 399                goto out;
 400        }
 401
 402        error = tsc2005_read(ts, TSC2005_REG_TEMP_HIGH, &temp_high);
 403        if (error) {
 404                dev_warn(dev, "selftest failed: read error %d after write\n",
 405                         error);
 406                success = false;
 407                goto out;
 408        }
 409
 410        if (temp_high != temp_high_test) {
 411                dev_warn(dev, "selftest failed: %d != %d\n",
 412                         temp_high, temp_high_test);
 413                success = false;
 414        }
 415
 416        /* hardware reset */
 417        ts->set_reset(false);
 418        usleep_range(100, 500); /* only 10us required */
 419        ts->set_reset(true);
 420
 421        if (!success)
 422                goto out;
 423
 424        /* test that the reset really happened */
 425        error = tsc2005_read(ts, TSC2005_REG_TEMP_HIGH, &temp_high);
 426        if (error) {
 427                dev_warn(dev, "selftest failed: read error %d after reset\n",
 428                         error);
 429                success = false;
 430                goto out;
 431        }
 432
 433        if (temp_high != temp_high_orig) {
 434                dev_warn(dev, "selftest failed after reset: %d != %d\n",
 435                         temp_high, temp_high_orig);
 436                success = false;
 437        }
 438
 439out:
 440        __tsc2005_enable(ts);
 441        mutex_unlock(&ts->mutex);
 442
 443        return sprintf(buf, "%d\n", success);
 444}
 445
 446static DEVICE_ATTR(selftest, S_IRUGO, tsc2005_selftest_show, NULL);
 447
 448static struct attribute *tsc2005_attrs[] = {
 449        &dev_attr_selftest.attr,
 450        NULL
 451};
 452
 453static umode_t tsc2005_attr_is_visible(struct kobject *kobj,
 454                                      struct attribute *attr, int n)
 455{
 456        struct device *dev = container_of(kobj, struct device, kobj);
 457        struct spi_device *spi = to_spi_device(dev);
 458        struct tsc2005 *ts = spi_get_drvdata(spi);
 459        umode_t mode = attr->mode;
 460
 461        if (attr == &dev_attr_selftest.attr) {
 462                if (!ts->set_reset)
 463                        mode = 0;
 464        }
 465
 466        return mode;
 467}
 468
 469static const struct attribute_group tsc2005_attr_group = {
 470        .is_visible     = tsc2005_attr_is_visible,
 471        .attrs          = tsc2005_attrs,
 472};
 473
 474static void tsc2005_esd_work(struct work_struct *work)
 475{
 476        struct tsc2005 *ts = container_of(work, struct tsc2005, esd_work.work);
 477        int error;
 478        u16 r;
 479
 480        if (!mutex_trylock(&ts->mutex)) {
 481                /*
 482                 * If the mutex is taken, it means that disable or enable is in
 483                 * progress. In that case just reschedule the work. If the work
 484                 * is not needed, it will be canceled by disable.
 485                 */
 486                goto reschedule;
 487        }
 488
 489        if (time_is_after_jiffies(ts->last_valid_interrupt +
 490                                  msecs_to_jiffies(ts->esd_timeout)))
 491                goto out;
 492
 493        /* We should be able to read register without disabling interrupts. */
 494        error = tsc2005_read(ts, TSC2005_REG_CFR0, &r);
 495        if (!error &&
 496            !((r ^ TSC2005_CFR0_INITVALUE) & TSC2005_CFR0_RW_MASK)) {
 497                goto out;
 498        }
 499
 500        /*
 501         * If we could not read our known value from configuration register 0
 502         * then we should reset the controller as if from power-up and start
 503         * scanning again.
 504         */
 505        dev_info(&ts->spi->dev, "TSC2005 not responding - resetting\n");
 506
 507        disable_irq(ts->spi->irq);
 508        del_timer_sync(&ts->penup_timer);
 509
 510        tsc2005_update_pen_state(ts, 0, 0, 0);
 511
 512        ts->set_reset(false);
 513        usleep_range(100, 500); /* only 10us required */
 514        ts->set_reset(true);
 515
 516        enable_irq(ts->spi->irq);
 517        tsc2005_start_scan(ts);
 518
 519out:
 520        mutex_unlock(&ts->mutex);
 521reschedule:
 522        /* re-arm the watchdog */
 523        schedule_delayed_work(&ts->esd_work,
 524                              round_jiffies_relative(
 525                                        msecs_to_jiffies(ts->esd_timeout)));
 526}
 527
 528static int tsc2005_open(struct input_dev *input)
 529{
 530        struct tsc2005 *ts = input_get_drvdata(input);
 531
 532        mutex_lock(&ts->mutex);
 533
 534        if (!ts->suspended)
 535                __tsc2005_enable(ts);
 536
 537        ts->opened = true;
 538
 539        mutex_unlock(&ts->mutex);
 540
 541        return 0;
 542}
 543
 544static void tsc2005_close(struct input_dev *input)
 545{
 546        struct tsc2005 *ts = input_get_drvdata(input);
 547
 548        mutex_lock(&ts->mutex);
 549
 550        if (!ts->suspended)
 551                __tsc2005_disable(ts);
 552
 553        ts->opened = false;
 554
 555        mutex_unlock(&ts->mutex);
 556}
 557
 558static void tsc2005_setup_spi_xfer(struct tsc2005 *ts)
 559{
 560        tsc2005_setup_read(&ts->spi_x, TSC2005_REG_X, false);
 561        tsc2005_setup_read(&ts->spi_y, TSC2005_REG_Y, false);
 562        tsc2005_setup_read(&ts->spi_z1, TSC2005_REG_Z1, false);
 563        tsc2005_setup_read(&ts->spi_z2, TSC2005_REG_Z2, true);
 564
 565        spi_message_init(&ts->spi_read_msg);
 566        spi_message_add_tail(&ts->spi_x.spi_xfer, &ts->spi_read_msg);
 567        spi_message_add_tail(&ts->spi_y.spi_xfer, &ts->spi_read_msg);
 568        spi_message_add_tail(&ts->spi_z1.spi_xfer, &ts->spi_read_msg);
 569        spi_message_add_tail(&ts->spi_z2.spi_xfer, &ts->spi_read_msg);
 570}
 571
 572static int tsc2005_probe(struct spi_device *spi)
 573{
 574        const struct tsc2005_platform_data *pdata = spi->dev.platform_data;
 575        struct tsc2005 *ts;
 576        struct input_dev *input_dev;
 577        unsigned int max_x, max_y, max_p;
 578        unsigned int fudge_x, fudge_y, fudge_p;
 579        int error;
 580
 581        if (!pdata) {
 582                dev_dbg(&spi->dev, "no platform data\n");
 583                return -ENODEV;
 584        }
 585
 586        fudge_x = pdata->ts_x_fudge        ? : 4;
 587        fudge_y = pdata->ts_y_fudge        ? : 8;
 588        fudge_p = pdata->ts_pressure_fudge ? : 2;
 589        max_x   = pdata->ts_x_max          ? : MAX_12BIT;
 590        max_y   = pdata->ts_y_max          ? : MAX_12BIT;
 591        max_p   = pdata->ts_pressure_max   ? : MAX_12BIT;
 592
 593        if (spi->irq <= 0) {
 594                dev_dbg(&spi->dev, "no irq\n");
 595                return -ENODEV;
 596        }
 597
 598        spi->mode = SPI_MODE_0;
 599        spi->bits_per_word = 8;
 600        if (!spi->max_speed_hz)
 601                spi->max_speed_hz = TSC2005_SPI_MAX_SPEED_HZ;
 602
 603        error = spi_setup(spi);
 604        if (error)
 605                return error;
 606
 607        ts = kzalloc(sizeof(*ts), GFP_KERNEL);
 608        input_dev = input_allocate_device();
 609        if (!ts || !input_dev) {
 610                error = -ENOMEM;
 611                goto err_free_mem;
 612        }
 613
 614        ts->spi = spi;
 615        ts->idev = input_dev;
 616
 617        ts->x_plate_ohm = pdata->ts_x_plate_ohm ? : 280;
 618        ts->esd_timeout = pdata->esd_timeout_ms;
 619        ts->set_reset   = pdata->set_reset;
 620
 621        mutex_init(&ts->mutex);
 622
 623        spin_lock_init(&ts->lock);
 624        setup_timer(&ts->penup_timer, tsc2005_penup_timer, (unsigned long)ts);
 625
 626        INIT_DELAYED_WORK(&ts->esd_work, tsc2005_esd_work);
 627
 628        tsc2005_setup_spi_xfer(ts);
 629
 630        snprintf(ts->phys, sizeof(ts->phys),
 631                 "%s/input-ts", dev_name(&spi->dev));
 632
 633        input_dev->name = "TSC2005 touchscreen";
 634        input_dev->phys = ts->phys;
 635        input_dev->id.bustype = BUS_SPI;
 636        input_dev->dev.parent = &spi->dev;
 637        input_dev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY);
 638        input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
 639
 640        input_set_abs_params(input_dev, ABS_X, 0, max_x, fudge_x, 0);
 641        input_set_abs_params(input_dev, ABS_Y, 0, max_y, fudge_y, 0);
 642        input_set_abs_params(input_dev, ABS_PRESSURE, 0, max_p, fudge_p, 0);
 643
 644        input_dev->open = tsc2005_open;
 645        input_dev->close = tsc2005_close;
 646
 647        input_set_drvdata(input_dev, ts);
 648
 649        /* Ensure the touchscreen is off */
 650        tsc2005_stop_scan(ts);
 651
 652        error = request_threaded_irq(spi->irq, NULL, tsc2005_irq_thread,
 653                                     IRQF_TRIGGER_RISING | IRQF_ONESHOT,
 654                                     "tsc2005", ts);
 655        if (error) {
 656                dev_err(&spi->dev, "Failed to request irq, err: %d\n", error);
 657                goto err_free_mem;
 658        }
 659
 660        spi_set_drvdata(spi, ts);
 661        error = sysfs_create_group(&spi->dev.kobj, &tsc2005_attr_group);
 662        if (error) {
 663                dev_err(&spi->dev,
 664                        "Failed to create sysfs attributes, err: %d\n", error);
 665                goto err_clear_drvdata;
 666        }
 667
 668        error = input_register_device(ts->idev);
 669        if (error) {
 670                dev_err(&spi->dev,
 671                        "Failed to register input device, err: %d\n", error);
 672                goto err_remove_sysfs;
 673        }
 674
 675        irq_set_irq_wake(spi->irq, 1);
 676        return 0;
 677
 678err_remove_sysfs:
 679        sysfs_remove_group(&spi->dev.kobj, &tsc2005_attr_group);
 680err_clear_drvdata:
 681        spi_set_drvdata(spi, NULL);
 682        free_irq(spi->irq, ts);
 683err_free_mem:
 684        input_free_device(input_dev);
 685        kfree(ts);
 686        return error;
 687}
 688
 689static int tsc2005_remove(struct spi_device *spi)
 690{
 691        struct tsc2005 *ts = spi_get_drvdata(spi);
 692
 693        sysfs_remove_group(&ts->spi->dev.kobj, &tsc2005_attr_group);
 694
 695        free_irq(ts->spi->irq, ts);
 696        input_unregister_device(ts->idev);
 697        kfree(ts);
 698
 699        spi_set_drvdata(spi, NULL);
 700        return 0;
 701}
 702
 703#ifdef CONFIG_PM_SLEEP
 704static int tsc2005_suspend(struct device *dev)
 705{
 706        struct spi_device *spi = to_spi_device(dev);
 707        struct tsc2005 *ts = spi_get_drvdata(spi);
 708
 709        mutex_lock(&ts->mutex);
 710
 711        if (!ts->suspended && ts->opened)
 712                __tsc2005_disable(ts);
 713
 714        ts->suspended = true;
 715
 716        mutex_unlock(&ts->mutex);
 717
 718        return 0;
 719}
 720
 721static int tsc2005_resume(struct device *dev)
 722{
 723        struct spi_device *spi = to_spi_device(dev);
 724        struct tsc2005 *ts = spi_get_drvdata(spi);
 725
 726        mutex_lock(&ts->mutex);
 727
 728        if (ts->suspended && ts->opened)
 729                __tsc2005_enable(ts);
 730
 731        ts->suspended = false;
 732
 733        mutex_unlock(&ts->mutex);
 734
 735        return 0;
 736}
 737#endif
 738
 739static SIMPLE_DEV_PM_OPS(tsc2005_pm_ops, tsc2005_suspend, tsc2005_resume);
 740
 741static struct spi_driver tsc2005_driver = {
 742        .driver = {
 743                .name   = "tsc2005",
 744                .owner  = THIS_MODULE,
 745                .pm     = &tsc2005_pm_ops,
 746        },
 747        .probe  = tsc2005_probe,
 748        .remove = tsc2005_remove,
 749};
 750
 751module_spi_driver(tsc2005_driver);
 752
 753MODULE_AUTHOR("Lauri Leukkunen <lauri.leukkunen@nokia.com>");
 754MODULE_DESCRIPTION("TSC2005 Touchscreen Driver");
 755MODULE_LICENSE("GPL");
 756MODULE_ALIAS("spi:tsc2005");
 757