Input: atmel_mxt_ts - use deep sleep mode when stopped
[deliverable/linux.git] / drivers / input / touchscreen / atmel_mxt_ts.c
CommitLineData
4cf51c38 1/*
7686b108 2 * Atmel maXTouch Touchscreen driver
4cf51c38
JS
3 *
4 * Copyright (C) 2010 Samsung Electronics Co.Ltd
50a77c65 5 * Copyright (C) 2011-2014 Atmel Corporation
1e0c0c5b
DK
6 * Copyright (C) 2012 Google, Inc.
7 *
4cf51c38
JS
8 * Author: Joonyoung Shim <jy0922.shim@samsung.com>
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 *
15 */
16
4f8d8088
DT
17#include <linux/acpi.h>
18#include <linux/dmi.h>
4cf51c38 19#include <linux/module.h>
d79e7e47
BL
20#include <linux/init.h>
21#include <linux/completion.h>
4cf51c38
JS
22#include <linux/delay.h>
23#include <linux/firmware.h>
24#include <linux/i2c.h>
7f3884f7 25#include <linux/platform_data/atmel_mxt_ts.h>
8b86c1c2 26#include <linux/input/mt.h>
4cf51c38 27#include <linux/interrupt.h>
78188be3 28#include <linux/of.h>
4cf51c38 29#include <linux/slab.h>
b23157dc 30#include <asm/unaligned.h>
4cf51c38
JS
31
32/* Version */
7686b108
IV
33#define MXT_VER_20 20
34#define MXT_VER_21 21
35#define MXT_VER_22 22
4cf51c38 36
50a77c65 37/* Firmware files */
7686b108 38#define MXT_FW_NAME "maxtouch.fw"
50a77c65
ND
39#define MXT_CFG_NAME "maxtouch.cfg"
40#define MXT_CFG_MAGIC "OBP_RAW V1"
4cf51c38
JS
41
42/* Registers */
23003a84 43#define MXT_INFO 0x00
7686b108
IV
44#define MXT_FAMILY_ID 0x00
45#define MXT_VARIANT_ID 0x01
46#define MXT_VERSION 0x02
47#define MXT_BUILD 0x03
48#define MXT_MATRIX_X_SIZE 0x04
49#define MXT_MATRIX_Y_SIZE 0x05
50#define MXT_OBJECT_NUM 0x06
51#define MXT_OBJECT_START 0x07
4cf51c38 52
7686b108 53#define MXT_OBJECT_SIZE 6
4ce6fa01
ND
54#define MXT_INFO_CHECKSUM_SIZE 3
55#define MXT_MAX_BLOCK_WRITE 256
4cf51c38
JS
56
57/* Object types */
81c88a71
IV
58#define MXT_DEBUG_DIAGNOSTIC_T37 37
59#define MXT_GEN_MESSAGE_T5 5
60#define MXT_GEN_COMMAND_T6 6
61#define MXT_GEN_POWER_T7 7
62#define MXT_GEN_ACQUIRE_T8 8
63#define MXT_GEN_DATASOURCE_T53 53
64#define MXT_TOUCH_MULTI_T9 9
65#define MXT_TOUCH_KEYARRAY_T15 15
66#define MXT_TOUCH_PROXIMITY_T23 23
67#define MXT_TOUCH_PROXKEY_T52 52
68#define MXT_PROCI_GRIPFACE_T20 20
69#define MXT_PROCG_NOISE_T22 22
70#define MXT_PROCI_ONETOUCH_T24 24
71#define MXT_PROCI_TWOTOUCH_T27 27
72#define MXT_PROCI_GRIP_T40 40
73#define MXT_PROCI_PALM_T41 41
74#define MXT_PROCI_TOUCHSUPPRESSION_T42 42
75#define MXT_PROCI_STYLUS_T47 47
76#define MXT_PROCG_NOISESUPPRESSION_T48 48
77#define MXT_SPT_COMMSCONFIG_T18 18
78#define MXT_SPT_GPIOPWM_T19 19
79#define MXT_SPT_SELFTEST_T25 25
80#define MXT_SPT_CTECONFIG_T28 28
81#define MXT_SPT_USERDATA_T38 38
82#define MXT_SPT_DIGITIZER_T43 43
83#define MXT_SPT_MESSAGECOUNT_T44 44
84#define MXT_SPT_CTECONFIG_T46 46
b23157dc 85#define MXT_TOUCH_MULTITOUCHSCREEN_T100 100
81c88a71 86
5f3f9bc2
ND
87/* MXT_GEN_MESSAGE_T5 object */
88#define MXT_RPTID_NOMSG 0xff
89
81c88a71 90/* MXT_GEN_COMMAND_T6 field */
7686b108
IV
91#define MXT_COMMAND_RESET 0
92#define MXT_COMMAND_BACKUPNV 1
93#define MXT_COMMAND_CALIBRATE 2
94#define MXT_COMMAND_REPORTALL 3
95#define MXT_COMMAND_DIAGNOSTIC 5
96
a4a2ef46
IV
97/* Define for T6 status byte */
98#define MXT_T6_STATUS_RESET (1 << 7)
497767d1
ND
99#define MXT_T6_STATUS_OFL (1 << 6)
100#define MXT_T6_STATUS_SIGERR (1 << 5)
101#define MXT_T6_STATUS_CAL (1 << 4)
102#define MXT_T6_STATUS_CFGERR (1 << 3)
103#define MXT_T6_STATUS_COMSERR (1 << 2)
a4a2ef46 104
81c88a71 105/* MXT_GEN_POWER_T7 field */
7f3884f7
ND
106struct t7_config {
107 u8 idle;
108 u8 active;
109} __packed;
110
111#define MXT_POWER_CFG_RUN 0
112#define MXT_POWER_CFG_DEEPSLEEP 1
7686b108 113
81c88a71 114/* MXT_GEN_ACQUIRE_T8 field */
7686b108
IV
115#define MXT_ACQUIRE_CHRGTIME 0
116#define MXT_ACQUIRE_TCHDRIFT 2
117#define MXT_ACQUIRE_DRIFTST 3
118#define MXT_ACQUIRE_TCHAUTOCAL 4
119#define MXT_ACQUIRE_SYNC 5
120#define MXT_ACQUIRE_ATCHCALST 6
121#define MXT_ACQUIRE_ATCHCALSTHR 7
122
81c88a71 123/* MXT_TOUCH_MULTI_T9 field */
7f3884f7 124#define MXT_T9_CTRL 0
61dc1aba
ND
125#define MXT_T9_ORIENT 9
126#define MXT_T9_RANGE 18
127
f3889ed1
ND
128/* MXT_TOUCH_MULTI_T9 status */
129#define MXT_T9_UNGRIP (1 << 0)
130#define MXT_T9_SUPPRESS (1 << 1)
131#define MXT_T9_AMP (1 << 2)
132#define MXT_T9_VECTOR (1 << 3)
133#define MXT_T9_MOVE (1 << 4)
134#define MXT_T9_RELEASE (1 << 5)
135#define MXT_T9_PRESS (1 << 6)
136#define MXT_T9_DETECT (1 << 7)
137
61dc1aba
ND
138struct t9_range {
139 u16 x;
140 u16 y;
141} __packed;
142
f3889ed1
ND
143/* MXT_TOUCH_MULTI_T9 orient */
144#define MXT_T9_ORIENT_SWITCH (1 << 0)
7686b108 145
81c88a71 146/* MXT_PROCI_GRIPFACE_T20 field */
7686b108
IV
147#define MXT_GRIPFACE_CTRL 0
148#define MXT_GRIPFACE_XLOGRIP 1
149#define MXT_GRIPFACE_XHIGRIP 2
150#define MXT_GRIPFACE_YLOGRIP 3
151#define MXT_GRIPFACE_YHIGRIP 4
152#define MXT_GRIPFACE_MAXTCHS 5
153#define MXT_GRIPFACE_SZTHR1 7
154#define MXT_GRIPFACE_SZTHR2 8
155#define MXT_GRIPFACE_SHPTHR1 9
156#define MXT_GRIPFACE_SHPTHR2 10
157#define MXT_GRIPFACE_SUPEXTTO 11
158
159/* MXT_PROCI_NOISE field */
160#define MXT_NOISE_CTRL 0
161#define MXT_NOISE_OUTFLEN 1
162#define MXT_NOISE_GCAFUL_LSB 3
163#define MXT_NOISE_GCAFUL_MSB 4
164#define MXT_NOISE_GCAFLL_LSB 5
165#define MXT_NOISE_GCAFLL_MSB 6
166#define MXT_NOISE_ACTVGCAFVALID 7
167#define MXT_NOISE_NOISETHR 8
168#define MXT_NOISE_FREQHOPSCALE 10
169#define MXT_NOISE_FREQ0 11
170#define MXT_NOISE_FREQ1 12
171#define MXT_NOISE_FREQ2 13
172#define MXT_NOISE_FREQ3 14
173#define MXT_NOISE_FREQ4 15
174#define MXT_NOISE_IDLEGCAFVALID 16
175
81c88a71 176/* MXT_SPT_COMMSCONFIG_T18 */
7686b108
IV
177#define MXT_COMMS_CTRL 0
178#define MXT_COMMS_CMD 1
179
81c88a71 180/* MXT_SPT_CTECONFIG_T28 field */
7686b108
IV
181#define MXT_CTE_CTRL 0
182#define MXT_CTE_CMD 1
183#define MXT_CTE_MODE 2
184#define MXT_CTE_IDLEGCAFDEPTH 3
185#define MXT_CTE_ACTVGCAFDEPTH 4
979a72da 186#define MXT_CTE_VOLTAGE 5
7686b108
IV
187
188#define MXT_VOLTAGE_DEFAULT 2700000
189#define MXT_VOLTAGE_STEP 10000
190
81c88a71 191/* Define for MXT_GEN_COMMAND_T6 */
7686b108 192#define MXT_BOOT_VALUE 0xa5
a4a2ef46 193#define MXT_RESET_VALUE 0x01
7686b108 194#define MXT_BACKUP_VALUE 0x55
a4a2ef46 195
b23157dc
ND
196/* T100 Multiple Touch Touchscreen */
197#define MXT_T100_CTRL 0
198#define MXT_T100_CFG1 1
199#define MXT_T100_TCHAUX 3
200#define MXT_T100_XRANGE 13
201#define MXT_T100_YRANGE 24
202
203#define MXT_T100_CFG_SWITCHXY BIT(5)
204
205#define MXT_T100_TCHAUX_VECT BIT(0)
206#define MXT_T100_TCHAUX_AMPL BIT(1)
207#define MXT_T100_TCHAUX_AREA BIT(2)
208
209#define MXT_T100_DETECT BIT(7)
210#define MXT_T100_TYPE_MASK 0x70
211
212enum t100_type {
213 MXT_T100_TYPE_FINGER = 1,
214 MXT_T100_TYPE_PASSIVE_STYLUS = 2,
215 MXT_T100_TYPE_HOVERING_FINGER = 4,
216 MXT_T100_TYPE_GLOVE = 5,
217 MXT_T100_TYPE_LARGE_TOUCH = 6,
218};
219
220#define MXT_DISTANCE_ACTIVE_TOUCH 0
221#define MXT_DISTANCE_HOVERING 1
222
223#define MXT_TOUCH_MAJOR_DEFAULT 1
224#define MXT_PRESSURE_DEFAULT 1
225
a4a2ef46 226/* Delay times */
8343bce1
LT
227#define MXT_BACKUP_TIME 50 /* msec */
228#define MXT_RESET_TIME 200 /* msec */
a4a2ef46 229#define MXT_RESET_TIMEOUT 3000 /* msec */
c3f78043 230#define MXT_CRC_TIMEOUT 1000 /* msec */
a0434b75
BL
231#define MXT_FW_RESET_TIME 3000 /* msec */
232#define MXT_FW_CHG_TIMEOUT 300 /* msec */
4cf51c38
JS
233
234/* Command to unlock bootloader */
7686b108
IV
235#define MXT_UNLOCK_CMD_MSB 0xaa
236#define MXT_UNLOCK_CMD_LSB 0xdc
4cf51c38
JS
237
238/* Bootloader mode status */
7686b108
IV
239#define MXT_WAITING_BOOTLOAD_CMD 0xc0 /* valid 7 6 bit only */
240#define MXT_WAITING_FRAME_DATA 0x80 /* valid 7 6 bit only */
241#define MXT_FRAME_CRC_CHECK 0x02
242#define MXT_FRAME_CRC_FAIL 0x03
243#define MXT_FRAME_CRC_PASS 0x04
244#define MXT_APP_CRC_FAIL 0x40 /* valid 7 8 bit only */
245#define MXT_BOOT_STATUS_MASK 0x3f
e57a66aa
ND
246#define MXT_BOOT_EXTENDED_ID (1 << 5)
247#define MXT_BOOT_ID_MASK 0x1f
4cf51c38 248
4cf51c38 249/* Touchscreen absolute values */
7686b108 250#define MXT_MAX_AREA 0xff
4cf51c38 251
22dfab7f
DK
252#define MXT_PIXELS_PER_MM 20
253
7686b108 254struct mxt_info {
4cf51c38
JS
255 u8 family_id;
256 u8 variant_id;
257 u8 version;
258 u8 build;
259 u8 matrix_xsize;
260 u8 matrix_ysize;
261 u8 object_num;
262};
263
7686b108 264struct mxt_object {
4cf51c38
JS
265 u8 type;
266 u16 start_address;
1e0c0c5b
DK
267 u8 size_minus_one;
268 u8 instances_minus_one;
4cf51c38 269 u8 num_report_ids;
333e5a9a 270} __packed;
4cf51c38 271
4cf51c38 272/* Each client has this additional data */
7686b108 273struct mxt_data {
4cf51c38
JS
274 struct i2c_client *client;
275 struct input_dev *input_dev;
ec02ac2b 276 char phys[64]; /* device physical location */
7686b108
IV
277 const struct mxt_platform_data *pdata;
278 struct mxt_object *object_table;
279 struct mxt_info info;
4cf51c38 280 unsigned int irq;
910d8051
JS
281 unsigned int max_x;
282 unsigned int max_y;
d79e7e47 283 bool in_bootloader;
4ce6fa01 284 u16 mem_size;
b23157dc
ND
285 u8 t100_aux_ampl;
286 u8 t100_aux_area;
287 u8 t100_aux_vect;
9d8dc3e5 288 u8 max_reportid;
c3f78043 289 u32 config_crc;
4ce6fa01 290 u32 info_crc;
f28a842d 291 u8 bootloader_addr;
5f3f9bc2 292 u8 *msg_buf;
497767d1 293 u8 t6_status;
b9b05a89 294 bool update_input;
9d8dc3e5
ND
295 u8 last_message_count;
296 u8 num_touchids;
b23157dc 297 u8 multitouch;
7f3884f7 298 struct t7_config t7_cfg;
333e5a9a
DK
299
300 /* Cached parameters from object table */
b9b05a89 301 u16 T5_address;
5f3f9bc2 302 u8 T5_msg_size;
fdf80421 303 u8 T6_reportid;
a4a2ef46 304 u16 T6_address;
4ce6fa01 305 u16 T7_address;
333e5a9a
DK
306 u8 T9_reportid_min;
307 u8 T9_reportid_max;
22dfab7f 308 u8 T19_reportid;
9d8dc3e5 309 u16 T44_address;
b23157dc
ND
310 u8 T100_reportid_min;
311 u8 T100_reportid_max;
d79e7e47
BL
312
313 /* for fw update in bootloader */
314 struct completion bl_completion;
a4a2ef46
IV
315
316 /* for reset handling */
317 struct completion reset_completion;
c3f78043
ND
318
319 /* for config update handling */
320 struct completion crc_completion;
4cf51c38
JS
321};
322
1e0c0c5b
DK
323static size_t mxt_obj_size(const struct mxt_object *obj)
324{
325 return obj->size_minus_one + 1;
326}
327
328static size_t mxt_obj_instances(const struct mxt_object *obj)
329{
330 return obj->instances_minus_one + 1;
331}
332
7686b108 333static bool mxt_object_readable(unsigned int type)
4cf51c38
JS
334{
335 switch (type) {
81c88a71
IV
336 case MXT_GEN_COMMAND_T6:
337 case MXT_GEN_POWER_T7:
338 case MXT_GEN_ACQUIRE_T8:
339 case MXT_GEN_DATASOURCE_T53:
340 case MXT_TOUCH_MULTI_T9:
341 case MXT_TOUCH_KEYARRAY_T15:
342 case MXT_TOUCH_PROXIMITY_T23:
343 case MXT_TOUCH_PROXKEY_T52:
344 case MXT_PROCI_GRIPFACE_T20:
345 case MXT_PROCG_NOISE_T22:
346 case MXT_PROCI_ONETOUCH_T24:
347 case MXT_PROCI_TWOTOUCH_T27:
348 case MXT_PROCI_GRIP_T40:
349 case MXT_PROCI_PALM_T41:
350 case MXT_PROCI_TOUCHSUPPRESSION_T42:
351 case MXT_PROCI_STYLUS_T47:
352 case MXT_PROCG_NOISESUPPRESSION_T48:
353 case MXT_SPT_COMMSCONFIG_T18:
354 case MXT_SPT_GPIOPWM_T19:
355 case MXT_SPT_SELFTEST_T25:
356 case MXT_SPT_CTECONFIG_T28:
357 case MXT_SPT_USERDATA_T38:
358 case MXT_SPT_DIGITIZER_T43:
359 case MXT_SPT_CTECONFIG_T46:
4cf51c38
JS
360 return true;
361 default:
362 return false;
363 }
364}
365
5f3f9bc2 366static void mxt_dump_message(struct mxt_data *data, u8 *message)
4cf51c38 367{
5f3f9bc2
ND
368 dev_dbg(&data->client->dev, "message: %*ph\n",
369 data->T5_msg_size, message);
4cf51c38
JS
370}
371
a4a2ef46
IV
372static int mxt_wait_for_completion(struct mxt_data *data,
373 struct completion *comp,
374 unsigned int timeout_ms)
d79e7e47
BL
375{
376 struct device *dev = &data->client->dev;
d79e7e47
BL
377 unsigned long timeout = msecs_to_jiffies(timeout_ms);
378 long ret;
379
380 ret = wait_for_completion_interruptible_timeout(comp, timeout);
381 if (ret < 0) {
382 return ret;
383 } else if (ret == 0) {
384 dev_err(dev, "Wait for completion timed out.\n");
385 return -ETIMEDOUT;
386 }
387 return 0;
388}
389
f28a842d
ND
390static int mxt_bootloader_read(struct mxt_data *data,
391 u8 *val, unsigned int count)
392{
393 int ret;
394 struct i2c_msg msg;
395
396 msg.addr = data->bootloader_addr;
397 msg.flags = data->client->flags & I2C_M_TEN;
398 msg.flags |= I2C_M_RD;
399 msg.len = count;
400 msg.buf = val;
401
402 ret = i2c_transfer(data->client->adapter, &msg, 1);
f28a842d
ND
403 if (ret == 1) {
404 ret = 0;
405 } else {
406 ret = ret < 0 ? ret : -EIO;
407 dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n",
408 __func__, ret);
409 }
410
411 return ret;
412}
413
414static int mxt_bootloader_write(struct mxt_data *data,
415 const u8 * const val, unsigned int count)
416{
417 int ret;
418 struct i2c_msg msg;
419
420 msg.addr = data->bootloader_addr;
421 msg.flags = data->client->flags & I2C_M_TEN;
422 msg.len = count;
423 msg.buf = (u8 *)val;
424
425 ret = i2c_transfer(data->client->adapter, &msg, 1);
426 if (ret == 1) {
427 ret = 0;
428 } else {
429 ret = ret < 0 ? ret : -EIO;
430 dev_err(&data->client->dev, "%s: i2c send failed (%d)\n",
431 __func__, ret);
432 }
433
434 return ret;
435}
436
8efaa5e5 437static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
f28a842d
ND
438{
439 u8 appmode = data->client->addr;
440 u8 bootloader;
441
442 switch (appmode) {
443 case 0x4a:
444 case 0x4b:
44a0bab2 445 /* Chips after 1664S use different scheme */
8efaa5e5 446 if (retry || data->info.family_id >= 0xa2) {
44a0bab2
ND
447 bootloader = appmode - 0x24;
448 break;
449 }
450 /* Fall through for normal case */
f28a842d
ND
451 case 0x4c:
452 case 0x4d:
453 case 0x5a:
454 case 0x5b:
455 bootloader = appmode - 0x26;
456 break;
6cd1ab0f 457
f28a842d
ND
458 default:
459 dev_err(&data->client->dev,
460 "Appmode i2c address 0x%02x not found\n",
461 appmode);
462 return -EINVAL;
463 }
464
465 data->bootloader_addr = bootloader;
466 return 0;
467}
468
6cd1ab0f 469static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address)
a9fdd1e6
ND
470{
471 struct device *dev = &data->client->dev;
6cd1ab0f 472 int error;
a9fdd1e6
ND
473 u8 val;
474 bool crc_failure;
475
6cd1ab0f
DT
476 error = mxt_lookup_bootloader_address(data, alt_address);
477 if (error)
478 return error;
a9fdd1e6 479
6cd1ab0f
DT
480 error = mxt_bootloader_read(data, &val, 1);
481 if (error)
482 return error;
a9fdd1e6
ND
483
484 /* Check app crc fail mode */
485 crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
486
487 dev_err(dev, "Detected bootloader, status:%02X%s\n",
488 val, crc_failure ? ", APP_CRC_FAIL" : "");
489
490 return 0;
491}
492
e57a66aa
ND
493static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
494{
495 struct device *dev = &data->client->dev;
496 u8 buf[3];
497
498 if (val & MXT_BOOT_EXTENDED_ID) {
499 if (mxt_bootloader_read(data, &buf[0], 3) != 0) {
500 dev_err(dev, "%s: i2c failure\n", __func__);
68807a0c 501 return val;
e57a66aa
ND
502 }
503
504 dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]);
505
506 return buf[0];
507 } else {
508 dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK);
509
510 return val;
511 }
512}
513
385deb96
ND
514static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
515 bool wait)
4cf51c38 516{
f28a842d 517 struct device *dev = &data->client->dev;
4cf51c38 518 u8 val;
d79e7e47 519 int ret;
4cf51c38
JS
520
521recheck:
385deb96 522 if (wait) {
d79e7e47
BL
523 /*
524 * In application update mode, the interrupt
525 * line signals state transitions. We must wait for the
526 * CHG assertion before reading the status byte.
527 * Once the status byte has been read, the line is deasserted.
528 */
a4a2ef46
IV
529 ret = mxt_wait_for_completion(data, &data->bl_completion,
530 MXT_FW_CHG_TIMEOUT);
d79e7e47
BL
531 if (ret) {
532 /*
533 * TODO: handle -ERESTARTSYS better by terminating
534 * fw update process before returning to userspace
535 * by writing length 0x000 to device (iff we are in
536 * WAITING_FRAME_DATA state).
537 */
f28a842d 538 dev_err(dev, "Update wait error %d\n", ret);
d79e7e47
BL
539 return ret;
540 }
541 }
542
f28a842d
ND
543 ret = mxt_bootloader_read(data, &val, 1);
544 if (ret)
545 return ret;
4cf51c38 546
e57a66aa
ND
547 if (state == MXT_WAITING_BOOTLOAD_CMD)
548 val = mxt_get_bootloader_version(data, val);
549
4cf51c38 550 switch (state) {
7686b108
IV
551 case MXT_WAITING_BOOTLOAD_CMD:
552 case MXT_WAITING_FRAME_DATA:
a9fdd1e6 553 case MXT_APP_CRC_FAIL:
7686b108 554 val &= ~MXT_BOOT_STATUS_MASK;
4cf51c38 555 break;
7686b108 556 case MXT_FRAME_CRC_PASS:
f943c74a 557 if (val == MXT_FRAME_CRC_CHECK) {
4cf51c38 558 goto recheck;
f943c74a
ND
559 } else if (val == MXT_FRAME_CRC_FAIL) {
560 dev_err(dev, "Bootloader CRC fail\n");
561 return -EINVAL;
562 }
4cf51c38
JS
563 break;
564 default:
565 return -EINVAL;
566 }
567
568 if (val != state) {
f28a842d 569 dev_err(dev, "Invalid bootloader state %02X != %02X\n",
7bed6805 570 val, state);
4cf51c38
JS
571 return -EINVAL;
572 }
573
574 return 0;
575}
576
8efaa5e5 577static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
4cf51c38 578{
f28a842d 579 int ret;
4cf51c38
JS
580 u8 buf[2];
581
8efaa5e5
ND
582 if (unlock) {
583 buf[0] = MXT_UNLOCK_CMD_LSB;
584 buf[1] = MXT_UNLOCK_CMD_MSB;
585 } else {
586 buf[0] = 0x01;
587 buf[1] = 0x01;
588 }
4cf51c38 589
f28a842d
ND
590 ret = mxt_bootloader_write(data, buf, 2);
591 if (ret)
592 return ret;
4cf51c38
JS
593
594 return 0;
595}
596
7686b108 597static int __mxt_read_reg(struct i2c_client *client,
4cf51c38
JS
598 u16 reg, u16 len, void *val)
599{
600 struct i2c_msg xfer[2];
601 u8 buf[2];
771733e3 602 int ret;
4cf51c38
JS
603
604 buf[0] = reg & 0xff;
605 buf[1] = (reg >> 8) & 0xff;
606
607 /* Write register */
608 xfer[0].addr = client->addr;
609 xfer[0].flags = 0;
610 xfer[0].len = 2;
611 xfer[0].buf = buf;
612
613 /* Read data */
614 xfer[1].addr = client->addr;
615 xfer[1].flags = I2C_M_RD;
616 xfer[1].len = len;
617 xfer[1].buf = val;
618
771733e3
DK
619 ret = i2c_transfer(client->adapter, xfer, 2);
620 if (ret == 2) {
621 ret = 0;
622 } else {
623 if (ret >= 0)
624 ret = -EIO;
625 dev_err(&client->dev, "%s: i2c transfer failed (%d)\n",
626 __func__, ret);
4cf51c38
JS
627 }
628
771733e3 629 return ret;
4cf51c38
JS
630}
631
9638ab7c
DK
632static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
633 const void *val)
4cf51c38 634{
9638ab7c
DK
635 u8 *buf;
636 size_t count;
771733e3 637 int ret;
4cf51c38 638
9638ab7c
DK
639 count = len + 2;
640 buf = kmalloc(count, GFP_KERNEL);
641 if (!buf)
642 return -ENOMEM;
4cf51c38
JS
643
644 buf[0] = reg & 0xff;
645 buf[1] = (reg >> 8) & 0xff;
9638ab7c 646 memcpy(&buf[2], val, len);
4cf51c38 647
9638ab7c
DK
648 ret = i2c_master_send(client, buf, count);
649 if (ret == count) {
771733e3
DK
650 ret = 0;
651 } else {
652 if (ret >= 0)
653 ret = -EIO;
654 dev_err(&client->dev, "%s: i2c send failed (%d)\n",
655 __func__, ret);
4cf51c38
JS
656 }
657
9638ab7c 658 kfree(buf);
771733e3 659 return ret;
4cf51c38
JS
660}
661
9638ab7c 662static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
4cf51c38 663{
9638ab7c 664 return __mxt_write_reg(client, reg, 1, &val);
4cf51c38
JS
665}
666
7686b108
IV
667static struct mxt_object *
668mxt_get_object(struct mxt_data *data, u8 type)
4cf51c38 669{
7686b108 670 struct mxt_object *object;
4cf51c38
JS
671 int i;
672
673 for (i = 0; i < data->info.object_num; i++) {
674 object = data->object_table + i;
675 if (object->type == type)
676 return object;
677 }
678
50a77c65 679 dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
4cf51c38
JS
680 return NULL;
681}
682
497767d1
ND
683static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
684{
685 struct device *dev = &data->client->dev;
686 u8 status = msg[1];
687 u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
688
689 complete(&data->crc_completion);
690
691 if (crc != data->config_crc) {
692 data->config_crc = crc;
693 dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
694 }
695
696 /* Detect reset */
697 if (status & MXT_T6_STATUS_RESET)
698 complete(&data->reset_completion);
699
700 /* Output debug if status has changed */
701 if (status != data->t6_status)
702 dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
703 status,
704 status == 0 ? " OK" : "",
705 status & MXT_T6_STATUS_RESET ? " RESET" : "",
706 status & MXT_T6_STATUS_OFL ? " OFL" : "",
707 status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
708 status & MXT_T6_STATUS_CAL ? " CAL" : "",
709 status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
710 status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
711
712 /* Save current status */
713 data->t6_status = status;
714}
715
7f405483
LT
716static int mxt_write_object(struct mxt_data *data,
717 u8 type, u8 offset, u8 val)
718{
719 struct mxt_object *object;
720 u16 reg;
721
722 object = mxt_get_object(data, type);
723 if (!object || offset >= mxt_obj_size(object))
724 return -EINVAL;
725
726 reg = object->start_address;
727 return mxt_write_reg(data->client, reg + offset, val);
728}
729
5f3f9bc2 730static void mxt_input_button(struct mxt_data *data, u8 *message)
22dfab7f
DK
731{
732 struct input_dev *input = data->input_dev;
fb5e4c3e 733 const struct mxt_platform_data *pdata = data->pdata;
22dfab7f
DK
734 int i;
735
fb5e4c3e
ND
736 for (i = 0; i < pdata->t19_num_keys; i++) {
737 if (pdata->t19_keymap[i] == KEY_RESERVED)
22dfab7f 738 continue;
c37f6d38
DT
739
740 /* Active-low switch */
741 input_report_key(input, pdata->t19_keymap[i],
742 !(message[1] & BIT(i)));
22dfab7f
DK
743 }
744}
745
b735fbe0 746static void mxt_input_sync(struct mxt_data *data)
eef820dc 747{
b735fbe0
BL
748 input_mt_report_pointer_emulation(data->input_dev,
749 data->pdata->t19_num_keys);
750 input_sync(data->input_dev);
eef820dc
ND
751}
752
b9b05a89 753static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
4cf51c38 754{
4cf51c38 755 struct device *dev = &data->client->dev;
fba5bc31 756 struct input_dev *input_dev = data->input_dev;
5f3f9bc2
ND
757 int id;
758 u8 status;
4cf51c38
JS
759 int x;
760 int y;
761 int area;
fea9e467 762 int amplitude;
4cf51c38 763
5f3f9bc2
ND
764 id = message[0] - data->T9_reportid_min;
765 status = message[1];
766 x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
767 y = (message[3] << 4) | ((message[4] & 0xf));
eef820dc
ND
768
769 /* Handle 10/12 bit switching */
910d8051 770 if (data->max_x < 1024)
eef820dc 771 x >>= 2;
910d8051 772 if (data->max_y < 1024)
eef820dc 773 y >>= 2;
910d8051 774
5f3f9bc2
ND
775 area = message[5];
776 amplitude = message[6];
4cf51c38 777
b2e459b8
DK
778 dev_dbg(dev,
779 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
780 id,
f3889ed1
ND
781 (status & MXT_T9_DETECT) ? 'D' : '.',
782 (status & MXT_T9_PRESS) ? 'P' : '.',
783 (status & MXT_T9_RELEASE) ? 'R' : '.',
784 (status & MXT_T9_MOVE) ? 'M' : '.',
785 (status & MXT_T9_VECTOR) ? 'V' : '.',
786 (status & MXT_T9_AMP) ? 'A' : '.',
787 (status & MXT_T9_SUPPRESS) ? 'S' : '.',
788 (status & MXT_T9_UNGRIP) ? 'U' : '.',
fea9e467 789 x, y, area, amplitude);
b2e459b8 790
fba5bc31 791 input_mt_slot(input_dev, id);
fba5bc31 792
f3889ed1 793 if (status & MXT_T9_DETECT) {
eef820dc
ND
794 /*
795 * Multiple bits may be set if the host is slow to read
796 * the status messages, indicating all the events that
797 * have happened.
798 */
799 if (status & MXT_T9_RELEASE) {
800 input_mt_report_slot_state(input_dev,
801 MT_TOOL_FINGER, 0);
b735fbe0 802 mxt_input_sync(data);
eef820dc
ND
803 }
804
805 /* Touch active */
806 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1);
fba5bc31
DK
807 input_report_abs(input_dev, ABS_MT_POSITION_X, x);
808 input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
fea9e467 809 input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude);
fba5bc31 810 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
eef820dc
ND
811 } else {
812 /* Touch no longer active, close out slot */
813 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
fba5bc31 814 }
b9b05a89
ND
815
816 data->update_input = true;
4cf51c38 817}
4cf51c38 818
b23157dc
ND
819static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
820{
821 struct device *dev = &data->client->dev;
822 struct input_dev *input_dev = data->input_dev;
823 int id;
824 u8 status;
825 u8 type = 0;
826 u16 x;
827 u16 y;
828 int distance = 0;
829 int tool = 0;
830 u8 major = 0;
831 u8 pressure = 0;
832 u8 orientation = 0;
833
834 id = message[0] - data->T100_reportid_min - 2;
835
836 /* ignore SCRSTATUS events */
837 if (id < 0)
838 return;
839
840 status = message[1];
841 x = get_unaligned_le16(&message[2]);
842 y = get_unaligned_le16(&message[4]);
843
844 if (status & MXT_T100_DETECT) {
845 type = (status & MXT_T100_TYPE_MASK) >> 4;
846
847 switch (type) {
848 case MXT_T100_TYPE_HOVERING_FINGER:
849 tool = MT_TOOL_FINGER;
850 distance = MXT_DISTANCE_HOVERING;
851
852 if (data->t100_aux_vect)
853 orientation = message[data->t100_aux_vect];
854
855 break;
856
857 case MXT_T100_TYPE_FINGER:
858 case MXT_T100_TYPE_GLOVE:
859 tool = MT_TOOL_FINGER;
860 distance = MXT_DISTANCE_ACTIVE_TOUCH;
861
862 if (data->t100_aux_area)
863 major = message[data->t100_aux_area];
864
865 if (data->t100_aux_ampl)
866 pressure = message[data->t100_aux_ampl];
867
868 if (data->t100_aux_vect)
869 orientation = message[data->t100_aux_vect];
870
871 break;
872
873 case MXT_T100_TYPE_PASSIVE_STYLUS:
874 tool = MT_TOOL_PEN;
875
876 /*
877 * Passive stylus is reported with size zero so
878 * hardcode.
879 */
880 major = MXT_TOUCH_MAJOR_DEFAULT;
881
882 if (data->t100_aux_ampl)
883 pressure = message[data->t100_aux_ampl];
884
885 break;
886
887 case MXT_T100_TYPE_LARGE_TOUCH:
888 /* Ignore suppressed touch */
889 break;
890
891 default:
892 dev_dbg(dev, "Unexpected T100 type\n");
893 return;
894 }
895 }
896
897 /*
898 * Values reported should be non-zero if tool is touching the
899 * device
900 */
901 if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER)
902 pressure = MXT_PRESSURE_DEFAULT;
903
904 input_mt_slot(input_dev, id);
905
906 if (status & MXT_T100_DETECT) {
907 dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",
908 id, type, x, y, major, pressure, orientation);
909
910 input_mt_report_slot_state(input_dev, tool, 1);
911 input_report_abs(input_dev, ABS_MT_POSITION_X, x);
912 input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
913 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
914 input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
915 input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
916 input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);
917 } else {
918 dev_dbg(dev, "[%u] release\n", id);
919
920 /* close out slot */
921 input_mt_report_slot_state(input_dev, 0, 0);
922 }
923
924 data->update_input = true;
925}
926
b9b05a89 927static int mxt_proc_message(struct mxt_data *data, u8 *message)
04a79181 928{
b9b05a89
ND
929 u8 report_id = message[0];
930
931 if (report_id == MXT_RPTID_NOMSG)
932 return 0;
933
934 if (report_id == data->T6_reportid) {
935 mxt_proc_t6_messages(data, message);
936 } else if (!data->input_dev) {
937 /*
938 * Do not report events if input device
939 * is not yet registered.
940 */
941 mxt_dump_message(data, message);
b23157dc
ND
942 } else if (report_id >= data->T9_reportid_min &&
943 report_id <= data->T9_reportid_max) {
b9b05a89 944 mxt_proc_t9_message(data, message);
b23157dc
ND
945 } else if (report_id >= data->T100_reportid_min &&
946 report_id <= data->T100_reportid_max) {
947 mxt_proc_t100_message(data, message);
b9b05a89
ND
948 } else if (report_id == data->T19_reportid) {
949 mxt_input_button(data, message);
950 data->update_input = true;
951 } else {
952 mxt_dump_message(data, message);
953 }
954
955 return 1;
4cf51c38
JS
956}
957
9d8dc3e5 958static int mxt_read_and_process_messages(struct mxt_data *data, u8 count)
4cf51c38 959{
4cf51c38 960 struct device *dev = &data->client->dev;
b9b05a89 961 int ret;
9d8dc3e5
ND
962 int i;
963 u8 num_valid = 0;
964
965 /* Safety check for msg_buf */
966 if (count > data->max_reportid)
967 return -EINVAL;
4cf51c38 968
9d8dc3e5 969 /* Process remaining messages if necessary */
b9b05a89 970 ret = __mxt_read_reg(data->client, data->T5_address,
9d8dc3e5 971 data->T5_msg_size * count, data->msg_buf);
b9b05a89 972 if (ret) {
9d8dc3e5 973 dev_err(dev, "Failed to read %u messages (%d)\n", count, ret);
b9b05a89
ND
974 return ret;
975 }
4cf51c38 976
9d8dc3e5
ND
977 for (i = 0; i < count; i++) {
978 ret = mxt_proc_message(data,
979 data->msg_buf + data->T5_msg_size * i);
980
981 if (ret == 1)
982 num_valid++;
983 }
984
985 /* return number of messages read */
986 return num_valid;
b9b05a89 987}
4cf51c38 988
9d8dc3e5 989static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
b9b05a89 990{
9d8dc3e5 991 struct device *dev = &data->client->dev;
b9b05a89 992 int ret;
9d8dc3e5 993 u8 count, num_left;
4cf51c38 994
9d8dc3e5
ND
995 /* Read T44 and T5 together */
996 ret = __mxt_read_reg(data->client, data->T44_address,
997 data->T5_msg_size + 1, data->msg_buf);
998 if (ret) {
999 dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
1000 return IRQ_NONE;
1001 }
1002
1003 count = data->msg_buf[0];
1004
1005 if (count == 0) {
651b4608
ND
1006 /*
1007 * This condition is caused by the CHG line being configured
1008 * in Mode 0. It results in unnecessary I2C operations but it
1009 * is benign.
1010 */
1011 dev_dbg(dev, "Interrupt triggered but zero messages\n");
9d8dc3e5
ND
1012 return IRQ_NONE;
1013 } else if (count > data->max_reportid) {
1014 dev_err(dev, "T44 count %d exceeded max report id\n", count);
1015 count = data->max_reportid;
1016 }
1017
1018 /* Process first message */
1019 ret = mxt_proc_message(data, data->msg_buf + 1);
1020 if (ret < 0) {
1021 dev_warn(dev, "Unexpected invalid message\n");
1022 return IRQ_NONE;
1023 }
1024
1025 num_left = count - 1;
1026
1027 /* Process remaining messages if necessary */
1028 if (num_left) {
1029 ret = mxt_read_and_process_messages(data, num_left);
b9b05a89 1030 if (ret < 0)
9d8dc3e5
ND
1031 goto end;
1032 else if (ret != num_left)
1033 dev_warn(dev, "Unexpected invalid message\n");
1034 }
1035
1036end:
1037 if (data->update_input) {
1038 mxt_input_sync(data);
1039 data->update_input = false;
1040 }
1041
1042 return IRQ_HANDLED;
1043}
1044
1045static int mxt_process_messages_until_invalid(struct mxt_data *data)
1046{
1047 struct device *dev = &data->client->dev;
1048 int count, read;
1049 u8 tries = 2;
1050
1051 count = data->max_reportid;
1052
1053 /* Read messages until we force an invalid */
1054 do {
1055 read = mxt_read_and_process_messages(data, count);
1056 if (read < count)
1057 return 0;
1058 } while (--tries);
1059
1060 if (data->update_input) {
1061 mxt_input_sync(data);
1062 data->update_input = false;
1063 }
1064
1065 dev_err(dev, "CHG pin isn't cleared\n");
1066 return -EBUSY;
1067}
1068
1069static irqreturn_t mxt_process_messages(struct mxt_data *data)
1070{
1071 int total_handled, num_handled;
1072 u8 count = data->last_message_count;
1073
1074 if (count < 1 || count > data->max_reportid)
1075 count = 1;
1076
1077 /* include final invalid message */
1078 total_handled = mxt_read_and_process_messages(data, count + 1);
1079 if (total_handled < 0)
1080 return IRQ_NONE;
1081 /* if there were invalid messages, then we are done */
1082 else if (total_handled <= count)
1083 goto update_count;
1084
1085 /* keep reading two msgs until one is invalid or reportid limit */
1086 do {
1087 num_handled = mxt_read_and_process_messages(data, 2);
1088 if (num_handled < 0)
b9b05a89 1089 return IRQ_NONE;
9d8dc3e5
ND
1090
1091 total_handled += num_handled;
1092
1093 if (num_handled < 2)
1094 break;
1095 } while (total_handled < data->num_touchids);
1096
1097update_count:
1098 data->last_message_count = total_handled;
b9b05a89
ND
1099
1100 if (data->update_input) {
b735fbe0 1101 mxt_input_sync(data);
b9b05a89
ND
1102 data->update_input = false;
1103 }
64464ae8 1104
4cf51c38
JS
1105 return IRQ_HANDLED;
1106}
1107
d79e7e47
BL
1108static irqreturn_t mxt_interrupt(int irq, void *dev_id)
1109{
1110 struct mxt_data *data = dev_id;
1111
1112 if (data->in_bootloader) {
1113 /* bootloader state transition completion */
1114 complete(&data->bl_completion);
1115 return IRQ_HANDLED;
1116 }
1117
dd24dcf5
ND
1118 if (!data->object_table)
1119 return IRQ_HANDLED;
1120
9d8dc3e5
ND
1121 if (data->T44_address) {
1122 return mxt_process_messages_t44(data);
1123 } else {
1124 return mxt_process_messages(data);
1125 }
d79e7e47
BL
1126}
1127
a4a2ef46
IV
1128static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
1129 u8 value, bool wait)
1130{
1131 u16 reg;
1132 u8 command_register;
1133 int timeout_counter = 0;
1134 int ret;
1135
1136 reg = data->T6_address + cmd_offset;
1137
1138 ret = mxt_write_reg(data->client, reg, value);
1139 if (ret)
1140 return ret;
1141
1142 if (!wait)
1143 return 0;
1144
1145 do {
1146 msleep(20);
1147 ret = __mxt_read_reg(data->client, reg, 1, &command_register);
1148 if (ret)
1149 return ret;
1150 } while (command_register != 0 && timeout_counter++ <= 100);
1151
1152 if (timeout_counter > 100) {
1153 dev_err(&data->client->dev, "Command failed!\n");
1154 return -EIO;
1155 }
1156
1157 return 0;
1158}
1159
1160static int mxt_soft_reset(struct mxt_data *data)
1161{
1162 struct device *dev = &data->client->dev;
1163 int ret = 0;
1164
1165 dev_info(dev, "Resetting chip\n");
1166
1167 reinit_completion(&data->reset_completion);
1168
1169 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false);
1170 if (ret)
1171 return ret;
1172
1173 ret = mxt_wait_for_completion(data, &data->reset_completion,
1174 MXT_RESET_TIMEOUT);
1175 if (ret)
1176 return ret;
1177
1178 return 0;
1179}
1180
c3f78043
ND
1181static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
1182{
1183 /*
1184 * On failure, CRC is set to 0 and config will always be
1185 * downloaded.
1186 */
1187 data->config_crc = 0;
1188 reinit_completion(&data->crc_completion);
1189
1190 mxt_t6_command(data, cmd, value, true);
1191
1192 /*
1193 * Wait for crc message. On failure, CRC is set to 0 and config will
1194 * always be downloaded.
1195 */
1196 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
1197}
1198
4ce6fa01
ND
1199static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
1200{
1201 static const unsigned int crcpoly = 0x80001B;
1202 u32 result;
1203 u32 data_word;
1204
1205 data_word = (secondbyte << 8) | firstbyte;
1206 result = ((*crc << 1) ^ data_word);
1207
1208 if (result & 0x1000000)
1209 result ^= crcpoly;
1210
1211 *crc = result;
1212}
1213
1214static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
1215{
1216 u32 crc = 0;
1217 u8 *ptr = base + start_off;
1218 u8 *last_val = base + end_off - 1;
1219
1220 if (end_off < start_off)
1221 return -EINVAL;
1222
1223 while (ptr < last_val) {
1224 mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
1225 ptr += 2;
1226 }
1227
1228 /* if len is odd, fill the last byte with 0 */
1229 if (ptr == last_val)
1230 mxt_calc_crc24(&crc, *ptr, 0);
1231
1232 /* Mask to 24-bit */
1233 crc &= 0x00FFFFFF;
1234
1235 return crc;
1236}
1237
efdbd7ae
DT
1238static int mxt_prepare_cfg_mem(struct mxt_data *data,
1239 const struct firmware *cfg,
1240 unsigned int data_pos,
1241 unsigned int cfg_start_ofs,
1242 u8 *config_mem,
1243 size_t config_mem_size)
1244{
1245 struct device *dev = &data->client->dev;
1246 struct mxt_object *object;
1247 unsigned int type, instance, size, byte_offset;
1248 int offset;
1249 int ret;
1250 int i;
1251 u16 reg;
1252 u8 val;
1253
1254 while (data_pos < cfg->size) {
1255 /* Read type, instance, length */
1256 ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
1257 &type, &instance, &size, &offset);
1258 if (ret == 0) {
1259 /* EOF */
1260 break;
1261 } else if (ret != 3) {
1262 dev_err(dev, "Bad format: failed to parse object\n");
1263 return -EINVAL;
1264 }
1265 data_pos += offset;
1266
1267 object = mxt_get_object(data, type);
1268 if (!object) {
1269 /* Skip object */
1270 for (i = 0; i < size; i++) {
1271 ret = sscanf(cfg->data + data_pos, "%hhx%n",
041fa159
DT
1272 &val, &offset);
1273 if (ret != 1) {
1274 dev_err(dev, "Bad format in T%d at %d\n",
1275 type, i);
1276 return -EINVAL;
1277 }
efdbd7ae
DT
1278 data_pos += offset;
1279 }
1280 continue;
1281 }
1282
1283 if (size > mxt_obj_size(object)) {
1284 /*
1285 * Either we are in fallback mode due to wrong
1286 * config or config from a later fw version,
1287 * or the file is corrupt or hand-edited.
1288 */
1289 dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
1290 size - mxt_obj_size(object), type);
1291 } else if (mxt_obj_size(object) > size) {
1292 /*
1293 * If firmware is upgraded, new bytes may be added to
1294 * end of objects. It is generally forward compatible
1295 * to zero these bytes - previous behaviour will be
1296 * retained. However this does invalidate the CRC and
1297 * will force fallback mode until the configuration is
1298 * updated. We warn here but do nothing else - the
1299 * malloc has zeroed the entire configuration.
1300 */
1301 dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
1302 mxt_obj_size(object) - size, type);
1303 }
1304
1305 if (instance >= mxt_obj_instances(object)) {
1306 dev_err(dev, "Object instances exceeded!\n");
1307 return -EINVAL;
1308 }
1309
1310 reg = object->start_address + mxt_obj_size(object) * instance;
1311
1312 for (i = 0; i < size; i++) {
1313 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1314 &val,
1315 &offset);
1316 if (ret != 1) {
041fa159
DT
1317 dev_err(dev, "Bad format in T%d at %d\n",
1318 type, i);
efdbd7ae
DT
1319 return -EINVAL;
1320 }
1321 data_pos += offset;
1322
1323 if (i > mxt_obj_size(object))
1324 continue;
1325
1326 byte_offset = reg + i - cfg_start_ofs;
1327
041fa159 1328 if (byte_offset >= 0 && byte_offset < config_mem_size) {
efdbd7ae
DT
1329 *(config_mem + byte_offset) = val;
1330 } else {
1331 dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
1332 reg, object->type, byte_offset);
1333 return -EINVAL;
1334 }
1335 }
1336 }
1337
1338 return 0;
1339}
1340
1341static int mxt_upload_cfg_mem(struct mxt_data *data, unsigned int cfg_start,
1342 u8 *config_mem, size_t config_mem_size)
1343{
1344 unsigned int byte_offset = 0;
1345 int error;
1346
1347 /* Write configuration as blocks */
1348 while (byte_offset < config_mem_size) {
1349 unsigned int size = config_mem_size - byte_offset;
1350
1351 if (size > MXT_MAX_BLOCK_WRITE)
1352 size = MXT_MAX_BLOCK_WRITE;
1353
1354 error = __mxt_write_reg(data->client,
1355 cfg_start + byte_offset,
1356 size, config_mem + byte_offset);
1357 if (error) {
1358 dev_err(&data->client->dev,
1359 "Config write error, ret=%d\n", error);
1360 return error;
1361 }
1362
1363 byte_offset += size;
1364 }
1365
1366 return 0;
1367}
1368
7f3884f7
ND
1369static int mxt_init_t7_power_cfg(struct mxt_data *data);
1370
50a77c65
ND
1371/*
1372 * mxt_update_cfg - download configuration to chip
1373 *
1374 * Atmel Raw Config File Format
1375 *
1376 * The first four lines of the raw config file contain:
1377 * 1) Version
1378 * 2) Chip ID Information (first 7 bytes of device memory)
1379 * 3) Chip Information Block 24-bit CRC Checksum
1380 * 4) Chip Configuration 24-bit CRC Checksum
1381 *
1382 * The rest of the file consists of one line per object instance:
1383 * <TYPE> <INSTANCE> <SIZE> <CONTENTS>
1384 *
1385 * <TYPE> - 2-byte object type as hex
1386 * <INSTANCE> - 2-byte object instance number as hex
1387 * <SIZE> - 2-byte object size as hex
1388 * <CONTENTS> - array of <SIZE> 1-byte hex values
1389 */
1390static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
4cf51c38 1391{
4cf51c38 1392 struct device *dev = &data->client->dev;
50a77c65 1393 struct mxt_info cfg_info;
cf94bc09 1394 int ret;
50a77c65 1395 int offset;
4ce6fa01 1396 int data_pos;
50a77c65 1397 int i;
4ce6fa01
ND
1398 int cfg_start_ofs;
1399 u32 info_crc, config_crc, calculated_crc;
1400 u8 *config_mem;
1401 size_t config_mem_size;
4cf51c38 1402
50a77c65
ND
1403 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
1404
1405 if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
1406 dev_err(dev, "Unrecognised config file\n");
efdbd7ae 1407 return -EINVAL;
4cf51c38
JS
1408 }
1409
4ce6fa01 1410 data_pos = strlen(MXT_CFG_MAGIC);
50a77c65
ND
1411
1412 /* Load information block and check */
1413 for (i = 0; i < sizeof(struct mxt_info); i++) {
4ce6fa01 1414 ret = sscanf(cfg->data + data_pos, "%hhx%n",
50a77c65
ND
1415 (unsigned char *)&cfg_info + i,
1416 &offset);
1417 if (ret != 1) {
1418 dev_err(dev, "Bad format\n");
efdbd7ae 1419 return -EINVAL;
50a77c65 1420 }
c3f78043 1421
4ce6fa01 1422 data_pos += offset;
c3f78043
ND
1423 }
1424
50a77c65
ND
1425 if (cfg_info.family_id != data->info.family_id) {
1426 dev_err(dev, "Family ID mismatch!\n");
efdbd7ae 1427 return -EINVAL;
50a77c65 1428 }
c3f78043 1429
50a77c65
ND
1430 if (cfg_info.variant_id != data->info.variant_id) {
1431 dev_err(dev, "Variant ID mismatch!\n");
efdbd7ae 1432 return -EINVAL;
50a77c65 1433 }
4cf51c38 1434
4ce6fa01
ND
1435 /* Read CRCs */
1436 ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset);
50a77c65
ND
1437 if (ret != 1) {
1438 dev_err(dev, "Bad format: failed to parse Info CRC\n");
efdbd7ae 1439 return -EINVAL;
50a77c65 1440 }
4ce6fa01 1441 data_pos += offset;
50a77c65 1442
4ce6fa01 1443 ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset);
50a77c65
ND
1444 if (ret != 1) {
1445 dev_err(dev, "Bad format: failed to parse Config CRC\n");
efdbd7ae 1446 return -EINVAL;
50a77c65 1447 }
4ce6fa01 1448 data_pos += offset;
50a77c65 1449
4ce6fa01
ND
1450 /*
1451 * The Info Block CRC is calculated over mxt_info and the object
1452 * table. If it does not match then we are trying to load the
1453 * configuration from a different chip or firmware version, so
1454 * the configuration CRC is invalid anyway.
1455 */
1456 if (info_crc == data->info_crc) {
1457 if (config_crc == 0 || data->config_crc == 0) {
1458 dev_info(dev, "CRC zero, attempting to apply config\n");
1459 } else if (config_crc == data->config_crc) {
1460 dev_dbg(dev, "Config CRC 0x%06X: OK\n",
1461 data->config_crc);
efdbd7ae 1462 return 0;
4ce6fa01
ND
1463 } else {
1464 dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
1465 data->config_crc, config_crc);
1466 }
1467 } else {
1468 dev_warn(dev,
1469 "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
1470 data->info_crc, info_crc);
50a77c65
ND
1471 }
1472
4ce6fa01
ND
1473 /* Malloc memory to store configuration */
1474 cfg_start_ofs = MXT_OBJECT_START +
1475 data->info.object_num * sizeof(struct mxt_object) +
1476 MXT_INFO_CHECKSUM_SIZE;
1477 config_mem_size = data->mem_size - cfg_start_ofs;
1478 config_mem = kzalloc(config_mem_size, GFP_KERNEL);
1479 if (!config_mem) {
1480 dev_err(dev, "Failed to allocate memory\n");
efdbd7ae 1481 return -ENOMEM;
4ce6fa01 1482 }
50a77c65 1483
efdbd7ae
DT
1484 ret = mxt_prepare_cfg_mem(data, cfg, data_pos, cfg_start_ofs,
1485 config_mem, config_mem_size);
1486 if (ret)
1487 goto release_mem;
50a77c65 1488
4ce6fa01
ND
1489 /* Calculate crc of the received configs (not the raw config file) */
1490 if (data->T7_address < cfg_start_ofs) {
1491 dev_err(dev, "Bad T7 address, T7addr = %x, config offset %x\n",
1492 data->T7_address, cfg_start_ofs);
1493 ret = 0;
1494 goto release_mem;
1495 }
50a77c65 1496
4ce6fa01
ND
1497 calculated_crc = mxt_calculate_crc(config_mem,
1498 data->T7_address - cfg_start_ofs,
1499 config_mem_size);
1500
efdbd7ae 1501 if (config_crc > 0 && config_crc != calculated_crc)
4ce6fa01
ND
1502 dev_warn(dev, "Config CRC error, calculated=%06X, file=%06X\n",
1503 calculated_crc, config_crc);
1504
efdbd7ae
DT
1505 ret = mxt_upload_cfg_mem(data, cfg_start_ofs,
1506 config_mem, config_mem_size);
1507 if (ret)
1508 goto release_mem;
4cf51c38 1509
c3f78043
ND
1510 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
1511
1512 ret = mxt_soft_reset(data);
1513 if (ret)
4ce6fa01 1514 goto release_mem;
c3f78043
ND
1515
1516 dev_info(dev, "Config successfully updated\n");
1517
7f3884f7
ND
1518 /* T7 config may have changed */
1519 mxt_init_t7_power_cfg(data);
1520
4ce6fa01
ND
1521release_mem:
1522 kfree(config_mem);
50a77c65 1523 return ret;
4cf51c38
JS
1524}
1525
dd24dcf5
ND
1526static int mxt_acquire_irq(struct mxt_data *data)
1527{
1528 int error;
1529
1530 enable_irq(data->irq);
1531
9d8dc3e5 1532 error = mxt_process_messages_until_invalid(data);
dd24dcf5
ND
1533 if (error)
1534 return error;
1535
1536 return 0;
1537}
1538
7686b108 1539static int mxt_get_info(struct mxt_data *data)
4cf51c38
JS
1540{
1541 struct i2c_client *client = data->client;
7686b108 1542 struct mxt_info *info = &data->info;
4cf51c38 1543 int error;
4cf51c38 1544
23003a84
DK
1545 /* Read 7-byte info block starting at address 0 */
1546 error = __mxt_read_reg(client, MXT_INFO, sizeof(*info), info);
4cf51c38
JS
1547 if (error)
1548 return error;
4cf51c38
JS
1549
1550 return 0;
1551}
1552
58e4aeee 1553static void mxt_free_input_device(struct mxt_data *data)
5f3f9bc2 1554{
58e4aeee
SW
1555 if (data->input_dev) {
1556 input_unregister_device(data->input_dev);
1557 data->input_dev = NULL;
1558 }
1559}
5f3f9bc2 1560
58e4aeee
SW
1561static void mxt_free_object_table(struct mxt_data *data)
1562{
5f3f9bc2
ND
1563 kfree(data->object_table);
1564 data->object_table = NULL;
1565 kfree(data->msg_buf);
1566 data->msg_buf = NULL;
b9b05a89 1567 data->T5_address = 0;
5f3f9bc2
ND
1568 data->T5_msg_size = 0;
1569 data->T6_reportid = 0;
1570 data->T7_address = 0;
1571 data->T9_reportid_min = 0;
1572 data->T9_reportid_max = 0;
1573 data->T19_reportid = 0;
9d8dc3e5 1574 data->T44_address = 0;
b23157dc
ND
1575 data->T100_reportid_min = 0;
1576 data->T100_reportid_max = 0;
9d8dc3e5 1577 data->max_reportid = 0;
5f3f9bc2
ND
1578}
1579
7686b108 1580static int mxt_get_object_table(struct mxt_data *data)
4cf51c38 1581{
333e5a9a
DK
1582 struct i2c_client *client = data->client;
1583 size_t table_size;
dd24dcf5 1584 struct mxt_object *object_table;
4cf51c38
JS
1585 int error;
1586 int i;
333e5a9a 1587 u8 reportid;
4ce6fa01 1588 u16 end_address;
333e5a9a
DK
1589
1590 table_size = data->info.object_num * sizeof(struct mxt_object);
dd24dcf5
ND
1591 object_table = kzalloc(table_size, GFP_KERNEL);
1592 if (!object_table) {
1593 dev_err(&data->client->dev, "Failed to allocate memory\n");
1594 return -ENOMEM;
1595 }
1596
333e5a9a 1597 error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
dd24dcf5
ND
1598 object_table);
1599 if (error) {
1600 kfree(object_table);
333e5a9a 1601 return error;
dd24dcf5 1602 }
4cf51c38 1603
333e5a9a
DK
1604 /* Valid Report IDs start counting from 1 */
1605 reportid = 1;
4ce6fa01 1606 data->mem_size = 0;
4cf51c38 1607 for (i = 0; i < data->info.object_num; i++) {
dd24dcf5 1608 struct mxt_object *object = object_table + i;
333e5a9a 1609 u8 min_id, max_id;
4cf51c38 1610
333e5a9a 1611 le16_to_cpus(&object->start_address);
4cf51c38
JS
1612
1613 if (object->num_report_ids) {
333e5a9a 1614 min_id = reportid;
4cf51c38 1615 reportid += object->num_report_ids *
1e0c0c5b 1616 mxt_obj_instances(object);
333e5a9a
DK
1617 max_id = reportid - 1;
1618 } else {
1619 min_id = 0;
1620 max_id = 0;
1621 }
1622
1623 dev_dbg(&data->client->dev,
7bed6805 1624 "T%u Start:%u Size:%zu Instances:%zu Report IDs:%u-%u\n",
1e0c0c5b
DK
1625 object->type, object->start_address,
1626 mxt_obj_size(object), mxt_obj_instances(object),
1627 min_id, max_id);
333e5a9a
DK
1628
1629 switch (object->type) {
5f3f9bc2 1630 case MXT_GEN_MESSAGE_T5:
437d4f37
ND
1631 if (data->info.family_id == 0x80 &&
1632 data->info.version < 0x20) {
9d8dc3e5 1633 /*
437d4f37
ND
1634 * On mXT224 firmware versions prior to V2.0
1635 * read and discard unused CRC byte otherwise
1636 * DMA reads are misaligned.
9d8dc3e5
ND
1637 */
1638 data->T5_msg_size = mxt_obj_size(object);
1639 } else {
1640 /* CRC not enabled, so skip last byte */
1641 data->T5_msg_size = mxt_obj_size(object) - 1;
1642 }
b9b05a89 1643 data->T5_address = object->start_address;
041fa159 1644 break;
fdf80421
DK
1645 case MXT_GEN_COMMAND_T6:
1646 data->T6_reportid = min_id;
a4a2ef46 1647 data->T6_address = object->start_address;
fdf80421 1648 break;
4ce6fa01
ND
1649 case MXT_GEN_POWER_T7:
1650 data->T7_address = object->start_address;
1651 break;
333e5a9a 1652 case MXT_TOUCH_MULTI_T9:
b23157dc 1653 data->multitouch = MXT_TOUCH_MULTI_T9;
333e5a9a
DK
1654 data->T9_reportid_min = min_id;
1655 data->T9_reportid_max = max_id;
9d8dc3e5
ND
1656 data->num_touchids = object->num_report_ids
1657 * mxt_obj_instances(object);
1658 break;
1659 case MXT_SPT_MESSAGECOUNT_T44:
1660 data->T44_address = object->start_address;
333e5a9a 1661 break;
22dfab7f
DK
1662 case MXT_SPT_GPIOPWM_T19:
1663 data->T19_reportid = min_id;
1664 break;
b23157dc
ND
1665 case MXT_TOUCH_MULTITOUCHSCREEN_T100:
1666 data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100;
1667 data->T100_reportid_min = min_id;
1668 data->T100_reportid_max = max_id;
1669 /* first two report IDs reserved */
1670 data->num_touchids = object->num_report_ids - 2;
1671 break;
4cf51c38 1672 }
4ce6fa01
ND
1673
1674 end_address = object->start_address
1675 + mxt_obj_size(object) * mxt_obj_instances(object) - 1;
1676
1677 if (end_address >= data->mem_size)
1678 data->mem_size = end_address + 1;
4cf51c38
JS
1679 }
1680
9d8dc3e5
ND
1681 /* Store maximum reportid */
1682 data->max_reportid = reportid;
1683
1684 /* If T44 exists, T5 position has to be directly after */
1685 if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
1686 dev_err(&client->dev, "Invalid T44 position\n");
1687 error = -EINVAL;
1688 goto free_object_table;
1689 }
1690
1691 data->msg_buf = kcalloc(data->max_reportid,
1692 data->T5_msg_size, GFP_KERNEL);
5f3f9bc2
ND
1693 if (!data->msg_buf) {
1694 dev_err(&client->dev, "Failed to allocate message buffer\n");
1695 error = -ENOMEM;
1696 goto free_object_table;
1697 }
1698
dd24dcf5
ND
1699 data->object_table = object_table;
1700
4cf51c38 1701 return 0;
4cf51c38 1702
5f3f9bc2
ND
1703free_object_table:
1704 mxt_free_object_table(data);
1705 return error;
7d4fa100
DK
1706}
1707
61dc1aba
ND
1708static int mxt_read_t9_resolution(struct mxt_data *data)
1709{
1710 struct i2c_client *client = data->client;
1711 int error;
1712 struct t9_range range;
1713 unsigned char orient;
1714 struct mxt_object *object;
1715
1716 object = mxt_get_object(data, MXT_TOUCH_MULTI_T9);
1717 if (!object)
1718 return -EINVAL;
1719
1720 error = __mxt_read_reg(client,
1721 object->start_address + MXT_T9_RANGE,
1722 sizeof(range), &range);
1723 if (error)
1724 return error;
1725
1726 le16_to_cpus(&range.x);
1727 le16_to_cpus(&range.y);
1728
1729 error = __mxt_read_reg(client,
1730 object->start_address + MXT_T9_ORIENT,
1731 1, &orient);
1732 if (error)
1733 return error;
1734
1735 /* Handle default values */
1736 if (range.x == 0)
1737 range.x = 1023;
1738
1739 if (range.y == 0)
1740 range.y = 1023;
1741
f3889ed1 1742 if (orient & MXT_T9_ORIENT_SWITCH) {
61dc1aba
ND
1743 data->max_x = range.y;
1744 data->max_y = range.x;
1745 } else {
1746 data->max_x = range.x;
1747 data->max_y = range.y;
1748 }
1749
1750 dev_dbg(&client->dev,
1751 "Touchscreen size X%uY%u\n", data->max_x, data->max_y);
1752
1753 return 0;
1754}
1755
b23157dc
ND
1756static int mxt_read_t100_config(struct mxt_data *data)
1757{
1758 struct i2c_client *client = data->client;
1759 int error;
1760 struct mxt_object *object;
1761 u16 range_x, range_y;
1762 u8 cfg, tchaux;
1763 u8 aux;
1764
1765 object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100);
1766 if (!object)
1767 return -EINVAL;
1768
1769 error = __mxt_read_reg(client,
1770 object->start_address + MXT_T100_XRANGE,
1771 sizeof(range_x), &range_x);
1772 if (error)
1773 return error;
1774
1775 le16_to_cpus(&range_x);
1776
1777 error = __mxt_read_reg(client,
1778 object->start_address + MXT_T100_YRANGE,
1779 sizeof(range_y), &range_y);
1780 if (error)
1781 return error;
1782
1783 le16_to_cpus(&range_y);
1784
1785 error = __mxt_read_reg(client,
1786 object->start_address + MXT_T100_CFG1,
1787 1, &cfg);
1788 if (error)
1789 return error;
1790
1791 error = __mxt_read_reg(client,
1792 object->start_address + MXT_T100_TCHAUX,
1793 1, &tchaux);
1794 if (error)
1795 return error;
1796
1797 /* Handle default values */
1798 if (range_x == 0)
1799 range_x = 1023;
1800
1801 if (range_y == 0)
1802 range_y = 1023;
1803
1804 if (cfg & MXT_T100_CFG_SWITCHXY) {
1805 data->max_x = range_y;
1806 data->max_y = range_x;
1807 } else {
1808 data->max_x = range_x;
1809 data->max_y = range_y;
1810 }
1811
1812 /* allocate aux bytes */
1813 aux = 6;
1814
1815 if (tchaux & MXT_T100_TCHAUX_VECT)
1816 data->t100_aux_vect = aux++;
1817
1818 if (tchaux & MXT_T100_TCHAUX_AMPL)
1819 data->t100_aux_ampl = aux++;
1820
1821 if (tchaux & MXT_T100_TCHAUX_AREA)
1822 data->t100_aux_area = aux++;
1823
1824 dev_dbg(&client->dev,
1825 "T100 aux mappings vect:%u ampl:%u area:%u\n",
1826 data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
1827
1828 dev_info(&client->dev,
1829 "T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y);
1830
1831 return 0;
1832}
1833
7a53d609
ND
1834static int mxt_input_open(struct input_dev *dev);
1835static void mxt_input_close(struct input_dev *dev);
1836
b6d2d328
SS
1837static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
1838 struct mxt_data *data)
1839{
1840 const struct mxt_platform_data *pdata = data->pdata;
1841 int i;
1842
1843 input_dev->name = "Atmel maXTouch Touchpad";
1844
1845 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1846
1847 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1848 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1849 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1850 MXT_PIXELS_PER_MM);
1851 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1852 MXT_PIXELS_PER_MM);
1853
1854 for (i = 0; i < pdata->t19_num_keys; i++)
1855 if (pdata->t19_keymap[i] != KEY_RESERVED)
1856 input_set_capability(input_dev, EV_KEY,
1857 pdata->t19_keymap[i]);
1858}
1859
b23157dc 1860static int mxt_initialize_input_device(struct mxt_data *data)
7a53d609 1861{
7a53d609 1862 const struct mxt_platform_data *pdata = data->pdata;
b6d2d328 1863 struct device *dev = &data->client->dev;
7a53d609
ND
1864 struct input_dev *input_dev;
1865 int error;
1866 unsigned int num_mt_slots;
1867 unsigned int mt_flags = 0;
7a53d609 1868
b23157dc
ND
1869 switch (data->multitouch) {
1870 case MXT_TOUCH_MULTI_T9:
1871 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1872 error = mxt_read_t9_resolution(data);
1873 if (error)
1874 dev_warn(dev, "Failed to initialize T9 resolution\n");
1875 break;
1876
1877 case MXT_TOUCH_MULTITOUCHSCREEN_T100:
1878 num_mt_slots = data->num_touchids;
1879 error = mxt_read_t100_config(data);
1880 if (error)
1881 dev_warn(dev, "Failed to read T100 config\n");
1882 break;
1883
1884 default:
1885 dev_err(dev, "Invalid multitouch object\n");
1886 return -EINVAL;
1887 }
7a53d609
ND
1888
1889 input_dev = input_allocate_device();
1890 if (!input_dev) {
1891 dev_err(dev, "Failed to allocate memory\n");
1892 return -ENOMEM;
1893 }
1894
1895 input_dev->name = "Atmel maXTouch Touchscreen";
1896 input_dev->phys = data->phys;
1897 input_dev->id.bustype = BUS_I2C;
1898 input_dev->dev.parent = dev;
1899 input_dev->open = mxt_input_open;
1900 input_dev->close = mxt_input_close;
1901
b23157dc 1902 input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
7a53d609 1903
7a53d609 1904 /* For single touch */
b23157dc
ND
1905 input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
1906 input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
1907
1908 if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
1909 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1910 data->t100_aux_ampl)) {
1911 input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
1912 }
7a53d609 1913
b6d2d328
SS
1914 /* If device has buttons we assume it is a touchpad */
1915 if (pdata->t19_num_keys) {
1916 mxt_set_up_as_touchpad(input_dev, data);
1917 mt_flags |= INPUT_MT_POINTER;
1918 }
1919
7a53d609 1920 /* For multi touch */
7a53d609
ND
1921 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1922 if (error) {
1923 dev_err(dev, "Error %d initialising slots\n", error);
1924 goto err_free_mem;
1925 }
1926
b23157dc
ND
1927 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) {
1928 input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
1929 0, MT_TOOL_MAX, 0, 0);
1930 input_set_abs_params(input_dev, ABS_MT_DISTANCE,
1931 MXT_DISTANCE_ACTIVE_TOUCH,
1932 MXT_DISTANCE_HOVERING,
1933 0, 0);
1934 }
1935
7a53d609
ND
1936 input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1937 0, data->max_x, 0, 0);
1938 input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1939 0, data->max_y, 0, 0);
b23157dc
ND
1940
1941 if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
1942 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1943 data->t100_aux_area)) {
1944 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1945 0, MXT_MAX_AREA, 0, 0);
1946 }
1947
1948 if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
1949 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1950 data->t100_aux_ampl)) {
1951 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1952 0, 255, 0, 0);
1953 }
1954
1955 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1956 data->t100_aux_vect) {
1957 input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
1958 0, 255, 0, 0);
1959 }
1960
1961 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1962 data->t100_aux_ampl) {
1963 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1964 0, 255, 0, 0);
1965 }
1966
1967 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
1968 data->t100_aux_vect) {
1969 input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
1970 0, 255, 0, 0);
1971 }
7a53d609
ND
1972
1973 input_set_drvdata(input_dev, data);
1974
1975 error = input_register_device(input_dev);
1976 if (error) {
1977 dev_err(dev, "Error %d registering input device\n", error);
1978 goto err_free_mem;
1979 }
1980
1981 data->input_dev = input_dev;
1982
1983 return 0;
1984
1985err_free_mem:
1986 input_free_device(input_dev);
1987 return error;
1988}
1989
50a77c65
ND
1990static int mxt_configure_objects(struct mxt_data *data,
1991 const struct firmware *cfg);
1992
1993static void mxt_config_cb(const struct firmware *cfg, void *ctx)
1994{
1995 mxt_configure_objects(ctx, cfg);
efdbd7ae 1996 release_firmware(cfg);
50a77c65
ND
1997}
1998
7686b108 1999static int mxt_initialize(struct mxt_data *data)
4cf51c38
JS
2000{
2001 struct i2c_client *client = data->client;
6cd1ab0f 2002 int recovery_attempts = 0;
4cf51c38 2003 int error;
4cf51c38 2004
6cd1ab0f
DT
2005 while (1) {
2006 error = mxt_get_info(data);
2007 if (!error)
2008 break;
2009
2010 /* Check bootloader state */
2011 error = mxt_probe_bootloader(data, false);
8efaa5e5 2012 if (error) {
6cd1ab0f
DT
2013 dev_info(&client->dev, "Trying alternate bootloader address\n");
2014 error = mxt_probe_bootloader(data, true);
2015 if (error) {
8efaa5e5
ND
2016 /* Chip is not in appmode or bootloader mode */
2017 return error;
2018 }
6cd1ab0f 2019 }
a9fdd1e6 2020
6cd1ab0f
DT
2021 /* OK, we are in bootloader, see if we can recover */
2022 if (++recovery_attempts > 1) {
2023 dev_err(&client->dev, "Could not recover from bootloader mode\n");
2024 /*
2025 * We can reflash from this state, so do not
2026 * abort initialization.
2027 */
2028 data->in_bootloader = true;
2029 return 0;
8efaa5e5 2030 }
6cd1ab0f
DT
2031
2032 /* Attempt to exit bootloader into app mode */
2033 mxt_send_bootloader_cmd(data, false);
2034 msleep(MXT_FW_RESET_TIME);
a9fdd1e6 2035 }
4cf51c38 2036
4cf51c38 2037 /* Get object table information */
7686b108 2038 error = mxt_get_object_table(data);
7bed6805
ND
2039 if (error) {
2040 dev_err(&client->dev, "Error %d reading object table\n", error);
dd24dcf5 2041 return error;
7bed6805 2042 }
4cf51c38 2043
041fa159 2044 error = mxt_acquire_irq(data);
dd24dcf5
ND
2045 if (error)
2046 goto err_free_object_table;
2047
6cd1ab0f
DT
2048 error = request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
2049 &client->dev, GFP_KERNEL, data,
2050 mxt_config_cb);
2051 if (error) {
2052 dev_err(&client->dev, "Failed to invoke firmware loader: %d\n",
2053 error);
2054 goto err_free_object_table;
2055 }
50a77c65
ND
2056
2057 return 0;
2058
2059err_free_object_table:
2060 mxt_free_object_table(data);
2061 return error;
2062}
2063
7f3884f7
ND
2064static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep)
2065{
2066 struct device *dev = &data->client->dev;
2067 int error;
2068 struct t7_config *new_config;
2069 struct t7_config deepsleep = { .active = 0, .idle = 0 };
2070
2071 if (sleep == MXT_POWER_CFG_DEEPSLEEP)
2072 new_config = &deepsleep;
2073 else
2074 new_config = &data->t7_cfg;
2075
2076 error = __mxt_write_reg(data->client, data->T7_address,
2077 sizeof(data->t7_cfg), new_config);
2078 if (error)
2079 return error;
2080
2081 dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n",
2082 new_config->active, new_config->idle);
2083
2084 return 0;
2085}
2086
2087static int mxt_init_t7_power_cfg(struct mxt_data *data)
2088{
2089 struct device *dev = &data->client->dev;
2090 int error;
2091 bool retry = false;
2092
2093recheck:
2094 error = __mxt_read_reg(data->client, data->T7_address,
2095 sizeof(data->t7_cfg), &data->t7_cfg);
2096 if (error)
2097 return error;
2098
2099 if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) {
2100 if (!retry) {
2101 dev_dbg(dev, "T7 cfg zero, resetting\n");
2102 mxt_soft_reset(data);
2103 retry = true;
2104 goto recheck;
2105 } else {
2106 dev_dbg(dev, "T7 cfg zero after reset, overriding\n");
2107 data->t7_cfg.active = 20;
2108 data->t7_cfg.idle = 100;
2109 return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
2110 }
2111 }
2112
2113 dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n",
2114 data->t7_cfg.active, data->t7_cfg.idle);
2115 return 0;
2116}
2117
50a77c65
ND
2118static int mxt_configure_objects(struct mxt_data *data,
2119 const struct firmware *cfg)
2120{
2121 struct device *dev = &data->client->dev;
2122 struct mxt_info *info = &data->info;
2123 int error;
2124
7f3884f7
ND
2125 error = mxt_init_t7_power_cfg(data);
2126 if (error) {
2127 dev_err(dev, "Failed to initialize power cfg\n");
2128 return error;
2129 }
2130
50a77c65
ND
2131 if (cfg) {
2132 error = mxt_update_cfg(data, cfg);
2133 if (error)
2134 dev_warn(dev, "Error %d updating config\n", error);
7bed6805 2135 }
4cf51c38 2136
b23157dc
ND
2137 if (data->multitouch) {
2138 error = mxt_initialize_input_device(data);
2139 if (error)
2140 return error;
2141 } else {
2142 dev_warn(dev, "No touch object detected\n");
2143 }
4cf51c38 2144
50a77c65 2145 dev_info(dev,
61dc1aba
ND
2146 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
2147 info->family_id, info->variant_id, info->version >> 4,
2148 info->version & 0xf, info->build, info->object_num);
4cf51c38
JS
2149
2150 return 0;
2151}
2152
b19fc9ec
DK
2153/* Firmware Version is returned as Major.Minor.Build */
2154static ssize_t mxt_fw_version_show(struct device *dev,
2155 struct device_attribute *attr, char *buf)
2156{
2157 struct mxt_data *data = dev_get_drvdata(dev);
2158 struct mxt_info *info = &data->info;
2159 return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
2160 info->version >> 4, info->version & 0xf, info->build);
2161}
2162
2163/* Hardware Version is returned as FamilyID.VariantID */
2164static ssize_t mxt_hw_version_show(struct device *dev,
2165 struct device_attribute *attr, char *buf)
2166{
2167 struct mxt_data *data = dev_get_drvdata(dev);
2168 struct mxt_info *info = &data->info;
2169 return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
2170 info->family_id, info->variant_id);
2171}
2172
794eb67e
DK
2173static ssize_t mxt_show_instance(char *buf, int count,
2174 struct mxt_object *object, int instance,
2175 const u8 *val)
2176{
2177 int i;
2178
1e0c0c5b 2179 if (mxt_obj_instances(object) > 1)
794eb67e
DK
2180 count += scnprintf(buf + count, PAGE_SIZE - count,
2181 "Instance %u\n", instance);
2182
1e0c0c5b 2183 for (i = 0; i < mxt_obj_size(object); i++)
794eb67e
DK
2184 count += scnprintf(buf + count, PAGE_SIZE - count,
2185 "\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
2186 count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
2187
2188 return count;
2189}
2190
7686b108 2191static ssize_t mxt_object_show(struct device *dev,
4cf51c38
JS
2192 struct device_attribute *attr, char *buf)
2193{
7686b108
IV
2194 struct mxt_data *data = dev_get_drvdata(dev);
2195 struct mxt_object *object;
4cf51c38
JS
2196 int count = 0;
2197 int i, j;
2198 int error;
43a91d51 2199 u8 *obuf;
4cf51c38 2200
43a91d51
DK
2201 /* Pre-allocate buffer large enough to hold max sized object. */
2202 obuf = kmalloc(256, GFP_KERNEL);
2203 if (!obuf)
2204 return -ENOMEM;
4cf51c38 2205
43a91d51 2206 error = 0;
4cf51c38
JS
2207 for (i = 0; i < data->info.object_num; i++) {
2208 object = data->object_table + i;
2209
91630955 2210 if (!mxt_object_readable(object->type))
4cf51c38 2211 continue;
4cf51c38 2212
91630955
DK
2213 count += scnprintf(buf + count, PAGE_SIZE - count,
2214 "T%u:\n", object->type);
4cf51c38 2215
1e0c0c5b
DK
2216 for (j = 0; j < mxt_obj_instances(object); j++) {
2217 u16 size = mxt_obj_size(object);
794eb67e 2218 u16 addr = object->start_address + j * size;
43a91d51 2219
794eb67e 2220 error = __mxt_read_reg(data->client, addr, size, obuf);
4cf51c38 2221 if (error)
794eb67e 2222 goto done;
4cf51c38 2223
794eb67e 2224 count = mxt_show_instance(buf, count, object, j, obuf);
4cf51c38 2225 }
4cf51c38
JS
2226 }
2227
794eb67e 2228done:
43a91d51
DK
2229 kfree(obuf);
2230 return error ?: count;
4cf51c38
JS
2231}
2232
f2ac6cb9
ND
2233static int mxt_check_firmware_format(struct device *dev,
2234 const struct firmware *fw)
2235{
2236 unsigned int pos = 0;
2237 char c;
2238
2239 while (pos < fw->size) {
2240 c = *(fw->data + pos);
2241
2242 if (c < '0' || (c > '9' && c < 'A') || c > 'F')
2243 return 0;
2244
2245 pos++;
2246 }
2247
2248 /*
2249 * To convert file try:
2250 * xxd -r -p mXTXXX__APP_VX-X-XX.enc > maxtouch.fw
2251 */
2252 dev_err(dev, "Aborting: firmware file must be in binary format\n");
2253
2254 return -EINVAL;
2255}
2256
7686b108 2257static int mxt_load_fw(struct device *dev, const char *fn)
4cf51c38 2258{
7686b108 2259 struct mxt_data *data = dev_get_drvdata(dev);
4cf51c38
JS
2260 const struct firmware *fw = NULL;
2261 unsigned int frame_size;
2262 unsigned int pos = 0;
f943c74a 2263 unsigned int retry = 0;
f477c758 2264 unsigned int frame = 0;
4cf51c38
JS
2265 int ret;
2266
2267 ret = request_firmware(&fw, fn, dev);
2268 if (ret) {
2269 dev_err(dev, "Unable to open firmware %s\n", fn);
2270 return ret;
2271 }
2272
f2ac6cb9
ND
2273 /* Check for incorrect enc file */
2274 ret = mxt_check_firmware_format(dev, fw);
2275 if (ret)
2276 goto release_firmware;
2277
a9fdd1e6
ND
2278 if (!data->in_bootloader) {
2279 /* Change to the bootloader mode */
2280 data->in_bootloader = true;
d79e7e47 2281
a9fdd1e6
ND
2282 ret = mxt_t6_command(data, MXT_COMMAND_RESET,
2283 MXT_BOOT_VALUE, false);
2284 if (ret)
2285 goto release_firmware;
a4a2ef46 2286
a9fdd1e6 2287 msleep(MXT_RESET_TIME);
8efaa5e5
ND
2288
2289 /* Do not need to scan since we know family ID */
2290 ret = mxt_lookup_bootloader_address(data, 0);
2291 if (ret)
2292 goto release_firmware;
58e4aeee
SW
2293
2294 mxt_free_input_device(data);
2295 mxt_free_object_table(data);
8efaa5e5
ND
2296 } else {
2297 enable_irq(data->irq);
a9fdd1e6 2298 }
4cf51c38 2299
d79e7e47
BL
2300 reinit_completion(&data->bl_completion);
2301
385deb96
ND
2302 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
2303 if (ret) {
2304 /* Bootloader may still be unlocked from previous attempt */
2305 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
2306 if (ret)
2307 goto disable_irq;
2308 } else {
2309 dev_info(dev, "Unlocking bootloader\n");
4cf51c38 2310
385deb96 2311 /* Unlock bootloader */
8efaa5e5 2312 ret = mxt_send_bootloader_cmd(data, true);
385deb96
ND
2313 if (ret)
2314 goto disable_irq;
2315 }
4cf51c38
JS
2316
2317 while (pos < fw->size) {
385deb96 2318 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
4cf51c38 2319 if (ret)
d79e7e47 2320 goto disable_irq;
4cf51c38
JS
2321
2322 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
2323
f943c74a 2324 /* Take account of CRC bytes */
4cf51c38
JS
2325 frame_size += 2;
2326
2327 /* Write one frame to device */
f28a842d
ND
2328 ret = mxt_bootloader_write(data, fw->data + pos, frame_size);
2329 if (ret)
2330 goto disable_irq;
4cf51c38 2331
385deb96 2332 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
f943c74a
ND
2333 if (ret) {
2334 retry++;
2335
2336 /* Back off by 20ms per retry */
2337 msleep(retry * 20);
4cf51c38 2338
f943c74a
ND
2339 if (retry > 20) {
2340 dev_err(dev, "Retry count exceeded\n");
2341 goto disable_irq;
2342 }
2343 } else {
2344 retry = 0;
2345 pos += frame_size;
f477c758 2346 frame++;
f943c74a 2347 }
4cf51c38 2348
f477c758
ND
2349 if (frame % 50 == 0)
2350 dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n",
2351 frame, pos, fw->size);
4cf51c38
JS
2352 }
2353
a0434b75 2354 /* Wait for flash. */
a4a2ef46
IV
2355 ret = mxt_wait_for_completion(data, &data->bl_completion,
2356 MXT_FW_RESET_TIME);
a0434b75
BL
2357 if (ret)
2358 goto disable_irq;
2359
f477c758
ND
2360 dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos);
2361
a0434b75
BL
2362 /*
2363 * Wait for device to reset. Some bootloader versions do not assert
2364 * the CHG line after bootloading has finished, so ignore potential
2365 * errors.
2366 */
a4a2ef46 2367 mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME);
a0434b75 2368
d79e7e47
BL
2369 data->in_bootloader = false;
2370
2371disable_irq:
2372 disable_irq(data->irq);
a4a2ef46 2373release_firmware:
4cf51c38 2374 release_firmware(fw);
4cf51c38
JS
2375 return ret;
2376}
2377
7686b108 2378static ssize_t mxt_update_fw_store(struct device *dev,
4cf51c38
JS
2379 struct device_attribute *attr,
2380 const char *buf, size_t count)
2381{
7686b108 2382 struct mxt_data *data = dev_get_drvdata(dev);
4cf51c38
JS
2383 int error;
2384
7686b108 2385 error = mxt_load_fw(dev, MXT_FW_NAME);
4cf51c38
JS
2386 if (error) {
2387 dev_err(dev, "The firmware update failed(%d)\n", error);
2388 count = error;
2389 } else {
7bed6805
ND
2390 dev_info(dev, "The firmware update succeeded\n");
2391
dd24dcf5 2392 error = mxt_initialize(data);
d79e7e47
BL
2393 if (error)
2394 return error;
2395 }
08960a07 2396
4cf51c38
JS
2397 return count;
2398}
2399
b19fc9ec
DK
2400static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL);
2401static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL);
71b3e938
DK
2402static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
2403static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
4cf51c38 2404
7686b108 2405static struct attribute *mxt_attrs[] = {
b19fc9ec
DK
2406 &dev_attr_fw_version.attr,
2407 &dev_attr_hw_version.attr,
4cf51c38
JS
2408 &dev_attr_object.attr,
2409 &dev_attr_update_fw.attr,
2410 NULL
2411};
2412
7686b108
IV
2413static const struct attribute_group mxt_attr_group = {
2414 .attrs = mxt_attrs,
4cf51c38
JS
2415};
2416
7686b108 2417static void mxt_start(struct mxt_data *data)
4cf51c38 2418{
7f3884f7
ND
2419 switch (data->pdata->suspend_mode) {
2420 case MXT_SUSPEND_T9_CTRL:
2421 mxt_soft_reset(data);
2422
2423 /* Touch enable */
2424 /* 0x83 = SCANEN | RPTEN | ENABLE */
2425 mxt_write_object(data,
2426 MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0x83);
2427 break;
2428
2429 case MXT_SUSPEND_DEEP_SLEEP:
2430 default:
2431 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
2432
2433 /* Recalibrate since chip has been in deep sleep */
2434 mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
2435 break;
2436 }
2437
4cf51c38
JS
2438}
2439
7686b108 2440static void mxt_stop(struct mxt_data *data)
4cf51c38 2441{
7f3884f7
ND
2442 switch (data->pdata->suspend_mode) {
2443 case MXT_SUSPEND_T9_CTRL:
2444 /* Touch disable */
2445 mxt_write_object(data,
2446 MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0);
2447 break;
2448
2449 case MXT_SUSPEND_DEEP_SLEEP:
2450 default:
2451 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
2452 break;
2453 }
4cf51c38
JS
2454}
2455
7686b108 2456static int mxt_input_open(struct input_dev *dev)
4cf51c38 2457{
7686b108 2458 struct mxt_data *data = input_get_drvdata(dev);
4cf51c38 2459
7686b108 2460 mxt_start(data);
4cf51c38
JS
2461
2462 return 0;
2463}
2464
7686b108 2465static void mxt_input_close(struct input_dev *dev)
4cf51c38 2466{
7686b108 2467 struct mxt_data *data = input_get_drvdata(dev);
4cf51c38 2468
7686b108 2469 mxt_stop(data);
4cf51c38
JS
2470}
2471
78188be3 2472#ifdef CONFIG_OF
4f8d8088 2473static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
78188be3
SW
2474{
2475 struct mxt_platform_data *pdata;
2476 u32 *keymap;
2477 u32 keycode;
2478 int proplen, i, ret;
2479
2480 if (!client->dev.of_node)
4f8d8088 2481 return ERR_PTR(-ENOENT);
78188be3
SW
2482
2483 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
2484 if (!pdata)
2485 return ERR_PTR(-ENOMEM);
2486
2487 if (of_find_property(client->dev.of_node, "linux,gpio-keymap",
2488 &proplen)) {
2489 pdata->t19_num_keys = proplen / sizeof(u32);
2490
2491 keymap = devm_kzalloc(&client->dev,
2492 pdata->t19_num_keys * sizeof(keymap[0]),
2493 GFP_KERNEL);
2494 if (!keymap)
2495 return ERR_PTR(-ENOMEM);
2496
2497 for (i = 0; i < pdata->t19_num_keys; i++) {
2498 ret = of_property_read_u32_index(client->dev.of_node,
2499 "linux,gpio-keymap", i, &keycode);
2500 if (ret)
2501 keycode = KEY_RESERVED;
2502
2503 keymap[i] = keycode;
2504 }
2505
2506 pdata->t19_keymap = keymap;
2507 }
2508
7f3884f7
ND
2509 pdata->suspend_mode = MXT_SUSPEND_DEEP_SLEEP;
2510
78188be3
SW
2511 return pdata;
2512}
2513#else
4f8d8088 2514static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
78188be3 2515{
4f8d8088
DT
2516 return ERR_PTR(-ENOENT);
2517}
2518#endif
2519
2520#ifdef CONFIG_ACPI
2521
2522struct mxt_acpi_platform_data {
2523 const char *hid;
2524 struct mxt_platform_data pdata;
2525};
2526
2527static unsigned int samus_touchpad_buttons[] = {
2528 KEY_RESERVED,
2529 KEY_RESERVED,
2530 KEY_RESERVED,
2531 BTN_LEFT
2532};
2533
2534static struct mxt_acpi_platform_data samus_platform_data[] = {
2535 {
2536 /* Touchpad */
2537 .hid = "ATML0000",
2538 .pdata = {
2539 .t19_num_keys = ARRAY_SIZE(samus_touchpad_buttons),
2540 .t19_keymap = samus_touchpad_buttons,
2541 },
2542 },
2543 {
2544 /* Touchscreen */
2545 .hid = "ATML0001",
2546 },
2547 { }
2548};
2549
2550static const struct dmi_system_id mxt_dmi_table[] = {
2551 {
2552 /* 2015 Google Pixel */
2553 .ident = "Chromebook Pixel 2",
2554 .matches = {
2555 DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
2556 DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
2557 },
2558 .driver_data = samus_platform_data,
2559 },
2560 { }
2561};
2562
2563static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
2564{
2565 struct acpi_device *adev;
2566 const struct dmi_system_id *system_id;
2567 const struct mxt_acpi_platform_data *acpi_pdata;
2568
2569 /*
2570 * Ignore ACPI devices representing bootloader mode.
2571 *
2572 * This is a bit of a hack: Google Chromebook BIOS creates ACPI
2573 * devices for both application and bootloader modes, but we are
2574 * interested in application mode only (if device is in bootloader
2575 * mode we'll end up switching into application anyway). So far
2576 * application mode addresses were all above 0x40, so we'll use it
2577 * as a threshold.
2578 */
2579 if (client->addr < 0x40)
2580 return ERR_PTR(-ENXIO);
2581
2582 adev = ACPI_COMPANION(&client->dev);
2583 if (!adev)
2584 return ERR_PTR(-ENOENT);
2585
2586 system_id = dmi_first_match(mxt_dmi_table);
2587 if (!system_id)
2588 return ERR_PTR(-ENOENT);
2589
2590 acpi_pdata = system_id->driver_data;
2591 if (!acpi_pdata)
2592 return ERR_PTR(-ENOENT);
2593
2594 while (acpi_pdata->hid) {
2595 if (!strcmp(acpi_device_hid(adev), acpi_pdata->hid))
2596 return &acpi_pdata->pdata;
2597
2598 acpi_pdata++;
2599 }
2600
2601 return ERR_PTR(-ENOENT);
2602}
2603#else
2604static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
2605{
2606 return ERR_PTR(-ENOENT);
78188be3
SW
2607}
2608#endif
2609
4f8d8088
DT
2610static const struct mxt_platform_data *
2611mxt_get_platform_data(struct i2c_client *client)
2612{
2613 const struct mxt_platform_data *pdata;
2614
2615 pdata = dev_get_platdata(&client->dev);
2616 if (pdata)
2617 return pdata;
2618
2619 pdata = mxt_parse_dt(client);
2620 if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
2621 return pdata;
2622
2623 pdata = mxt_parse_acpi(client);
2624 if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
2625 return pdata;
2626
2627 dev_err(&client->dev, "No platform data specified\n");
2628 return ERR_PTR(-EINVAL);
2629}
2630
78188be3 2631static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
4cf51c38 2632{
7686b108 2633 struct mxt_data *data;
78188be3 2634 const struct mxt_platform_data *pdata;
4cf51c38
JS
2635 int error;
2636
4f8d8088
DT
2637 pdata = mxt_get_platform_data(client);
2638 if (IS_ERR(pdata))
2639 return PTR_ERR(pdata);
4cf51c38 2640
7686b108 2641 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
7a53d609 2642 if (!data) {
4cf51c38 2643 dev_err(&client->dev, "Failed to allocate memory\n");
7a53d609 2644 return -ENOMEM;
4cf51c38
JS
2645 }
2646
ec02ac2b
DK
2647 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
2648 client->adapter->nr, client->addr);
22dfab7f 2649
910d8051 2650 data->client = client;
910d8051
JS
2651 data->pdata = pdata;
2652 data->irq = client->irq;
7a53d609 2653 i2c_set_clientdata(client, data);
910d8051 2654
d79e7e47 2655 init_completion(&data->bl_completion);
a4a2ef46 2656 init_completion(&data->reset_completion);
c3f78043 2657 init_completion(&data->crc_completion);
d79e7e47 2658
dd24dcf5
ND
2659 error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
2660 pdata->irqflags | IRQF_ONESHOT,
2661 client->name, data);
2662 if (error) {
2663 dev_err(&client->dev, "Failed to register interrupt\n");
2664 goto err_free_mem;
2665 }
2666
2667 disable_irq(client->irq);
2668
cb159115
DK
2669 error = mxt_initialize(data);
2670 if (error)
7a53d609 2671 goto err_free_irq;
4cf51c38 2672
7686b108 2673 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
7bed6805
ND
2674 if (error) {
2675 dev_err(&client->dev, "Failure %d creating sysfs group\n",
2676 error);
7a53d609 2677 goto err_free_object;
7bed6805 2678 }
4cf51c38
JS
2679
2680 return 0;
2681
4cf51c38 2682err_free_object:
58e4aeee 2683 mxt_free_input_device(data);
5f3f9bc2 2684 mxt_free_object_table(data);
dd24dcf5
ND
2685err_free_irq:
2686 free_irq(client->irq, data);
4cf51c38 2687err_free_mem:
4cf51c38
JS
2688 kfree(data);
2689 return error;
2690}
2691
e2619cf7 2692static int mxt_remove(struct i2c_client *client)
4cf51c38 2693{
7686b108 2694 struct mxt_data *data = i2c_get_clientdata(client);
4cf51c38 2695
7686b108 2696 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
4cf51c38 2697 free_irq(data->irq, data);
58e4aeee 2698 mxt_free_input_device(data);
5f3f9bc2 2699 mxt_free_object_table(data);
4cf51c38
JS
2700 kfree(data);
2701
2702 return 0;
2703}
2704
02b6a58b 2705static int __maybe_unused mxt_suspend(struct device *dev)
4cf51c38 2706{
8b5fce06 2707 struct i2c_client *client = to_i2c_client(dev);
7686b108 2708 struct mxt_data *data = i2c_get_clientdata(client);
4cf51c38
JS
2709 struct input_dev *input_dev = data->input_dev;
2710
2711 mutex_lock(&input_dev->mutex);
2712
2713 if (input_dev->users)
7686b108 2714 mxt_stop(data);
4cf51c38
JS
2715
2716 mutex_unlock(&input_dev->mutex);
2717
2718 return 0;
2719}
2720
02b6a58b 2721static int __maybe_unused mxt_resume(struct device *dev)
4cf51c38 2722{
8b5fce06 2723 struct i2c_client *client = to_i2c_client(dev);
7686b108 2724 struct mxt_data *data = i2c_get_clientdata(client);
4cf51c38
JS
2725 struct input_dev *input_dev = data->input_dev;
2726
4cf51c38
JS
2727 mutex_lock(&input_dev->mutex);
2728
2729 if (input_dev->users)
7686b108 2730 mxt_start(data);
4cf51c38
JS
2731
2732 mutex_unlock(&input_dev->mutex);
2733
2734 return 0;
2735}
4cf51c38 2736
3a73c816
DK
2737static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
2738
78188be3
SW
2739static const struct of_device_id mxt_of_match[] = {
2740 { .compatible = "atmel,maxtouch", },
2741 {},
2742};
2743MODULE_DEVICE_TABLE(of, mxt_of_match);
2744
4f8d8088
DT
2745#ifdef CONFIG_ACPI
2746static const struct acpi_device_id mxt_acpi_id[] = {
2747 { "ATML0000", 0 }, /* Touchpad */
2748 { "ATML0001", 0 }, /* Touchscreen */
2749 { }
2750};
2751MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
2752#endif
2753
7686b108 2754static const struct i2c_device_id mxt_id[] = {
4cf51c38 2755 { "qt602240_ts", 0 },
7686b108 2756 { "atmel_mxt_ts", 0 },
22dfab7f 2757 { "atmel_mxt_tp", 0 },
46ee2a05 2758 { "mXT224", 0 },
4cf51c38
JS
2759 { }
2760};
7686b108 2761MODULE_DEVICE_TABLE(i2c, mxt_id);
4cf51c38 2762
7686b108 2763static struct i2c_driver mxt_driver = {
4cf51c38 2764 .driver = {
7686b108 2765 .name = "atmel_mxt_ts",
78188be3 2766 .of_match_table = of_match_ptr(mxt_of_match),
4f8d8088 2767 .acpi_match_table = ACPI_PTR(mxt_acpi_id),
7686b108 2768 .pm = &mxt_pm_ops,
4cf51c38 2769 },
7686b108 2770 .probe = mxt_probe,
1cb0aa88 2771 .remove = mxt_remove,
7686b108 2772 .id_table = mxt_id,
4cf51c38
JS
2773};
2774
1b92c1cf 2775module_i2c_driver(mxt_driver);
4cf51c38
JS
2776
2777/* Module information */
2778MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
7686b108 2779MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
4cf51c38 2780MODULE_LICENSE("GPL");
This page took 0.273804 seconds and 5 git commands to generate.