1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Elan Microelectronics touch panels with I2C interface 4 * 5 * Copyright (C) 2014 Elan Microelectronics Corporation. 6 * Scott Liu <scott.liu@emc.com.tw> 7 * 8 * This code is partly based on hid-multitouch.c: 9 * 10 * Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr> 11 * Copyright (c) 2010-2012 Benjamin Tissoires <benjamin.tissoires@gmail.com> 12 * Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France 13 * 14 * This code is partly based on i2c-hid.c: 15 * 16 * Copyright (c) 2012 Benjamin Tissoires <benjamin.tissoires@gmail.com> 17 * Copyright (c) 2012 Ecole Nationale de l'Aviation Civile, France 18 * Copyright (c) 2012 Red Hat, Inc 19 */ 20 21 22 #include <linux/bits.h> 23 #include <linux/module.h> 24 #include <linux/input.h> 25 #include <linux/interrupt.h> 26 #include <linux/irq.h> 27 #include <linux/platform_device.h> 28 #include <linux/async.h> 29 #include <linux/i2c.h> 30 #include <linux/delay.h> 31 #include <linux/uaccess.h> 32 #include <linux/buffer_head.h> 33 #include <linux/slab.h> 34 #include <linux/firmware.h> 35 #include <linux/input/mt.h> 36 #include <linux/input/touchscreen.h> 37 #include <linux/acpi.h> 38 #include <linux/of.h> 39 #include <linux/pm_wakeirq.h> 40 #include <linux/gpio/consumer.h> 41 #include <linux/regulator/consumer.h> 42 #include <linux/uuid.h> 43 #include <linux/unaligned.h> 44 45 /* Device, Driver information */ 46 #define DEVICE_NAME "elants_i2c" 47 48 /* Convert from rows or columns into resolution */ 49 #define ELAN_TS_RESOLUTION(n, m) (((n) - 1) * (m)) 50 51 /* FW header data */ 52 #define HEADER_SIZE 4 53 #define FW_HDR_TYPE 0 54 #define FW_HDR_COUNT 1 55 #define FW_HDR_LENGTH 2 56 57 /* Buffer mode Queue Header information */ 58 #define QUEUE_HEADER_SINGLE 0x62 59 #define QUEUE_HEADER_NORMAL 0X63 60 #define QUEUE_HEADER_WAIT 0x64 61 #define QUEUE_HEADER_NORMAL2 0x66 62 63 /* Command header definition */ 64 #define CMD_HEADER_WRITE 0x54 65 #define CMD_HEADER_READ 0x53 66 #define CMD_HEADER_6B_READ 0x5B 67 #define CMD_HEADER_ROM_READ 0x96 68 #define CMD_HEADER_RESP 0x52 69 #define CMD_HEADER_6B_RESP 0x9B 70 #define CMD_HEADER_ROM_RESP 0x95 71 #define CMD_HEADER_HELLO 0x55 72 #define CMD_HEADER_REK 0x66 73 74 /* FW position data */ 75 #define PACKET_SIZE_OLD 40 76 #define PACKET_SIZE 55 77 #define MAX_CONTACT_NUM 10 78 #define FW_POS_HEADER 0 79 #define FW_POS_STATE 1 80 #define FW_POS_TOTAL 2 81 #define FW_POS_XY 3 82 #define FW_POS_TOOL_TYPE 33 83 #define FW_POS_CHECKSUM 34 84 #define FW_POS_WIDTH 35 85 #define FW_POS_PRESSURE 45 86 87 #define HEADER_REPORT_10_FINGER 0x62 88 89 /* Header (4 bytes) plus 3 full 10-finger packets */ 90 #define MAX_PACKET_SIZE 169 91 92 #define BOOT_TIME_DELAY_MS 50 93 94 /* FW read command, 0x53 0x?? 0x0, 0x01 */ 95 #define E_ELAN_INFO_FW_VER 0x00 96 #define E_ELAN_INFO_BC_VER 0x10 97 #define E_ELAN_INFO_X_RES 0x60 98 #define E_ELAN_INFO_Y_RES 0x63 99 #define E_ELAN_INFO_REK 0xD0 100 #define E_ELAN_INFO_TEST_VER 0xE0 101 #define E_ELAN_INFO_FW_ID 0xF0 102 #define E_INFO_OSR 0xD6 103 #define E_INFO_PHY_SCAN 0xD7 104 #define E_INFO_PHY_DRIVER 0xD8 105 106 /* FW write command, 0x54 0x?? 0x0, 0x01 */ 107 #define E_POWER_STATE_SLEEP 0x50 108 #define E_POWER_STATE_RESUME 0x58 109 110 #define MAX_RETRIES 3 111 #define MAX_FW_UPDATE_RETRIES 30 112 113 #define ELAN_FW_PAGESIZE 132 114 115 /* calibration timeout definition */ 116 #define ELAN_CALI_TIMEOUT_MSEC 12000 117 118 #define ELAN_POWERON_DELAY_USEC 5000 119 #define ELAN_RESET_DELAY_MSEC 20 120 121 /* FW boot code version */ 122 #define BC_VER_H_BYTE_FOR_EKTH3900x1_I2C 0x72 123 #define BC_VER_H_BYTE_FOR_EKTH3900x2_I2C 0x82 124 #define BC_VER_H_BYTE_FOR_EKTH3900x3_I2C 0x92 125 #define BC_VER_H_BYTE_FOR_EKTH5312x1_I2C 0x6D 126 #define BC_VER_H_BYTE_FOR_EKTH5312x2_I2C 0x6E 127 #define BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C 0x77 128 #define BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C 0x78 129 #define BC_VER_H_BYTE_FOR_EKTH5312x1_I2C_USB 0x67 130 #define BC_VER_H_BYTE_FOR_EKTH5312x2_I2C_USB 0x68 131 #define BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C_USB 0x74 132 #define BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C_USB 0x75 133 134 enum elants_chip_id { 135 EKTH3500, 136 EKTF3624, 137 }; 138 139 enum elants_state { 140 ELAN_STATE_NORMAL, 141 ELAN_WAIT_QUEUE_HEADER, 142 ELAN_WAIT_RECALIBRATION, 143 }; 144 145 enum elants_iap_mode { 146 ELAN_IAP_OPERATIONAL, 147 ELAN_IAP_RECOVERY, 148 }; 149 150 /* struct elants_data - represents state of Elan touchscreen device */ 151 struct elants_data { 152 struct i2c_client *client; 153 struct input_dev *input; 154 155 struct regulator *vcc33; 156 struct regulator *vccio; 157 struct gpio_desc *reset_gpio; 158 159 u16 fw_version; 160 u8 test_version; 161 u8 solution_version; 162 u8 bc_version; 163 u8 iap_version; 164 u16 hw_version; 165 u8 major_res; 166 unsigned int x_res; /* resolution in units/mm */ 167 unsigned int y_res; 168 unsigned int x_max; 169 unsigned int y_max; 170 unsigned int phy_x; 171 unsigned int phy_y; 172 struct touchscreen_properties prop; 173 174 enum elants_state state; 175 enum elants_chip_id chip_id; 176 enum elants_iap_mode iap_mode; 177 178 /* Guards against concurrent access to the device via sysfs */ 179 struct mutex sysfs_mutex; 180 181 u8 cmd_resp[HEADER_SIZE]; 182 struct completion cmd_done; 183 184 bool keep_power_in_suspend; 185 186 /* Must be last to be used for DMA operations */ 187 u8 buf[MAX_PACKET_SIZE] ____cacheline_aligned; 188 }; 189 190 static int elants_i2c_send(struct i2c_client *client, 191 const void *data, size_t size) 192 { 193 int ret; 194 195 ret = i2c_master_send(client, data, size); 196 if (ret == size) 197 return 0; 198 199 if (ret >= 0) 200 ret = -EIO; 201 202 dev_err(&client->dev, "%s failed (%*ph): %d\n", 203 __func__, (int)size, data, ret); 204 205 return ret; 206 } 207 208 static int elants_i2c_read(struct i2c_client *client, void *data, size_t size) 209 { 210 int ret; 211 212 ret = i2c_master_recv(client, data, size); 213 if (ret == size) 214 return 0; 215 216 if (ret >= 0) 217 ret = -EIO; 218 219 dev_err(&client->dev, "%s failed: %d\n", __func__, ret); 220 221 return ret; 222 } 223 224 static int elants_i2c_execute_command(struct i2c_client *client, 225 const u8 *cmd, size_t cmd_size, 226 u8 *resp, size_t resp_size, 227 int retries, const char *cmd_name) 228 { 229 struct i2c_msg msgs[2]; 230 int ret; 231 u8 expected_response; 232 233 switch (cmd[0]) { 234 case CMD_HEADER_READ: 235 expected_response = CMD_HEADER_RESP; 236 break; 237 238 case CMD_HEADER_6B_READ: 239 expected_response = CMD_HEADER_6B_RESP; 240 break; 241 242 case CMD_HEADER_ROM_READ: 243 expected_response = CMD_HEADER_ROM_RESP; 244 break; 245 246 default: 247 dev_err(&client->dev, "(%s): invalid command: %*ph\n", 248 cmd_name, (int)cmd_size, cmd); 249 return -EINVAL; 250 } 251 252 for (;;) { 253 msgs[0].addr = client->addr; 254 msgs[0].flags = client->flags & I2C_M_TEN; 255 msgs[0].len = cmd_size; 256 msgs[0].buf = (u8 *)cmd; 257 258 msgs[1].addr = client->addr; 259 msgs[1].flags = (client->flags & I2C_M_TEN) | I2C_M_RD; 260 msgs[1].flags |= I2C_M_RD; 261 msgs[1].len = resp_size; 262 msgs[1].buf = resp; 263 264 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 265 if (ret < 0) { 266 if (--retries > 0) { 267 dev_dbg(&client->dev, 268 "(%s) I2C transfer failed: %pe (retrying)\n", 269 cmd_name, ERR_PTR(ret)); 270 continue; 271 } 272 273 dev_err(&client->dev, 274 "(%s) I2C transfer failed: %pe\n", 275 cmd_name, ERR_PTR(ret)); 276 return ret; 277 } 278 279 if (ret != ARRAY_SIZE(msgs) || 280 resp[FW_HDR_TYPE] != expected_response) { 281 if (--retries > 0) { 282 dev_dbg(&client->dev, 283 "(%s) unexpected response: %*ph (retrying)\n", 284 cmd_name, ret, resp); 285 continue; 286 } 287 288 dev_err(&client->dev, 289 "(%s) unexpected response: %*ph\n", 290 cmd_name, ret, resp); 291 return -EIO; 292 } 293 294 return 0; 295 } 296 } 297 298 static int elants_i2c_calibrate(struct elants_data *ts) 299 { 300 struct i2c_client *client = ts->client; 301 int ret, error; 302 static const u8 w_flashkey[] = { CMD_HEADER_WRITE, 0xC0, 0xE1, 0x5A }; 303 static const u8 rek[] = { CMD_HEADER_WRITE, 0x29, 0x00, 0x01 }; 304 static const u8 rek_resp[] = { CMD_HEADER_REK, 0x66, 0x66, 0x66 }; 305 306 scoped_guard(disable_irq, &client->irq) { 307 ts->state = ELAN_WAIT_RECALIBRATION; 308 reinit_completion(&ts->cmd_done); 309 310 elants_i2c_send(client, w_flashkey, sizeof(w_flashkey)); 311 elants_i2c_send(client, rek, sizeof(rek)); 312 } 313 314 ret = wait_for_completion_interruptible_timeout(&ts->cmd_done, 315 msecs_to_jiffies(ELAN_CALI_TIMEOUT_MSEC)); 316 317 ts->state = ELAN_STATE_NORMAL; 318 319 if (ret <= 0) { 320 error = ret < 0 ? ret : -ETIMEDOUT; 321 dev_err(&client->dev, 322 "error while waiting for calibration to complete: %d\n", 323 error); 324 return error; 325 } 326 327 if (memcmp(rek_resp, ts->cmd_resp, sizeof(rek_resp))) { 328 dev_err(&client->dev, 329 "unexpected calibration response: %*ph\n", 330 (int)sizeof(ts->cmd_resp), ts->cmd_resp); 331 return -EINVAL; 332 } 333 334 return 0; 335 } 336 337 static int elants_i2c_sw_reset(struct i2c_client *client) 338 { 339 const u8 soft_rst_cmd[] = { 0x77, 0x77, 0x77, 0x77 }; 340 int error; 341 342 error = elants_i2c_send(client, soft_rst_cmd, 343 sizeof(soft_rst_cmd)); 344 if (error) { 345 dev_err(&client->dev, "software reset failed: %d\n", error); 346 return error; 347 } 348 349 /* 350 * We should wait at least 10 msec (but no more than 40) before 351 * sending fastboot or IAP command to the device. 352 */ 353 msleep(30); 354 355 return 0; 356 } 357 358 static u16 elants_i2c_parse_version(u8 *buf) 359 { 360 return get_unaligned_be32(buf) >> 4; 361 } 362 363 static int elants_i2c_query_hw_version(struct elants_data *ts) 364 { 365 struct i2c_client *client = ts->client; 366 int retry_cnt = MAX_RETRIES; 367 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_ID, 0x00, 0x01 }; 368 u8 resp[HEADER_SIZE]; 369 int error; 370 371 while (retry_cnt--) { 372 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 373 resp, sizeof(resp), 1, 374 "read fw id"); 375 if (error) 376 return error; 377 378 ts->hw_version = elants_i2c_parse_version(resp); 379 if (ts->hw_version != 0xffff) 380 return 0; 381 } 382 383 dev_err(&client->dev, "Invalid fw id: %#04x\n", ts->hw_version); 384 385 return -EINVAL; 386 } 387 388 static int elants_i2c_query_fw_version(struct elants_data *ts) 389 { 390 struct i2c_client *client = ts->client; 391 int retry_cnt = MAX_RETRIES; 392 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_VER, 0x00, 0x01 }; 393 u8 resp[HEADER_SIZE]; 394 int error; 395 396 while (retry_cnt--) { 397 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 398 resp, sizeof(resp), 1, 399 "read fw version"); 400 if (error) 401 return error; 402 403 ts->fw_version = elants_i2c_parse_version(resp); 404 if (ts->fw_version != 0x0000 && ts->fw_version != 0xffff) 405 return 0; 406 407 dev_dbg(&client->dev, "(read fw version) resp %*phC\n", 408 (int)sizeof(resp), resp); 409 } 410 411 dev_err(&client->dev, "Invalid fw ver: %#04x\n", ts->fw_version); 412 413 return -EINVAL; 414 } 415 416 static int elants_i2c_query_test_version(struct elants_data *ts) 417 { 418 struct i2c_client *client = ts->client; 419 int error; 420 u16 version; 421 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_TEST_VER, 0x00, 0x01 }; 422 u8 resp[HEADER_SIZE]; 423 424 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 425 resp, sizeof(resp), MAX_RETRIES, 426 "read test version"); 427 if (error) { 428 dev_err(&client->dev, "Failed to read test version\n"); 429 return error; 430 } 431 432 version = elants_i2c_parse_version(resp); 433 ts->test_version = version >> 8; 434 ts->solution_version = version & 0xff; 435 436 return 0; 437 } 438 439 static int elants_i2c_query_bc_version(struct elants_data *ts) 440 { 441 struct i2c_client *client = ts->client; 442 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_BC_VER, 0x00, 0x01 }; 443 u8 resp[HEADER_SIZE]; 444 u16 version; 445 int error; 446 447 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 448 resp, sizeof(resp), 1, 449 "read BC version"); 450 if (error) 451 return error; 452 453 version = elants_i2c_parse_version(resp); 454 ts->bc_version = version >> 8; 455 ts->iap_version = version & 0xff; 456 457 return 0; 458 } 459 460 static int elants_i2c_query_ts_info_ektf(struct elants_data *ts) 461 { 462 struct i2c_client *client = ts->client; 463 int error; 464 u8 resp[4]; 465 u16 phy_x, phy_y; 466 const u8 get_xres_cmd[] = { 467 CMD_HEADER_READ, E_ELAN_INFO_X_RES, 0x00, 0x00 468 }; 469 const u8 get_yres_cmd[] = { 470 CMD_HEADER_READ, E_ELAN_INFO_Y_RES, 0x00, 0x00 471 }; 472 473 /* Get X/Y size in mm */ 474 error = elants_i2c_execute_command(client, get_xres_cmd, 475 sizeof(get_xres_cmd), 476 resp, sizeof(resp), 1, 477 "get X size"); 478 if (error) 479 return error; 480 481 phy_x = resp[2] | ((resp[3] & 0xF0) << 4); 482 483 error = elants_i2c_execute_command(client, get_yres_cmd, 484 sizeof(get_yres_cmd), 485 resp, sizeof(resp), 1, 486 "get Y size"); 487 if (error) 488 return error; 489 490 phy_y = resp[2] | ((resp[3] & 0xF0) << 4); 491 492 dev_dbg(&client->dev, "phy_x=%d, phy_y=%d\n", phy_x, phy_y); 493 494 ts->phy_x = phy_x; 495 ts->phy_y = phy_y; 496 497 /* eKTF doesn't report max size, set it to default values */ 498 ts->x_max = 2240 - 1; 499 ts->y_max = 1408 - 1; 500 501 return 0; 502 } 503 504 static int elants_i2c_query_ts_info_ekth(struct elants_data *ts) 505 { 506 struct i2c_client *client = ts->client; 507 int error; 508 u8 resp[17]; 509 u16 phy_x, phy_y, rows, cols, osr; 510 const u8 get_resolution_cmd[] = { 511 CMD_HEADER_6B_READ, 0x00, 0x00, 0x00, 0x00, 0x00 512 }; 513 const u8 get_osr_cmd[] = { 514 CMD_HEADER_READ, E_INFO_OSR, 0x00, 0x01 515 }; 516 const u8 get_physical_scan_cmd[] = { 517 CMD_HEADER_READ, E_INFO_PHY_SCAN, 0x00, 0x01 518 }; 519 const u8 get_physical_drive_cmd[] = { 520 CMD_HEADER_READ, E_INFO_PHY_DRIVER, 0x00, 0x01 521 }; 522 523 /* Get trace number */ 524 error = elants_i2c_execute_command(client, 525 get_resolution_cmd, 526 sizeof(get_resolution_cmd), 527 resp, sizeof(resp), 1, 528 "get resolution"); 529 if (error) 530 return error; 531 532 rows = resp[2] + resp[6] + resp[10]; 533 cols = resp[3] + resp[7] + resp[11]; 534 535 /* Get report resolution value of ABS_MT_TOUCH_MAJOR */ 536 ts->major_res = resp[16]; 537 538 /* Process mm_to_pixel information */ 539 error = elants_i2c_execute_command(client, 540 get_osr_cmd, sizeof(get_osr_cmd), 541 resp, sizeof(resp), 1, "get osr"); 542 if (error) 543 return error; 544 545 osr = resp[3]; 546 547 error = elants_i2c_execute_command(client, 548 get_physical_scan_cmd, 549 sizeof(get_physical_scan_cmd), 550 resp, sizeof(resp), 1, 551 "get physical scan"); 552 if (error) 553 return error; 554 555 phy_x = get_unaligned_be16(&resp[2]); 556 557 error = elants_i2c_execute_command(client, 558 get_physical_drive_cmd, 559 sizeof(get_physical_drive_cmd), 560 resp, sizeof(resp), 1, 561 "get physical drive"); 562 if (error) 563 return error; 564 565 phy_y = get_unaligned_be16(&resp[2]); 566 567 dev_dbg(&client->dev, "phy_x=%d, phy_y=%d\n", phy_x, phy_y); 568 569 if (rows == 0 || cols == 0 || osr == 0) { 570 dev_warn(&client->dev, 571 "invalid trace number data: %d, %d, %d\n", 572 rows, cols, osr); 573 } else { 574 /* translate trace number to TS resolution */ 575 ts->x_max = ELAN_TS_RESOLUTION(rows, osr); 576 ts->x_res = DIV_ROUND_CLOSEST(ts->x_max, phy_x); 577 ts->y_max = ELAN_TS_RESOLUTION(cols, osr); 578 ts->y_res = DIV_ROUND_CLOSEST(ts->y_max, phy_y); 579 ts->phy_x = phy_x; 580 ts->phy_y = phy_y; 581 } 582 583 return 0; 584 } 585 586 static int elants_i2c_fastboot(struct i2c_client *client) 587 { 588 const u8 boot_cmd[] = { 0x4D, 0x61, 0x69, 0x6E }; 589 int error; 590 591 error = elants_i2c_send(client, boot_cmd, sizeof(boot_cmd)); 592 if (error) { 593 dev_err(&client->dev, "boot failed: %d\n", error); 594 return error; 595 } 596 597 dev_dbg(&client->dev, "boot success -- 0x%x\n", client->addr); 598 return 0; 599 } 600 601 static int elants_i2c_initialize(struct elants_data *ts) 602 { 603 struct i2c_client *client = ts->client; 604 int error, error2, retry_cnt; 605 const u8 hello_packet[] = { 0x55, 0x55, 0x55, 0x55 }; 606 const u8 recov_packet[] = { 0x55, 0x55, 0x80, 0x80 }; 607 u8 buf[HEADER_SIZE]; 608 609 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) { 610 error = elants_i2c_sw_reset(client); 611 if (error) { 612 /* Continue initializing if it's the last try */ 613 if (retry_cnt < MAX_RETRIES - 1) 614 continue; 615 } 616 617 error = elants_i2c_fastboot(client); 618 if (error) { 619 /* Continue initializing if it's the last try */ 620 if (retry_cnt < MAX_RETRIES - 1) 621 continue; 622 } 623 624 /* Wait for Hello packet */ 625 msleep(BOOT_TIME_DELAY_MS); 626 627 error = elants_i2c_read(client, buf, sizeof(buf)); 628 if (error) { 629 dev_err(&client->dev, 630 "failed to read 'hello' packet: %d\n", error); 631 } else if (!memcmp(buf, hello_packet, sizeof(hello_packet))) { 632 ts->iap_mode = ELAN_IAP_OPERATIONAL; 633 break; 634 } else if (!memcmp(buf, recov_packet, sizeof(recov_packet))) { 635 /* 636 * Setting error code will mark device 637 * in recovery mode below. 638 */ 639 error = -EIO; 640 break; 641 } else { 642 error = -EINVAL; 643 dev_err(&client->dev, 644 "invalid 'hello' packet: %*ph\n", 645 (int)sizeof(buf), buf); 646 } 647 } 648 649 /* hw version is available even if device in recovery state */ 650 error2 = elants_i2c_query_hw_version(ts); 651 if (!error2) 652 error2 = elants_i2c_query_bc_version(ts); 653 if (!error) 654 error = error2; 655 656 if (!error) 657 error = elants_i2c_query_fw_version(ts); 658 if (!error) 659 error = elants_i2c_query_test_version(ts); 660 661 switch (ts->chip_id) { 662 case EKTH3500: 663 if (!error) 664 error = elants_i2c_query_ts_info_ekth(ts); 665 break; 666 case EKTF3624: 667 if (!error) 668 error = elants_i2c_query_ts_info_ektf(ts); 669 break; 670 default: 671 BUG(); 672 } 673 674 if (error) 675 ts->iap_mode = ELAN_IAP_RECOVERY; 676 677 return 0; 678 } 679 680 /* 681 * Firmware update interface. 682 */ 683 684 static int elants_i2c_fw_write_page(struct i2c_client *client, 685 const void *page) 686 { 687 const u8 ack_ok[] = { 0xaa, 0xaa }; 688 u8 buf[2]; 689 int retry; 690 int error; 691 692 for (retry = 0; retry < MAX_FW_UPDATE_RETRIES; retry++) { 693 error = elants_i2c_send(client, page, ELAN_FW_PAGESIZE); 694 if (error) { 695 dev_err(&client->dev, 696 "IAP Write Page failed: %d\n", error); 697 continue; 698 } 699 700 error = elants_i2c_read(client, buf, 2); 701 if (error) { 702 dev_err(&client->dev, 703 "IAP Ack read failed: %d\n", error); 704 return error; 705 } 706 707 if (!memcmp(buf, ack_ok, sizeof(ack_ok))) 708 return 0; 709 710 error = -EIO; 711 dev_err(&client->dev, 712 "IAP Get Ack Error [%02x:%02x]\n", 713 buf[0], buf[1]); 714 } 715 716 return error; 717 } 718 719 static int elants_i2c_validate_remark_id(struct elants_data *ts, 720 const struct firmware *fw) 721 { 722 struct i2c_client *client = ts->client; 723 int error; 724 const u8 cmd[] = { CMD_HEADER_ROM_READ, 0x80, 0x1F, 0x00, 0x00, 0x21 }; 725 u8 resp[6] = { 0 }; 726 u16 ts_remark_id = 0; 727 u16 fw_remark_id = 0; 728 729 /* Compare TS Remark ID and FW Remark ID */ 730 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 731 resp, sizeof(resp), 732 1, "read Remark ID"); 733 if (error) 734 return error; 735 736 ts_remark_id = get_unaligned_be16(&resp[3]); 737 738 fw_remark_id = get_unaligned_le16(&fw->data[fw->size - 4]); 739 740 if (fw_remark_id != ts_remark_id) { 741 dev_err(&client->dev, 742 "Remark ID Mismatched: ts_remark_id=0x%04x, fw_remark_id=0x%04x.\n", 743 ts_remark_id, fw_remark_id); 744 return -EINVAL; 745 } 746 747 return 0; 748 } 749 750 static bool elants_i2c_should_check_remark_id(struct elants_data *ts) 751 { 752 struct i2c_client *client = ts->client; 753 const u8 bootcode_version = ts->iap_version; 754 bool check; 755 756 /* I2C eKTH3900 and eKTH5312 are NOT support Remark ID */ 757 if ((bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x1_I2C) || 758 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x2_I2C) || 759 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x3_I2C) || 760 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x1_I2C) || 761 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x2_I2C) || 762 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C) || 763 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C) || 764 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x1_I2C_USB) || 765 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x2_I2C_USB) || 766 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C_USB) || 767 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C_USB)) { 768 dev_dbg(&client->dev, 769 "eKTH3900/eKTH5312(0x%02x) are not support remark id\n", 770 bootcode_version); 771 check = false; 772 } else if (bootcode_version >= 0x60) { 773 check = true; 774 } else { 775 check = false; 776 } 777 778 return check; 779 } 780 781 static int elants_i2c_do_update_firmware(struct i2c_client *client, 782 const struct firmware *fw, 783 bool force) 784 { 785 struct elants_data *ts = i2c_get_clientdata(client); 786 const u8 enter_iap[] = { 0x45, 0x49, 0x41, 0x50 }; 787 const u8 enter_iap2[] = { 0x54, 0x00, 0x12, 0x34 }; 788 const u8 iap_ack[] = { 0x55, 0xaa, 0x33, 0xcc }; 789 const u8 close_idle[] = { 0x54, 0x2c, 0x01, 0x01 }; 790 u8 buf[HEADER_SIZE]; 791 u16 send_id; 792 int page, n_fw_pages; 793 int error; 794 bool check_remark_id = elants_i2c_should_check_remark_id(ts); 795 796 /* Recovery mode detection! */ 797 if (force) { 798 dev_dbg(&client->dev, "Recovery mode procedure\n"); 799 800 if (check_remark_id) { 801 error = elants_i2c_validate_remark_id(ts, fw); 802 if (error) 803 return error; 804 } 805 806 error = elants_i2c_send(client, enter_iap2, sizeof(enter_iap2)); 807 if (error) { 808 dev_err(&client->dev, "failed to enter IAP mode: %d\n", 809 error); 810 return error; 811 } 812 } else { 813 /* Start IAP Procedure */ 814 dev_dbg(&client->dev, "Normal IAP procedure\n"); 815 816 /* Close idle mode */ 817 error = elants_i2c_send(client, close_idle, sizeof(close_idle)); 818 if (error) 819 dev_err(&client->dev, "Failed close idle: %d\n", error); 820 msleep(60); 821 822 elants_i2c_sw_reset(client); 823 msleep(20); 824 825 if (check_remark_id) { 826 error = elants_i2c_validate_remark_id(ts, fw); 827 if (error) 828 return error; 829 } 830 831 error = elants_i2c_send(client, enter_iap, sizeof(enter_iap)); 832 if (error) { 833 dev_err(&client->dev, "failed to enter IAP mode: %d\n", 834 error); 835 return error; 836 } 837 } 838 839 msleep(20); 840 841 /* check IAP state */ 842 error = elants_i2c_read(client, buf, 4); 843 if (error) { 844 dev_err(&client->dev, 845 "failed to read IAP acknowledgement: %d\n", 846 error); 847 return error; 848 } 849 850 if (memcmp(buf, iap_ack, sizeof(iap_ack))) { 851 dev_err(&client->dev, 852 "failed to enter IAP: %*ph (expected %*ph)\n", 853 (int)sizeof(buf), buf, (int)sizeof(iap_ack), iap_ack); 854 return -EIO; 855 } 856 857 dev_info(&client->dev, "successfully entered IAP mode"); 858 859 send_id = client->addr; 860 error = elants_i2c_send(client, &send_id, 1); 861 if (error) { 862 dev_err(&client->dev, "sending dummy byte failed: %d\n", 863 error); 864 return error; 865 } 866 867 /* Clear the last page of Master */ 868 error = elants_i2c_send(client, fw->data, ELAN_FW_PAGESIZE); 869 if (error) { 870 dev_err(&client->dev, "clearing of the last page failed: %d\n", 871 error); 872 return error; 873 } 874 875 error = elants_i2c_read(client, buf, 2); 876 if (error) { 877 dev_err(&client->dev, 878 "failed to read ACK for clearing the last page: %d\n", 879 error); 880 return error; 881 } 882 883 n_fw_pages = fw->size / ELAN_FW_PAGESIZE; 884 dev_dbg(&client->dev, "IAP Pages = %d\n", n_fw_pages); 885 886 for (page = 0; page < n_fw_pages; page++) { 887 error = elants_i2c_fw_write_page(client, 888 fw->data + page * ELAN_FW_PAGESIZE); 889 if (error) { 890 dev_err(&client->dev, 891 "failed to write FW page %d: %d\n", 892 page, error); 893 return error; 894 } 895 } 896 897 /* Old iap needs to wait 200ms for WDT and rest is for hello packets */ 898 msleep(300); 899 900 dev_info(&client->dev, "firmware update completed\n"); 901 return 0; 902 } 903 904 static int elants_i2c_fw_update(struct elants_data *ts) 905 { 906 struct i2c_client *client = ts->client; 907 int error; 908 909 const char *fw_name __free(kfree) = 910 kasprintf(GFP_KERNEL, "elants_i2c_%04x.bin", ts->hw_version); 911 if (!fw_name) 912 return -ENOMEM; 913 914 dev_info(&client->dev, "requesting fw name = %s\n", fw_name); 915 916 const struct firmware *fw __free(firmware) = NULL; 917 error = request_firmware(&fw, fw_name, &client->dev); 918 if (error) { 919 dev_err(&client->dev, "failed to request firmware: %d\n", 920 error); 921 return error; 922 } 923 924 if (fw->size % ELAN_FW_PAGESIZE) { 925 dev_err(&client->dev, "invalid firmware length: %zu\n", 926 fw->size); 927 return -EINVAL; 928 } 929 930 scoped_guard(disable_irq, &client->irq) { 931 bool force_update = ts->iap_mode == ELAN_IAP_RECOVERY; 932 933 error = elants_i2c_do_update_firmware(client, fw, force_update); 934 if (error) { 935 dev_err(&client->dev, "firmware update failed: %d\n", 936 error); 937 } else { 938 error = elants_i2c_initialize(ts); 939 if (error) 940 dev_err(&client->dev, 941 "failed to initialize device after firmware update: %d\n", 942 error); 943 } 944 945 ts->iap_mode = error ? ELAN_IAP_RECOVERY : ELAN_IAP_OPERATIONAL; 946 ts->state = ELAN_STATE_NORMAL; 947 } 948 msleep(100); 949 950 if (!error) 951 elants_i2c_calibrate(ts); 952 953 return error; 954 } 955 956 /* 957 * Event reporting. 958 */ 959 960 static void elants_i2c_mt_event(struct elants_data *ts, u8 *buf, 961 size_t packet_size) 962 { 963 struct input_dev *input = ts->input; 964 unsigned int n_fingers; 965 unsigned int tool_type; 966 u16 finger_state; 967 int i; 968 969 n_fingers = buf[FW_POS_STATE + 1] & 0x0f; 970 finger_state = ((buf[FW_POS_STATE + 1] & 0x30) << 4) | 971 buf[FW_POS_STATE]; 972 973 dev_dbg(&ts->client->dev, 974 "n_fingers: %u, state: %04x\n", n_fingers, finger_state); 975 976 /* Note: all fingers have the same tool type */ 977 tool_type = buf[FW_POS_TOOL_TYPE] & BIT(0) ? 978 MT_TOOL_FINGER : MT_TOOL_PALM; 979 980 for (i = 0; i < MAX_CONTACT_NUM && n_fingers; i++) { 981 if (finger_state & 1) { 982 unsigned int x, y, p, w; 983 u8 *pos; 984 985 pos = &buf[FW_POS_XY + i * 3]; 986 x = (((u16)pos[0] & 0xf0) << 4) | pos[1]; 987 y = (((u16)pos[0] & 0x0f) << 8) | pos[2]; 988 989 /* 990 * eKTF3624 may have use "old" touch-report format, 991 * depending on a device and TS firmware version. 992 * For example, ASUS Transformer devices use the "old" 993 * format, while ASUS Nexus 7 uses the "new" formant. 994 */ 995 if (packet_size == PACKET_SIZE_OLD && 996 ts->chip_id == EKTF3624) { 997 w = buf[FW_POS_WIDTH + i / 2]; 998 w >>= 4 * (~i & 1); 999 w |= w << 4; 1000 w |= !w; 1001 p = w; 1002 } else { 1003 p = buf[FW_POS_PRESSURE + i]; 1004 w = buf[FW_POS_WIDTH + i]; 1005 } 1006 1007 dev_dbg(&ts->client->dev, "i=%d x=%d y=%d p=%d w=%d\n", 1008 i, x, y, p, w); 1009 1010 input_mt_slot(input, i); 1011 input_mt_report_slot_state(input, tool_type, true); 1012 touchscreen_report_pos(input, &ts->prop, x, y, true); 1013 input_event(input, EV_ABS, ABS_MT_PRESSURE, p); 1014 input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, w); 1015 1016 n_fingers--; 1017 } 1018 1019 finger_state >>= 1; 1020 } 1021 1022 input_mt_sync_frame(input); 1023 input_sync(input); 1024 } 1025 1026 static u8 elants_i2c_calculate_checksum(u8 *buf) 1027 { 1028 u8 checksum = 0; 1029 u8 i; 1030 1031 for (i = 0; i < FW_POS_CHECKSUM; i++) 1032 checksum += buf[i]; 1033 1034 return checksum; 1035 } 1036 1037 static void elants_i2c_event(struct elants_data *ts, u8 *buf, 1038 size_t packet_size) 1039 { 1040 u8 checksum = elants_i2c_calculate_checksum(buf); 1041 1042 if (unlikely(buf[FW_POS_CHECKSUM] != checksum)) 1043 dev_warn(&ts->client->dev, 1044 "%s: invalid checksum for packet %02x: %02x vs. %02x\n", 1045 __func__, buf[FW_POS_HEADER], 1046 checksum, buf[FW_POS_CHECKSUM]); 1047 else if (unlikely(buf[FW_POS_HEADER] != HEADER_REPORT_10_FINGER)) 1048 dev_warn(&ts->client->dev, 1049 "%s: unknown packet type: %02x\n", 1050 __func__, buf[FW_POS_HEADER]); 1051 else 1052 elants_i2c_mt_event(ts, buf, packet_size); 1053 } 1054 1055 static irqreturn_t elants_i2c_irq(int irq, void *_dev) 1056 { 1057 const u8 wait_packet[] = { 0x64, 0x64, 0x64, 0x64 }; 1058 struct elants_data *ts = _dev; 1059 struct i2c_client *client = ts->client; 1060 int report_count, report_len; 1061 int i; 1062 int len; 1063 1064 len = i2c_master_recv_dmasafe(client, ts->buf, sizeof(ts->buf)); 1065 if (len < 0) { 1066 dev_err(&client->dev, "%s: failed to read data: %d\n", 1067 __func__, len); 1068 goto out; 1069 } 1070 1071 dev_dbg(&client->dev, "%s: packet %*ph\n", 1072 __func__, HEADER_SIZE, ts->buf); 1073 1074 switch (ts->state) { 1075 case ELAN_WAIT_RECALIBRATION: 1076 if (ts->buf[FW_HDR_TYPE] == CMD_HEADER_REK) { 1077 memcpy(ts->cmd_resp, ts->buf, sizeof(ts->cmd_resp)); 1078 complete(&ts->cmd_done); 1079 ts->state = ELAN_STATE_NORMAL; 1080 } 1081 break; 1082 1083 case ELAN_WAIT_QUEUE_HEADER: 1084 if (ts->buf[FW_HDR_TYPE] != QUEUE_HEADER_NORMAL) 1085 break; 1086 1087 ts->state = ELAN_STATE_NORMAL; 1088 fallthrough; 1089 1090 case ELAN_STATE_NORMAL: 1091 1092 switch (ts->buf[FW_HDR_TYPE]) { 1093 case CMD_HEADER_HELLO: 1094 case CMD_HEADER_RESP: 1095 break; 1096 1097 case QUEUE_HEADER_WAIT: 1098 if (memcmp(ts->buf, wait_packet, sizeof(wait_packet))) { 1099 dev_err(&client->dev, 1100 "invalid wait packet %*ph\n", 1101 HEADER_SIZE, ts->buf); 1102 } else { 1103 ts->state = ELAN_WAIT_QUEUE_HEADER; 1104 udelay(30); 1105 } 1106 break; 1107 1108 case QUEUE_HEADER_SINGLE: 1109 elants_i2c_event(ts, &ts->buf[HEADER_SIZE], 1110 ts->buf[FW_HDR_LENGTH]); 1111 break; 1112 1113 case QUEUE_HEADER_NORMAL2: /* CMD_HEADER_REK */ 1114 /* 1115 * Depending on firmware version, eKTF3624 touchscreens 1116 * may utilize one of these opcodes for the touch events: 1117 * 0x63 (NORMAL) and 0x66 (NORMAL2). The 0x63 is used by 1118 * older firmware version and differs from 0x66 such that 1119 * touch pressure value needs to be adjusted. The 0x66 1120 * opcode of newer firmware is equal to 0x63 of eKTH3500. 1121 */ 1122 if (ts->chip_id != EKTF3624) 1123 break; 1124 1125 fallthrough; 1126 1127 case QUEUE_HEADER_NORMAL: 1128 report_count = ts->buf[FW_HDR_COUNT]; 1129 if (report_count == 0 || report_count > 3) { 1130 dev_err(&client->dev, 1131 "bad report count: %*ph\n", 1132 HEADER_SIZE, ts->buf); 1133 break; 1134 } 1135 1136 report_len = ts->buf[FW_HDR_LENGTH] / report_count; 1137 1138 if (report_len == PACKET_SIZE_OLD && 1139 ts->chip_id == EKTF3624) { 1140 dev_dbg_once(&client->dev, 1141 "using old report format\n"); 1142 } else if (report_len != PACKET_SIZE) { 1143 dev_err(&client->dev, 1144 "mismatching report length: %*ph\n", 1145 HEADER_SIZE, ts->buf); 1146 break; 1147 } 1148 1149 for (i = 0; i < report_count; i++) { 1150 u8 *buf = ts->buf + HEADER_SIZE + 1151 i * report_len; 1152 elants_i2c_event(ts, buf, report_len); 1153 } 1154 break; 1155 1156 default: 1157 dev_err(&client->dev, "unknown packet %*ph\n", 1158 HEADER_SIZE, ts->buf); 1159 break; 1160 } 1161 break; 1162 } 1163 1164 out: 1165 return IRQ_HANDLED; 1166 } 1167 1168 /* 1169 * sysfs interface 1170 */ 1171 static ssize_t calibrate_store(struct device *dev, 1172 struct device_attribute *attr, 1173 const char *buf, size_t count) 1174 { 1175 struct i2c_client *client = to_i2c_client(dev); 1176 struct elants_data *ts = i2c_get_clientdata(client); 1177 int error; 1178 1179 scoped_cond_guard(mutex_intr, return -EINTR, &ts->sysfs_mutex) { 1180 error = elants_i2c_calibrate(ts); 1181 if (error) 1182 return error; 1183 } 1184 1185 return count; 1186 } 1187 1188 static ssize_t write_update_fw(struct device *dev, 1189 struct device_attribute *attr, 1190 const char *buf, size_t count) 1191 { 1192 struct i2c_client *client = to_i2c_client(dev); 1193 struct elants_data *ts = i2c_get_clientdata(client); 1194 int error; 1195 1196 scoped_cond_guard(mutex_intr, return -EINTR, &ts->sysfs_mutex) { 1197 error = elants_i2c_fw_update(ts); 1198 if (error) 1199 return error; 1200 } 1201 1202 return count; 1203 } 1204 1205 static ssize_t show_iap_mode(struct device *dev, 1206 struct device_attribute *attr, char *buf) 1207 { 1208 struct i2c_client *client = to_i2c_client(dev); 1209 struct elants_data *ts = i2c_get_clientdata(client); 1210 1211 return sprintf(buf, "%s\n", 1212 ts->iap_mode == ELAN_IAP_OPERATIONAL ? 1213 "Normal" : "Recovery"); 1214 } 1215 1216 static ssize_t show_calibration_count(struct device *dev, 1217 struct device_attribute *attr, char *buf) 1218 { 1219 struct i2c_client *client = to_i2c_client(dev); 1220 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_REK, 0x00, 0x01 }; 1221 u8 resp[HEADER_SIZE]; 1222 u16 rek_count; 1223 int error; 1224 1225 error = elants_i2c_execute_command(client, cmd, sizeof(cmd), 1226 resp, sizeof(resp), 1, 1227 "read ReK status"); 1228 if (error) 1229 return sprintf(buf, "%d\n", error); 1230 1231 rek_count = get_unaligned_be16(&resp[2]); 1232 return sprintf(buf, "0x%04x\n", rek_count); 1233 } 1234 1235 static DEVICE_ATTR_WO(calibrate); 1236 static DEVICE_ATTR(iap_mode, S_IRUGO, show_iap_mode, NULL); 1237 static DEVICE_ATTR(calibration_count, S_IRUGO, show_calibration_count, NULL); 1238 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, write_update_fw); 1239 1240 struct elants_version_attribute { 1241 struct device_attribute dattr; 1242 size_t field_offset; 1243 size_t field_size; 1244 }; 1245 1246 #define __ELANTS_FIELD_SIZE(_field) \ 1247 sizeof(((struct elants_data *)NULL)->_field) 1248 #define __ELANTS_VERIFY_SIZE(_field) \ 1249 (BUILD_BUG_ON_ZERO(__ELANTS_FIELD_SIZE(_field) > 2) + \ 1250 __ELANTS_FIELD_SIZE(_field)) 1251 #define ELANTS_VERSION_ATTR(_field) \ 1252 struct elants_version_attribute elants_ver_attr_##_field = { \ 1253 .dattr = __ATTR(_field, S_IRUGO, \ 1254 elants_version_attribute_show, NULL), \ 1255 .field_offset = offsetof(struct elants_data, _field), \ 1256 .field_size = __ELANTS_VERIFY_SIZE(_field), \ 1257 } 1258 1259 static ssize_t elants_version_attribute_show(struct device *dev, 1260 struct device_attribute *dattr, 1261 char *buf) 1262 { 1263 struct i2c_client *client = to_i2c_client(dev); 1264 struct elants_data *ts = i2c_get_clientdata(client); 1265 struct elants_version_attribute *attr = 1266 container_of(dattr, struct elants_version_attribute, dattr); 1267 u8 *field = (u8 *)((char *)ts + attr->field_offset); 1268 unsigned int fmt_size; 1269 unsigned int val; 1270 1271 if (attr->field_size == 1) { 1272 val = *field; 1273 fmt_size = 2; /* 2 HEX digits */ 1274 } else { 1275 val = *(u16 *)field; 1276 fmt_size = 4; /* 4 HEX digits */ 1277 } 1278 1279 return sprintf(buf, "%0*x\n", fmt_size, val); 1280 } 1281 1282 static ELANTS_VERSION_ATTR(fw_version); 1283 static ELANTS_VERSION_ATTR(hw_version); 1284 static ELANTS_VERSION_ATTR(test_version); 1285 static ELANTS_VERSION_ATTR(solution_version); 1286 static ELANTS_VERSION_ATTR(bc_version); 1287 static ELANTS_VERSION_ATTR(iap_version); 1288 1289 static struct attribute *elants_i2c_attrs[] = { 1290 &dev_attr_calibrate.attr, 1291 &dev_attr_update_fw.attr, 1292 &dev_attr_iap_mode.attr, 1293 &dev_attr_calibration_count.attr, 1294 1295 &elants_ver_attr_fw_version.dattr.attr, 1296 &elants_ver_attr_hw_version.dattr.attr, 1297 &elants_ver_attr_test_version.dattr.attr, 1298 &elants_ver_attr_solution_version.dattr.attr, 1299 &elants_ver_attr_bc_version.dattr.attr, 1300 &elants_ver_attr_iap_version.dattr.attr, 1301 NULL 1302 }; 1303 ATTRIBUTE_GROUPS(elants_i2c); 1304 1305 static int elants_i2c_power_on(struct elants_data *ts) 1306 { 1307 int error; 1308 1309 /* 1310 * If we do not have reset gpio assume platform firmware 1311 * controls regulators and does power them on for us. 1312 */ 1313 if (IS_ERR_OR_NULL(ts->reset_gpio)) 1314 return 0; 1315 1316 error = regulator_enable(ts->vcc33); 1317 if (error) { 1318 dev_err(&ts->client->dev, 1319 "failed to enable vcc33 regulator: %d\n", 1320 error); 1321 return error; 1322 } 1323 1324 error = regulator_enable(ts->vccio); 1325 if (error) { 1326 dev_err(&ts->client->dev, 1327 "failed to enable vccio regulator: %d\n", 1328 error); 1329 regulator_disable(ts->vcc33); 1330 return error; 1331 } 1332 1333 /* 1334 * We need to wait a bit after powering on controller before 1335 * we are allowed to release reset GPIO. 1336 */ 1337 usleep_range(ELAN_POWERON_DELAY_USEC, ELAN_POWERON_DELAY_USEC + 100); 1338 1339 gpiod_set_value_cansleep(ts->reset_gpio, 0); 1340 1341 msleep(ELAN_RESET_DELAY_MSEC); 1342 1343 return 0; 1344 } 1345 1346 static void elants_i2c_power_off(void *_data) 1347 { 1348 struct elants_data *ts = _data; 1349 1350 if (!IS_ERR_OR_NULL(ts->reset_gpio)) { 1351 /* 1352 * Activate reset gpio to prevent leakage through the 1353 * pin once we shut off power to the controller. 1354 */ 1355 gpiod_set_value_cansleep(ts->reset_gpio, 1); 1356 regulator_disable(ts->vccio); 1357 regulator_disable(ts->vcc33); 1358 } 1359 } 1360 1361 #ifdef CONFIG_ACPI 1362 static const struct acpi_device_id i2c_hid_ids[] = { 1363 {"ACPI0C50", 0 }, 1364 {"PNP0C50", 0 }, 1365 { }, 1366 }; 1367 1368 static const guid_t i2c_hid_guid = 1369 GUID_INIT(0x3CDFF6F7, 0x4267, 0x4555, 1370 0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE); 1371 1372 static bool elants_acpi_is_hid_device(struct device *dev) 1373 { 1374 acpi_handle handle = ACPI_HANDLE(dev); 1375 union acpi_object *obj; 1376 1377 if (acpi_match_device_ids(ACPI_COMPANION(dev), i2c_hid_ids)) 1378 return false; 1379 1380 obj = acpi_evaluate_dsm_typed(handle, &i2c_hid_guid, 1, 1, NULL, ACPI_TYPE_INTEGER); 1381 if (obj) { 1382 ACPI_FREE(obj); 1383 return true; 1384 } 1385 1386 return false; 1387 } 1388 #else 1389 static bool elants_acpi_is_hid_device(struct device *dev) 1390 { 1391 return false; 1392 } 1393 #endif 1394 1395 static int elants_i2c_probe(struct i2c_client *client) 1396 { 1397 union i2c_smbus_data dummy; 1398 struct elants_data *ts; 1399 unsigned long irqflags; 1400 int error; 1401 1402 /* Don't bind to i2c-hid compatible devices, these are handled by the i2c-hid drv. */ 1403 if (elants_acpi_is_hid_device(&client->dev)) { 1404 dev_warn(&client->dev, "This device appears to be an I2C-HID device, not binding\n"); 1405 return -ENODEV; 1406 } 1407 1408 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 1409 dev_err(&client->dev, "I2C check functionality error\n"); 1410 return -ENXIO; 1411 } 1412 1413 ts = devm_kzalloc(&client->dev, sizeof(struct elants_data), GFP_KERNEL); 1414 if (!ts) 1415 return -ENOMEM; 1416 1417 mutex_init(&ts->sysfs_mutex); 1418 init_completion(&ts->cmd_done); 1419 1420 ts->client = client; 1421 ts->chip_id = (enum elants_chip_id)(uintptr_t)device_get_match_data(&client->dev); 1422 i2c_set_clientdata(client, ts); 1423 1424 ts->vcc33 = devm_regulator_get(&client->dev, "vcc33"); 1425 if (IS_ERR(ts->vcc33)) 1426 return dev_err_probe(&client->dev, PTR_ERR(ts->vcc33), 1427 "Failed to get 'vcc33' regulator\n"); 1428 1429 ts->vccio = devm_regulator_get(&client->dev, "vccio"); 1430 if (IS_ERR(ts->vccio)) 1431 return dev_err_probe(&client->dev, PTR_ERR(ts->vccio), 1432 "Failed to get 'vccio' regulator\n"); 1433 1434 ts->reset_gpio = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH); 1435 if (IS_ERR(ts->reset_gpio)) { 1436 error = PTR_ERR(ts->reset_gpio); 1437 1438 if (error == -EPROBE_DEFER) 1439 return error; 1440 1441 if (error != -ENOENT && error != -ENOSYS) { 1442 dev_err(&client->dev, 1443 "failed to get reset gpio: %d\n", 1444 error); 1445 return error; 1446 } 1447 1448 ts->keep_power_in_suspend = true; 1449 } 1450 1451 error = elants_i2c_power_on(ts); 1452 if (error) 1453 return error; 1454 1455 error = devm_add_action_or_reset(&client->dev, 1456 elants_i2c_power_off, ts); 1457 if (error) { 1458 dev_err(&client->dev, 1459 "failed to install power off action: %d\n", error); 1460 return error; 1461 } 1462 1463 /* Make sure there is something at this address */ 1464 if (i2c_smbus_xfer(client->adapter, client->addr, 0, 1465 I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &dummy) < 0) { 1466 dev_err(&client->dev, "nothing at this address\n"); 1467 return -ENXIO; 1468 } 1469 1470 error = elants_i2c_initialize(ts); 1471 if (error) { 1472 dev_err(&client->dev, "failed to initialize: %d\n", error); 1473 return error; 1474 } 1475 1476 ts->input = devm_input_allocate_device(&client->dev); 1477 if (!ts->input) { 1478 dev_err(&client->dev, "Failed to allocate input device\n"); 1479 return -ENOMEM; 1480 } 1481 1482 ts->input->name = "Elan Touchscreen"; 1483 ts->input->id.bustype = BUS_I2C; 1484 1485 /* Multitouch input params setup */ 1486 1487 input_set_abs_params(ts->input, ABS_MT_POSITION_X, 0, ts->x_max, 0, 0); 1488 input_set_abs_params(ts->input, ABS_MT_POSITION_Y, 0, ts->y_max, 0, 0); 1489 input_set_abs_params(ts->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); 1490 input_set_abs_params(ts->input, ABS_MT_PRESSURE, 0, 255, 0, 0); 1491 input_set_abs_params(ts->input, ABS_MT_TOOL_TYPE, 1492 0, MT_TOOL_PALM, 0, 0); 1493 1494 touchscreen_parse_properties(ts->input, true, &ts->prop); 1495 1496 if (ts->chip_id == EKTF3624 && ts->phy_x && ts->phy_y) { 1497 /* calculate resolution from size */ 1498 ts->x_res = DIV_ROUND_CLOSEST(ts->prop.max_x, ts->phy_x); 1499 ts->y_res = DIV_ROUND_CLOSEST(ts->prop.max_y, ts->phy_y); 1500 } 1501 1502 input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res); 1503 input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res); 1504 input_abs_set_res(ts->input, ABS_MT_TOUCH_MAJOR, ts->major_res); 1505 1506 error = input_mt_init_slots(ts->input, MAX_CONTACT_NUM, 1507 INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); 1508 if (error) { 1509 dev_err(&client->dev, 1510 "failed to initialize MT slots: %d\n", error); 1511 return error; 1512 } 1513 1514 error = input_register_device(ts->input); 1515 if (error) { 1516 dev_err(&client->dev, 1517 "unable to register input device: %d\n", error); 1518 return error; 1519 } 1520 1521 /* 1522 * Platform code (ACPI, DTS) should normally set up interrupt 1523 * for us, but in case it did not let's fall back to using falling 1524 * edge to be compatible with older Chromebooks. 1525 */ 1526 irqflags = irq_get_trigger_type(client->irq); 1527 if (!irqflags) 1528 irqflags = IRQF_TRIGGER_FALLING; 1529 1530 error = devm_request_threaded_irq(&client->dev, client->irq, 1531 NULL, elants_i2c_irq, 1532 irqflags | IRQF_ONESHOT, 1533 client->name, ts); 1534 if (error) { 1535 dev_err(&client->dev, "Failed to register interrupt\n"); 1536 return error; 1537 } 1538 1539 return 0; 1540 } 1541 1542 static int elants_i2c_suspend(struct device *dev) 1543 { 1544 struct i2c_client *client = to_i2c_client(dev); 1545 struct elants_data *ts = i2c_get_clientdata(client); 1546 const u8 set_sleep_cmd[] = { 1547 CMD_HEADER_WRITE, E_POWER_STATE_SLEEP, 0x00, 0x01 1548 }; 1549 int retry_cnt; 1550 int error; 1551 1552 /* Command not support in IAP recovery mode */ 1553 if (ts->iap_mode != ELAN_IAP_OPERATIONAL) 1554 return -EBUSY; 1555 1556 disable_irq(client->irq); 1557 1558 if (device_may_wakeup(dev)) { 1559 /* 1560 * The device will automatically enter idle mode 1561 * that has reduced power consumption. 1562 */ 1563 return 0; 1564 } else if (ts->keep_power_in_suspend) { 1565 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) { 1566 error = elants_i2c_send(client, set_sleep_cmd, 1567 sizeof(set_sleep_cmd)); 1568 if (!error) 1569 break; 1570 1571 dev_err(&client->dev, 1572 "suspend command failed: %d\n", error); 1573 } 1574 } else { 1575 elants_i2c_power_off(ts); 1576 } 1577 1578 return 0; 1579 } 1580 1581 static int elants_i2c_resume(struct device *dev) 1582 { 1583 struct i2c_client *client = to_i2c_client(dev); 1584 struct elants_data *ts = i2c_get_clientdata(client); 1585 const u8 set_active_cmd[] = { 1586 CMD_HEADER_WRITE, E_POWER_STATE_RESUME, 0x00, 0x01 1587 }; 1588 int retry_cnt; 1589 int error; 1590 1591 if (device_may_wakeup(dev)) { 1592 elants_i2c_sw_reset(client); 1593 } else if (ts->keep_power_in_suspend) { 1594 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) { 1595 error = elants_i2c_send(client, set_active_cmd, 1596 sizeof(set_active_cmd)); 1597 if (!error) 1598 break; 1599 1600 dev_err(&client->dev, 1601 "resume command failed: %d\n", error); 1602 } 1603 } else { 1604 elants_i2c_power_on(ts); 1605 elants_i2c_initialize(ts); 1606 } 1607 1608 ts->state = ELAN_STATE_NORMAL; 1609 enable_irq(client->irq); 1610 1611 return 0; 1612 } 1613 1614 static DEFINE_SIMPLE_DEV_PM_OPS(elants_i2c_pm_ops, 1615 elants_i2c_suspend, elants_i2c_resume); 1616 1617 static const struct i2c_device_id elants_i2c_id[] = { 1618 { DEVICE_NAME, EKTH3500 }, 1619 { "ekth3500", EKTH3500 }, 1620 { "ektf3624", EKTF3624 }, 1621 { } 1622 }; 1623 MODULE_DEVICE_TABLE(i2c, elants_i2c_id); 1624 1625 #ifdef CONFIG_ACPI 1626 static const struct acpi_device_id elants_acpi_id[] = { 1627 { "ELAN0001", EKTH3500 }, 1628 { } 1629 }; 1630 MODULE_DEVICE_TABLE(acpi, elants_acpi_id); 1631 #endif 1632 1633 #ifdef CONFIG_OF 1634 static const struct of_device_id elants_of_match[] = { 1635 { .compatible = "elan,ekth3500", .data = (void *)EKTH3500 }, 1636 { .compatible = "elan,ektf3624", .data = (void *)EKTF3624 }, 1637 { /* sentinel */ } 1638 }; 1639 MODULE_DEVICE_TABLE(of, elants_of_match); 1640 #endif 1641 1642 static struct i2c_driver elants_i2c_driver = { 1643 .probe = elants_i2c_probe, 1644 .id_table = elants_i2c_id, 1645 .driver = { 1646 .name = DEVICE_NAME, 1647 .dev_groups = elants_i2c_groups, 1648 .pm = pm_sleep_ptr(&elants_i2c_pm_ops), 1649 .acpi_match_table = ACPI_PTR(elants_acpi_id), 1650 .of_match_table = of_match_ptr(elants_of_match), 1651 .probe_type = PROBE_PREFER_ASYNCHRONOUS, 1652 }, 1653 }; 1654 module_i2c_driver(elants_i2c_driver); 1655 1656 MODULE_AUTHOR("Scott Liu <scott.liu@emc.com.tw>"); 1657 MODULE_DESCRIPTION("Elan I2c Touchscreen driver"); 1658 MODULE_LICENSE("GPL"); 1659