aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2014-08-07 02:36:12 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-08-07 02:36:12 -0400
commit5e2aa2ed08e2e280121dc7cf5609c87d464f12ef (patch)
treeca7d7b1480285e3b617fecc5b41f0ce150a82c32 /drivers/input/touchscreen
parentf62d14a8072b9756db36ba394e2b267470a40240 (diff)
parentfc8104bc5a3f6f49d79f45f2706f79f77a9fb2ae (diff)
Merge branch 'next' into for-linus
Prepare first round of input updates for 3.17.
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r--drivers/input/touchscreen/Kconfig24
-rw-r--r--drivers/input/touchscreen/Makefile2
-rw-r--r--drivers/input/touchscreen/ads7846.c6
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c1313
-rw-r--r--drivers/input/touchscreen/atmel_tsadcc.c358
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c3
-rw-r--r--drivers/input/touchscreen/ipaq-micro-ts.c166
-rw-r--r--drivers/input/touchscreen/jornada720_ts.c70
-rw-r--r--drivers/input/touchscreen/mcs5000_ts.c6
-rw-r--r--drivers/input/touchscreen/pixcir_i2c_ts.c250
-rw-r--r--drivers/input/touchscreen/s3c2410_ts.c4
-rw-r--r--drivers/input/touchscreen/zforce_ts.c31
12 files changed, 1442 insertions, 791 deletions
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index e5987d393b44..6bb9a7dd23b6 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -471,6 +471,18 @@ config TOUCHSCREEN_HP7XX
471 To compile this driver as a module, choose M here: the 471 To compile this driver as a module, choose M here: the
472 module will be called jornada720_ts. 472 module will be called jornada720_ts.
473 473
474config TOUCHSCREEN_IPAQ_MICRO
475 tristate "HP iPAQ Atmel Micro ASIC touchscreen"
476 depends on MFD_IPAQ_MICRO
477 help
478 Say Y here to enable support for the touchscreen attached to
479 the Atmel Micro peripheral controller on iPAQ h3100/h3600/h3700
480
481 If unsure, say N.
482
483 To compile this driver as a module, choose M here: the
484 module will be called ipaq-micro-ts.
485
474config TOUCHSCREEN_HTCPEN 486config TOUCHSCREEN_HTCPEN
475 tristate "HTC Shift X9500 touchscreen" 487 tristate "HTC Shift X9500 touchscreen"
476 depends on ISA 488 depends on ISA
@@ -555,18 +567,6 @@ config TOUCHSCREEN_TI_AM335X_TSC
555 To compile this driver as a module, choose M here: the 567 To compile this driver as a module, choose M here: the
556 module will be called ti_am335x_tsc. 568 module will be called ti_am335x_tsc.
557 569
558config TOUCHSCREEN_ATMEL_TSADCC
559 tristate "Atmel Touchscreen Interface"
560 depends on ARCH_AT91
561 help
562 Say Y here if you have a 4-wire touchscreen connected to the
563 ADC Controller on your Atmel SoC.
564
565 If unsure, say N.
566
567 To compile this driver as a module, choose M here: the
568 module will be called atmel_tsadcc.
569
570config TOUCHSCREEN_UCB1400 570config TOUCHSCREEN_UCB1400
571 tristate "Philips UCB1400 touchscreen" 571 tristate "Philips UCB1400 touchscreen"
572 depends on AC97_BUS 572 depends on AC97_BUS
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 4d479fb0a768..4be94fce41af 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -14,7 +14,6 @@ obj-$(CONFIG_TOUCHSCREEN_AD7879_I2C) += ad7879-i2c.o
14obj-$(CONFIG_TOUCHSCREEN_AD7879_SPI) += ad7879-spi.o 14obj-$(CONFIG_TOUCHSCREEN_AD7879_SPI) += ad7879-spi.o
15obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o 15obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o
16obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o 16obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o
17obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) += atmel_tsadcc.o
18obj-$(CONFIG_TOUCHSCREEN_AUO_PIXCIR) += auo-pixcir-ts.o 17obj-$(CONFIG_TOUCHSCREEN_AUO_PIXCIR) += auo-pixcir-ts.o
19obj-$(CONFIG_TOUCHSCREEN_BU21013) += bu21013_ts.o 18obj-$(CONFIG_TOUCHSCREEN_BU21013) += bu21013_ts.o
20obj-$(CONFIG_TOUCHSCREEN_CY8CTMG110) += cy8ctmg110_ts.o 19obj-$(CONFIG_TOUCHSCREEN_CY8CTMG110) += cy8ctmg110_ts.o
@@ -47,6 +46,7 @@ obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
47obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o 46obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
48obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o 47obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
49obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o 48obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o
49obj-$(CONFIG_TOUCHSCREEN_IPAQ_MICRO) += ipaq-micro-ts.o
50obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o 50obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o
51obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o 51obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o
52obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o 52obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index da201b8e37dc..e57ba52bf484 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -1302,8 +1302,10 @@ static int ads7846_probe(struct spi_device *spi)
1302 pdata = dev_get_platdata(&spi->dev); 1302 pdata = dev_get_platdata(&spi->dev);
1303 if (!pdata) { 1303 if (!pdata) {
1304 pdata = ads7846_probe_dt(&spi->dev); 1304 pdata = ads7846_probe_dt(&spi->dev);
1305 if (IS_ERR(pdata)) 1305 if (IS_ERR(pdata)) {
1306 return PTR_ERR(pdata); 1306 err = PTR_ERR(pdata);
1307 goto err_free_mem;
1308 }
1307 } 1309 }
1308 1310
1309 ts->model = pdata->model ? : 7846; 1311 ts->model = pdata->model ? : 7846;
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 6e0b4a2120d3..03b85711cb70 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -2,6 +2,7 @@
2 * Atmel maXTouch Touchscreen driver 2 * Atmel maXTouch Touchscreen driver
3 * 3 *
4 * Copyright (C) 2010 Samsung Electronics Co.Ltd 4 * Copyright (C) 2010 Samsung Electronics Co.Ltd
5 * Copyright (C) 2011-2014 Atmel Corporation
5 * Copyright (C) 2012 Google, Inc. 6 * Copyright (C) 2012 Google, Inc.
6 * 7 *
7 * Author: Joonyoung Shim <jy0922.shim@samsung.com> 8 * Author: Joonyoung Shim <jy0922.shim@samsung.com>
@@ -22,6 +23,7 @@
22#include <linux/i2c/atmel_mxt_ts.h> 23#include <linux/i2c/atmel_mxt_ts.h>
23#include <linux/input/mt.h> 24#include <linux/input/mt.h>
24#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/of.h>
25#include <linux/slab.h> 27#include <linux/slab.h>
26 28
27/* Version */ 29/* Version */
@@ -29,8 +31,10 @@
29#define MXT_VER_21 21 31#define MXT_VER_21 21
30#define MXT_VER_22 22 32#define MXT_VER_22 22
31 33
32/* Firmware */ 34/* Firmware files */
33#define MXT_FW_NAME "maxtouch.fw" 35#define MXT_FW_NAME "maxtouch.fw"
36#define MXT_CFG_NAME "maxtouch.cfg"
37#define MXT_CFG_MAGIC "OBP_RAW V1"
34 38
35/* Registers */ 39/* Registers */
36#define MXT_INFO 0x00 40#define MXT_INFO 0x00
@@ -44,6 +48,8 @@
44#define MXT_OBJECT_START 0x07 48#define MXT_OBJECT_START 0x07
45 49
46#define MXT_OBJECT_SIZE 6 50#define MXT_OBJECT_SIZE 6
51#define MXT_INFO_CHECKSUM_SIZE 3
52#define MXT_MAX_BLOCK_WRITE 256
47 53
48/* Object types */ 54/* Object types */
49#define MXT_DEBUG_DIAGNOSTIC_T37 37 55#define MXT_DEBUG_DIAGNOSTIC_T37 37
@@ -74,6 +80,9 @@
74#define MXT_SPT_MESSAGECOUNT_T44 44 80#define MXT_SPT_MESSAGECOUNT_T44 44
75#define MXT_SPT_CTECONFIG_T46 46 81#define MXT_SPT_CTECONFIG_T46 46
76 82
83/* MXT_GEN_MESSAGE_T5 object */
84#define MXT_RPTID_NOMSG 0xff
85
77/* MXT_GEN_COMMAND_T6 field */ 86/* MXT_GEN_COMMAND_T6 field */
78#define MXT_COMMAND_RESET 0 87#define MXT_COMMAND_RESET 0
79#define MXT_COMMAND_BACKUPNV 1 88#define MXT_COMMAND_BACKUPNV 1
@@ -83,11 +92,20 @@
83 92
84/* Define for T6 status byte */ 93/* Define for T6 status byte */
85#define MXT_T6_STATUS_RESET (1 << 7) 94#define MXT_T6_STATUS_RESET (1 << 7)
95#define MXT_T6_STATUS_OFL (1 << 6)
96#define MXT_T6_STATUS_SIGERR (1 << 5)
97#define MXT_T6_STATUS_CAL (1 << 4)
98#define MXT_T6_STATUS_CFGERR (1 << 3)
99#define MXT_T6_STATUS_COMSERR (1 << 2)
86 100
87/* MXT_GEN_POWER_T7 field */ 101/* MXT_GEN_POWER_T7 field */
88#define MXT_POWER_IDLEACQINT 0 102struct t7_config {
89#define MXT_POWER_ACTVACQINT 1 103 u8 idle;
90#define MXT_POWER_ACTV2IDLETO 2 104 u8 active;
105} __packed;
106
107#define MXT_POWER_CFG_RUN 0
108#define MXT_POWER_CFG_DEEPSLEEP 1
91 109
92/* MXT_GEN_ACQUIRE_T8 field */ 110/* MXT_GEN_ACQUIRE_T8 field */
93#define MXT_ACQUIRE_CHRGTIME 0 111#define MXT_ACQUIRE_CHRGTIME 0
@@ -99,7 +117,6 @@
99#define MXT_ACQUIRE_ATCHCALSTHR 7 117#define MXT_ACQUIRE_ATCHCALSTHR 7
100 118
101/* MXT_TOUCH_MULTI_T9 field */ 119/* MXT_TOUCH_MULTI_T9 field */
102#define MXT_TOUCH_CTRL 0
103#define MXT_T9_ORIENT 9 120#define MXT_T9_ORIENT 9
104#define MXT_T9_RANGE 18 121#define MXT_T9_RANGE 18
105 122
@@ -217,11 +234,6 @@ struct mxt_object {
217 u8 num_report_ids; 234 u8 num_report_ids;
218} __packed; 235} __packed;
219 236
220struct mxt_message {
221 u8 reportid;
222 u8 message[7];
223};
224
225/* Each client has this additional data */ 237/* Each client has this additional data */
226struct mxt_data { 238struct mxt_data {
227 struct i2c_client *client; 239 struct i2c_client *client;
@@ -234,15 +246,28 @@ struct mxt_data {
234 unsigned int max_x; 246 unsigned int max_x;
235 unsigned int max_y; 247 unsigned int max_y;
236 bool in_bootloader; 248 bool in_bootloader;
249 u16 mem_size;
250 u8 max_reportid;
237 u32 config_crc; 251 u32 config_crc;
252 u32 info_crc;
238 u8 bootloader_addr; 253 u8 bootloader_addr;
254 u8 *msg_buf;
255 u8 t6_status;
256 bool update_input;
257 u8 last_message_count;
258 u8 num_touchids;
259 struct t7_config t7_cfg;
239 260
240 /* Cached parameters from object table */ 261 /* Cached parameters from object table */
262 u16 T5_address;
263 u8 T5_msg_size;
241 u8 T6_reportid; 264 u8 T6_reportid;
242 u16 T6_address; 265 u16 T6_address;
266 u16 T7_address;
243 u8 T9_reportid_min; 267 u8 T9_reportid_min;
244 u8 T9_reportid_max; 268 u8 T9_reportid_max;
245 u8 T19_reportid; 269 u8 T19_reportid;
270 u16 T44_address;
246 271
247 /* for fw update in bootloader */ 272 /* for fw update in bootloader */
248 struct completion bl_completion; 273 struct completion bl_completion;
@@ -297,42 +322,10 @@ static bool mxt_object_readable(unsigned int type)
297 } 322 }
298} 323}
299 324
300static bool mxt_object_writable(unsigned int type) 325static void mxt_dump_message(struct mxt_data *data, u8 *message)
301{
302 switch (type) {
303 case MXT_GEN_COMMAND_T6:
304 case MXT_GEN_POWER_T7:
305 case MXT_GEN_ACQUIRE_T8:
306 case MXT_TOUCH_MULTI_T9:
307 case MXT_TOUCH_KEYARRAY_T15:
308 case MXT_TOUCH_PROXIMITY_T23:
309 case MXT_TOUCH_PROXKEY_T52:
310 case MXT_PROCI_GRIPFACE_T20:
311 case MXT_PROCG_NOISE_T22:
312 case MXT_PROCI_ONETOUCH_T24:
313 case MXT_PROCI_TWOTOUCH_T27:
314 case MXT_PROCI_GRIP_T40:
315 case MXT_PROCI_PALM_T41:
316 case MXT_PROCI_TOUCHSUPPRESSION_T42:
317 case MXT_PROCI_STYLUS_T47:
318 case MXT_PROCG_NOISESUPPRESSION_T48:
319 case MXT_SPT_COMMSCONFIG_T18:
320 case MXT_SPT_GPIOPWM_T19:
321 case MXT_SPT_SELFTEST_T25:
322 case MXT_SPT_CTECONFIG_T28:
323 case MXT_SPT_DIGITIZER_T43:
324 case MXT_SPT_CTECONFIG_T46:
325 return true;
326 default:
327 return false;
328 }
329}
330
331static void mxt_dump_message(struct device *dev,
332 struct mxt_message *message)
333{ 326{
334 dev_dbg(dev, "reportid: %u\tmessage: %*ph\n", 327 dev_dbg(&data->client->dev, "message: %*ph\n",
335 message->reportid, 7, message->message); 328 data->T5_msg_size, message);
336} 329}
337 330
338static int mxt_wait_for_completion(struct mxt_data *data, 331static int mxt_wait_for_completion(struct mxt_data *data,
@@ -401,7 +394,7 @@ static int mxt_bootloader_write(struct mxt_data *data,
401 return ret; 394 return ret;
402} 395}
403 396
404static int mxt_lookup_bootloader_address(struct mxt_data *data) 397static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
405{ 398{
406 u8 appmode = data->client->addr; 399 u8 appmode = data->client->addr;
407 u8 bootloader; 400 u8 bootloader;
@@ -409,6 +402,12 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data)
409 switch (appmode) { 402 switch (appmode) {
410 case 0x4a: 403 case 0x4a:
411 case 0x4b: 404 case 0x4b:
405 /* Chips after 1664S use different scheme */
406 if (retry || data->info.family_id >= 0xa2) {
407 bootloader = appmode - 0x24;
408 break;
409 }
410 /* Fall through for normal case */
412 case 0x4c: 411 case 0x4c:
413 case 0x4d: 412 case 0x4d:
414 case 0x5a: 413 case 0x5a:
@@ -426,6 +425,30 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data)
426 return 0; 425 return 0;
427} 426}
428 427
428static int mxt_probe_bootloader(struct mxt_data *data, bool retry)
429{
430 struct device *dev = &data->client->dev;
431 int ret;
432 u8 val;
433 bool crc_failure;
434
435 ret = mxt_lookup_bootloader_address(data, retry);
436 if (ret)
437 return ret;
438
439 ret = mxt_bootloader_read(data, &val, 1);
440 if (ret)
441 return ret;
442
443 /* Check app crc fail mode */
444 crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
445
446 dev_err(dev, "Detected bootloader, status:%02X%s\n",
447 val, crc_failure ? ", APP_CRC_FAIL" : "");
448
449 return 0;
450}
451
429static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val) 452static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
430{ 453{
431 struct device *dev = &data->client->dev; 454 struct device *dev = &data->client->dev;
@@ -447,14 +470,15 @@ static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
447 } 470 }
448} 471}
449 472
450static int mxt_check_bootloader(struct mxt_data *data, unsigned int state) 473static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
474 bool wait)
451{ 475{
452 struct device *dev = &data->client->dev; 476 struct device *dev = &data->client->dev;
453 u8 val; 477 u8 val;
454 int ret; 478 int ret;
455 479
456recheck: 480recheck:
457 if (state != MXT_WAITING_BOOTLOAD_CMD) { 481 if (wait) {
458 /* 482 /*
459 * In application update mode, the interrupt 483 * In application update mode, the interrupt
460 * line signals state transitions. We must wait for the 484 * line signals state transitions. We must wait for the
@@ -485,6 +509,7 @@ recheck:
485 switch (state) { 509 switch (state) {
486 case MXT_WAITING_BOOTLOAD_CMD: 510 case MXT_WAITING_BOOTLOAD_CMD:
487 case MXT_WAITING_FRAME_DATA: 511 case MXT_WAITING_FRAME_DATA:
512 case MXT_APP_CRC_FAIL:
488 val &= ~MXT_BOOT_STATUS_MASK; 513 val &= ~MXT_BOOT_STATUS_MASK;
489 break; 514 break;
490 case MXT_FRAME_CRC_PASS: 515 case MXT_FRAME_CRC_PASS:
@@ -508,13 +533,18 @@ recheck:
508 return 0; 533 return 0;
509} 534}
510 535
511static int mxt_unlock_bootloader(struct mxt_data *data) 536static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
512{ 537{
513 int ret; 538 int ret;
514 u8 buf[2]; 539 u8 buf[2];
515 540
516 buf[0] = MXT_UNLOCK_CMD_LSB; 541 if (unlock) {
517 buf[1] = MXT_UNLOCK_CMD_MSB; 542 buf[0] = MXT_UNLOCK_CMD_LSB;
543 buf[1] = MXT_UNLOCK_CMD_MSB;
544 } else {
545 buf[0] = 0x01;
546 buf[1] = 0x01;
547 }
518 548
519 ret = mxt_bootloader_write(data, buf, 2); 549 ret = mxt_bootloader_write(data, buf, 2);
520 if (ret) 550 if (ret)
@@ -605,40 +635,44 @@ mxt_get_object(struct mxt_data *data, u8 type)
605 return object; 635 return object;
606 } 636 }
607 637
608 dev_err(&data->client->dev, "Invalid object type T%u\n", type); 638 dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
609 return NULL; 639 return NULL;
610} 640}
611 641
612static int mxt_read_message(struct mxt_data *data, 642static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
613 struct mxt_message *message)
614{ 643{
615 struct mxt_object *object; 644 struct device *dev = &data->client->dev;
616 u16 reg; 645 u8 status = msg[1];
617 646 u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
618 object = mxt_get_object(data, MXT_GEN_MESSAGE_T5);
619 if (!object)
620 return -EINVAL;
621
622 reg = object->start_address;
623 return __mxt_read_reg(data->client, reg,
624 sizeof(struct mxt_message), message);
625}
626 647
627static int mxt_write_object(struct mxt_data *data, 648 complete(&data->crc_completion);
628 u8 type, u8 offset, u8 val)
629{
630 struct mxt_object *object;
631 u16 reg;
632 649
633 object = mxt_get_object(data, type); 650 if (crc != data->config_crc) {
634 if (!object || offset >= mxt_obj_size(object)) 651 data->config_crc = crc;
635 return -EINVAL; 652 dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
653 }
636 654
637 reg = object->start_address; 655 /* Detect reset */
638 return mxt_write_reg(data->client, reg + offset, val); 656 if (status & MXT_T6_STATUS_RESET)
657 complete(&data->reset_completion);
658
659 /* Output debug if status has changed */
660 if (status != data->t6_status)
661 dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
662 status,
663 status == 0 ? " OK" : "",
664 status & MXT_T6_STATUS_RESET ? " RESET" : "",
665 status & MXT_T6_STATUS_OFL ? " OFL" : "",
666 status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
667 status & MXT_T6_STATUS_CAL ? " CAL" : "",
668 status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
669 status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
670
671 /* Save current status */
672 data->t6_status = status;
639} 673}
640 674
641static void mxt_input_button(struct mxt_data *data, struct mxt_message *message) 675static void mxt_input_button(struct mxt_data *data, u8 *message)
642{ 676{
643 struct input_dev *input = data->input_dev; 677 struct input_dev *input = data->input_dev;
644 const struct mxt_platform_data *pdata = data->pdata; 678 const struct mxt_platform_data *pdata = data->pdata;
@@ -649,30 +683,33 @@ static void mxt_input_button(struct mxt_data *data, struct mxt_message *message)
649 for (i = 0; i < pdata->t19_num_keys; i++) { 683 for (i = 0; i < pdata->t19_num_keys; i++) {
650 if (pdata->t19_keymap[i] == KEY_RESERVED) 684 if (pdata->t19_keymap[i] == KEY_RESERVED)
651 continue; 685 continue;
652 button = !(message->message[0] & (1 << i)); 686 button = !(message[1] & (1 << i));
653 input_report_key(input, pdata->t19_keymap[i], button); 687 input_report_key(input, pdata->t19_keymap[i], button);
654 } 688 }
655} 689}
656 690
657static void mxt_input_sync(struct input_dev *input_dev) 691static void mxt_input_sync(struct mxt_data *data)
658{ 692{
659 input_mt_report_pointer_emulation(input_dev, false); 693 input_mt_report_pointer_emulation(data->input_dev,
660 input_sync(input_dev); 694 data->pdata->t19_num_keys);
695 input_sync(data->input_dev);
661} 696}
662 697
663static void mxt_input_touchevent(struct mxt_data *data, 698static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
664 struct mxt_message *message, int id)
665{ 699{
666 struct device *dev = &data->client->dev; 700 struct device *dev = &data->client->dev;
667 u8 status = message->message[0];
668 struct input_dev *input_dev = data->input_dev; 701 struct input_dev *input_dev = data->input_dev;
702 int id;
703 u8 status;
669 int x; 704 int x;
670 int y; 705 int y;
671 int area; 706 int area;
672 int amplitude; 707 int amplitude;
673 708
674 x = (message->message[1] << 4) | ((message->message[3] >> 4) & 0xf); 709 id = message[0] - data->T9_reportid_min;
675 y = (message->message[2] << 4) | ((message->message[3] & 0xf)); 710 status = message[1];
711 x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
712 y = (message[3] << 4) | ((message[4] & 0xf));
676 713
677 /* Handle 10/12 bit switching */ 714 /* Handle 10/12 bit switching */
678 if (data->max_x < 1024) 715 if (data->max_x < 1024)
@@ -680,8 +717,8 @@ static void mxt_input_touchevent(struct mxt_data *data,
680 if (data->max_y < 1024) 717 if (data->max_y < 1024)
681 y >>= 2; 718 y >>= 2;
682 719
683 area = message->message[4]; 720 area = message[5];
684 amplitude = message->message[5]; 721 amplitude = message[6];
685 722
686 dev_dbg(dev, 723 dev_dbg(dev,
687 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n", 724 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
@@ -707,7 +744,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
707 if (status & MXT_T9_RELEASE) { 744 if (status & MXT_T9_RELEASE) {
708 input_mt_report_slot_state(input_dev, 745 input_mt_report_slot_state(input_dev,
709 MT_TOOL_FINGER, 0); 746 MT_TOOL_FINGER, 0);
710 mxt_input_sync(input_dev); 747 mxt_input_sync(data);
711 } 748 }
712 749
713 /* Touch active */ 750 /* Touch active */
@@ -720,64 +757,179 @@ static void mxt_input_touchevent(struct mxt_data *data,
720 /* Touch no longer active, close out slot */ 757 /* Touch no longer active, close out slot */
721 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0); 758 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
722 } 759 }
760
761 data->update_input = true;
762}
763
764static int mxt_proc_message(struct mxt_data *data, u8 *message)
765{
766 u8 report_id = message[0];
767
768 if (report_id == MXT_RPTID_NOMSG)
769 return 0;
770
771 if (report_id == data->T6_reportid) {
772 mxt_proc_t6_messages(data, message);
773 } else if (!data->input_dev) {
774 /*
775 * Do not report events if input device
776 * is not yet registered.
777 */
778 mxt_dump_message(data, message);
779 } else if (report_id >= data->T9_reportid_min
780 && report_id <= data->T9_reportid_max) {
781 mxt_proc_t9_message(data, message);
782 } else if (report_id == data->T19_reportid) {
783 mxt_input_button(data, message);
784 data->update_input = true;
785 } else {
786 mxt_dump_message(data, message);
787 }
788
789 return 1;
723} 790}
724 791
725static u16 mxt_extract_T6_csum(const u8 *csum) 792static int mxt_read_and_process_messages(struct mxt_data *data, u8 count)
726{ 793{
727 return csum[0] | (csum[1] << 8) | (csum[2] << 16); 794 struct device *dev = &data->client->dev;
795 int ret;
796 int i;
797 u8 num_valid = 0;
798
799 /* Safety check for msg_buf */
800 if (count > data->max_reportid)
801 return -EINVAL;
802
803 /* Process remaining messages if necessary */
804 ret = __mxt_read_reg(data->client, data->T5_address,
805 data->T5_msg_size * count, data->msg_buf);
806 if (ret) {
807 dev_err(dev, "Failed to read %u messages (%d)\n", count, ret);
808 return ret;
809 }
810
811 for (i = 0; i < count; i++) {
812 ret = mxt_proc_message(data,
813 data->msg_buf + data->T5_msg_size * i);
814
815 if (ret == 1)
816 num_valid++;
817 }
818
819 /* return number of messages read */
820 return num_valid;
728} 821}
729 822
730static bool mxt_is_T9_message(struct mxt_data *data, struct mxt_message *msg) 823static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
731{ 824{
732 u8 id = msg->reportid; 825 struct device *dev = &data->client->dev;
733 return (id >= data->T9_reportid_min && id <= data->T9_reportid_max); 826 int ret;
827 u8 count, num_left;
828
829 /* Read T44 and T5 together */
830 ret = __mxt_read_reg(data->client, data->T44_address,
831 data->T5_msg_size + 1, data->msg_buf);
832 if (ret) {
833 dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
834 return IRQ_NONE;
835 }
836
837 count = data->msg_buf[0];
838
839 if (count == 0) {
840 dev_warn(dev, "Interrupt triggered but zero messages\n");
841 return IRQ_NONE;
842 } else if (count > data->max_reportid) {
843 dev_err(dev, "T44 count %d exceeded max report id\n", count);
844 count = data->max_reportid;
845 }
846
847 /* Process first message */
848 ret = mxt_proc_message(data, data->msg_buf + 1);
849 if (ret < 0) {
850 dev_warn(dev, "Unexpected invalid message\n");
851 return IRQ_NONE;
852 }
853
854 num_left = count - 1;
855
856 /* Process remaining messages if necessary */
857 if (num_left) {
858 ret = mxt_read_and_process_messages(data, num_left);
859 if (ret < 0)
860 goto end;
861 else if (ret != num_left)
862 dev_warn(dev, "Unexpected invalid message\n");
863 }
864
865end:
866 if (data->update_input) {
867 mxt_input_sync(data);
868 data->update_input = false;
869 }
870
871 return IRQ_HANDLED;
734} 872}
735 873
736static irqreturn_t mxt_process_messages_until_invalid(struct mxt_data *data) 874static int mxt_process_messages_until_invalid(struct mxt_data *data)
737{ 875{
738 struct mxt_message message;
739 const u8 *payload = &message.message[0];
740 struct device *dev = &data->client->dev; 876 struct device *dev = &data->client->dev;
741 u8 reportid; 877 int count, read;
742 bool update_input = false; 878 u8 tries = 2;
743 u32 crc;
744 879
880 count = data->max_reportid;
881
882 /* Read messages until we force an invalid */
745 do { 883 do {
746 if (mxt_read_message(data, &message)) { 884 read = mxt_read_and_process_messages(data, count);
747 dev_err(dev, "Failed to read message\n"); 885 if (read < count)
748 return IRQ_NONE; 886 return 0;
749 } 887 } while (--tries);
750 888
751 reportid = message.reportid; 889 if (data->update_input) {
890 mxt_input_sync(data);
891 data->update_input = false;
892 }
752 893
753 if (reportid == data->T6_reportid) { 894 dev_err(dev, "CHG pin isn't cleared\n");
754 u8 status = payload[0]; 895 return -EBUSY;
896}
755 897
756 crc = mxt_extract_T6_csum(&payload[1]); 898static irqreturn_t mxt_process_messages(struct mxt_data *data)
757 if (crc != data->config_crc) { 899{
758 data->config_crc = crc; 900 int total_handled, num_handled;
759 complete(&data->crc_completion); 901 u8 count = data->last_message_count;
760 }
761 902
762 dev_dbg(dev, "Status: %02x Config Checksum: %06x\n", 903 if (count < 1 || count > data->max_reportid)
763 status, data->config_crc); 904 count = 1;
764
765 if (status & MXT_T6_STATUS_RESET)
766 complete(&data->reset_completion);
767 } else if (mxt_is_T9_message(data, &message)) {
768 int id = reportid - data->T9_reportid_min;
769 mxt_input_touchevent(data, &message, id);
770 update_input = true;
771 } else if (message.reportid == data->T19_reportid) {
772 mxt_input_button(data, &message);
773 update_input = true;
774 } else {
775 mxt_dump_message(dev, &message);
776 }
777 } while (reportid != 0xff);
778 905
779 if (update_input) 906 /* include final invalid message */
780 mxt_input_sync(data->input_dev); 907 total_handled = mxt_read_and_process_messages(data, count + 1);
908 if (total_handled < 0)
909 return IRQ_NONE;
910 /* if there were invalid messages, then we are done */
911 else if (total_handled <= count)
912 goto update_count;
913
914 /* keep reading two msgs until one is invalid or reportid limit */
915 do {
916 num_handled = mxt_read_and_process_messages(data, 2);
917 if (num_handled < 0)
918 return IRQ_NONE;
919
920 total_handled += num_handled;
921
922 if (num_handled < 2)
923 break;
924 } while (total_handled < data->num_touchids);
925
926update_count:
927 data->last_message_count = total_handled;
928
929 if (data->update_input) {
930 mxt_input_sync(data);
931 data->update_input = false;
932 }
781 933
782 return IRQ_HANDLED; 934 return IRQ_HANDLED;
783} 935}
@@ -792,7 +944,14 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id)
792 return IRQ_HANDLED; 944 return IRQ_HANDLED;
793 } 945 }
794 946
795 return mxt_process_messages_until_invalid(data); 947 if (!data->object_table)
948 return IRQ_HANDLED;
949
950 if (data->T44_address) {
951 return mxt_process_messages_t44(data);
952 } else {
953 return mxt_process_messages(data);
954 }
796} 955}
797 956
798static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, 957static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
@@ -866,78 +1025,314 @@ static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
866 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT); 1025 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
867} 1026}
868 1027
869static int mxt_check_reg_init(struct mxt_data *data) 1028static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
1029{
1030 static const unsigned int crcpoly = 0x80001B;
1031 u32 result;
1032 u32 data_word;
1033
1034 data_word = (secondbyte << 8) | firstbyte;
1035 result = ((*crc << 1) ^ data_word);
1036
1037 if (result & 0x1000000)
1038 result ^= crcpoly;
1039
1040 *crc = result;
1041}
1042
1043static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
1044{
1045 u32 crc = 0;
1046 u8 *ptr = base + start_off;
1047 u8 *last_val = base + end_off - 1;
1048
1049 if (end_off < start_off)
1050 return -EINVAL;
1051
1052 while (ptr < last_val) {
1053 mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
1054 ptr += 2;
1055 }
1056
1057 /* if len is odd, fill the last byte with 0 */
1058 if (ptr == last_val)
1059 mxt_calc_crc24(&crc, *ptr, 0);
1060
1061 /* Mask to 24-bit */
1062 crc &= 0x00FFFFFF;
1063
1064 return crc;
1065}
1066
1067/*
1068 * mxt_update_cfg - download configuration to chip
1069 *
1070 * Atmel Raw Config File Format
1071 *
1072 * The first four lines of the raw config file contain:
1073 * 1) Version
1074 * 2) Chip ID Information (first 7 bytes of device memory)
1075 * 3) Chip Information Block 24-bit CRC Checksum
1076 * 4) Chip Configuration 24-bit CRC Checksum
1077 *
1078 * The rest of the file consists of one line per object instance:
1079 * <TYPE> <INSTANCE> <SIZE> <CONTENTS>
1080 *
1081 * <TYPE> - 2-byte object type as hex
1082 * <INSTANCE> - 2-byte object instance number as hex
1083 * <SIZE> - 2-byte object size as hex
1084 * <CONTENTS> - array of <SIZE> 1-byte hex values
1085 */
1086static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
870{ 1087{
871 const struct mxt_platform_data *pdata = data->pdata;
872 struct mxt_object *object;
873 struct device *dev = &data->client->dev; 1088 struct device *dev = &data->client->dev;
874 int index = 0; 1089 struct mxt_info cfg_info;
875 int i, size; 1090 struct mxt_object *object;
876 int ret; 1091 int ret;
1092 int offset;
1093 int data_pos;
1094 int byte_offset;
1095 int i;
1096 int cfg_start_ofs;
1097 u32 info_crc, config_crc, calculated_crc;
1098 u8 *config_mem;
1099 size_t config_mem_size;
1100 unsigned int type, instance, size;
1101 u8 val;
1102 u16 reg;
877 1103
878 if (!pdata->config) { 1104 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
879 dev_dbg(dev, "No cfg data defined, skipping reg init\n"); 1105
880 return 0; 1106 if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
1107 dev_err(dev, "Unrecognised config file\n");
1108 ret = -EINVAL;
1109 goto release;
881 } 1110 }
882 1111
883 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1); 1112 data_pos = strlen(MXT_CFG_MAGIC);
1113
1114 /* Load information block and check */
1115 for (i = 0; i < sizeof(struct mxt_info); i++) {
1116 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1117 (unsigned char *)&cfg_info + i,
1118 &offset);
1119 if (ret != 1) {
1120 dev_err(dev, "Bad format\n");
1121 ret = -EINVAL;
1122 goto release;
1123 }
884 1124
885 if (data->config_crc == pdata->config_crc) { 1125 data_pos += offset;
886 dev_info(dev, "Config CRC 0x%06X: OK\n", data->config_crc);
887 return 0;
888 } 1126 }
889 1127
890 dev_info(dev, "Config CRC 0x%06X: does not match 0x%06X\n", 1128 if (cfg_info.family_id != data->info.family_id) {
891 data->config_crc, pdata->config_crc); 1129 dev_err(dev, "Family ID mismatch!\n");
1130 ret = -EINVAL;
1131 goto release;
1132 }
892 1133
893 for (i = 0; i < data->info.object_num; i++) { 1134 if (cfg_info.variant_id != data->info.variant_id) {
894 object = data->object_table + i; 1135 dev_err(dev, "Variant ID mismatch!\n");
1136 ret = -EINVAL;
1137 goto release;
1138 }
1139
1140 /* Read CRCs */
1141 ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset);
1142 if (ret != 1) {
1143 dev_err(dev, "Bad format: failed to parse Info CRC\n");
1144 ret = -EINVAL;
1145 goto release;
1146 }
1147 data_pos += offset;
895 1148
896 if (!mxt_object_writable(object->type)) 1149 ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset);
1150 if (ret != 1) {
1151 dev_err(dev, "Bad format: failed to parse Config CRC\n");
1152 ret = -EINVAL;
1153 goto release;
1154 }
1155 data_pos += offset;
1156
1157 /*
1158 * The Info Block CRC is calculated over mxt_info and the object
1159 * table. If it does not match then we are trying to load the
1160 * configuration from a different chip or firmware version, so
1161 * the configuration CRC is invalid anyway.
1162 */
1163 if (info_crc == data->info_crc) {
1164 if (config_crc == 0 || data->config_crc == 0) {
1165 dev_info(dev, "CRC zero, attempting to apply config\n");
1166 } else if (config_crc == data->config_crc) {
1167 dev_dbg(dev, "Config CRC 0x%06X: OK\n",
1168 data->config_crc);
1169 ret = 0;
1170 goto release;
1171 } else {
1172 dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
1173 data->config_crc, config_crc);
1174 }
1175 } else {
1176 dev_warn(dev,
1177 "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
1178 data->info_crc, info_crc);
1179 }
1180
1181 /* Malloc memory to store configuration */
1182 cfg_start_ofs = MXT_OBJECT_START +
1183 data->info.object_num * sizeof(struct mxt_object) +
1184 MXT_INFO_CHECKSUM_SIZE;
1185 config_mem_size = data->mem_size - cfg_start_ofs;
1186 config_mem = kzalloc(config_mem_size, GFP_KERNEL);
1187 if (!config_mem) {
1188 dev_err(dev, "Failed to allocate memory\n");
1189 ret = -ENOMEM;
1190 goto release;
1191 }
1192
1193 while (data_pos < cfg->size) {
1194 /* Read type, instance, length */
1195 ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
1196 &type, &instance, &size, &offset);
1197 if (ret == 0) {
1198 /* EOF */
1199 break;
1200 } else if (ret != 3) {
1201 dev_err(dev, "Bad format: failed to parse object\n");
1202 ret = -EINVAL;
1203 goto release_mem;
1204 }
1205 data_pos += offset;
1206
1207 object = mxt_get_object(data, type);
1208 if (!object) {
1209 /* Skip object */
1210 for (i = 0; i < size; i++) {
1211 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1212 &val,
1213 &offset);
1214 data_pos += offset;
1215 }
897 continue; 1216 continue;
1217 }
898 1218
899 size = mxt_obj_size(object) * mxt_obj_instances(object); 1219 if (size > mxt_obj_size(object)) {
900 if (index + size > pdata->config_length) { 1220 /*
901 dev_err(dev, "Not enough config data!\n"); 1221 * Either we are in fallback mode due to wrong
902 return -EINVAL; 1222 * config or config from a later fw version,
1223 * or the file is corrupt or hand-edited.
1224 */
1225 dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
1226 size - mxt_obj_size(object), type);
1227 } else if (mxt_obj_size(object) > size) {
1228 /*
1229 * If firmware is upgraded, new bytes may be added to
1230 * end of objects. It is generally forward compatible
1231 * to zero these bytes - previous behaviour will be
1232 * retained. However this does invalidate the CRC and
1233 * will force fallback mode until the configuration is
1234 * updated. We warn here but do nothing else - the
1235 * malloc has zeroed the entire configuration.
1236 */
1237 dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
1238 mxt_obj_size(object) - size, type);
903 } 1239 }
904 1240
905 ret = __mxt_write_reg(data->client, object->start_address, 1241 if (instance >= mxt_obj_instances(object)) {
906 size, &pdata->config[index]); 1242 dev_err(dev, "Object instances exceeded!\n");
907 if (ret) 1243 ret = -EINVAL;
908 return ret; 1244 goto release_mem;
909 index += size; 1245 }
1246
1247 reg = object->start_address + mxt_obj_size(object) * instance;
1248
1249 for (i = 0; i < size; i++) {
1250 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1251 &val,
1252 &offset);
1253 if (ret != 1) {
1254 dev_err(dev, "Bad format in T%d\n", type);
1255 ret = -EINVAL;
1256 goto release_mem;
1257 }
1258 data_pos += offset;
1259
1260 if (i > mxt_obj_size(object))
1261 continue;
1262
1263 byte_offset = reg + i - cfg_start_ofs;
1264
1265 if ((byte_offset >= 0)
1266 && (byte_offset <= config_mem_size)) {
1267 *(config_mem + byte_offset) = val;
1268 } else {
1269 dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
1270 reg, object->type, byte_offset);
1271 ret = -EINVAL;
1272 goto release_mem;
1273 }
1274 }
1275 }
1276
1277 /* Calculate crc of the received configs (not the raw config file) */
1278 if (data->T7_address < cfg_start_ofs) {
1279 dev_err(dev, "Bad T7 address, T7addr = %x, config offset %x\n",
1280 data->T7_address, cfg_start_ofs);
1281 ret = 0;
1282 goto release_mem;
1283 }
1284
1285 calculated_crc = mxt_calculate_crc(config_mem,
1286 data->T7_address - cfg_start_ofs,
1287 config_mem_size);
1288
1289 if (config_crc > 0 && (config_crc != calculated_crc))
1290 dev_warn(dev, "Config CRC error, calculated=%06X, file=%06X\n",
1291 calculated_crc, config_crc);
1292
1293 /* Write configuration as blocks */
1294 byte_offset = 0;
1295 while (byte_offset < config_mem_size) {
1296 size = config_mem_size - byte_offset;
1297
1298 if (size > MXT_MAX_BLOCK_WRITE)
1299 size = MXT_MAX_BLOCK_WRITE;
1300
1301 ret = __mxt_write_reg(data->client,
1302 cfg_start_ofs + byte_offset,
1303 size, config_mem + byte_offset);
1304 if (ret != 0) {
1305 dev_err(dev, "Config write error, ret=%d\n", ret);
1306 goto release_mem;
1307 }
1308
1309 byte_offset += size;
910 } 1310 }
911 1311
912 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE); 1312 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
913 1313
914 ret = mxt_soft_reset(data); 1314 ret = mxt_soft_reset(data);
915 if (ret) 1315 if (ret)
916 return ret; 1316 goto release_mem;
917 1317
918 dev_info(dev, "Config successfully updated\n"); 1318 dev_info(dev, "Config successfully updated\n");
919 1319
920 return 0; 1320release_mem:
1321 kfree(config_mem);
1322release:
1323 release_firmware(cfg);
1324 return ret;
921} 1325}
922 1326
923static int mxt_make_highchg(struct mxt_data *data) 1327static int mxt_acquire_irq(struct mxt_data *data)
924{ 1328{
925 struct device *dev = &data->client->dev;
926 struct mxt_message message;
927 int count = 10;
928 int error; 1329 int error;
929 1330
930 /* Read dummy message to make high CHG pin */ 1331 enable_irq(data->irq);
931 do {
932 error = mxt_read_message(data, &message);
933 if (error)
934 return error;
935 } while (message.reportid != 0xff && --count);
936 1332
937 if (!count) { 1333 error = mxt_process_messages_until_invalid(data);
938 dev_err(dev, "CHG pin isn't cleared\n"); 1334 if (error)
939 return -EBUSY; 1335 return error;
940 }
941 1336
942 return 0; 1337 return 0;
943} 1338}
@@ -956,24 +1351,55 @@ static int mxt_get_info(struct mxt_data *data)
956 return 0; 1351 return 0;
957} 1352}
958 1353
1354static void mxt_free_object_table(struct mxt_data *data)
1355{
1356 input_unregister_device(data->input_dev);
1357 data->input_dev = NULL;
1358
1359 kfree(data->object_table);
1360 data->object_table = NULL;
1361 kfree(data->msg_buf);
1362 data->msg_buf = NULL;
1363 data->T5_address = 0;
1364 data->T5_msg_size = 0;
1365 data->T6_reportid = 0;
1366 data->T7_address = 0;
1367 data->T9_reportid_min = 0;
1368 data->T9_reportid_max = 0;
1369 data->T19_reportid = 0;
1370 data->T44_address = 0;
1371 data->max_reportid = 0;
1372}
1373
959static int mxt_get_object_table(struct mxt_data *data) 1374static int mxt_get_object_table(struct mxt_data *data)
960{ 1375{
961 struct i2c_client *client = data->client; 1376 struct i2c_client *client = data->client;
962 size_t table_size; 1377 size_t table_size;
1378 struct mxt_object *object_table;
963 int error; 1379 int error;
964 int i; 1380 int i;
965 u8 reportid; 1381 u8 reportid;
1382 u16 end_address;
966 1383
967 table_size = data->info.object_num * sizeof(struct mxt_object); 1384 table_size = data->info.object_num * sizeof(struct mxt_object);
1385 object_table = kzalloc(table_size, GFP_KERNEL);
1386 if (!object_table) {
1387 dev_err(&data->client->dev, "Failed to allocate memory\n");
1388 return -ENOMEM;
1389 }
1390
968 error = __mxt_read_reg(client, MXT_OBJECT_START, table_size, 1391 error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
969 data->object_table); 1392 object_table);
970 if (error) 1393 if (error) {
1394 kfree(object_table);
971 return error; 1395 return error;
1396 }
972 1397
973 /* Valid Report IDs start counting from 1 */ 1398 /* Valid Report IDs start counting from 1 */
974 reportid = 1; 1399 reportid = 1;
1400 data->mem_size = 0;
975 for (i = 0; i < data->info.object_num; i++) { 1401 for (i = 0; i < data->info.object_num; i++) {
976 struct mxt_object *object = data->object_table + i; 1402 struct mxt_object *object = object_table + i;
977 u8 min_id, max_id; 1403 u8 min_id, max_id;
978 1404
979 le16_to_cpus(&object->start_address); 1405 le16_to_cpus(&object->start_address);
@@ -995,31 +1421,71 @@ static int mxt_get_object_table(struct mxt_data *data)
995 min_id, max_id); 1421 min_id, max_id);
996 1422
997 switch (object->type) { 1423 switch (object->type) {
1424 case MXT_GEN_MESSAGE_T5:
1425 if (data->info.family_id == 0x80) {
1426 /*
1427 * On mXT224 read and discard unused CRC byte
1428 * otherwise DMA reads are misaligned
1429 */
1430 data->T5_msg_size = mxt_obj_size(object);
1431 } else {
1432 /* CRC not enabled, so skip last byte */
1433 data->T5_msg_size = mxt_obj_size(object) - 1;
1434 }
1435 data->T5_address = object->start_address;
998 case MXT_GEN_COMMAND_T6: 1436 case MXT_GEN_COMMAND_T6:
999 data->T6_reportid = min_id; 1437 data->T6_reportid = min_id;
1000 data->T6_address = object->start_address; 1438 data->T6_address = object->start_address;
1001 break; 1439 break;
1440 case MXT_GEN_POWER_T7:
1441 data->T7_address = object->start_address;
1442 break;
1002 case MXT_TOUCH_MULTI_T9: 1443 case MXT_TOUCH_MULTI_T9:
1003 data->T9_reportid_min = min_id; 1444 data->T9_reportid_min = min_id;
1004 data->T9_reportid_max = max_id; 1445 data->T9_reportid_max = max_id;
1446 data->num_touchids = object->num_report_ids
1447 * mxt_obj_instances(object);
1448 break;
1449 case MXT_SPT_MESSAGECOUNT_T44:
1450 data->T44_address = object->start_address;
1005 break; 1451 break;
1006 case MXT_SPT_GPIOPWM_T19: 1452 case MXT_SPT_GPIOPWM_T19:
1007 data->T19_reportid = min_id; 1453 data->T19_reportid = min_id;
1008 break; 1454 break;
1009 } 1455 }
1456
1457 end_address = object->start_address
1458 + mxt_obj_size(object) * mxt_obj_instances(object) - 1;
1459
1460 if (end_address >= data->mem_size)
1461 data->mem_size = end_address + 1;
1462 }
1463
1464 /* Store maximum reportid */
1465 data->max_reportid = reportid;
1466
1467 /* If T44 exists, T5 position has to be directly after */
1468 if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
1469 dev_err(&client->dev, "Invalid T44 position\n");
1470 error = -EINVAL;
1471 goto free_object_table;
1472 }
1473
1474 data->msg_buf = kcalloc(data->max_reportid,
1475 data->T5_msg_size, GFP_KERNEL);
1476 if (!data->msg_buf) {
1477 dev_err(&client->dev, "Failed to allocate message buffer\n");
1478 error = -ENOMEM;
1479 goto free_object_table;
1010 } 1480 }
1011 1481
1482 data->object_table = object_table;
1483
1012 return 0; 1484 return 0;
1013}
1014 1485
1015static void mxt_free_object_table(struct mxt_data *data) 1486free_object_table:
1016{ 1487 mxt_free_object_table(data);
1017 kfree(data->object_table); 1488 return error;
1018 data->object_table = NULL;
1019 data->T6_reportid = 0;
1020 data->T9_reportid_min = 0;
1021 data->T9_reportid_max = 0;
1022 data->T19_reportid = 0;
1023} 1489}
1024 1490
1025static int mxt_read_t9_resolution(struct mxt_data *data) 1491static int mxt_read_t9_resolution(struct mxt_data *data)
@@ -1070,55 +1536,255 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
1070 return 0; 1536 return 0;
1071} 1537}
1072 1538
1539static int mxt_input_open(struct input_dev *dev);
1540static void mxt_input_close(struct input_dev *dev);
1541
1542static int mxt_initialize_t9_input_device(struct mxt_data *data)
1543{
1544 struct device *dev = &data->client->dev;
1545 const struct mxt_platform_data *pdata = data->pdata;
1546 struct input_dev *input_dev;
1547 int error;
1548 unsigned int num_mt_slots;
1549 unsigned int mt_flags = 0;
1550 int i;
1551
1552 error = mxt_read_t9_resolution(data);
1553 if (error)
1554 dev_warn(dev, "Failed to initialize T9 resolution\n");
1555
1556 input_dev = input_allocate_device();
1557 if (!input_dev) {
1558 dev_err(dev, "Failed to allocate memory\n");
1559 return -ENOMEM;
1560 }
1561
1562 input_dev->name = "Atmel maXTouch Touchscreen";
1563 input_dev->phys = data->phys;
1564 input_dev->id.bustype = BUS_I2C;
1565 input_dev->dev.parent = dev;
1566 input_dev->open = mxt_input_open;
1567 input_dev->close = mxt_input_close;
1568
1569 __set_bit(EV_ABS, input_dev->evbit);
1570 __set_bit(EV_KEY, input_dev->evbit);
1571 __set_bit(BTN_TOUCH, input_dev->keybit);
1572
1573 if (pdata->t19_num_keys) {
1574 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1575
1576 for (i = 0; i < pdata->t19_num_keys; i++)
1577 if (pdata->t19_keymap[i] != KEY_RESERVED)
1578 input_set_capability(input_dev, EV_KEY,
1579 pdata->t19_keymap[i]);
1580
1581 mt_flags |= INPUT_MT_POINTER;
1582
1583 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1584 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1585 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1586 MXT_PIXELS_PER_MM);
1587 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1588 MXT_PIXELS_PER_MM);
1589
1590 input_dev->name = "Atmel maXTouch Touchpad";
1591 }
1592
1593 /* For single touch */
1594 input_set_abs_params(input_dev, ABS_X,
1595 0, data->max_x, 0, 0);
1596 input_set_abs_params(input_dev, ABS_Y,
1597 0, data->max_y, 0, 0);
1598 input_set_abs_params(input_dev, ABS_PRESSURE,
1599 0, 255, 0, 0);
1600
1601 /* For multi touch */
1602 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1603 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1604 if (error) {
1605 dev_err(dev, "Error %d initialising slots\n", error);
1606 goto err_free_mem;
1607 }
1608
1609 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1610 0, MXT_MAX_AREA, 0, 0);
1611 input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1612 0, data->max_x, 0, 0);
1613 input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1614 0, data->max_y, 0, 0);
1615 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1616 0, 255, 0, 0);
1617
1618 input_set_drvdata(input_dev, data);
1619
1620 error = input_register_device(input_dev);
1621 if (error) {
1622 dev_err(dev, "Error %d registering input device\n", error);
1623 goto err_free_mem;
1624 }
1625
1626 data->input_dev = input_dev;
1627
1628 return 0;
1629
1630err_free_mem:
1631 input_free_device(input_dev);
1632 return error;
1633}
1634
1635static int mxt_configure_objects(struct mxt_data *data,
1636 const struct firmware *cfg);
1637
1638static void mxt_config_cb(const struct firmware *cfg, void *ctx)
1639{
1640 mxt_configure_objects(ctx, cfg);
1641}
1642
1073static int mxt_initialize(struct mxt_data *data) 1643static int mxt_initialize(struct mxt_data *data)
1074{ 1644{
1075 struct i2c_client *client = data->client; 1645 struct i2c_client *client = data->client;
1076 struct mxt_info *info = &data->info;
1077 int error; 1646 int error;
1647 bool alt_bootloader_addr = false;
1648 bool retry = false;
1078 1649
1650retry_info:
1079 error = mxt_get_info(data); 1651 error = mxt_get_info(data);
1080 if (error) 1652 if (error) {
1081 return error; 1653retry_bootloader:
1654 error = mxt_probe_bootloader(data, alt_bootloader_addr);
1655 if (error) {
1656 if (alt_bootloader_addr) {
1657 /* Chip is not in appmode or bootloader mode */
1658 return error;
1659 }
1082 1660
1083 data->object_table = kcalloc(info->object_num, 1661 dev_info(&client->dev, "Trying alternate bootloader address\n");
1084 sizeof(struct mxt_object), 1662 alt_bootloader_addr = true;
1085 GFP_KERNEL); 1663 goto retry_bootloader;
1086 if (!data->object_table) { 1664 } else {
1087 dev_err(&client->dev, "Failed to allocate memory\n"); 1665 if (retry) {
1088 return -ENOMEM; 1666 dev_err(&client->dev, "Could not recover from bootloader mode\n");
1667 /*
1668 * We can reflash from this state, so do not
1669 * abort init
1670 */
1671 data->in_bootloader = true;
1672 return 0;
1673 }
1674
1675 /* Attempt to exit bootloader into app mode */
1676 mxt_send_bootloader_cmd(data, false);
1677 msleep(MXT_FW_RESET_TIME);
1678 retry = true;
1679 goto retry_info;
1680 }
1089 } 1681 }
1090 1682
1091 /* Get object table information */ 1683 /* Get object table information */
1092 error = mxt_get_object_table(data); 1684 error = mxt_get_object_table(data);
1093 if (error) { 1685 if (error) {
1094 dev_err(&client->dev, "Error %d reading object table\n", error); 1686 dev_err(&client->dev, "Error %d reading object table\n", error);
1095 goto err_free_object_table; 1687 return error;
1096 } 1688 }
1097 1689
1098 /* Check register init values */ 1690 mxt_acquire_irq(data);
1099 error = mxt_check_reg_init(data); 1691 if (error)
1100 if (error) {
1101 dev_err(&client->dev, "Error %d initializing configuration\n",
1102 error);
1103 goto err_free_object_table; 1692 goto err_free_object_table;
1693
1694 request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
1695 &data->client->dev, GFP_KERNEL, data,
1696 mxt_config_cb);
1697
1698 return 0;
1699
1700err_free_object_table:
1701 mxt_free_object_table(data);
1702 return error;
1703}
1704
1705static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep)
1706{
1707 struct device *dev = &data->client->dev;
1708 int error;
1709 struct t7_config *new_config;
1710 struct t7_config deepsleep = { .active = 0, .idle = 0 };
1711
1712 if (sleep == MXT_POWER_CFG_DEEPSLEEP)
1713 new_config = &deepsleep;
1714 else
1715 new_config = &data->t7_cfg;
1716
1717 error = __mxt_write_reg(data->client, data->T7_address,
1718 sizeof(data->t7_cfg), new_config);
1719 if (error)
1720 return error;
1721
1722 dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n",
1723 new_config->active, new_config->idle);
1724
1725 return 0;
1726}
1727
1728static int mxt_init_t7_power_cfg(struct mxt_data *data)
1729{
1730 struct device *dev = &data->client->dev;
1731 int error;
1732 bool retry = false;
1733
1734recheck:
1735 error = __mxt_read_reg(data->client, data->T7_address,
1736 sizeof(data->t7_cfg), &data->t7_cfg);
1737 if (error)
1738 return error;
1739
1740 if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) {
1741 if (!retry) {
1742 dev_dbg(dev, "T7 cfg zero, resetting\n");
1743 mxt_soft_reset(data);
1744 retry = true;
1745 goto recheck;
1746 } else {
1747 dev_dbg(dev, "T7 cfg zero after reset, overriding\n");
1748 data->t7_cfg.active = 20;
1749 data->t7_cfg.idle = 100;
1750 return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
1751 }
1104 } 1752 }
1105 1753
1106 error = mxt_read_t9_resolution(data); 1754 dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n",
1755 data->t7_cfg.active, data->t7_cfg.idle);
1756 return 0;
1757}
1758
1759static int mxt_configure_objects(struct mxt_data *data,
1760 const struct firmware *cfg)
1761{
1762 struct device *dev = &data->client->dev;
1763 struct mxt_info *info = &data->info;
1764 int error;
1765
1766 if (cfg) {
1767 error = mxt_update_cfg(data, cfg);
1768 if (error)
1769 dev_warn(dev, "Error %d updating config\n", error);
1770 }
1771
1772 error = mxt_init_t7_power_cfg(data);
1107 if (error) { 1773 if (error) {
1108 dev_err(&client->dev, "Failed to initialize T9 resolution\n"); 1774 dev_err(dev, "Failed to initialize power cfg\n");
1109 goto err_free_object_table; 1775 return error;
1110 } 1776 }
1111 1777
1112 dev_info(&client->dev, 1778 error = mxt_initialize_t9_input_device(data);
1779 if (error)
1780 return error;
1781
1782 dev_info(dev,
1113 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n", 1783 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
1114 info->family_id, info->variant_id, info->version >> 4, 1784 info->family_id, info->variant_id, info->version >> 4,
1115 info->version & 0xf, info->build, info->object_num); 1785 info->version & 0xf, info->build, info->object_num);
1116 1786
1117 return 0; 1787 return 0;
1118
1119err_free_object_table:
1120 mxt_free_object_table(data);
1121 return error;
1122} 1788}
1123 1789
1124/* Firmware Version is returned as Major.Minor.Build */ 1790/* Firmware Version is returned as Major.Minor.Build */
@@ -1246,30 +1912,45 @@ static int mxt_load_fw(struct device *dev, const char *fn)
1246 if (ret) 1912 if (ret)
1247 goto release_firmware; 1913 goto release_firmware;
1248 1914
1249 ret = mxt_lookup_bootloader_address(data); 1915 if (!data->in_bootloader) {
1250 if (ret) 1916 /* Change to the bootloader mode */
1251 goto release_firmware; 1917 data->in_bootloader = true;
1252 1918
1253 /* Change to the bootloader mode */ 1919 ret = mxt_t6_command(data, MXT_COMMAND_RESET,
1254 data->in_bootloader = true; 1920 MXT_BOOT_VALUE, false);
1921 if (ret)
1922 goto release_firmware;
1255 1923
1256 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_BOOT_VALUE, false); 1924 msleep(MXT_RESET_TIME);
1257 if (ret)
1258 goto release_firmware;
1259 1925
1260 msleep(MXT_RESET_TIME); 1926 /* Do not need to scan since we know family ID */
1927 ret = mxt_lookup_bootloader_address(data, 0);
1928 if (ret)
1929 goto release_firmware;
1930 } else {
1931 enable_irq(data->irq);
1932 }
1261 1933
1934 mxt_free_object_table(data);
1262 reinit_completion(&data->bl_completion); 1935 reinit_completion(&data->bl_completion);
1263 1936
1264 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD); 1937 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
1265 if (ret) 1938 if (ret) {
1266 goto disable_irq; 1939 /* Bootloader may still be unlocked from previous attempt */
1940 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
1941 if (ret)
1942 goto disable_irq;
1943 } else {
1944 dev_info(dev, "Unlocking bootloader\n");
1267 1945
1268 /* Unlock bootloader */ 1946 /* Unlock bootloader */
1269 mxt_unlock_bootloader(data); 1947 ret = mxt_send_bootloader_cmd(data, true);
1948 if (ret)
1949 goto disable_irq;
1950 }
1270 1951
1271 while (pos < fw->size) { 1952 while (pos < fw->size) {
1272 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA); 1953 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
1273 if (ret) 1954 if (ret)
1274 goto disable_irq; 1955 goto disable_irq;
1275 1956
@@ -1283,7 +1964,7 @@ static int mxt_load_fw(struct device *dev, const char *fn)
1283 if (ret) 1964 if (ret)
1284 goto disable_irq; 1965 goto disable_irq;
1285 1966
1286 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS); 1967 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
1287 if (ret) { 1968 if (ret) {
1288 retry++; 1969 retry++;
1289 1970
@@ -1343,13 +2024,7 @@ static ssize_t mxt_update_fw_store(struct device *dev,
1343 } else { 2024 } else {
1344 dev_info(dev, "The firmware update succeeded\n"); 2025 dev_info(dev, "The firmware update succeeded\n");
1345 2026
1346 mxt_free_object_table(data); 2027 error = mxt_initialize(data);
1347
1348 mxt_initialize(data);
1349
1350 enable_irq(data->irq);
1351
1352 error = mxt_make_highchg(data);
1353 if (error) 2028 if (error)
1354 return error; 2029 return error;
1355 } 2030 }
@@ -1376,16 +2051,15 @@ static const struct attribute_group mxt_attr_group = {
1376 2051
1377static void mxt_start(struct mxt_data *data) 2052static void mxt_start(struct mxt_data *data)
1378{ 2053{
1379 /* Touch enable */ 2054 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
1380 mxt_write_object(data, 2055
1381 MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83); 2056 /* Recalibrate since chip has been in deep sleep */
2057 mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
1382} 2058}
1383 2059
1384static void mxt_stop(struct mxt_data *data) 2060static void mxt_stop(struct mxt_data *data)
1385{ 2061{
1386 /* Touch disable */ 2062 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
1387 mxt_write_object(data,
1388 MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
1389} 2063}
1390 2064
1391static int mxt_input_open(struct input_dev *dev) 2065static int mxt_input_open(struct input_dev *dev)
@@ -1404,138 +2078,112 @@ static void mxt_input_close(struct input_dev *dev)
1404 mxt_stop(data); 2078 mxt_stop(data);
1405} 2079}
1406 2080
1407static int mxt_probe(struct i2c_client *client, 2081#ifdef CONFIG_OF
1408 const struct i2c_device_id *id) 2082static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
2083{
2084 struct mxt_platform_data *pdata;
2085 u32 *keymap;
2086 u32 keycode;
2087 int proplen, i, ret;
2088
2089 if (!client->dev.of_node)
2090 return ERR_PTR(-ENODEV);
2091
2092 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
2093 if (!pdata)
2094 return ERR_PTR(-ENOMEM);
2095
2096 if (of_find_property(client->dev.of_node, "linux,gpio-keymap",
2097 &proplen)) {
2098 pdata->t19_num_keys = proplen / sizeof(u32);
2099
2100 keymap = devm_kzalloc(&client->dev,
2101 pdata->t19_num_keys * sizeof(keymap[0]),
2102 GFP_KERNEL);
2103 if (!keymap)
2104 return ERR_PTR(-ENOMEM);
2105
2106 for (i = 0; i < pdata->t19_num_keys; i++) {
2107 ret = of_property_read_u32_index(client->dev.of_node,
2108 "linux,gpio-keymap", i, &keycode);
2109 if (ret)
2110 keycode = KEY_RESERVED;
2111
2112 keymap[i] = keycode;
2113 }
2114
2115 pdata->t19_keymap = keymap;
2116 }
2117
2118 return pdata;
2119}
2120#else
2121static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
2122{
2123 dev_dbg(&client->dev, "No platform data specified\n");
2124 return ERR_PTR(-EINVAL);
2125}
2126#endif
2127
2128static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
1409{ 2129{
1410 const struct mxt_platform_data *pdata = dev_get_platdata(&client->dev);
1411 struct mxt_data *data; 2130 struct mxt_data *data;
1412 struct input_dev *input_dev; 2131 const struct mxt_platform_data *pdata;
1413 int error; 2132 int error;
1414 unsigned int num_mt_slots;
1415 unsigned int mt_flags = 0;
1416 int i;
1417 2133
1418 if (!pdata) 2134 pdata = dev_get_platdata(&client->dev);
1419 return -EINVAL; 2135 if (!pdata) {
2136 pdata = mxt_parse_dt(client);
2137 if (IS_ERR(pdata))
2138 return PTR_ERR(pdata);
2139 }
1420 2140
1421 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL); 2141 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1422 input_dev = input_allocate_device(); 2142 if (!data) {
1423 if (!data || !input_dev) {
1424 dev_err(&client->dev, "Failed to allocate memory\n"); 2143 dev_err(&client->dev, "Failed to allocate memory\n");
1425 error = -ENOMEM; 2144 return -ENOMEM;
1426 goto err_free_mem;
1427 } 2145 }
1428 2146
1429 input_dev->name = "Atmel maXTouch Touchscreen";
1430 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0", 2147 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
1431 client->adapter->nr, client->addr); 2148 client->adapter->nr, client->addr);
1432 2149
1433 input_dev->phys = data->phys;
1434
1435 input_dev->id.bustype = BUS_I2C;
1436 input_dev->dev.parent = &client->dev;
1437 input_dev->open = mxt_input_open;
1438 input_dev->close = mxt_input_close;
1439
1440 data->client = client; 2150 data->client = client;
1441 data->input_dev = input_dev;
1442 data->pdata = pdata; 2151 data->pdata = pdata;
1443 data->irq = client->irq; 2152 data->irq = client->irq;
2153 i2c_set_clientdata(client, data);
1444 2154
1445 init_completion(&data->bl_completion); 2155 init_completion(&data->bl_completion);
1446 init_completion(&data->reset_completion); 2156 init_completion(&data->reset_completion);
1447 init_completion(&data->crc_completion); 2157 init_completion(&data->crc_completion);
1448 2158
1449 error = mxt_initialize(data);
1450 if (error)
1451 goto err_free_mem;
1452
1453 __set_bit(EV_ABS, input_dev->evbit);
1454 __set_bit(EV_KEY, input_dev->evbit);
1455 __set_bit(BTN_TOUCH, input_dev->keybit);
1456
1457 if (pdata->t19_num_keys) {
1458 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1459
1460 for (i = 0; i < pdata->t19_num_keys; i++)
1461 if (pdata->t19_keymap[i] != KEY_RESERVED)
1462 input_set_capability(input_dev, EV_KEY,
1463 pdata->t19_keymap[i]);
1464
1465 mt_flags |= INPUT_MT_POINTER;
1466
1467 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1468 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1469 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1470 MXT_PIXELS_PER_MM);
1471 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1472 MXT_PIXELS_PER_MM);
1473
1474 input_dev->name = "Atmel maXTouch Touchpad";
1475 }
1476
1477 /* For single touch */
1478 input_set_abs_params(input_dev, ABS_X,
1479 0, data->max_x, 0, 0);
1480 input_set_abs_params(input_dev, ABS_Y,
1481 0, data->max_y, 0, 0);
1482 input_set_abs_params(input_dev, ABS_PRESSURE,
1483 0, 255, 0, 0);
1484
1485 /* For multi touch */
1486 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1487 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1488 if (error)
1489 goto err_free_object;
1490 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1491 0, MXT_MAX_AREA, 0, 0);
1492 input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1493 0, data->max_x, 0, 0);
1494 input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1495 0, data->max_y, 0, 0);
1496 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1497 0, 255, 0, 0);
1498
1499 input_set_drvdata(input_dev, data);
1500 i2c_set_clientdata(client, data);
1501
1502 error = request_threaded_irq(client->irq, NULL, mxt_interrupt, 2159 error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1503 pdata->irqflags | IRQF_ONESHOT, 2160 pdata->irqflags | IRQF_ONESHOT,
1504 client->name, data); 2161 client->name, data);
1505 if (error) { 2162 if (error) {
1506 dev_err(&client->dev, "Failed to register interrupt\n"); 2163 dev_err(&client->dev, "Failed to register interrupt\n");
1507 goto err_free_object; 2164 goto err_free_mem;
1508 } 2165 }
1509 2166
1510 error = mxt_make_highchg(data); 2167 disable_irq(client->irq);
1511 if (error)
1512 goto err_free_irq;
1513 2168
1514 error = input_register_device(input_dev); 2169 error = mxt_initialize(data);
1515 if (error) { 2170 if (error)
1516 dev_err(&client->dev, "Error %d registering input device\n",
1517 error);
1518 goto err_free_irq; 2171 goto err_free_irq;
1519 }
1520 2172
1521 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group); 2173 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
1522 if (error) { 2174 if (error) {
1523 dev_err(&client->dev, "Failure %d creating sysfs group\n", 2175 dev_err(&client->dev, "Failure %d creating sysfs group\n",
1524 error); 2176 error);
1525 goto err_unregister_device; 2177 goto err_free_object;
1526 } 2178 }
1527 2179
1528 return 0; 2180 return 0;
1529 2181
1530err_unregister_device: 2182err_free_object:
1531 input_unregister_device(input_dev); 2183 mxt_free_object_table(data);
1532 input_dev = NULL;
1533err_free_irq: 2184err_free_irq:
1534 free_irq(client->irq, data); 2185 free_irq(client->irq, data);
1535err_free_object:
1536 kfree(data->object_table);
1537err_free_mem: 2186err_free_mem:
1538 input_free_device(input_dev);
1539 kfree(data); 2187 kfree(data);
1540 return error; 2188 return error;
1541} 2189}
@@ -1547,7 +2195,7 @@ static int mxt_remove(struct i2c_client *client)
1547 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); 2195 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
1548 free_irq(data->irq, data); 2196 free_irq(data->irq, data);
1549 input_unregister_device(data->input_dev); 2197 input_unregister_device(data->input_dev);
1550 kfree(data->object_table); 2198 mxt_free_object_table(data);
1551 kfree(data); 2199 kfree(data);
1552 2200
1553 return 0; 2201 return 0;
@@ -1576,8 +2224,6 @@ static int mxt_resume(struct device *dev)
1576 struct mxt_data *data = i2c_get_clientdata(client); 2224 struct mxt_data *data = i2c_get_clientdata(client);
1577 struct input_dev *input_dev = data->input_dev; 2225 struct input_dev *input_dev = data->input_dev;
1578 2226
1579 mxt_soft_reset(data);
1580
1581 mutex_lock(&input_dev->mutex); 2227 mutex_lock(&input_dev->mutex);
1582 2228
1583 if (input_dev->users) 2229 if (input_dev->users)
@@ -1591,6 +2237,12 @@ static int mxt_resume(struct device *dev)
1591 2237
1592static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume); 2238static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
1593 2239
2240static const struct of_device_id mxt_of_match[] = {
2241 { .compatible = "atmel,maxtouch", },
2242 {},
2243};
2244MODULE_DEVICE_TABLE(of, mxt_of_match);
2245
1594static const struct i2c_device_id mxt_id[] = { 2246static const struct i2c_device_id mxt_id[] = {
1595 { "qt602240_ts", 0 }, 2247 { "qt602240_ts", 0 },
1596 { "atmel_mxt_ts", 0 }, 2248 { "atmel_mxt_ts", 0 },
@@ -1604,6 +2256,7 @@ static struct i2c_driver mxt_driver = {
1604 .driver = { 2256 .driver = {
1605 .name = "atmel_mxt_ts", 2257 .name = "atmel_mxt_ts",
1606 .owner = THIS_MODULE, 2258 .owner = THIS_MODULE,
2259 .of_match_table = of_match_ptr(mxt_of_match),
1607 .pm = &mxt_pm_ops, 2260 .pm = &mxt_pm_ops,
1608 }, 2261 },
1609 .probe = mxt_probe, 2262 .probe = mxt_probe,
diff --git a/drivers/input/touchscreen/atmel_tsadcc.c b/drivers/input/touchscreen/atmel_tsadcc.c
deleted file mode 100644
index a7c9d6967d1e..000000000000
--- a/drivers/input/touchscreen/atmel_tsadcc.c
+++ /dev/null
@@ -1,358 +0,0 @@
1/*
2 * Atmel Touch Screen Driver
3 *
4 * Copyright (c) 2008 ATMEL
5 * Copyright (c) 2008 Dan Liang
6 * Copyright (c) 2008 TimeSys Corporation
7 * Copyright (c) 2008 Justin Waters
8 *
9 * Based on touchscreen code from Atmel Corporation.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15#include <linux/err.h>
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/input.h>
19#include <linux/slab.h>
20#include <linux/interrupt.h>
21#include <linux/clk.h>
22#include <linux/platform_device.h>
23#include <linux/io.h>
24#include <linux/platform_data/atmel.h>
25#include <mach/cpu.h>
26
27/* Register definitions based on AT91SAM9RL64 preliminary draft datasheet */
28
29#define ATMEL_TSADCC_CR 0x00 /* Control register */
30#define ATMEL_TSADCC_SWRST (1 << 0) /* Software Reset*/
31#define ATMEL_TSADCC_START (1 << 1) /* Start conversion */
32
33#define ATMEL_TSADCC_MR 0x04 /* Mode register */
34#define ATMEL_TSADCC_TSAMOD (3 << 0) /* ADC mode */
35#define ATMEL_TSADCC_TSAMOD_ADC_ONLY_MODE (0x0) /* ADC Mode */
36#define ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE (0x1) /* Touch Screen Only Mode */
37#define ATMEL_TSADCC_LOWRES (1 << 4) /* Resolution selection */
38#define ATMEL_TSADCC_SLEEP (1 << 5) /* Sleep mode */
39#define ATMEL_TSADCC_PENDET (1 << 6) /* Pen Detect selection */
40#define ATMEL_TSADCC_PRES (1 << 7) /* Pressure Measurement Selection */
41#define ATMEL_TSADCC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
42#define ATMEL_TSADCC_EPRESCAL (0xff << 8) /* Prescalar Rate Selection (Extended) */
43#define ATMEL_TSADCC_STARTUP (0x7f << 16) /* Start Up time */
44#define ATMEL_TSADCC_SHTIM (0xf << 24) /* Sample & Hold time */
45#define ATMEL_TSADCC_PENDBC (0xf << 28) /* Pen Detect debouncing time */
46
47#define ATMEL_TSADCC_TRGR 0x08 /* Trigger register */
48#define ATMEL_TSADCC_TRGMOD (7 << 0) /* Trigger mode */
49#define ATMEL_TSADCC_TRGMOD_NONE (0 << 0)
50#define ATMEL_TSADCC_TRGMOD_EXT_RISING (1 << 0)
51#define ATMEL_TSADCC_TRGMOD_EXT_FALLING (2 << 0)
52#define ATMEL_TSADCC_TRGMOD_EXT_ANY (3 << 0)
53#define ATMEL_TSADCC_TRGMOD_PENDET (4 << 0)
54#define ATMEL_TSADCC_TRGMOD_PERIOD (5 << 0)
55#define ATMEL_TSADCC_TRGMOD_CONTINUOUS (6 << 0)
56#define ATMEL_TSADCC_TRGPER (0xffff << 16) /* Trigger period */
57
58#define ATMEL_TSADCC_TSR 0x0C /* Touch Screen register */
59#define ATMEL_TSADCC_TSFREQ (0xf << 0) /* TS Frequency in Interleaved mode */
60#define ATMEL_TSADCC_TSSHTIM (0xf << 24) /* Sample & Hold time */
61
62#define ATMEL_TSADCC_CHER 0x10 /* Channel Enable register */
63#define ATMEL_TSADCC_CHDR 0x14 /* Channel Disable register */
64#define ATMEL_TSADCC_CHSR 0x18 /* Channel Status register */
65#define ATMEL_TSADCC_CH(n) (1 << (n)) /* Channel number */
66
67#define ATMEL_TSADCC_SR 0x1C /* Status register */
68#define ATMEL_TSADCC_EOC(n) (1 << ((n)+0)) /* End of conversion for channel N */
69#define ATMEL_TSADCC_OVRE(n) (1 << ((n)+8)) /* Overrun error for channel N */
70#define ATMEL_TSADCC_DRDY (1 << 16) /* Data Ready */
71#define ATMEL_TSADCC_GOVRE (1 << 17) /* General Overrun Error */
72#define ATMEL_TSADCC_ENDRX (1 << 18) /* End of RX Buffer */
73#define ATMEL_TSADCC_RXBUFF (1 << 19) /* TX Buffer full */
74#define ATMEL_TSADCC_PENCNT (1 << 20) /* Pen contact */
75#define ATMEL_TSADCC_NOCNT (1 << 21) /* No contact */
76
77#define ATMEL_TSADCC_LCDR 0x20 /* Last Converted Data register */
78#define ATMEL_TSADCC_DATA (0x3ff << 0) /* Channel data */
79
80#define ATMEL_TSADCC_IER 0x24 /* Interrupt Enable register */
81#define ATMEL_TSADCC_IDR 0x28 /* Interrupt Disable register */
82#define ATMEL_TSADCC_IMR 0x2C /* Interrupt Mask register */
83#define ATMEL_TSADCC_CDR0 0x30 /* Channel Data 0 */
84#define ATMEL_TSADCC_CDR1 0x34 /* Channel Data 1 */
85#define ATMEL_TSADCC_CDR2 0x38 /* Channel Data 2 */
86#define ATMEL_TSADCC_CDR3 0x3C /* Channel Data 3 */
87#define ATMEL_TSADCC_CDR4 0x40 /* Channel Data 4 */
88#define ATMEL_TSADCC_CDR5 0x44 /* Channel Data 5 */
89
90#define ATMEL_TSADCC_XPOS 0x50
91#define ATMEL_TSADCC_Z1DAT 0x54
92#define ATMEL_TSADCC_Z2DAT 0x58
93
94#define PRESCALER_VAL(x) ((x) >> 8)
95
96#define ADC_DEFAULT_CLOCK 100000
97
98struct atmel_tsadcc {
99 struct input_dev *input;
100 char phys[32];
101 struct clk *clk;
102 int irq;
103 unsigned int prev_absx;
104 unsigned int prev_absy;
105 unsigned char bufferedmeasure;
106};
107
108static void __iomem *tsc_base;
109
110#define atmel_tsadcc_read(reg) __raw_readl(tsc_base + (reg))
111#define atmel_tsadcc_write(reg, val) __raw_writel((val), tsc_base + (reg))
112
113static irqreturn_t atmel_tsadcc_interrupt(int irq, void *dev)
114{
115 struct atmel_tsadcc *ts_dev = (struct atmel_tsadcc *)dev;
116 struct input_dev *input_dev = ts_dev->input;
117
118 unsigned int status;
119 unsigned int reg;
120
121 status = atmel_tsadcc_read(ATMEL_TSADCC_SR);
122 status &= atmel_tsadcc_read(ATMEL_TSADCC_IMR);
123
124 if (status & ATMEL_TSADCC_NOCNT) {
125 /* Contact lost */
126 reg = atmel_tsadcc_read(ATMEL_TSADCC_MR) | ATMEL_TSADCC_PENDBC;
127
128 atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
129 atmel_tsadcc_write(ATMEL_TSADCC_TRGR, ATMEL_TSADCC_TRGMOD_NONE);
130 atmel_tsadcc_write(ATMEL_TSADCC_IDR,
131 ATMEL_TSADCC_EOC(3) | ATMEL_TSADCC_NOCNT);
132 atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);
133
134 input_report_key(input_dev, BTN_TOUCH, 0);
135 ts_dev->bufferedmeasure = 0;
136 input_sync(input_dev);
137
138 } else if (status & ATMEL_TSADCC_PENCNT) {
139 /* Pen detected */
140 reg = atmel_tsadcc_read(ATMEL_TSADCC_MR);
141 reg &= ~ATMEL_TSADCC_PENDBC;
142
143 atmel_tsadcc_write(ATMEL_TSADCC_IDR, ATMEL_TSADCC_PENCNT);
144 atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
145 atmel_tsadcc_write(ATMEL_TSADCC_IER,
146 ATMEL_TSADCC_EOC(3) | ATMEL_TSADCC_NOCNT);
147 atmel_tsadcc_write(ATMEL_TSADCC_TRGR,
148 ATMEL_TSADCC_TRGMOD_PERIOD | (0x0FFF << 16));
149
150 } else if (status & ATMEL_TSADCC_EOC(3)) {
151 /* Conversion finished */
152
153 if (ts_dev->bufferedmeasure) {
154 /* Last measurement is always discarded, since it can
155 * be erroneous.
156 * Always report previous measurement */
157 input_report_abs(input_dev, ABS_X, ts_dev->prev_absx);
158 input_report_abs(input_dev, ABS_Y, ts_dev->prev_absy);
159 input_report_key(input_dev, BTN_TOUCH, 1);
160 input_sync(input_dev);
161 } else
162 ts_dev->bufferedmeasure = 1;
163
164 /* Now make new measurement */
165 ts_dev->prev_absx = atmel_tsadcc_read(ATMEL_TSADCC_CDR3) << 10;
166 ts_dev->prev_absx /= atmel_tsadcc_read(ATMEL_TSADCC_CDR2);
167
168 ts_dev->prev_absy = atmel_tsadcc_read(ATMEL_TSADCC_CDR1) << 10;
169 ts_dev->prev_absy /= atmel_tsadcc_read(ATMEL_TSADCC_CDR0);
170 }
171
172 return IRQ_HANDLED;
173}
174
175/*
176 * The functions for inserting/removing us as a module.
177 */
178
179static int atmel_tsadcc_probe(struct platform_device *pdev)
180{
181 struct atmel_tsadcc *ts_dev;
182 struct input_dev *input_dev;
183 struct resource *res;
184 struct at91_tsadcc_data *pdata = dev_get_platdata(&pdev->dev);
185 int err;
186 unsigned int prsc;
187 unsigned int reg;
188
189 if (!pdata)
190 return -EINVAL;
191
192 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
193 if (!res) {
194 dev_err(&pdev->dev, "no mmio resource defined.\n");
195 return -ENXIO;
196 }
197
198 /* Allocate memory for device */
199 ts_dev = kzalloc(sizeof(struct atmel_tsadcc), GFP_KERNEL);
200 if (!ts_dev) {
201 dev_err(&pdev->dev, "failed to allocate memory.\n");
202 return -ENOMEM;
203 }
204 platform_set_drvdata(pdev, ts_dev);
205
206 input_dev = input_allocate_device();
207 if (!input_dev) {
208 dev_err(&pdev->dev, "failed to allocate input device.\n");
209 err = -EBUSY;
210 goto err_free_mem;
211 }
212
213 ts_dev->irq = platform_get_irq(pdev, 0);
214 if (ts_dev->irq < 0) {
215 dev_err(&pdev->dev, "no irq ID is designated.\n");
216 err = -ENODEV;
217 goto err_free_dev;
218 }
219
220 if (!request_mem_region(res->start, resource_size(res),
221 "atmel tsadcc regs")) {
222 dev_err(&pdev->dev, "resources is unavailable.\n");
223 err = -EBUSY;
224 goto err_free_dev;
225 }
226
227 tsc_base = ioremap(res->start, resource_size(res));
228 if (!tsc_base) {
229 dev_err(&pdev->dev, "failed to map registers.\n");
230 err = -ENOMEM;
231 goto err_release_mem;
232 }
233
234 err = request_irq(ts_dev->irq, atmel_tsadcc_interrupt, 0,
235 pdev->dev.driver->name, ts_dev);
236 if (err) {
237 dev_err(&pdev->dev, "failed to allocate irq.\n");
238 goto err_unmap_regs;
239 }
240
241 ts_dev->clk = clk_get(&pdev->dev, "tsc_clk");
242 if (IS_ERR(ts_dev->clk)) {
243 dev_err(&pdev->dev, "failed to get ts_clk\n");
244 err = PTR_ERR(ts_dev->clk);
245 goto err_free_irq;
246 }
247
248 ts_dev->input = input_dev;
249 ts_dev->bufferedmeasure = 0;
250
251 snprintf(ts_dev->phys, sizeof(ts_dev->phys),
252 "%s/input0", dev_name(&pdev->dev));
253
254 input_dev->name = "atmel touch screen controller";
255 input_dev->phys = ts_dev->phys;
256 input_dev->dev.parent = &pdev->dev;
257
258 __set_bit(EV_ABS, input_dev->evbit);
259 input_set_abs_params(input_dev, ABS_X, 0, 0x3FF, 0, 0);
260 input_set_abs_params(input_dev, ABS_Y, 0, 0x3FF, 0, 0);
261
262 input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
263
264 /* clk_enable() always returns 0, no need to check it */
265 clk_enable(ts_dev->clk);
266
267 prsc = clk_get_rate(ts_dev->clk);
268 dev_info(&pdev->dev, "Master clock is set at: %d Hz\n", prsc);
269
270 if (!pdata->adc_clock)
271 pdata->adc_clock = ADC_DEFAULT_CLOCK;
272
273 prsc = (prsc / (2 * pdata->adc_clock)) - 1;
274
275 /* saturate if this value is too high */
276 if (cpu_is_at91sam9rl()) {
277 if (prsc > PRESCALER_VAL(ATMEL_TSADCC_PRESCAL))
278 prsc = PRESCALER_VAL(ATMEL_TSADCC_PRESCAL);
279 } else {
280 if (prsc > PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL))
281 prsc = PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL);
282 }
283
284 dev_info(&pdev->dev, "Prescaler is set at: %d\n", prsc);
285
286 reg = ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE |
287 ((0x00 << 5) & ATMEL_TSADCC_SLEEP) | /* Normal Mode */
288 ((0x01 << 6) & ATMEL_TSADCC_PENDET) | /* Enable Pen Detect */
289 (prsc << 8) |
290 ((0x26 << 16) & ATMEL_TSADCC_STARTUP) |
291 ((pdata->pendet_debounce << 28) & ATMEL_TSADCC_PENDBC);
292
293 atmel_tsadcc_write(ATMEL_TSADCC_CR, ATMEL_TSADCC_SWRST);
294 atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
295 atmel_tsadcc_write(ATMEL_TSADCC_TRGR, ATMEL_TSADCC_TRGMOD_NONE);
296 atmel_tsadcc_write(ATMEL_TSADCC_TSR,
297 (pdata->ts_sample_hold_time << 24) & ATMEL_TSADCC_TSSHTIM);
298
299 atmel_tsadcc_read(ATMEL_TSADCC_SR);
300 atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);
301
302 /* All went ok, so register to the input system */
303 err = input_register_device(input_dev);
304 if (err)
305 goto err_fail;
306
307 return 0;
308
309err_fail:
310 clk_disable(ts_dev->clk);
311 clk_put(ts_dev->clk);
312err_free_irq:
313 free_irq(ts_dev->irq, ts_dev);
314err_unmap_regs:
315 iounmap(tsc_base);
316err_release_mem:
317 release_mem_region(res->start, resource_size(res));
318err_free_dev:
319 input_free_device(input_dev);
320err_free_mem:
321 kfree(ts_dev);
322 return err;
323}
324
325static int atmel_tsadcc_remove(struct platform_device *pdev)
326{
327 struct atmel_tsadcc *ts_dev = platform_get_drvdata(pdev);
328 struct resource *res;
329
330 free_irq(ts_dev->irq, ts_dev);
331
332 input_unregister_device(ts_dev->input);
333
334 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
335 iounmap(tsc_base);
336 release_mem_region(res->start, resource_size(res));
337
338 clk_disable(ts_dev->clk);
339 clk_put(ts_dev->clk);
340
341 kfree(ts_dev);
342
343 return 0;
344}
345
346static struct platform_driver atmel_tsadcc_driver = {
347 .probe = atmel_tsadcc_probe,
348 .remove = atmel_tsadcc_remove,
349 .driver = {
350 .name = "atmel_tsadcc",
351 },
352};
353module_platform_driver(atmel_tsadcc_driver);
354
355MODULE_LICENSE("GPL");
356MODULE_DESCRIPTION("Atmel TouchScreen Driver");
357MODULE_AUTHOR("Dan Liang <dan.liang@atmel.com>");
358
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index d4f33992ad8c..5a6d50c004d7 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -733,8 +733,7 @@ edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
733static void 733static void
734edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata) 734edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
735{ 735{
736 if (tsdata->debug_dir) 736 debugfs_remove_recursive(tsdata->debug_dir);
737 debugfs_remove_recursive(tsdata->debug_dir);
738 kfree(tsdata->raw_buffer); 737 kfree(tsdata->raw_buffer);
739} 738}
740 739
diff --git a/drivers/input/touchscreen/ipaq-micro-ts.c b/drivers/input/touchscreen/ipaq-micro-ts.c
new file mode 100644
index 000000000000..62c8976e616f
--- /dev/null
+++ b/drivers/input/touchscreen/ipaq-micro-ts.c
@@ -0,0 +1,166 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation.
5 *
6 * h3600 atmel micro companion support, touchscreen subdevice
7 * Author : Alessandro Gardich <gremlin@gremlin.it>
8 * Author : Dmitry Artamonow <mad_soft@inbox.ru>
9 * Author : Linus Walleij <linus.walleij@linaro.org>
10 *
11 */
12
13#include <asm/byteorder.h>
14#include <linux/module.h>
15#include <linux/init.h>
16#include <linux/interrupt.h>
17#include <linux/pm.h>
18#include <linux/delay.h>
19#include <linux/device.h>
20#include <linux/input.h>
21#include <linux/platform_device.h>
22#include <linux/slab.h>
23#include <linux/mfd/ipaq-micro.h>
24
25struct touchscreen_data {
26 struct input_dev *input;
27 struct ipaq_micro *micro;
28};
29
30static void micro_ts_receive(void *data, int len, unsigned char *msg)
31{
32 struct touchscreen_data *ts = data;
33
34 if (len == 4) {
35 input_report_abs(ts->input, ABS_X,
36 be16_to_cpup((__be16 *) &msg[2]));
37 input_report_abs(ts->input, ABS_Y,
38 be16_to_cpup((__be16 *) &msg[0]));
39 input_report_key(ts->input, BTN_TOUCH, 1);
40 input_sync(ts->input);
41 } else if (len == 0) {
42 input_report_abs(ts->input, ABS_X, 0);
43 input_report_abs(ts->input, ABS_Y, 0);
44 input_report_key(ts->input, BTN_TOUCH, 0);
45 input_sync(ts->input);
46 }
47}
48
49static void micro_ts_toggle_receive(struct touchscreen_data *ts, bool enable)
50{
51 struct ipaq_micro *micro = ts->micro;
52
53 spin_lock_irq(&micro->lock);
54
55 if (enable) {
56 micro->ts = micro_ts_receive;
57 micro->ts_data = ts;
58 } else {
59 micro->ts = NULL;
60 micro->ts_data = NULL;
61 }
62
63 spin_unlock_irq(&ts->micro->lock);
64}
65
66static int micro_ts_open(struct input_dev *input)
67{
68 struct touchscreen_data *ts = input_get_drvdata(input);
69
70 micro_ts_toggle_receive(ts, true);
71
72 return 0;
73}
74
75static void micro_ts_close(struct input_dev *input)
76{
77 struct touchscreen_data *ts = input_get_drvdata(input);
78
79 micro_ts_toggle_receive(ts, false);
80}
81
82static int micro_ts_probe(struct platform_device *pdev)
83{
84 struct ipaq_micro *micro = dev_get_drvdata(pdev->dev.parent);
85 struct touchscreen_data *ts;
86 int error;
87
88 ts = devm_kzalloc(&pdev->dev, sizeof(*ts), GFP_KERNEL);
89 if (!ts)
90 return -ENOMEM;
91
92 ts->micro = micro;
93
94 ts->input = devm_input_allocate_device(&pdev->dev);
95 if (!ts->input) {
96 dev_err(&pdev->dev, "failed to allocate input device\n");
97 return -ENOMEM;
98 }
99
100 ts->input->name = "ipaq micro ts";
101 ts->input->open = micro_ts_open;
102 ts->input->close = micro_ts_close;
103
104 input_set_drvdata(ts->input, ts);
105
106 input_set_capability(ts->input, EV_KEY, BTN_TOUCH);
107 input_set_capability(ts->input, EV_ABS, ABS_X);
108 input_set_capability(ts->input, EV_ABS, ABS_Y);
109 input_set_abs_params(ts->input, ABS_X, 0, 1023, 0, 0);
110 input_set_abs_params(ts->input, ABS_Y, 0, 1023, 0, 0);
111
112 error = input_register_device(ts->input);
113 if (error) {
114 dev_err(&pdev->dev, "error registering touch input\n");
115 return error;
116 }
117
118 platform_set_drvdata(pdev, ts);
119
120 dev_info(&pdev->dev, "iPAQ micro touchscreen\n");
121
122 return 0;
123}
124
125#ifdef CONFIG_PM_SLEEP
126static int micro_ts_suspend(struct device *dev)
127{
128 struct touchscreen_data *ts = dev_get_drvdata(dev);
129
130 micro_ts_toggle_receive(ts, false);
131
132 return 0;
133}
134
135static int micro_ts_resume(struct device *dev)
136{
137 struct touchscreen_data *ts = dev_get_drvdata(dev);
138 struct input_dev *input = ts->input;
139
140 mutex_lock(&input->mutex);
141
142 if (input->users)
143 micro_ts_toggle_receive(ts, true);
144
145 mutex_unlock(&input->mutex);
146
147 return 0;
148}
149#endif
150
151static const struct dev_pm_ops micro_ts_dev_pm_ops = {
152 SET_SYSTEM_SLEEP_PM_OPS(micro_ts_suspend, micro_ts_resume)
153};
154
155static struct platform_driver micro_ts_device_driver = {
156 .driver = {
157 .name = "ipaq-micro-ts",
158 .pm = &micro_ts_dev_pm_ops,
159 },
160 .probe = micro_ts_probe,
161};
162module_platform_driver(micro_ts_device_driver);
163
164MODULE_LICENSE("GPL");
165MODULE_DESCRIPTION("driver for iPAQ Atmel micro touchscreen");
166MODULE_ALIAS("platform:ipaq-micro-ts");
diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c
index 7324c5c0fb86..651ec71a5c68 100644
--- a/drivers/input/touchscreen/jornada720_ts.c
+++ b/drivers/input/touchscreen/jornada720_ts.c
@@ -36,22 +36,21 @@ struct jornada_ts {
36 36
37static void jornada720_ts_collect_data(struct jornada_ts *jornada_ts) 37static void jornada720_ts_collect_data(struct jornada_ts *jornada_ts)
38{ 38{
39 /* 3 low word X samples */
40 jornada_ts->x_data[0] = jornada_ssp_byte(TXDUMMY);
41 jornada_ts->x_data[1] = jornada_ssp_byte(TXDUMMY);
42 jornada_ts->x_data[2] = jornada_ssp_byte(TXDUMMY);
39 43
40 /* 3 low word X samples */ 44 /* 3 low word Y samples */
41 jornada_ts->x_data[0] = jornada_ssp_byte(TXDUMMY); 45 jornada_ts->y_data[0] = jornada_ssp_byte(TXDUMMY);
42 jornada_ts->x_data[1] = jornada_ssp_byte(TXDUMMY); 46 jornada_ts->y_data[1] = jornada_ssp_byte(TXDUMMY);
43 jornada_ts->x_data[2] = jornada_ssp_byte(TXDUMMY); 47 jornada_ts->y_data[2] = jornada_ssp_byte(TXDUMMY);
44 48
45 /* 3 low word Y samples */ 49 /* combined x samples bits */
46 jornada_ts->y_data[0] = jornada_ssp_byte(TXDUMMY); 50 jornada_ts->x_data[3] = jornada_ssp_byte(TXDUMMY);
47 jornada_ts->y_data[1] = jornada_ssp_byte(TXDUMMY);
48 jornada_ts->y_data[2] = jornada_ssp_byte(TXDUMMY);
49 51
50 /* combined x samples bits */ 52 /* combined y samples bits */
51 jornada_ts->x_data[3] = jornada_ssp_byte(TXDUMMY); 53 jornada_ts->y_data[3] = jornada_ssp_byte(TXDUMMY);
52
53 /* combined y samples bits */
54 jornada_ts->y_data[3] = jornada_ssp_byte(TXDUMMY);
55} 54}
56 55
57static int jornada720_ts_average(int coords[4]) 56static int jornada720_ts_average(int coords[4])
@@ -104,13 +103,13 @@ static int jornada720_ts_probe(struct platform_device *pdev)
104 struct input_dev *input_dev; 103 struct input_dev *input_dev;
105 int error; 104 int error;
106 105
107 jornada_ts = kzalloc(sizeof(struct jornada_ts), GFP_KERNEL); 106 jornada_ts = devm_kzalloc(&pdev->dev, sizeof(*jornada_ts), GFP_KERNEL);
108 input_dev = input_allocate_device(); 107 if (!jornada_ts)
108 return -ENOMEM;
109 109
110 if (!jornada_ts || !input_dev) { 110 input_dev = devm_input_allocate_device(&pdev->dev);
111 error = -ENOMEM; 111 if (!input_dev)
112 goto fail1; 112 return -ENOMEM;
113 }
114 113
115 platform_set_drvdata(pdev, jornada_ts); 114 platform_set_drvdata(pdev, jornada_ts);
116 115
@@ -126,36 +125,18 @@ static int jornada720_ts_probe(struct platform_device *pdev)
126 input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); 125 input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0);
127 input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); 126 input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0);
128 127
129 error = request_irq(IRQ_GPIO9, 128 error = devm_request_irq(&pdev->dev, IRQ_GPIO9,
130 jornada720_ts_interrupt, 129 jornada720_ts_interrupt,
131 IRQF_TRIGGER_RISING, 130 IRQF_TRIGGER_RISING,
132 "HP7XX Touchscreen driver", pdev); 131 "HP7XX Touchscreen driver", pdev);
133 if (error) { 132 if (error) {
134 printk(KERN_INFO "HP7XX TS : Unable to acquire irq!\n"); 133 dev_err(&pdev->dev, "HP7XX TS : Unable to acquire irq!\n");
135 goto fail1; 134 return error;
136 } 135 }
137 136
138 error = input_register_device(jornada_ts->dev); 137 error = input_register_device(jornada_ts->dev);
139 if (error) 138 if (error)
140 goto fail2; 139 return error;
141
142 return 0;
143
144 fail2:
145 free_irq(IRQ_GPIO9, pdev);
146 fail1:
147 input_free_device(input_dev);
148 kfree(jornada_ts);
149 return error;
150}
151
152static int jornada720_ts_remove(struct platform_device *pdev)
153{
154 struct jornada_ts *jornada_ts = platform_get_drvdata(pdev);
155
156 free_irq(IRQ_GPIO9, pdev);
157 input_unregister_device(jornada_ts->dev);
158 kfree(jornada_ts);
159 140
160 return 0; 141 return 0;
161} 142}
@@ -165,7 +146,6 @@ MODULE_ALIAS("platform:jornada_ts");
165 146
166static struct platform_driver jornada720_ts_driver = { 147static struct platform_driver jornada720_ts_driver = {
167 .probe = jornada720_ts_probe, 148 .probe = jornada720_ts_probe,
168 .remove = jornada720_ts_remove,
169 .driver = { 149 .driver = {
170 .name = "jornada_ts", 150 .name = "jornada_ts",
171 .owner = THIS_MODULE, 151 .owner = THIS_MODULE,
diff --git a/drivers/input/touchscreen/mcs5000_ts.c b/drivers/input/touchscreen/mcs5000_ts.c
index 00510a9836b3..8b47e1fecb25 100644
--- a/drivers/input/touchscreen/mcs5000_ts.c
+++ b/drivers/input/touchscreen/mcs5000_ts.c
@@ -248,8 +248,7 @@ static int mcs5000_ts_probe(struct i2c_client *client,
248 return 0; 248 return 0;
249} 249}
250 250
251#ifdef CONFIG_PM 251static int __maybe_unused mcs5000_ts_suspend(struct device *dev)
252static int mcs5000_ts_suspend(struct device *dev)
253{ 252{
254 struct i2c_client *client = to_i2c_client(dev); 253 struct i2c_client *client = to_i2c_client(dev);
255 254
@@ -259,7 +258,7 @@ static int mcs5000_ts_suspend(struct device *dev)
259 return 0; 258 return 0;
260} 259}
261 260
262static int mcs5000_ts_resume(struct device *dev) 261static int __maybe_unused mcs5000_ts_resume(struct device *dev)
263{ 262{
264 struct i2c_client *client = to_i2c_client(dev); 263 struct i2c_client *client = to_i2c_client(dev);
265 struct mcs5000_ts_data *data = i2c_get_clientdata(client); 264 struct mcs5000_ts_data *data = i2c_get_clientdata(client);
@@ -269,7 +268,6 @@ static int mcs5000_ts_resume(struct device *dev)
269 268
270 return 0; 269 return 0;
271} 270}
272#endif
273 271
274static SIMPLE_DEV_PM_OPS(mcs5000_ts_pm, mcs5000_ts_suspend, mcs5000_ts_resume); 272static SIMPLE_DEV_PM_OPS(mcs5000_ts_pm, mcs5000_ts_suspend, mcs5000_ts_resume);
275 273
diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
index 19c6c0fdc94b..fc49c75317d1 100644
--- a/drivers/input/touchscreen/pixcir_i2c_ts.c
+++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
@@ -23,22 +23,51 @@
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/i2c.h> 24#include <linux/i2c.h>
25#include <linux/input.h> 25#include <linux/input.h>
26#include <linux/input/mt.h>
26#include <linux/input/pixcir_ts.h> 27#include <linux/input/pixcir_ts.h>
27#include <linux/gpio.h> 28#include <linux/gpio.h>
29#include <linux/of.h>
30#include <linux/of_gpio.h>
31#include <linux/of_device.h>
32
33#define PIXCIR_MAX_SLOTS 5 /* Max fingers supported by driver */
28 34
29struct pixcir_i2c_ts_data { 35struct pixcir_i2c_ts_data {
30 struct i2c_client *client; 36 struct i2c_client *client;
31 struct input_dev *input; 37 struct input_dev *input;
32 const struct pixcir_ts_platform_data *chip; 38 const struct pixcir_ts_platform_data *pdata;
33 bool running; 39 bool running;
40 int max_fingers; /* Max fingers supported in this instance */
41};
42
43struct pixcir_touch {
44 int x;
45 int y;
46 int id;
47};
48
49struct pixcir_report_data {
50 int num_touches;
51 struct pixcir_touch touches[PIXCIR_MAX_SLOTS];
34}; 52};
35 53
36static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data) 54static void pixcir_ts_parse(struct pixcir_i2c_ts_data *tsdata,
55 struct pixcir_report_data *report)
37{ 56{
38 struct pixcir_i2c_ts_data *tsdata = data; 57 u8 rdbuf[2 + PIXCIR_MAX_SLOTS * 5];
39 u8 rdbuf[10], wrbuf[1] = { 0 }; 58 u8 wrbuf[1] = { 0 };
59 u8 *bufptr;
40 u8 touch; 60 u8 touch;
41 int ret; 61 int ret, i;
62 int readsize;
63 const struct pixcir_i2c_chip_data *chip = &tsdata->pdata->chip;
64
65 memset(report, 0, sizeof(struct pixcir_report_data));
66
67 i = chip->has_hw_ids ? 1 : 0;
68 readsize = 2 + tsdata->max_fingers * (4 + i);
69 if (readsize > sizeof(rdbuf))
70 readsize = sizeof(rdbuf);
42 71
43 ret = i2c_master_send(tsdata->client, wrbuf, sizeof(wrbuf)); 72 ret = i2c_master_send(tsdata->client, wrbuf, sizeof(wrbuf));
44 if (ret != sizeof(wrbuf)) { 73 if (ret != sizeof(wrbuf)) {
@@ -48,7 +77,7 @@ static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data)
48 return; 77 return;
49 } 78 }
50 79
51 ret = i2c_master_recv(tsdata->client, rdbuf, sizeof(rdbuf)); 80 ret = i2c_master_recv(tsdata->client, rdbuf, readsize);
52 if (ret != sizeof(rdbuf)) { 81 if (ret != sizeof(rdbuf)) {
53 dev_err(&tsdata->client->dev, 82 dev_err(&tsdata->client->dev,
54 "%s: i2c_master_recv failed(), ret=%d\n", 83 "%s: i2c_master_recv failed(), ret=%d\n",
@@ -56,45 +85,103 @@ static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data)
56 return; 85 return;
57 } 86 }
58 87
59 touch = rdbuf[0]; 88 touch = rdbuf[0] & 0x7;
60 if (touch) { 89 if (touch > tsdata->max_fingers)
61 u16 posx1 = (rdbuf[3] << 8) | rdbuf[2]; 90 touch = tsdata->max_fingers;
62 u16 posy1 = (rdbuf[5] << 8) | rdbuf[4]; 91
63 u16 posx2 = (rdbuf[7] << 8) | rdbuf[6]; 92 report->num_touches = touch;
64 u16 posy2 = (rdbuf[9] << 8) | rdbuf[8]; 93 bufptr = &rdbuf[2];
65 94
66 input_report_key(tsdata->input, BTN_TOUCH, 1); 95 for (i = 0; i < touch; i++) {
67 input_report_abs(tsdata->input, ABS_X, posx1); 96 report->touches[i].x = (bufptr[1] << 8) | bufptr[0];
68 input_report_abs(tsdata->input, ABS_Y, posy1); 97 report->touches[i].y = (bufptr[3] << 8) | bufptr[2];
69 98
70 input_report_abs(tsdata->input, ABS_MT_POSITION_X, posx1); 99 if (chip->has_hw_ids) {
71 input_report_abs(tsdata->input, ABS_MT_POSITION_Y, posy1); 100 report->touches[i].id = bufptr[4];
72 input_mt_sync(tsdata->input); 101 bufptr = bufptr + 5;
73 102 } else {
74 if (touch == 2) { 103 bufptr = bufptr + 4;
75 input_report_abs(tsdata->input, 104 }
76 ABS_MT_POSITION_X, posx2); 105 }
77 input_report_abs(tsdata->input, 106}
78 ABS_MT_POSITION_Y, posy2); 107
79 input_mt_sync(tsdata->input); 108static void pixcir_ts_report(struct pixcir_i2c_ts_data *ts,
109 struct pixcir_report_data *report)
110{
111 struct input_mt_pos pos[PIXCIR_MAX_SLOTS];
112 int slots[PIXCIR_MAX_SLOTS];
113 struct pixcir_touch *touch;
114 int n, i, slot;
115 struct device *dev = &ts->client->dev;
116 const struct pixcir_i2c_chip_data *chip = &ts->pdata->chip;
117
118 n = report->num_touches;
119 if (n > PIXCIR_MAX_SLOTS)
120 n = PIXCIR_MAX_SLOTS;
121
122 if (!chip->has_hw_ids) {
123 for (i = 0; i < n; i++) {
124 touch = &report->touches[i];
125 pos[i].x = touch->x;
126 pos[i].y = touch->y;
127 }
128
129 input_mt_assign_slots(ts->input, slots, pos, n);
130 }
131
132 for (i = 0; i < n; i++) {
133 touch = &report->touches[i];
134
135 if (chip->has_hw_ids) {
136 slot = input_mt_get_slot_by_key(ts->input, touch->id);
137 if (slot < 0) {
138 dev_dbg(dev, "no free slot for id 0x%x\n",
139 touch->id);
140 continue;
141 }
142 } else {
143 slot = slots[i];
80 } 144 }
81 } else { 145
82 input_report_key(tsdata->input, BTN_TOUCH, 0); 146 input_mt_slot(ts->input, slot);
147 input_mt_report_slot_state(ts->input,
148 MT_TOOL_FINGER, true);
149
150 input_event(ts->input, EV_ABS, ABS_MT_POSITION_X, touch->x);
151 input_event(ts->input, EV_ABS, ABS_MT_POSITION_Y, touch->y);
152
153 dev_dbg(dev, "%d: slot %d, x %d, y %d\n",
154 i, slot, touch->x, touch->y);
83 } 155 }
84 156
85 input_sync(tsdata->input); 157 input_mt_sync_frame(ts->input);
158 input_sync(ts->input);
86} 159}
87 160
88static irqreturn_t pixcir_ts_isr(int irq, void *dev_id) 161static irqreturn_t pixcir_ts_isr(int irq, void *dev_id)
89{ 162{
90 struct pixcir_i2c_ts_data *tsdata = dev_id; 163 struct pixcir_i2c_ts_data *tsdata = dev_id;
91 const struct pixcir_ts_platform_data *pdata = tsdata->chip; 164 const struct pixcir_ts_platform_data *pdata = tsdata->pdata;
165 struct pixcir_report_data report;
92 166
93 while (tsdata->running) { 167 while (tsdata->running) {
94 pixcir_ts_poscheck(tsdata); 168 /* parse packet */
95 169 pixcir_ts_parse(tsdata, &report);
96 if (gpio_get_value(pdata->gpio_attb)) 170
171 /* report it */
172 pixcir_ts_report(tsdata, &report);
173
174 if (gpio_get_value(pdata->gpio_attb)) {
175 if (report.num_touches) {
176 /*
177 * Last report with no finger up?
178 * Do it now then.
179 */
180 input_mt_sync_frame(tsdata->input);
181 input_sync(tsdata->input);
182 }
97 break; 183 break;
184 }
98 185
99 msleep(20); 186 msleep(20);
100 } 187 }
@@ -323,16 +410,69 @@ unlock:
323static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops, 410static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops,
324 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume); 411 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume);
325 412
413#ifdef CONFIG_OF
414static const struct of_device_id pixcir_of_match[];
415
416static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
417{
418 struct pixcir_ts_platform_data *pdata;
419 struct device_node *np = dev->of_node;
420 const struct of_device_id *match;
421
422 match = of_match_device(of_match_ptr(pixcir_of_match), dev);
423 if (!match)
424 return ERR_PTR(-EINVAL);
425
426 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
427 if (!pdata)
428 return ERR_PTR(-ENOMEM);
429
430 pdata->chip = *(const struct pixcir_i2c_chip_data *)match->data;
431
432 pdata->gpio_attb = of_get_named_gpio(np, "attb-gpio", 0);
433 /* gpio_attb validity is checked in probe */
434
435 if (of_property_read_u32(np, "touchscreen-size-x", &pdata->x_max)) {
436 dev_err(dev, "Failed to get touchscreen-size-x property\n");
437 return ERR_PTR(-EINVAL);
438 }
439 pdata->x_max -= 1;
440
441 if (of_property_read_u32(np, "touchscreen-size-y", &pdata->y_max)) {
442 dev_err(dev, "Failed to get touchscreen-size-y property\n");
443 return ERR_PTR(-EINVAL);
444 }
445 pdata->y_max -= 1;
446
447 dev_dbg(dev, "%s: x %d, y %d, gpio %d\n", __func__,
448 pdata->x_max + 1, pdata->y_max + 1, pdata->gpio_attb);
449
450 return pdata;
451}
452#else
453static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
454{
455 return ERR_PTR(-EINVAL);
456}
457#endif
458
326static int pixcir_i2c_ts_probe(struct i2c_client *client, 459static int pixcir_i2c_ts_probe(struct i2c_client *client,
327 const struct i2c_device_id *id) 460 const struct i2c_device_id *id)
328{ 461{
329 const struct pixcir_ts_platform_data *pdata = 462 const struct pixcir_ts_platform_data *pdata =
330 dev_get_platdata(&client->dev); 463 dev_get_platdata(&client->dev);
331 struct device *dev = &client->dev; 464 struct device *dev = &client->dev;
465 struct device_node *np = dev->of_node;
332 struct pixcir_i2c_ts_data *tsdata; 466 struct pixcir_i2c_ts_data *tsdata;
333 struct input_dev *input; 467 struct input_dev *input;
334 int error; 468 int error;
335 469
470 if (np && !pdata) {
471 pdata = pixcir_parse_dt(dev);
472 if (IS_ERR(pdata))
473 return PTR_ERR(pdata);
474 }
475
336 if (!pdata) { 476 if (!pdata) {
337 dev_err(&client->dev, "platform data not defined\n"); 477 dev_err(&client->dev, "platform data not defined\n");
338 return -EINVAL; 478 return -EINVAL;
@@ -343,6 +483,11 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
343 return -EINVAL; 483 return -EINVAL;
344 } 484 }
345 485
486 if (!pdata->chip.max_fingers) {
487 dev_err(dev, "Invalid max_fingers in pdata\n");
488 return -EINVAL;
489 }
490
346 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL); 491 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL);
347 if (!tsdata) 492 if (!tsdata)
348 return -ENOMEM; 493 return -ENOMEM;
@@ -355,7 +500,7 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
355 500
356 tsdata->client = client; 501 tsdata->client = client;
357 tsdata->input = input; 502 tsdata->input = input;
358 tsdata->chip = pdata; 503 tsdata->pdata = pdata;
359 504
360 input->name = client->name; 505 input->name = client->name;
361 input->id.bustype = BUS_I2C; 506 input->id.bustype = BUS_I2C;
@@ -371,6 +516,20 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
371 input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0); 516 input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0);
372 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0); 517 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0);
373 518
519 tsdata->max_fingers = tsdata->pdata->chip.max_fingers;
520 if (tsdata->max_fingers > PIXCIR_MAX_SLOTS) {
521 tsdata->max_fingers = PIXCIR_MAX_SLOTS;
522 dev_info(dev, "Limiting maximum fingers to %d\n",
523 tsdata->max_fingers);
524 }
525
526 error = input_mt_init_slots(input, tsdata->max_fingers,
527 INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
528 if (error) {
529 dev_err(dev, "Error initializing Multi-Touch slots\n");
530 return error;
531 }
532
374 input_set_drvdata(input, tsdata); 533 input_set_drvdata(input, tsdata);
375 534
376 error = devm_gpio_request_one(dev, pdata->gpio_attb, 535 error = devm_gpio_request_one(dev, pdata->gpio_attb,
@@ -419,15 +578,36 @@ static int pixcir_i2c_ts_remove(struct i2c_client *client)
419 578
420static const struct i2c_device_id pixcir_i2c_ts_id[] = { 579static const struct i2c_device_id pixcir_i2c_ts_id[] = {
421 { "pixcir_ts", 0 }, 580 { "pixcir_ts", 0 },
581 { "pixcir_tangoc", 0 },
422 { } 582 { }
423}; 583};
424MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id); 584MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id);
425 585
586#ifdef CONFIG_OF
587static const struct pixcir_i2c_chip_data pixcir_ts_data = {
588 .max_fingers = 2,
589 /* no hw id support */
590};
591
592static const struct pixcir_i2c_chip_data pixcir_tangoc_data = {
593 .max_fingers = 5,
594 .has_hw_ids = true,
595};
596
597static const struct of_device_id pixcir_of_match[] = {
598 { .compatible = "pixcir,pixcir_ts", .data = &pixcir_ts_data },
599 { .compatible = "pixcir,pixcir_tangoc", .data = &pixcir_tangoc_data },
600 { }
601};
602MODULE_DEVICE_TABLE(of, pixcir_of_match);
603#endif
604
426static struct i2c_driver pixcir_i2c_ts_driver = { 605static struct i2c_driver pixcir_i2c_ts_driver = {
427 .driver = { 606 .driver = {
428 .owner = THIS_MODULE, 607 .owner = THIS_MODULE,
429 .name = "pixcir_ts", 608 .name = "pixcir_ts",
430 .pm = &pixcir_dev_pm_ops, 609 .pm = &pixcir_dev_pm_ops,
610 .of_match_table = of_match_ptr(pixcir_of_match),
431 }, 611 },
432 .probe = pixcir_i2c_ts_probe, 612 .probe = pixcir_i2c_ts_probe,
433 .remove = pixcir_i2c_ts_remove, 613 .remove = pixcir_i2c_ts_remove,
diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
index 19cb247dbb86..5a69ded9b53c 100644
--- a/drivers/input/touchscreen/s3c2410_ts.c
+++ b/drivers/input/touchscreen/s3c2410_ts.c
@@ -264,7 +264,7 @@ static int s3c2410ts_probe(struct platform_device *pdev)
264 return -ENOENT; 264 return -ENOENT;
265 } 265 }
266 266
267 clk_enable(ts.clock); 267 clk_prepare_enable(ts.clock);
268 dev_dbg(dev, "got and enabled clocks\n"); 268 dev_dbg(dev, "got and enabled clocks\n");
269 269
270 ts.irq_tc = ret = platform_get_irq(pdev, 0); 270 ts.irq_tc = ret = platform_get_irq(pdev, 0);
@@ -369,7 +369,7 @@ static int s3c2410ts_remove(struct platform_device *pdev)
369 free_irq(ts.irq_tc, ts.input); 369 free_irq(ts.irq_tc, ts.input);
370 del_timer_sync(&touch_timer); 370 del_timer_sync(&touch_timer);
371 371
372 clk_disable(ts.clock); 372 clk_disable_unprepare(ts.clock);
373 clk_put(ts.clock); 373 clk_put(ts.clock);
374 374
375 input_unregister_device(ts.input); 375 input_unregister_device(ts.input);
diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c
index feea85b52fa8..8ba48f5eff7b 100644
--- a/drivers/input/touchscreen/zforce_ts.c
+++ b/drivers/input/touchscreen/zforce_ts.c
@@ -29,6 +29,8 @@
29#include <linux/sysfs.h> 29#include <linux/sysfs.h>
30#include <linux/input/mt.h> 30#include <linux/input/mt.h>
31#include <linux/platform_data/zforce_ts.h> 31#include <linux/platform_data/zforce_ts.h>
32#include <linux/regulator/consumer.h>
33#include <linux/delay.h>
32#include <linux/of.h> 34#include <linux/of.h>
33#include <linux/of_gpio.h> 35#include <linux/of_gpio.h>
34 36
@@ -117,6 +119,8 @@ struct zforce_ts {
117 const struct zforce_ts_platdata *pdata; 119 const struct zforce_ts_platdata *pdata;
118 char phys[32]; 120 char phys[32];
119 121
122 struct regulator *reg_vdd;
123
120 bool suspending; 124 bool suspending;
121 bool suspended; 125 bool suspended;
122 bool boot_complete; 126 bool boot_complete;
@@ -690,6 +694,11 @@ static void zforce_reset(void *data)
690 struct zforce_ts *ts = data; 694 struct zforce_ts *ts = data;
691 695
692 gpio_set_value(ts->pdata->gpio_rst, 0); 696 gpio_set_value(ts->pdata->gpio_rst, 0);
697
698 udelay(10);
699
700 if (!IS_ERR(ts->reg_vdd))
701 regulator_disable(ts->reg_vdd);
693} 702}
694 703
695static struct zforce_ts_platdata *zforce_parse_dt(struct device *dev) 704static struct zforce_ts_platdata *zforce_parse_dt(struct device *dev)
@@ -765,10 +774,32 @@ static int zforce_probe(struct i2c_client *client,
765 return ret; 774 return ret;
766 } 775 }
767 776
777 ts->reg_vdd = devm_regulator_get_optional(&client->dev, "vdd");
778 if (IS_ERR(ts->reg_vdd)) {
779 ret = PTR_ERR(ts->reg_vdd);
780 if (ret == -EPROBE_DEFER)
781 return ret;
782 } else {
783 ret = regulator_enable(ts->reg_vdd);
784 if (ret)
785 return ret;
786
787 /*
788 * according to datasheet add 100us grace time after regular
789 * regulator enable delay.
790 */
791 udelay(100);
792 }
793
768 ret = devm_add_action(&client->dev, zforce_reset, ts); 794 ret = devm_add_action(&client->dev, zforce_reset, ts);
769 if (ret) { 795 if (ret) {
770 dev_err(&client->dev, "failed to register reset action, %d\n", 796 dev_err(&client->dev, "failed to register reset action, %d\n",
771 ret); 797 ret);
798
799 /* hereafter the regulator will be disabled by the action */
800 if (!IS_ERR(ts->reg_vdd))
801 regulator_disable(ts->reg_vdd);
802
772 return ret; 803 return ret;
773 } 804 }
774 805