0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include <linux/bits.h>
0023 #include <linux/module.h>
0024 #include <linux/input.h>
0025 #include <linux/interrupt.h>
0026 #include <linux/irq.h>
0027 #include <linux/platform_device.h>
0028 #include <linux/async.h>
0029 #include <linux/i2c.h>
0030 #include <linux/delay.h>
0031 #include <linux/uaccess.h>
0032 #include <linux/buffer_head.h>
0033 #include <linux/slab.h>
0034 #include <linux/firmware.h>
0035 #include <linux/input/mt.h>
0036 #include <linux/input/touchscreen.h>
0037 #include <linux/acpi.h>
0038 #include <linux/of.h>
0039 #include <linux/gpio/consumer.h>
0040 #include <linux/regulator/consumer.h>
0041 #include <linux/uuid.h>
0042 #include <asm/unaligned.h>
0043
0044
0045 #define DEVICE_NAME "elants_i2c"
0046
0047
0048 #define ELAN_TS_RESOLUTION(n, m) (((n) - 1) * (m))
0049
0050
0051 #define HEADER_SIZE 4
0052 #define FW_HDR_TYPE 0
0053 #define FW_HDR_COUNT 1
0054 #define FW_HDR_LENGTH 2
0055
0056
0057 #define QUEUE_HEADER_SINGLE 0x62
0058 #define QUEUE_HEADER_NORMAL 0X63
0059 #define QUEUE_HEADER_WAIT 0x64
0060 #define QUEUE_HEADER_NORMAL2 0x66
0061
0062
0063 #define CMD_HEADER_WRITE 0x54
0064 #define CMD_HEADER_READ 0x53
0065 #define CMD_HEADER_6B_READ 0x5B
0066 #define CMD_HEADER_ROM_READ 0x96
0067 #define CMD_HEADER_RESP 0x52
0068 #define CMD_HEADER_6B_RESP 0x9B
0069 #define CMD_HEADER_ROM_RESP 0x95
0070 #define CMD_HEADER_HELLO 0x55
0071 #define CMD_HEADER_REK 0x66
0072
0073
0074 #define PACKET_SIZE_OLD 40
0075 #define PACKET_SIZE 55
0076 #define MAX_CONTACT_NUM 10
0077 #define FW_POS_HEADER 0
0078 #define FW_POS_STATE 1
0079 #define FW_POS_TOTAL 2
0080 #define FW_POS_XY 3
0081 #define FW_POS_TOOL_TYPE 33
0082 #define FW_POS_CHECKSUM 34
0083 #define FW_POS_WIDTH 35
0084 #define FW_POS_PRESSURE 45
0085
0086 #define HEADER_REPORT_10_FINGER 0x62
0087
0088
0089 #define MAX_PACKET_SIZE 169
0090
0091 #define BOOT_TIME_DELAY_MS 50
0092
0093
0094 #define E_ELAN_INFO_FW_VER 0x00
0095 #define E_ELAN_INFO_BC_VER 0x10
0096 #define E_ELAN_INFO_X_RES 0x60
0097 #define E_ELAN_INFO_Y_RES 0x63
0098 #define E_ELAN_INFO_REK 0xD0
0099 #define E_ELAN_INFO_TEST_VER 0xE0
0100 #define E_ELAN_INFO_FW_ID 0xF0
0101 #define E_INFO_OSR 0xD6
0102 #define E_INFO_PHY_SCAN 0xD7
0103 #define E_INFO_PHY_DRIVER 0xD8
0104
0105
0106 #define E_POWER_STATE_SLEEP 0x50
0107 #define E_POWER_STATE_RESUME 0x58
0108
0109 #define MAX_RETRIES 3
0110 #define MAX_FW_UPDATE_RETRIES 30
0111
0112 #define ELAN_FW_PAGESIZE 132
0113
0114
0115 #define ELAN_CALI_TIMEOUT_MSEC 12000
0116
0117 #define ELAN_POWERON_DELAY_USEC 500
0118 #define ELAN_RESET_DELAY_MSEC 20
0119
0120
0121 #define BC_VER_H_BYTE_FOR_EKTH3900x1_I2C 0x72
0122 #define BC_VER_H_BYTE_FOR_EKTH3900x2_I2C 0x82
0123 #define BC_VER_H_BYTE_FOR_EKTH3900x3_I2C 0x92
0124 #define BC_VER_H_BYTE_FOR_EKTH5312x1_I2C 0x6D
0125 #define BC_VER_H_BYTE_FOR_EKTH5312x2_I2C 0x6E
0126 #define BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C 0x77
0127 #define BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C 0x78
0128 #define BC_VER_H_BYTE_FOR_EKTH5312x1_I2C_USB 0x67
0129 #define BC_VER_H_BYTE_FOR_EKTH5312x2_I2C_USB 0x68
0130 #define BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C_USB 0x74
0131 #define BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C_USB 0x75
0132
0133 enum elants_chip_id {
0134 EKTH3500,
0135 EKTF3624,
0136 };
0137
0138 enum elants_state {
0139 ELAN_STATE_NORMAL,
0140 ELAN_WAIT_QUEUE_HEADER,
0141 ELAN_WAIT_RECALIBRATION,
0142 };
0143
0144 enum elants_iap_mode {
0145 ELAN_IAP_OPERATIONAL,
0146 ELAN_IAP_RECOVERY,
0147 };
0148
0149
0150 struct elants_data {
0151 struct i2c_client *client;
0152 struct input_dev *input;
0153
0154 struct regulator *vcc33;
0155 struct regulator *vccio;
0156 struct gpio_desc *reset_gpio;
0157
0158 u16 fw_version;
0159 u8 test_version;
0160 u8 solution_version;
0161 u8 bc_version;
0162 u8 iap_version;
0163 u16 hw_version;
0164 u8 major_res;
0165 unsigned int x_res;
0166 unsigned int y_res;
0167 unsigned int x_max;
0168 unsigned int y_max;
0169 unsigned int phy_x;
0170 unsigned int phy_y;
0171 struct touchscreen_properties prop;
0172
0173 enum elants_state state;
0174 enum elants_chip_id chip_id;
0175 enum elants_iap_mode iap_mode;
0176
0177
0178 struct mutex sysfs_mutex;
0179
0180 u8 cmd_resp[HEADER_SIZE];
0181 struct completion cmd_done;
0182
0183 bool wake_irq_enabled;
0184 bool keep_power_in_suspend;
0185
0186
0187 u8 buf[MAX_PACKET_SIZE] ____cacheline_aligned;
0188 };
0189
0190 static int elants_i2c_send(struct i2c_client *client,
0191 const void *data, size_t size)
0192 {
0193 int ret;
0194
0195 ret = i2c_master_send(client, data, size);
0196 if (ret == size)
0197 return 0;
0198
0199 if (ret >= 0)
0200 ret = -EIO;
0201
0202 dev_err(&client->dev, "%s failed (%*ph): %d\n",
0203 __func__, (int)size, data, ret);
0204
0205 return ret;
0206 }
0207
0208 static int elants_i2c_read(struct i2c_client *client, void *data, size_t size)
0209 {
0210 int ret;
0211
0212 ret = i2c_master_recv(client, data, size);
0213 if (ret == size)
0214 return 0;
0215
0216 if (ret >= 0)
0217 ret = -EIO;
0218
0219 dev_err(&client->dev, "%s failed: %d\n", __func__, ret);
0220
0221 return ret;
0222 }
0223
0224 static int elants_i2c_execute_command(struct i2c_client *client,
0225 const u8 *cmd, size_t cmd_size,
0226 u8 *resp, size_t resp_size,
0227 int retries, const char *cmd_name)
0228 {
0229 struct i2c_msg msgs[2];
0230 int ret;
0231 u8 expected_response;
0232
0233 switch (cmd[0]) {
0234 case CMD_HEADER_READ:
0235 expected_response = CMD_HEADER_RESP;
0236 break;
0237
0238 case CMD_HEADER_6B_READ:
0239 expected_response = CMD_HEADER_6B_RESP;
0240 break;
0241
0242 case CMD_HEADER_ROM_READ:
0243 expected_response = CMD_HEADER_ROM_RESP;
0244 break;
0245
0246 default:
0247 dev_err(&client->dev, "(%s): invalid command: %*ph\n",
0248 cmd_name, (int)cmd_size, cmd);
0249 return -EINVAL;
0250 }
0251
0252 for (;;) {
0253 msgs[0].addr = client->addr;
0254 msgs[0].flags = client->flags & I2C_M_TEN;
0255 msgs[0].len = cmd_size;
0256 msgs[0].buf = (u8 *)cmd;
0257
0258 msgs[1].addr = client->addr;
0259 msgs[1].flags = (client->flags & I2C_M_TEN) | I2C_M_RD;
0260 msgs[1].flags |= I2C_M_RD;
0261 msgs[1].len = resp_size;
0262 msgs[1].buf = resp;
0263
0264 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
0265 if (ret < 0) {
0266 if (--retries > 0) {
0267 dev_dbg(&client->dev,
0268 "(%s) I2C transfer failed: %pe (retrying)\n",
0269 cmd_name, ERR_PTR(ret));
0270 continue;
0271 }
0272
0273 dev_err(&client->dev,
0274 "(%s) I2C transfer failed: %pe\n",
0275 cmd_name, ERR_PTR(ret));
0276 return ret;
0277 }
0278
0279 if (ret != ARRAY_SIZE(msgs) ||
0280 resp[FW_HDR_TYPE] != expected_response) {
0281 if (--retries > 0) {
0282 dev_dbg(&client->dev,
0283 "(%s) unexpected response: %*ph (retrying)\n",
0284 cmd_name, ret, resp);
0285 continue;
0286 }
0287
0288 dev_err(&client->dev,
0289 "(%s) unexpected response: %*ph\n",
0290 cmd_name, ret, resp);
0291 return -EIO;
0292 }
0293
0294 return 0;
0295 }
0296 }
0297
0298 static int elants_i2c_calibrate(struct elants_data *ts)
0299 {
0300 struct i2c_client *client = ts->client;
0301 int ret, error;
0302 static const u8 w_flashkey[] = { CMD_HEADER_WRITE, 0xC0, 0xE1, 0x5A };
0303 static const u8 rek[] = { CMD_HEADER_WRITE, 0x29, 0x00, 0x01 };
0304 static const u8 rek_resp[] = { CMD_HEADER_REK, 0x66, 0x66, 0x66 };
0305
0306 disable_irq(client->irq);
0307
0308 ts->state = ELAN_WAIT_RECALIBRATION;
0309 reinit_completion(&ts->cmd_done);
0310
0311 elants_i2c_send(client, w_flashkey, sizeof(w_flashkey));
0312 elants_i2c_send(client, rek, sizeof(rek));
0313
0314 enable_irq(client->irq);
0315
0316 ret = wait_for_completion_interruptible_timeout(&ts->cmd_done,
0317 msecs_to_jiffies(ELAN_CALI_TIMEOUT_MSEC));
0318
0319 ts->state = ELAN_STATE_NORMAL;
0320
0321 if (ret <= 0) {
0322 error = ret < 0 ? ret : -ETIMEDOUT;
0323 dev_err(&client->dev,
0324 "error while waiting for calibration to complete: %d\n",
0325 error);
0326 return error;
0327 }
0328
0329 if (memcmp(rek_resp, ts->cmd_resp, sizeof(rek_resp))) {
0330 dev_err(&client->dev,
0331 "unexpected calibration response: %*ph\n",
0332 (int)sizeof(ts->cmd_resp), ts->cmd_resp);
0333 return -EINVAL;
0334 }
0335
0336 return 0;
0337 }
0338
0339 static int elants_i2c_sw_reset(struct i2c_client *client)
0340 {
0341 const u8 soft_rst_cmd[] = { 0x77, 0x77, 0x77, 0x77 };
0342 int error;
0343
0344 error = elants_i2c_send(client, soft_rst_cmd,
0345 sizeof(soft_rst_cmd));
0346 if (error) {
0347 dev_err(&client->dev, "software reset failed: %d\n", error);
0348 return error;
0349 }
0350
0351
0352
0353
0354
0355 msleep(30);
0356
0357 return 0;
0358 }
0359
0360 static u16 elants_i2c_parse_version(u8 *buf)
0361 {
0362 return get_unaligned_be32(buf) >> 4;
0363 }
0364
0365 static int elants_i2c_query_hw_version(struct elants_data *ts)
0366 {
0367 struct i2c_client *client = ts->client;
0368 int retry_cnt = MAX_RETRIES;
0369 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_ID, 0x00, 0x01 };
0370 u8 resp[HEADER_SIZE];
0371 int error;
0372
0373 while (retry_cnt--) {
0374 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
0375 resp, sizeof(resp), 1,
0376 "read fw id");
0377 if (error)
0378 return error;
0379
0380 ts->hw_version = elants_i2c_parse_version(resp);
0381 if (ts->hw_version != 0xffff)
0382 return 0;
0383 }
0384
0385 dev_err(&client->dev, "Invalid fw id: %#04x\n", ts->hw_version);
0386
0387 return -EINVAL;
0388 }
0389
0390 static int elants_i2c_query_fw_version(struct elants_data *ts)
0391 {
0392 struct i2c_client *client = ts->client;
0393 int retry_cnt = MAX_RETRIES;
0394 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_VER, 0x00, 0x01 };
0395 u8 resp[HEADER_SIZE];
0396 int error;
0397
0398 while (retry_cnt--) {
0399 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
0400 resp, sizeof(resp), 1,
0401 "read fw version");
0402 if (error)
0403 return error;
0404
0405 ts->fw_version = elants_i2c_parse_version(resp);
0406 if (ts->fw_version != 0x0000 && ts->fw_version != 0xffff)
0407 return 0;
0408
0409 dev_dbg(&client->dev, "(read fw version) resp %*phC\n",
0410 (int)sizeof(resp), resp);
0411 }
0412
0413 dev_err(&client->dev, "Invalid fw ver: %#04x\n", ts->fw_version);
0414
0415 return -EINVAL;
0416 }
0417
0418 static int elants_i2c_query_test_version(struct elants_data *ts)
0419 {
0420 struct i2c_client *client = ts->client;
0421 int error;
0422 u16 version;
0423 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_TEST_VER, 0x00, 0x01 };
0424 u8 resp[HEADER_SIZE];
0425
0426 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
0427 resp, sizeof(resp), MAX_RETRIES,
0428 "read test version");
0429 if (error) {
0430 dev_err(&client->dev, "Failed to read test version\n");
0431 return error;
0432 }
0433
0434 version = elants_i2c_parse_version(resp);
0435 ts->test_version = version >> 8;
0436 ts->solution_version = version & 0xff;
0437
0438 return 0;
0439 }
0440
0441 static int elants_i2c_query_bc_version(struct elants_data *ts)
0442 {
0443 struct i2c_client *client = ts->client;
0444 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_BC_VER, 0x00, 0x01 };
0445 u8 resp[HEADER_SIZE];
0446 u16 version;
0447 int error;
0448
0449 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
0450 resp, sizeof(resp), 1,
0451 "read BC version");
0452 if (error)
0453 return error;
0454
0455 version = elants_i2c_parse_version(resp);
0456 ts->bc_version = version >> 8;
0457 ts->iap_version = version & 0xff;
0458
0459 return 0;
0460 }
0461
0462 static int elants_i2c_query_ts_info_ektf(struct elants_data *ts)
0463 {
0464 struct i2c_client *client = ts->client;
0465 int error;
0466 u8 resp[4];
0467 u16 phy_x, phy_y;
0468 const u8 get_xres_cmd[] = {
0469 CMD_HEADER_READ, E_ELAN_INFO_X_RES, 0x00, 0x00
0470 };
0471 const u8 get_yres_cmd[] = {
0472 CMD_HEADER_READ, E_ELAN_INFO_Y_RES, 0x00, 0x00
0473 };
0474
0475
0476 error = elants_i2c_execute_command(client, get_xres_cmd,
0477 sizeof(get_xres_cmd),
0478 resp, sizeof(resp), 1,
0479 "get X size");
0480 if (error)
0481 return error;
0482
0483 phy_x = resp[2] | ((resp[3] & 0xF0) << 4);
0484
0485 error = elants_i2c_execute_command(client, get_yres_cmd,
0486 sizeof(get_yres_cmd),
0487 resp, sizeof(resp), 1,
0488 "get Y size");
0489 if (error)
0490 return error;
0491
0492 phy_y = resp[2] | ((resp[3] & 0xF0) << 4);
0493
0494 dev_dbg(&client->dev, "phy_x=%d, phy_y=%d\n", phy_x, phy_y);
0495
0496 ts->phy_x = phy_x;
0497 ts->phy_y = phy_y;
0498
0499
0500 ts->x_max = 2240 - 1;
0501 ts->y_max = 1408 - 1;
0502
0503 return 0;
0504 }
0505
0506 static int elants_i2c_query_ts_info_ekth(struct elants_data *ts)
0507 {
0508 struct i2c_client *client = ts->client;
0509 int error;
0510 u8 resp[17];
0511 u16 phy_x, phy_y, rows, cols, osr;
0512 const u8 get_resolution_cmd[] = {
0513 CMD_HEADER_6B_READ, 0x00, 0x00, 0x00, 0x00, 0x00
0514 };
0515 const u8 get_osr_cmd[] = {
0516 CMD_HEADER_READ, E_INFO_OSR, 0x00, 0x01
0517 };
0518 const u8 get_physical_scan_cmd[] = {
0519 CMD_HEADER_READ, E_INFO_PHY_SCAN, 0x00, 0x01
0520 };
0521 const u8 get_physical_drive_cmd[] = {
0522 CMD_HEADER_READ, E_INFO_PHY_DRIVER, 0x00, 0x01
0523 };
0524
0525
0526 error = elants_i2c_execute_command(client,
0527 get_resolution_cmd,
0528 sizeof(get_resolution_cmd),
0529 resp, sizeof(resp), 1,
0530 "get resolution");
0531 if (error)
0532 return error;
0533
0534 rows = resp[2] + resp[6] + resp[10];
0535 cols = resp[3] + resp[7] + resp[11];
0536
0537
0538 ts->major_res = resp[16];
0539
0540
0541 error = elants_i2c_execute_command(client,
0542 get_osr_cmd, sizeof(get_osr_cmd),
0543 resp, sizeof(resp), 1, "get osr");
0544 if (error)
0545 return error;
0546
0547 osr = resp[3];
0548
0549 error = elants_i2c_execute_command(client,
0550 get_physical_scan_cmd,
0551 sizeof(get_physical_scan_cmd),
0552 resp, sizeof(resp), 1,
0553 "get physical scan");
0554 if (error)
0555 return error;
0556
0557 phy_x = get_unaligned_be16(&resp[2]);
0558
0559 error = elants_i2c_execute_command(client,
0560 get_physical_drive_cmd,
0561 sizeof(get_physical_drive_cmd),
0562 resp, sizeof(resp), 1,
0563 "get physical drive");
0564 if (error)
0565 return error;
0566
0567 phy_y = get_unaligned_be16(&resp[2]);
0568
0569 dev_dbg(&client->dev, "phy_x=%d, phy_y=%d\n", phy_x, phy_y);
0570
0571 if (rows == 0 || cols == 0 || osr == 0) {
0572 dev_warn(&client->dev,
0573 "invalid trace number data: %d, %d, %d\n",
0574 rows, cols, osr);
0575 } else {
0576
0577 ts->x_max = ELAN_TS_RESOLUTION(rows, osr);
0578 ts->x_res = DIV_ROUND_CLOSEST(ts->x_max, phy_x);
0579 ts->y_max = ELAN_TS_RESOLUTION(cols, osr);
0580 ts->y_res = DIV_ROUND_CLOSEST(ts->y_max, phy_y);
0581 ts->phy_x = phy_x;
0582 ts->phy_y = phy_y;
0583 }
0584
0585 return 0;
0586 }
0587
0588 static int elants_i2c_fastboot(struct i2c_client *client)
0589 {
0590 const u8 boot_cmd[] = { 0x4D, 0x61, 0x69, 0x6E };
0591 int error;
0592
0593 error = elants_i2c_send(client, boot_cmd, sizeof(boot_cmd));
0594 if (error) {
0595 dev_err(&client->dev, "boot failed: %d\n", error);
0596 return error;
0597 }
0598
0599 dev_dbg(&client->dev, "boot success -- 0x%x\n", client->addr);
0600 return 0;
0601 }
0602
0603 static int elants_i2c_initialize(struct elants_data *ts)
0604 {
0605 struct i2c_client *client = ts->client;
0606 int error, error2, retry_cnt;
0607 const u8 hello_packet[] = { 0x55, 0x55, 0x55, 0x55 };
0608 const u8 recov_packet[] = { 0x55, 0x55, 0x80, 0x80 };
0609 u8 buf[HEADER_SIZE];
0610
0611 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
0612 error = elants_i2c_sw_reset(client);
0613 if (error) {
0614
0615 if (retry_cnt < MAX_RETRIES - 1)
0616 continue;
0617 }
0618
0619 error = elants_i2c_fastboot(client);
0620 if (error) {
0621
0622 if (retry_cnt < MAX_RETRIES - 1)
0623 continue;
0624 }
0625
0626
0627 msleep(BOOT_TIME_DELAY_MS);
0628
0629 error = elants_i2c_read(client, buf, sizeof(buf));
0630 if (error) {
0631 dev_err(&client->dev,
0632 "failed to read 'hello' packet: %d\n", error);
0633 } else if (!memcmp(buf, hello_packet, sizeof(hello_packet))) {
0634 ts->iap_mode = ELAN_IAP_OPERATIONAL;
0635 break;
0636 } else if (!memcmp(buf, recov_packet, sizeof(recov_packet))) {
0637
0638
0639
0640
0641 error = -EIO;
0642 break;
0643 } else {
0644 error = -EINVAL;
0645 dev_err(&client->dev,
0646 "invalid 'hello' packet: %*ph\n",
0647 (int)sizeof(buf), buf);
0648 }
0649 }
0650
0651
0652 error2 = elants_i2c_query_hw_version(ts);
0653 if (!error2)
0654 error2 = elants_i2c_query_bc_version(ts);
0655 if (!error)
0656 error = error2;
0657
0658 if (!error)
0659 error = elants_i2c_query_fw_version(ts);
0660 if (!error)
0661 error = elants_i2c_query_test_version(ts);
0662
0663 switch (ts->chip_id) {
0664 case EKTH3500:
0665 if (!error)
0666 error = elants_i2c_query_ts_info_ekth(ts);
0667 break;
0668 case EKTF3624:
0669 if (!error)
0670 error = elants_i2c_query_ts_info_ektf(ts);
0671 break;
0672 default:
0673 BUG();
0674 }
0675
0676 if (error)
0677 ts->iap_mode = ELAN_IAP_RECOVERY;
0678
0679 return 0;
0680 }
0681
0682
0683
0684
0685
0686 static int elants_i2c_fw_write_page(struct i2c_client *client,
0687 const void *page)
0688 {
0689 const u8 ack_ok[] = { 0xaa, 0xaa };
0690 u8 buf[2];
0691 int retry;
0692 int error;
0693
0694 for (retry = 0; retry < MAX_FW_UPDATE_RETRIES; retry++) {
0695 error = elants_i2c_send(client, page, ELAN_FW_PAGESIZE);
0696 if (error) {
0697 dev_err(&client->dev,
0698 "IAP Write Page failed: %d\n", error);
0699 continue;
0700 }
0701
0702 error = elants_i2c_read(client, buf, 2);
0703 if (error) {
0704 dev_err(&client->dev,
0705 "IAP Ack read failed: %d\n", error);
0706 return error;
0707 }
0708
0709 if (!memcmp(buf, ack_ok, sizeof(ack_ok)))
0710 return 0;
0711
0712 error = -EIO;
0713 dev_err(&client->dev,
0714 "IAP Get Ack Error [%02x:%02x]\n",
0715 buf[0], buf[1]);
0716 }
0717
0718 return error;
0719 }
0720
0721 static int elants_i2c_validate_remark_id(struct elants_data *ts,
0722 const struct firmware *fw)
0723 {
0724 struct i2c_client *client = ts->client;
0725 int error;
0726 const u8 cmd[] = { CMD_HEADER_ROM_READ, 0x80, 0x1F, 0x00, 0x00, 0x21 };
0727 u8 resp[6] = { 0 };
0728 u16 ts_remark_id = 0;
0729 u16 fw_remark_id = 0;
0730
0731
0732 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
0733 resp, sizeof(resp),
0734 1, "read Remark ID");
0735 if (error)
0736 return error;
0737
0738 ts_remark_id = get_unaligned_be16(&resp[3]);
0739
0740 fw_remark_id = get_unaligned_le16(&fw->data[fw->size - 4]);
0741
0742 if (fw_remark_id != ts_remark_id) {
0743 dev_err(&client->dev,
0744 "Remark ID Mismatched: ts_remark_id=0x%04x, fw_remark_id=0x%04x.\n",
0745 ts_remark_id, fw_remark_id);
0746 return -EINVAL;
0747 }
0748
0749 return 0;
0750 }
0751
0752 static bool elants_i2c_should_check_remark_id(struct elants_data *ts)
0753 {
0754 struct i2c_client *client = ts->client;
0755 const u8 bootcode_version = ts->iap_version;
0756 bool check;
0757
0758
0759 if ((bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x1_I2C) ||
0760 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x2_I2C) ||
0761 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH3900x3_I2C) ||
0762 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x1_I2C) ||
0763 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x2_I2C) ||
0764 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C) ||
0765 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C) ||
0766 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x1_I2C_USB) ||
0767 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312x2_I2C_USB) ||
0768 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx1_I2C_USB) ||
0769 (bootcode_version == BC_VER_H_BYTE_FOR_EKTH5312cx2_I2C_USB)) {
0770 dev_dbg(&client->dev,
0771 "eKTH3900/eKTH5312(0x%02x) are not support remark id\n",
0772 bootcode_version);
0773 check = false;
0774 } else if (bootcode_version >= 0x60) {
0775 check = true;
0776 } else {
0777 check = false;
0778 }
0779
0780 return check;
0781 }
0782
0783 static int elants_i2c_do_update_firmware(struct i2c_client *client,
0784 const struct firmware *fw,
0785 bool force)
0786 {
0787 struct elants_data *ts = i2c_get_clientdata(client);
0788 const u8 enter_iap[] = { 0x45, 0x49, 0x41, 0x50 };
0789 const u8 enter_iap2[] = { 0x54, 0x00, 0x12, 0x34 };
0790 const u8 iap_ack[] = { 0x55, 0xaa, 0x33, 0xcc };
0791 const u8 close_idle[] = { 0x54, 0x2c, 0x01, 0x01 };
0792 u8 buf[HEADER_SIZE];
0793 u16 send_id;
0794 int page, n_fw_pages;
0795 int error;
0796 bool check_remark_id = elants_i2c_should_check_remark_id(ts);
0797
0798
0799 if (force) {
0800 dev_dbg(&client->dev, "Recovery mode procedure\n");
0801
0802 if (check_remark_id) {
0803 error = elants_i2c_validate_remark_id(ts, fw);
0804 if (error)
0805 return error;
0806 }
0807
0808 error = elants_i2c_send(client, enter_iap2, sizeof(enter_iap2));
0809 if (error) {
0810 dev_err(&client->dev, "failed to enter IAP mode: %d\n",
0811 error);
0812 return error;
0813 }
0814 } else {
0815
0816 dev_dbg(&client->dev, "Normal IAP procedure\n");
0817
0818
0819 error = elants_i2c_send(client, close_idle, sizeof(close_idle));
0820 if (error)
0821 dev_err(&client->dev, "Failed close idle: %d\n", error);
0822 msleep(60);
0823
0824 elants_i2c_sw_reset(client);
0825 msleep(20);
0826
0827 if (check_remark_id) {
0828 error = elants_i2c_validate_remark_id(ts, fw);
0829 if (error)
0830 return error;
0831 }
0832
0833 error = elants_i2c_send(client, enter_iap, sizeof(enter_iap));
0834 if (error) {
0835 dev_err(&client->dev, "failed to enter IAP mode: %d\n",
0836 error);
0837 return error;
0838 }
0839 }
0840
0841 msleep(20);
0842
0843
0844 error = elants_i2c_read(client, buf, 4);
0845 if (error) {
0846 dev_err(&client->dev,
0847 "failed to read IAP acknowledgement: %d\n",
0848 error);
0849 return error;
0850 }
0851
0852 if (memcmp(buf, iap_ack, sizeof(iap_ack))) {
0853 dev_err(&client->dev,
0854 "failed to enter IAP: %*ph (expected %*ph)\n",
0855 (int)sizeof(buf), buf, (int)sizeof(iap_ack), iap_ack);
0856 return -EIO;
0857 }
0858
0859 dev_info(&client->dev, "successfully entered IAP mode");
0860
0861 send_id = client->addr;
0862 error = elants_i2c_send(client, &send_id, 1);
0863 if (error) {
0864 dev_err(&client->dev, "sending dummy byte failed: %d\n",
0865 error);
0866 return error;
0867 }
0868
0869
0870 error = elants_i2c_send(client, fw->data, ELAN_FW_PAGESIZE);
0871 if (error) {
0872 dev_err(&client->dev, "clearing of the last page failed: %d\n",
0873 error);
0874 return error;
0875 }
0876
0877 error = elants_i2c_read(client, buf, 2);
0878 if (error) {
0879 dev_err(&client->dev,
0880 "failed to read ACK for clearing the last page: %d\n",
0881 error);
0882 return error;
0883 }
0884
0885 n_fw_pages = fw->size / ELAN_FW_PAGESIZE;
0886 dev_dbg(&client->dev, "IAP Pages = %d\n", n_fw_pages);
0887
0888 for (page = 0; page < n_fw_pages; page++) {
0889 error = elants_i2c_fw_write_page(client,
0890 fw->data + page * ELAN_FW_PAGESIZE);
0891 if (error) {
0892 dev_err(&client->dev,
0893 "failed to write FW page %d: %d\n",
0894 page, error);
0895 return error;
0896 }
0897 }
0898
0899
0900 msleep(300);
0901
0902 dev_info(&client->dev, "firmware update completed\n");
0903 return 0;
0904 }
0905
0906 static int elants_i2c_fw_update(struct elants_data *ts)
0907 {
0908 struct i2c_client *client = ts->client;
0909 const struct firmware *fw;
0910 char *fw_name;
0911 int error;
0912
0913 fw_name = kasprintf(GFP_KERNEL, "elants_i2c_%04x.bin", ts->hw_version);
0914 if (!fw_name)
0915 return -ENOMEM;
0916
0917 dev_info(&client->dev, "requesting fw name = %s\n", fw_name);
0918 error = request_firmware(&fw, fw_name, &client->dev);
0919 kfree(fw_name);
0920 if (error) {
0921 dev_err(&client->dev, "failed to request firmware: %d\n",
0922 error);
0923 return error;
0924 }
0925
0926 if (fw->size % ELAN_FW_PAGESIZE) {
0927 dev_err(&client->dev, "invalid firmware length: %zu\n",
0928 fw->size);
0929 error = -EINVAL;
0930 goto out;
0931 }
0932
0933 disable_irq(client->irq);
0934
0935 error = elants_i2c_do_update_firmware(client, fw,
0936 ts->iap_mode == ELAN_IAP_RECOVERY);
0937 if (error) {
0938 dev_err(&client->dev, "firmware update failed: %d\n", error);
0939 ts->iap_mode = ELAN_IAP_RECOVERY;
0940 goto out_enable_irq;
0941 }
0942
0943 error = elants_i2c_initialize(ts);
0944 if (error) {
0945 dev_err(&client->dev,
0946 "failed to initialize device after firmware update: %d\n",
0947 error);
0948 ts->iap_mode = ELAN_IAP_RECOVERY;
0949 goto out_enable_irq;
0950 }
0951
0952 ts->iap_mode = ELAN_IAP_OPERATIONAL;
0953
0954 out_enable_irq:
0955 ts->state = ELAN_STATE_NORMAL;
0956 enable_irq(client->irq);
0957 msleep(100);
0958
0959 if (!error)
0960 elants_i2c_calibrate(ts);
0961 out:
0962 release_firmware(fw);
0963 return error;
0964 }
0965
0966
0967
0968
0969
0970 static void elants_i2c_mt_event(struct elants_data *ts, u8 *buf,
0971 size_t packet_size)
0972 {
0973 struct input_dev *input = ts->input;
0974 unsigned int n_fingers;
0975 unsigned int tool_type;
0976 u16 finger_state;
0977 int i;
0978
0979 n_fingers = buf[FW_POS_STATE + 1] & 0x0f;
0980 finger_state = ((buf[FW_POS_STATE + 1] & 0x30) << 4) |
0981 buf[FW_POS_STATE];
0982
0983 dev_dbg(&ts->client->dev,
0984 "n_fingers: %u, state: %04x\n", n_fingers, finger_state);
0985
0986
0987 tool_type = buf[FW_POS_TOOL_TYPE] & BIT(0) ?
0988 MT_TOOL_FINGER : MT_TOOL_PALM;
0989
0990 for (i = 0; i < MAX_CONTACT_NUM && n_fingers; i++) {
0991 if (finger_state & 1) {
0992 unsigned int x, y, p, w;
0993 u8 *pos;
0994
0995 pos = &buf[FW_POS_XY + i * 3];
0996 x = (((u16)pos[0] & 0xf0) << 4) | pos[1];
0997 y = (((u16)pos[0] & 0x0f) << 8) | pos[2];
0998
0999
1000
1001
1002
1003
1004
1005 if (packet_size == PACKET_SIZE_OLD &&
1006 ts->chip_id == EKTF3624) {
1007 w = buf[FW_POS_WIDTH + i / 2];
1008 w >>= 4 * (~i & 1);
1009 w |= w << 4;
1010 w |= !w;
1011 p = w;
1012 } else {
1013 p = buf[FW_POS_PRESSURE + i];
1014 w = buf[FW_POS_WIDTH + i];
1015 }
1016
1017 dev_dbg(&ts->client->dev, "i=%d x=%d y=%d p=%d w=%d\n",
1018 i, x, y, p, w);
1019
1020 input_mt_slot(input, i);
1021 input_mt_report_slot_state(input, tool_type, true);
1022 touchscreen_report_pos(input, &ts->prop, x, y, true);
1023 input_event(input, EV_ABS, ABS_MT_PRESSURE, p);
1024 input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, w);
1025
1026 n_fingers--;
1027 }
1028
1029 finger_state >>= 1;
1030 }
1031
1032 input_mt_sync_frame(input);
1033 input_sync(input);
1034 }
1035
1036 static u8 elants_i2c_calculate_checksum(u8 *buf)
1037 {
1038 u8 checksum = 0;
1039 u8 i;
1040
1041 for (i = 0; i < FW_POS_CHECKSUM; i++)
1042 checksum += buf[i];
1043
1044 return checksum;
1045 }
1046
1047 static void elants_i2c_event(struct elants_data *ts, u8 *buf,
1048 size_t packet_size)
1049 {
1050 u8 checksum = elants_i2c_calculate_checksum(buf);
1051
1052 if (unlikely(buf[FW_POS_CHECKSUM] != checksum))
1053 dev_warn(&ts->client->dev,
1054 "%s: invalid checksum for packet %02x: %02x vs. %02x\n",
1055 __func__, buf[FW_POS_HEADER],
1056 checksum, buf[FW_POS_CHECKSUM]);
1057 else if (unlikely(buf[FW_POS_HEADER] != HEADER_REPORT_10_FINGER))
1058 dev_warn(&ts->client->dev,
1059 "%s: unknown packet type: %02x\n",
1060 __func__, buf[FW_POS_HEADER]);
1061 else
1062 elants_i2c_mt_event(ts, buf, packet_size);
1063 }
1064
1065 static irqreturn_t elants_i2c_irq(int irq, void *_dev)
1066 {
1067 const u8 wait_packet[] = { 0x64, 0x64, 0x64, 0x64 };
1068 struct elants_data *ts = _dev;
1069 struct i2c_client *client = ts->client;
1070 int report_count, report_len;
1071 int i;
1072 int len;
1073
1074 len = i2c_master_recv_dmasafe(client, ts->buf, sizeof(ts->buf));
1075 if (len < 0) {
1076 dev_err(&client->dev, "%s: failed to read data: %d\n",
1077 __func__, len);
1078 goto out;
1079 }
1080
1081 dev_dbg(&client->dev, "%s: packet %*ph\n",
1082 __func__, HEADER_SIZE, ts->buf);
1083
1084 switch (ts->state) {
1085 case ELAN_WAIT_RECALIBRATION:
1086 if (ts->buf[FW_HDR_TYPE] == CMD_HEADER_REK) {
1087 memcpy(ts->cmd_resp, ts->buf, sizeof(ts->cmd_resp));
1088 complete(&ts->cmd_done);
1089 ts->state = ELAN_STATE_NORMAL;
1090 }
1091 break;
1092
1093 case ELAN_WAIT_QUEUE_HEADER:
1094 if (ts->buf[FW_HDR_TYPE] != QUEUE_HEADER_NORMAL)
1095 break;
1096
1097 ts->state = ELAN_STATE_NORMAL;
1098 fallthrough;
1099
1100 case ELAN_STATE_NORMAL:
1101
1102 switch (ts->buf[FW_HDR_TYPE]) {
1103 case CMD_HEADER_HELLO:
1104 case CMD_HEADER_RESP:
1105 break;
1106
1107 case QUEUE_HEADER_WAIT:
1108 if (memcmp(ts->buf, wait_packet, sizeof(wait_packet))) {
1109 dev_err(&client->dev,
1110 "invalid wait packet %*ph\n",
1111 HEADER_SIZE, ts->buf);
1112 } else {
1113 ts->state = ELAN_WAIT_QUEUE_HEADER;
1114 udelay(30);
1115 }
1116 break;
1117
1118 case QUEUE_HEADER_SINGLE:
1119 elants_i2c_event(ts, &ts->buf[HEADER_SIZE],
1120 ts->buf[FW_HDR_LENGTH]);
1121 break;
1122
1123 case QUEUE_HEADER_NORMAL2:
1124
1125
1126
1127
1128
1129
1130
1131
1132 if (ts->chip_id != EKTF3624)
1133 break;
1134
1135 fallthrough;
1136
1137 case QUEUE_HEADER_NORMAL:
1138 report_count = ts->buf[FW_HDR_COUNT];
1139 if (report_count == 0 || report_count > 3) {
1140 dev_err(&client->dev,
1141 "bad report count: %*ph\n",
1142 HEADER_SIZE, ts->buf);
1143 break;
1144 }
1145
1146 report_len = ts->buf[FW_HDR_LENGTH] / report_count;
1147
1148 if (report_len == PACKET_SIZE_OLD &&
1149 ts->chip_id == EKTF3624) {
1150 dev_dbg_once(&client->dev,
1151 "using old report format\n");
1152 } else if (report_len != PACKET_SIZE) {
1153 dev_err(&client->dev,
1154 "mismatching report length: %*ph\n",
1155 HEADER_SIZE, ts->buf);
1156 break;
1157 }
1158
1159 for (i = 0; i < report_count; i++) {
1160 u8 *buf = ts->buf + HEADER_SIZE +
1161 i * report_len;
1162 elants_i2c_event(ts, buf, report_len);
1163 }
1164 break;
1165
1166 default:
1167 dev_err(&client->dev, "unknown packet %*ph\n",
1168 HEADER_SIZE, ts->buf);
1169 break;
1170 }
1171 break;
1172 }
1173
1174 out:
1175 return IRQ_HANDLED;
1176 }
1177
1178
1179
1180
1181 static ssize_t calibrate_store(struct device *dev,
1182 struct device_attribute *attr,
1183 const char *buf, size_t count)
1184 {
1185 struct i2c_client *client = to_i2c_client(dev);
1186 struct elants_data *ts = i2c_get_clientdata(client);
1187 int error;
1188
1189 error = mutex_lock_interruptible(&ts->sysfs_mutex);
1190 if (error)
1191 return error;
1192
1193 error = elants_i2c_calibrate(ts);
1194
1195 mutex_unlock(&ts->sysfs_mutex);
1196 return error ?: count;
1197 }
1198
1199 static ssize_t write_update_fw(struct device *dev,
1200 struct device_attribute *attr,
1201 const char *buf, size_t count)
1202 {
1203 struct i2c_client *client = to_i2c_client(dev);
1204 struct elants_data *ts = i2c_get_clientdata(client);
1205 int error;
1206
1207 error = mutex_lock_interruptible(&ts->sysfs_mutex);
1208 if (error)
1209 return error;
1210
1211 error = elants_i2c_fw_update(ts);
1212 dev_dbg(dev, "firmware update result: %d\n", error);
1213
1214 mutex_unlock(&ts->sysfs_mutex);
1215 return error ?: count;
1216 }
1217
1218 static ssize_t show_iap_mode(struct device *dev,
1219 struct device_attribute *attr, char *buf)
1220 {
1221 struct i2c_client *client = to_i2c_client(dev);
1222 struct elants_data *ts = i2c_get_clientdata(client);
1223
1224 return sprintf(buf, "%s\n",
1225 ts->iap_mode == ELAN_IAP_OPERATIONAL ?
1226 "Normal" : "Recovery");
1227 }
1228
1229 static ssize_t show_calibration_count(struct device *dev,
1230 struct device_attribute *attr, char *buf)
1231 {
1232 struct i2c_client *client = to_i2c_client(dev);
1233 const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_REK, 0x00, 0x01 };
1234 u8 resp[HEADER_SIZE];
1235 u16 rek_count;
1236 int error;
1237
1238 error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
1239 resp, sizeof(resp), 1,
1240 "read ReK status");
1241 if (error)
1242 return sprintf(buf, "%d\n", error);
1243
1244 rek_count = get_unaligned_be16(&resp[2]);
1245 return sprintf(buf, "0x%04x\n", rek_count);
1246 }
1247
1248 static DEVICE_ATTR_WO(calibrate);
1249 static DEVICE_ATTR(iap_mode, S_IRUGO, show_iap_mode, NULL);
1250 static DEVICE_ATTR(calibration_count, S_IRUGO, show_calibration_count, NULL);
1251 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, write_update_fw);
1252
1253 struct elants_version_attribute {
1254 struct device_attribute dattr;
1255 size_t field_offset;
1256 size_t field_size;
1257 };
1258
1259 #define __ELANTS_FIELD_SIZE(_field) \
1260 sizeof(((struct elants_data *)NULL)->_field)
1261 #define __ELANTS_VERIFY_SIZE(_field) \
1262 (BUILD_BUG_ON_ZERO(__ELANTS_FIELD_SIZE(_field) > 2) + \
1263 __ELANTS_FIELD_SIZE(_field))
1264 #define ELANTS_VERSION_ATTR(_field) \
1265 struct elants_version_attribute elants_ver_attr_##_field = { \
1266 .dattr = __ATTR(_field, S_IRUGO, \
1267 elants_version_attribute_show, NULL), \
1268 .field_offset = offsetof(struct elants_data, _field), \
1269 .field_size = __ELANTS_VERIFY_SIZE(_field), \
1270 }
1271
1272 static ssize_t elants_version_attribute_show(struct device *dev,
1273 struct device_attribute *dattr,
1274 char *buf)
1275 {
1276 struct i2c_client *client = to_i2c_client(dev);
1277 struct elants_data *ts = i2c_get_clientdata(client);
1278 struct elants_version_attribute *attr =
1279 container_of(dattr, struct elants_version_attribute, dattr);
1280 u8 *field = (u8 *)((char *)ts + attr->field_offset);
1281 unsigned int fmt_size;
1282 unsigned int val;
1283
1284 if (attr->field_size == 1) {
1285 val = *field;
1286 fmt_size = 2;
1287 } else {
1288 val = *(u16 *)field;
1289 fmt_size = 4;
1290 }
1291
1292 return sprintf(buf, "%0*x\n", fmt_size, val);
1293 }
1294
1295 static ELANTS_VERSION_ATTR(fw_version);
1296 static ELANTS_VERSION_ATTR(hw_version);
1297 static ELANTS_VERSION_ATTR(test_version);
1298 static ELANTS_VERSION_ATTR(solution_version);
1299 static ELANTS_VERSION_ATTR(bc_version);
1300 static ELANTS_VERSION_ATTR(iap_version);
1301
1302 static struct attribute *elants_attributes[] = {
1303 &dev_attr_calibrate.attr,
1304 &dev_attr_update_fw.attr,
1305 &dev_attr_iap_mode.attr,
1306 &dev_attr_calibration_count.attr,
1307
1308 &elants_ver_attr_fw_version.dattr.attr,
1309 &elants_ver_attr_hw_version.dattr.attr,
1310 &elants_ver_attr_test_version.dattr.attr,
1311 &elants_ver_attr_solution_version.dattr.attr,
1312 &elants_ver_attr_bc_version.dattr.attr,
1313 &elants_ver_attr_iap_version.dattr.attr,
1314 NULL
1315 };
1316
1317 static const struct attribute_group elants_attribute_group = {
1318 .attrs = elants_attributes,
1319 };
1320
1321 static int elants_i2c_power_on(struct elants_data *ts)
1322 {
1323 int error;
1324
1325
1326
1327
1328
1329 if (IS_ERR_OR_NULL(ts->reset_gpio))
1330 return 0;
1331
1332 gpiod_set_value_cansleep(ts->reset_gpio, 1);
1333
1334 error = regulator_enable(ts->vcc33);
1335 if (error) {
1336 dev_err(&ts->client->dev,
1337 "failed to enable vcc33 regulator: %d\n",
1338 error);
1339 goto release_reset_gpio;
1340 }
1341
1342 error = regulator_enable(ts->vccio);
1343 if (error) {
1344 dev_err(&ts->client->dev,
1345 "failed to enable vccio regulator: %d\n",
1346 error);
1347 regulator_disable(ts->vcc33);
1348 goto release_reset_gpio;
1349 }
1350
1351
1352
1353
1354
1355 udelay(ELAN_POWERON_DELAY_USEC);
1356
1357 release_reset_gpio:
1358 gpiod_set_value_cansleep(ts->reset_gpio, 0);
1359 if (error)
1360 return error;
1361
1362 msleep(ELAN_RESET_DELAY_MSEC);
1363
1364 return 0;
1365 }
1366
1367 static void elants_i2c_power_off(void *_data)
1368 {
1369 struct elants_data *ts = _data;
1370
1371 if (!IS_ERR_OR_NULL(ts->reset_gpio)) {
1372
1373
1374
1375
1376 gpiod_set_value_cansleep(ts->reset_gpio, 1);
1377 regulator_disable(ts->vccio);
1378 regulator_disable(ts->vcc33);
1379 }
1380 }
1381
1382 #ifdef CONFIG_ACPI
1383 static const struct acpi_device_id i2c_hid_ids[] = {
1384 {"ACPI0C50", 0 },
1385 {"PNP0C50", 0 },
1386 { },
1387 };
1388
1389 static const guid_t i2c_hid_guid =
1390 GUID_INIT(0x3CDFF6F7, 0x4267, 0x4555,
1391 0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE);
1392
1393 static bool elants_acpi_is_hid_device(struct device *dev)
1394 {
1395 acpi_handle handle = ACPI_HANDLE(dev);
1396 union acpi_object *obj;
1397
1398 if (acpi_match_device_ids(ACPI_COMPANION(dev), i2c_hid_ids))
1399 return false;
1400
1401 obj = acpi_evaluate_dsm_typed(handle, &i2c_hid_guid, 1, 1, NULL, ACPI_TYPE_INTEGER);
1402 if (obj) {
1403 ACPI_FREE(obj);
1404 return true;
1405 }
1406
1407 return false;
1408 }
1409 #else
1410 static bool elants_acpi_is_hid_device(struct device *dev)
1411 {
1412 return false;
1413 }
1414 #endif
1415
1416 static int elants_i2c_probe(struct i2c_client *client)
1417 {
1418 union i2c_smbus_data dummy;
1419 struct elants_data *ts;
1420 unsigned long irqflags;
1421 int error;
1422
1423
1424 if (elants_acpi_is_hid_device(&client->dev)) {
1425 dev_warn(&client->dev, "This device appears to be an I2C-HID device, not binding\n");
1426 return -ENODEV;
1427 }
1428
1429 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1430 dev_err(&client->dev, "I2C check functionality error\n");
1431 return -ENXIO;
1432 }
1433
1434 ts = devm_kzalloc(&client->dev, sizeof(struct elants_data), GFP_KERNEL);
1435 if (!ts)
1436 return -ENOMEM;
1437
1438 mutex_init(&ts->sysfs_mutex);
1439 init_completion(&ts->cmd_done);
1440
1441 ts->client = client;
1442 ts->chip_id = (enum elants_chip_id)(uintptr_t)device_get_match_data(&client->dev);
1443 i2c_set_clientdata(client, ts);
1444
1445 ts->vcc33 = devm_regulator_get(&client->dev, "vcc33");
1446 if (IS_ERR(ts->vcc33)) {
1447 error = PTR_ERR(ts->vcc33);
1448 if (error != -EPROBE_DEFER)
1449 dev_err(&client->dev,
1450 "Failed to get 'vcc33' regulator: %d\n",
1451 error);
1452 return error;
1453 }
1454
1455 ts->vccio = devm_regulator_get(&client->dev, "vccio");
1456 if (IS_ERR(ts->vccio)) {
1457 error = PTR_ERR(ts->vccio);
1458 if (error != -EPROBE_DEFER)
1459 dev_err(&client->dev,
1460 "Failed to get 'vccio' regulator: %d\n",
1461 error);
1462 return error;
1463 }
1464
1465 ts->reset_gpio = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_LOW);
1466 if (IS_ERR(ts->reset_gpio)) {
1467 error = PTR_ERR(ts->reset_gpio);
1468
1469 if (error == -EPROBE_DEFER)
1470 return error;
1471
1472 if (error != -ENOENT && error != -ENOSYS) {
1473 dev_err(&client->dev,
1474 "failed to get reset gpio: %d\n",
1475 error);
1476 return error;
1477 }
1478
1479 ts->keep_power_in_suspend = true;
1480 }
1481
1482 error = elants_i2c_power_on(ts);
1483 if (error)
1484 return error;
1485
1486 error = devm_add_action_or_reset(&client->dev,
1487 elants_i2c_power_off, ts);
1488 if (error) {
1489 dev_err(&client->dev,
1490 "failed to install power off action: %d\n", error);
1491 return error;
1492 }
1493
1494
1495 if (i2c_smbus_xfer(client->adapter, client->addr, 0,
1496 I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &dummy) < 0) {
1497 dev_err(&client->dev, "nothing at this address\n");
1498 return -ENXIO;
1499 }
1500
1501 error = elants_i2c_initialize(ts);
1502 if (error) {
1503 dev_err(&client->dev, "failed to initialize: %d\n", error);
1504 return error;
1505 }
1506
1507 ts->input = devm_input_allocate_device(&client->dev);
1508 if (!ts->input) {
1509 dev_err(&client->dev, "Failed to allocate input device\n");
1510 return -ENOMEM;
1511 }
1512
1513 ts->input->name = "Elan Touchscreen";
1514 ts->input->id.bustype = BUS_I2C;
1515
1516
1517
1518 input_set_abs_params(ts->input, ABS_MT_POSITION_X, 0, ts->x_max, 0, 0);
1519 input_set_abs_params(ts->input, ABS_MT_POSITION_Y, 0, ts->y_max, 0, 0);
1520 input_set_abs_params(ts->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
1521 input_set_abs_params(ts->input, ABS_MT_PRESSURE, 0, 255, 0, 0);
1522 input_set_abs_params(ts->input, ABS_MT_TOOL_TYPE,
1523 0, MT_TOOL_PALM, 0, 0);
1524
1525 touchscreen_parse_properties(ts->input, true, &ts->prop);
1526
1527 if (ts->chip_id == EKTF3624 && ts->phy_x && ts->phy_y) {
1528
1529 ts->x_res = DIV_ROUND_CLOSEST(ts->prop.max_x, ts->phy_x);
1530 ts->y_res = DIV_ROUND_CLOSEST(ts->prop.max_y, ts->phy_y);
1531 }
1532
1533 input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res);
1534 input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res);
1535 input_abs_set_res(ts->input, ABS_MT_TOUCH_MAJOR, ts->major_res);
1536
1537 error = input_mt_init_slots(ts->input, MAX_CONTACT_NUM,
1538 INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
1539 if (error) {
1540 dev_err(&client->dev,
1541 "failed to initialize MT slots: %d\n", error);
1542 return error;
1543 }
1544
1545 error = input_register_device(ts->input);
1546 if (error) {
1547 dev_err(&client->dev,
1548 "unable to register input device: %d\n", error);
1549 return error;
1550 }
1551
1552
1553
1554
1555
1556
1557 irqflags = irq_get_trigger_type(client->irq);
1558 if (!irqflags)
1559 irqflags = IRQF_TRIGGER_FALLING;
1560
1561 error = devm_request_threaded_irq(&client->dev, client->irq,
1562 NULL, elants_i2c_irq,
1563 irqflags | IRQF_ONESHOT,
1564 client->name, ts);
1565 if (error) {
1566 dev_err(&client->dev, "Failed to register interrupt\n");
1567 return error;
1568 }
1569
1570
1571
1572
1573
1574 if (!client->dev.of_node)
1575 device_init_wakeup(&client->dev, true);
1576
1577 error = devm_device_add_group(&client->dev, &elants_attribute_group);
1578 if (error) {
1579 dev_err(&client->dev, "failed to create sysfs attributes: %d\n",
1580 error);
1581 return error;
1582 }
1583
1584 return 0;
1585 }
1586
1587 static int __maybe_unused elants_i2c_suspend(struct device *dev)
1588 {
1589 struct i2c_client *client = to_i2c_client(dev);
1590 struct elants_data *ts = i2c_get_clientdata(client);
1591 const u8 set_sleep_cmd[] = {
1592 CMD_HEADER_WRITE, E_POWER_STATE_SLEEP, 0x00, 0x01
1593 };
1594 int retry_cnt;
1595 int error;
1596
1597
1598 if (ts->iap_mode != ELAN_IAP_OPERATIONAL)
1599 return -EBUSY;
1600
1601 disable_irq(client->irq);
1602
1603 if (device_may_wakeup(dev)) {
1604
1605
1606
1607
1608 ts->wake_irq_enabled = (enable_irq_wake(client->irq) == 0);
1609 } else if (ts->keep_power_in_suspend) {
1610 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
1611 error = elants_i2c_send(client, set_sleep_cmd,
1612 sizeof(set_sleep_cmd));
1613 if (!error)
1614 break;
1615
1616 dev_err(&client->dev,
1617 "suspend command failed: %d\n", error);
1618 }
1619 } else {
1620 elants_i2c_power_off(ts);
1621 }
1622
1623 return 0;
1624 }
1625
1626 static int __maybe_unused elants_i2c_resume(struct device *dev)
1627 {
1628 struct i2c_client *client = to_i2c_client(dev);
1629 struct elants_data *ts = i2c_get_clientdata(client);
1630 const u8 set_active_cmd[] = {
1631 CMD_HEADER_WRITE, E_POWER_STATE_RESUME, 0x00, 0x01
1632 };
1633 int retry_cnt;
1634 int error;
1635
1636 if (device_may_wakeup(dev)) {
1637 if (ts->wake_irq_enabled)
1638 disable_irq_wake(client->irq);
1639 elants_i2c_sw_reset(client);
1640 } else if (ts->keep_power_in_suspend) {
1641 for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
1642 error = elants_i2c_send(client, set_active_cmd,
1643 sizeof(set_active_cmd));
1644 if (!error)
1645 break;
1646
1647 dev_err(&client->dev,
1648 "resume command failed: %d\n", error);
1649 }
1650 } else {
1651 elants_i2c_power_on(ts);
1652 elants_i2c_initialize(ts);
1653 }
1654
1655 ts->state = ELAN_STATE_NORMAL;
1656 enable_irq(client->irq);
1657
1658 return 0;
1659 }
1660
1661 static SIMPLE_DEV_PM_OPS(elants_i2c_pm_ops,
1662 elants_i2c_suspend, elants_i2c_resume);
1663
1664 static const struct i2c_device_id elants_i2c_id[] = {
1665 { DEVICE_NAME, EKTH3500 },
1666 { "ekth3500", EKTH3500 },
1667 { "ektf3624", EKTF3624 },
1668 { }
1669 };
1670 MODULE_DEVICE_TABLE(i2c, elants_i2c_id);
1671
1672 #ifdef CONFIG_ACPI
1673 static const struct acpi_device_id elants_acpi_id[] = {
1674 { "ELAN0001", EKTH3500 },
1675 { }
1676 };
1677 MODULE_DEVICE_TABLE(acpi, elants_acpi_id);
1678 #endif
1679
1680 #ifdef CONFIG_OF
1681 static const struct of_device_id elants_of_match[] = {
1682 { .compatible = "elan,ekth3500", .data = (void *)EKTH3500 },
1683 { .compatible = "elan,ektf3624", .data = (void *)EKTF3624 },
1684 { }
1685 };
1686 MODULE_DEVICE_TABLE(of, elants_of_match);
1687 #endif
1688
1689 static struct i2c_driver elants_i2c_driver = {
1690 .probe_new = elants_i2c_probe,
1691 .id_table = elants_i2c_id,
1692 .driver = {
1693 .name = DEVICE_NAME,
1694 .pm = &elants_i2c_pm_ops,
1695 .acpi_match_table = ACPI_PTR(elants_acpi_id),
1696 .of_match_table = of_match_ptr(elants_of_match),
1697 .probe_type = PROBE_PREFER_ASYNCHRONOUS,
1698 },
1699 };
1700 module_i2c_driver(elants_i2c_driver);
1701
1702 MODULE_AUTHOR("Scott Liu <scott.liu@emc.com.tw>");
1703 MODULE_DESCRIPTION("Elan I2c Touchscreen driver");
1704 MODULE_LICENSE("GPL");