0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <linux/completion.h>
0017 #include <linux/delay.h>
0018 #include <linux/i2c.h>
0019 #include <linux/interrupt.h>
0020 #include <linux/jiffies.h>
0021 #include <linux/kernel.h>
0022 #include <linux/slab.h>
0023 #include <linux/sched.h>
0024 #include <asm/unaligned.h>
0025
0026 #include "elan_i2c.h"
0027
0028
0029 #define ETP_I2C_RESET 0x0100
0030 #define ETP_I2C_WAKE_UP 0x0800
0031 #define ETP_I2C_SLEEP 0x0801
0032 #define ETP_I2C_DESC_CMD 0x0001
0033 #define ETP_I2C_REPORT_DESC_CMD 0x0002
0034 #define ETP_I2C_STAND_CMD 0x0005
0035 #define ETP_I2C_PATTERN_CMD 0x0100
0036 #define ETP_I2C_UNIQUEID_CMD 0x0101
0037 #define ETP_I2C_FW_VERSION_CMD 0x0102
0038 #define ETP_I2C_IC_TYPE_CMD 0x0103
0039 #define ETP_I2C_OSM_VERSION_CMD 0x0103
0040 #define ETP_I2C_NSM_VERSION_CMD 0x0104
0041 #define ETP_I2C_XY_TRACENUM_CMD 0x0105
0042 #define ETP_I2C_MAX_X_AXIS_CMD 0x0106
0043 #define ETP_I2C_MAX_Y_AXIS_CMD 0x0107
0044 #define ETP_I2C_RESOLUTION_CMD 0x0108
0045 #define ETP_I2C_PRESSURE_CMD 0x010A
0046 #define ETP_I2C_IAP_VERSION_CMD 0x0110
0047 #define ETP_I2C_IC_TYPE_P0_CMD 0x0110
0048 #define ETP_I2C_IAP_VERSION_P0_CMD 0x0111
0049 #define ETP_I2C_SET_CMD 0x0300
0050 #define ETP_I2C_POWER_CMD 0x0307
0051 #define ETP_I2C_FW_CHECKSUM_CMD 0x030F
0052 #define ETP_I2C_IAP_CTRL_CMD 0x0310
0053 #define ETP_I2C_IAP_CMD 0x0311
0054 #define ETP_I2C_IAP_RESET_CMD 0x0314
0055 #define ETP_I2C_IAP_CHECKSUM_CMD 0x0315
0056 #define ETP_I2C_CALIBRATE_CMD 0x0316
0057 #define ETP_I2C_MAX_BASELINE_CMD 0x0317
0058 #define ETP_I2C_MIN_BASELINE_CMD 0x0318
0059 #define ETP_I2C_IAP_TYPE_REG 0x0040
0060 #define ETP_I2C_IAP_TYPE_CMD 0x0304
0061
0062 #define ETP_I2C_REPORT_LEN 34
0063 #define ETP_I2C_REPORT_LEN_ID2 39
0064 #define ETP_I2C_REPORT_MAX_LEN 39
0065 #define ETP_I2C_DESC_LENGTH 30
0066 #define ETP_I2C_REPORT_DESC_LENGTH 158
0067 #define ETP_I2C_INF_LENGTH 2
0068 #define ETP_I2C_IAP_PASSWORD 0x1EA5
0069 #define ETP_I2C_IAP_RESET 0xF0F0
0070 #define ETP_I2C_MAIN_MODE_ON (1 << 9)
0071 #define ETP_I2C_IAP_REG_L 0x01
0072 #define ETP_I2C_IAP_REG_H 0x06
0073
0074 static int elan_i2c_read_block(struct i2c_client *client,
0075 u16 reg, u8 *val, u16 len)
0076 {
0077 __le16 buf[] = {
0078 cpu_to_le16(reg),
0079 };
0080 struct i2c_msg msgs[] = {
0081 {
0082 .addr = client->addr,
0083 .flags = client->flags & I2C_M_TEN,
0084 .len = sizeof(buf),
0085 .buf = (u8 *)buf,
0086 },
0087 {
0088 .addr = client->addr,
0089 .flags = (client->flags & I2C_M_TEN) | I2C_M_RD,
0090 .len = len,
0091 .buf = val,
0092 }
0093 };
0094 int ret;
0095
0096 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
0097 return ret == ARRAY_SIZE(msgs) ? 0 : (ret < 0 ? ret : -EIO);
0098 }
0099
0100 static int elan_i2c_read_cmd(struct i2c_client *client, u16 reg, u8 *val)
0101 {
0102 int retval;
0103
0104 retval = elan_i2c_read_block(client, reg, val, ETP_I2C_INF_LENGTH);
0105 if (retval < 0) {
0106 dev_err(&client->dev, "reading cmd (0x%04x) fail.\n", reg);
0107 return retval;
0108 }
0109
0110 return 0;
0111 }
0112
0113 static int elan_i2c_write_cmd(struct i2c_client *client, u16 reg, u16 cmd)
0114 {
0115 __le16 buf[] = {
0116 cpu_to_le16(reg),
0117 cpu_to_le16(cmd),
0118 };
0119 struct i2c_msg msg = {
0120 .addr = client->addr,
0121 .flags = client->flags & I2C_M_TEN,
0122 .len = sizeof(buf),
0123 .buf = (u8 *)buf,
0124 };
0125 int ret;
0126
0127 ret = i2c_transfer(client->adapter, &msg, 1);
0128 if (ret != 1) {
0129 if (ret >= 0)
0130 ret = -EIO;
0131 dev_err(&client->dev, "writing cmd (0x%04x) failed: %d\n",
0132 reg, ret);
0133 return ret;
0134 }
0135
0136 return 0;
0137 }
0138
0139 static int elan_i2c_initialize(struct i2c_client *client)
0140 {
0141 struct device *dev = &client->dev;
0142 int error;
0143 u8 val[256];
0144
0145 error = elan_i2c_write_cmd(client, ETP_I2C_STAND_CMD, ETP_I2C_RESET);
0146 if (error) {
0147 dev_err(dev, "device reset failed: %d\n", error);
0148 return error;
0149 }
0150
0151
0152 msleep(100);
0153
0154
0155 error = i2c_master_recv(client, val, ETP_I2C_INF_LENGTH);
0156 if (error < 0) {
0157 dev_err(dev, "failed to read reset response: %d\n", error);
0158 return error;
0159 }
0160
0161 error = elan_i2c_read_block(client, ETP_I2C_DESC_CMD,
0162 val, ETP_I2C_DESC_LENGTH);
0163 if (error) {
0164 dev_err(dev, "cannot get device descriptor: %d\n", error);
0165 return error;
0166 }
0167
0168 error = elan_i2c_read_block(client, ETP_I2C_REPORT_DESC_CMD,
0169 val, ETP_I2C_REPORT_DESC_LENGTH);
0170 if (error) {
0171 dev_err(dev, "fetching report descriptor failed.: %d\n", error);
0172 return error;
0173 }
0174
0175 return 0;
0176 }
0177
0178 static int elan_i2c_sleep_control(struct i2c_client *client, bool sleep)
0179 {
0180 return elan_i2c_write_cmd(client, ETP_I2C_STAND_CMD,
0181 sleep ? ETP_I2C_SLEEP : ETP_I2C_WAKE_UP);
0182 }
0183
0184 static int elan_i2c_power_control(struct i2c_client *client, bool enable)
0185 {
0186 u8 val[2];
0187 u16 reg;
0188 int error;
0189
0190 error = elan_i2c_read_cmd(client, ETP_I2C_POWER_CMD, val);
0191 if (error) {
0192 dev_err(&client->dev,
0193 "failed to read current power state: %d\n",
0194 error);
0195 return error;
0196 }
0197
0198 reg = le16_to_cpup((__le16 *)val);
0199 if (enable)
0200 reg &= ~ETP_DISABLE_POWER;
0201 else
0202 reg |= ETP_DISABLE_POWER;
0203
0204 error = elan_i2c_write_cmd(client, ETP_I2C_POWER_CMD, reg);
0205 if (error) {
0206 dev_err(&client->dev,
0207 "failed to write current power state: %d\n",
0208 error);
0209 return error;
0210 }
0211
0212 return 0;
0213 }
0214
0215 static int elan_i2c_set_mode(struct i2c_client *client, u8 mode)
0216 {
0217 return elan_i2c_write_cmd(client, ETP_I2C_SET_CMD, mode);
0218 }
0219
0220
0221 static int elan_i2c_calibrate(struct i2c_client *client)
0222 {
0223 return elan_i2c_write_cmd(client, ETP_I2C_CALIBRATE_CMD, 1);
0224 }
0225
0226 static int elan_i2c_calibrate_result(struct i2c_client *client, u8 *val)
0227 {
0228 return elan_i2c_read_block(client, ETP_I2C_CALIBRATE_CMD, val, 1);
0229 }
0230
0231 static int elan_i2c_get_baseline_data(struct i2c_client *client,
0232 bool max_baseline, u8 *value)
0233 {
0234 int error;
0235 u8 val[3];
0236
0237 error = elan_i2c_read_cmd(client,
0238 max_baseline ? ETP_I2C_MAX_BASELINE_CMD :
0239 ETP_I2C_MIN_BASELINE_CMD,
0240 val);
0241 if (error)
0242 return error;
0243
0244 *value = le16_to_cpup((__le16 *)val);
0245
0246 return 0;
0247 }
0248
0249 static int elan_i2c_get_pattern(struct i2c_client *client, u8 *pattern)
0250 {
0251 int error;
0252 u8 val[3];
0253
0254 error = elan_i2c_read_cmd(client, ETP_I2C_PATTERN_CMD, val);
0255 if (error) {
0256 dev_err(&client->dev, "failed to get pattern: %d\n", error);
0257 return error;
0258 }
0259
0260
0261
0262
0263
0264
0265 *pattern = val[0] == 0xFF && val[1] == 0xFF ? 0 : val[1];
0266
0267 return 0;
0268 }
0269
0270 static int elan_i2c_get_version(struct i2c_client *client,
0271 u8 pattern, bool iap, u8 *version)
0272 {
0273 int error;
0274 u16 cmd;
0275 u8 val[3];
0276
0277 if (!iap)
0278 cmd = ETP_I2C_FW_VERSION_CMD;
0279 else if (pattern == 0)
0280 cmd = ETP_I2C_IAP_VERSION_P0_CMD;
0281 else
0282 cmd = ETP_I2C_IAP_VERSION_CMD;
0283
0284 error = elan_i2c_read_cmd(client, cmd, val);
0285 if (error) {
0286 dev_err(&client->dev, "failed to get %s version: %d\n",
0287 iap ? "IAP" : "FW", error);
0288 return error;
0289 }
0290
0291 if (pattern >= 0x01)
0292 *version = iap ? val[1] : val[0];
0293 else
0294 *version = val[0];
0295 return 0;
0296 }
0297
0298 static int elan_i2c_get_sm_version(struct i2c_client *client, u8 pattern,
0299 u16 *ic_type, u8 *version, u8 *clickpad)
0300 {
0301 int error;
0302 u8 val[3];
0303
0304 if (pattern >= 0x01) {
0305 error = elan_i2c_read_cmd(client, ETP_I2C_IC_TYPE_CMD, val);
0306 if (error) {
0307 dev_err(&client->dev, "failed to get ic type: %d\n",
0308 error);
0309 return error;
0310 }
0311 *ic_type = be16_to_cpup((__be16 *)val);
0312
0313 error = elan_i2c_read_cmd(client, ETP_I2C_NSM_VERSION_CMD,
0314 val);
0315 if (error) {
0316 dev_err(&client->dev, "failed to get SM version: %d\n",
0317 error);
0318 return error;
0319 }
0320 *version = val[1];
0321 *clickpad = val[0] & 0x10;
0322 } else {
0323 error = elan_i2c_read_cmd(client, ETP_I2C_OSM_VERSION_CMD, val);
0324 if (error) {
0325 dev_err(&client->dev, "failed to get SM version: %d\n",
0326 error);
0327 return error;
0328 }
0329 *version = val[0];
0330
0331 error = elan_i2c_read_cmd(client, ETP_I2C_IC_TYPE_P0_CMD, val);
0332 if (error) {
0333 dev_err(&client->dev, "failed to get ic type: %d\n",
0334 error);
0335 return error;
0336 }
0337 *ic_type = val[0];
0338
0339 error = elan_i2c_read_cmd(client, ETP_I2C_NSM_VERSION_CMD,
0340 val);
0341 if (error) {
0342 dev_err(&client->dev, "failed to get SM version: %d\n",
0343 error);
0344 return error;
0345 }
0346 *clickpad = val[0] & 0x10;
0347 }
0348
0349 return 0;
0350 }
0351
0352 static int elan_i2c_get_product_id(struct i2c_client *client, u16 *id)
0353 {
0354 int error;
0355 u8 val[3];
0356
0357 error = elan_i2c_read_cmd(client, ETP_I2C_UNIQUEID_CMD, val);
0358 if (error) {
0359 dev_err(&client->dev, "failed to get product ID: %d\n", error);
0360 return error;
0361 }
0362
0363 *id = le16_to_cpup((__le16 *)val);
0364 return 0;
0365 }
0366
0367 static int elan_i2c_get_checksum(struct i2c_client *client,
0368 bool iap, u16 *csum)
0369 {
0370 int error;
0371 u8 val[3];
0372
0373 error = elan_i2c_read_cmd(client,
0374 iap ? ETP_I2C_IAP_CHECKSUM_CMD :
0375 ETP_I2C_FW_CHECKSUM_CMD,
0376 val);
0377 if (error) {
0378 dev_err(&client->dev, "failed to get %s checksum: %d\n",
0379 iap ? "IAP" : "FW", error);
0380 return error;
0381 }
0382
0383 *csum = le16_to_cpup((__le16 *)val);
0384 return 0;
0385 }
0386
0387 static int elan_i2c_get_max(struct i2c_client *client,
0388 unsigned int *max_x, unsigned int *max_y)
0389 {
0390 int error;
0391 u8 val[3];
0392
0393 error = elan_i2c_read_cmd(client, ETP_I2C_MAX_X_AXIS_CMD, val);
0394 if (error) {
0395 dev_err(&client->dev, "failed to get X dimension: %d\n", error);
0396 return error;
0397 }
0398
0399 *max_x = le16_to_cpup((__le16 *)val);
0400
0401 error = elan_i2c_read_cmd(client, ETP_I2C_MAX_Y_AXIS_CMD, val);
0402 if (error) {
0403 dev_err(&client->dev, "failed to get Y dimension: %d\n", error);
0404 return error;
0405 }
0406
0407 *max_y = le16_to_cpup((__le16 *)val);
0408
0409 return 0;
0410 }
0411
0412 static int elan_i2c_get_resolution(struct i2c_client *client,
0413 u8 *hw_res_x, u8 *hw_res_y)
0414 {
0415 int error;
0416 u8 val[3];
0417
0418 error = elan_i2c_read_cmd(client, ETP_I2C_RESOLUTION_CMD, val);
0419 if (error) {
0420 dev_err(&client->dev, "failed to get resolution: %d\n", error);
0421 return error;
0422 }
0423
0424 *hw_res_x = val[0];
0425 *hw_res_y = val[1];
0426
0427 return 0;
0428 }
0429
0430 static int elan_i2c_get_num_traces(struct i2c_client *client,
0431 unsigned int *x_traces,
0432 unsigned int *y_traces)
0433 {
0434 int error;
0435 u8 val[3];
0436
0437 error = elan_i2c_read_cmd(client, ETP_I2C_XY_TRACENUM_CMD, val);
0438 if (error) {
0439 dev_err(&client->dev, "failed to get trace info: %d\n", error);
0440 return error;
0441 }
0442
0443 *x_traces = val[0];
0444 *y_traces = val[1];
0445
0446 return 0;
0447 }
0448
0449 static int elan_i2c_get_pressure_adjustment(struct i2c_client *client,
0450 int *adjustment)
0451 {
0452 int error;
0453 u8 val[3];
0454
0455 error = elan_i2c_read_cmd(client, ETP_I2C_PRESSURE_CMD, val);
0456 if (error) {
0457 dev_err(&client->dev, "failed to get pressure format: %d\n",
0458 error);
0459 return error;
0460 }
0461
0462 if ((val[0] >> 4) & 0x1)
0463 *adjustment = 0;
0464 else
0465 *adjustment = ETP_PRESSURE_OFFSET;
0466
0467 return 0;
0468 }
0469
0470 static int elan_i2c_iap_get_mode(struct i2c_client *client, enum tp_mode *mode)
0471 {
0472 int error;
0473 u16 constant;
0474 u8 val[3];
0475
0476 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_CTRL_CMD, val);
0477 if (error) {
0478 dev_err(&client->dev,
0479 "failed to read iap control register: %d\n",
0480 error);
0481 return error;
0482 }
0483
0484 constant = le16_to_cpup((__le16 *)val);
0485 dev_dbg(&client->dev, "iap control reg: 0x%04x.\n", constant);
0486
0487 *mode = (constant & ETP_I2C_MAIN_MODE_ON) ? MAIN_MODE : IAP_MODE;
0488
0489 return 0;
0490 }
0491
0492 static int elan_i2c_iap_reset(struct i2c_client *client)
0493 {
0494 int error;
0495
0496 error = elan_i2c_write_cmd(client, ETP_I2C_IAP_RESET_CMD,
0497 ETP_I2C_IAP_RESET);
0498 if (error) {
0499 dev_err(&client->dev, "cannot reset IC: %d\n", error);
0500 return error;
0501 }
0502
0503 return 0;
0504 }
0505
0506 static int elan_i2c_set_flash_key(struct i2c_client *client)
0507 {
0508 int error;
0509
0510 error = elan_i2c_write_cmd(client, ETP_I2C_IAP_CMD,
0511 ETP_I2C_IAP_PASSWORD);
0512 if (error) {
0513 dev_err(&client->dev, "cannot set flash key: %d\n", error);
0514 return error;
0515 }
0516
0517 return 0;
0518 }
0519
0520 static int elan_read_write_iap_type(struct i2c_client *client, u16 fw_page_size)
0521 {
0522 int error;
0523 u16 constant;
0524 u8 val[3];
0525 int retry = 3;
0526
0527 do {
0528 error = elan_i2c_write_cmd(client, ETP_I2C_IAP_TYPE_CMD,
0529 fw_page_size / 2);
0530 if (error) {
0531 dev_err(&client->dev,
0532 "cannot write iap type: %d\n", error);
0533 return error;
0534 }
0535
0536 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_TYPE_CMD, val);
0537 if (error) {
0538 dev_err(&client->dev,
0539 "failed to read iap type register: %d\n",
0540 error);
0541 return error;
0542 }
0543 constant = le16_to_cpup((__le16 *)val);
0544 dev_dbg(&client->dev, "iap type reg: 0x%04x\n", constant);
0545
0546 if (constant == fw_page_size / 2)
0547 return 0;
0548
0549 } while (--retry > 0);
0550
0551 dev_err(&client->dev, "cannot set iap type\n");
0552 return -EIO;
0553 }
0554
0555 static int elan_i2c_prepare_fw_update(struct i2c_client *client, u16 ic_type,
0556 u8 iap_version, u16 fw_page_size)
0557 {
0558 struct device *dev = &client->dev;
0559 int error;
0560 enum tp_mode mode;
0561 u8 val[3];
0562 u16 password;
0563
0564
0565 error = elan_i2c_iap_get_mode(client, &mode);
0566 if (error)
0567 return error;
0568
0569 if (mode == IAP_MODE) {
0570
0571 error = elan_i2c_iap_reset(client);
0572 if (error)
0573 return error;
0574
0575 msleep(30);
0576 }
0577
0578
0579 error = elan_i2c_set_flash_key(client);
0580 if (error)
0581 return error;
0582
0583
0584 msleep(mode == MAIN_MODE ? 100 : 30);
0585
0586
0587 error = elan_i2c_iap_get_mode(client, &mode);
0588 if (error)
0589 return error;
0590
0591 if (mode == MAIN_MODE) {
0592 dev_err(dev, "wrong mode: %d\n", mode);
0593 return -EIO;
0594 }
0595
0596 if (ic_type >= 0x0D && iap_version >= 1) {
0597 error = elan_read_write_iap_type(client, fw_page_size);
0598 if (error)
0599 return error;
0600 }
0601
0602
0603 error = elan_i2c_set_flash_key(client);
0604 if (error)
0605 return error;
0606
0607
0608 msleep(30);
0609
0610
0611 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_CMD, val);
0612 if (error) {
0613 dev_err(dev, "cannot read iap password: %d\n",
0614 error);
0615 return error;
0616 }
0617
0618 password = le16_to_cpup((__le16 *)val);
0619 if (password != ETP_I2C_IAP_PASSWORD) {
0620 dev_err(dev, "wrong iap password: 0x%X\n", password);
0621 return -EIO;
0622 }
0623
0624 return 0;
0625 }
0626
0627 static int elan_i2c_write_fw_block(struct i2c_client *client, u16 fw_page_size,
0628 const u8 *page, u16 checksum, int idx)
0629 {
0630 struct device *dev = &client->dev;
0631 u8 *page_store;
0632 u8 val[3];
0633 u16 result;
0634 int ret, error;
0635
0636 page_store = kmalloc(fw_page_size + 4, GFP_KERNEL);
0637 if (!page_store)
0638 return -ENOMEM;
0639
0640 page_store[0] = ETP_I2C_IAP_REG_L;
0641 page_store[1] = ETP_I2C_IAP_REG_H;
0642 memcpy(&page_store[2], page, fw_page_size);
0643
0644 put_unaligned_le16(checksum, &page_store[fw_page_size + 2]);
0645
0646 ret = i2c_master_send(client, page_store, fw_page_size + 4);
0647 if (ret != fw_page_size + 4) {
0648 error = ret < 0 ? ret : -EIO;
0649 dev_err(dev, "Failed to write page %d: %d\n", idx, error);
0650 goto exit;
0651 }
0652
0653
0654 msleep(fw_page_size == ETP_FW_PAGE_SIZE_512 ? 50 : 35);
0655
0656 error = elan_i2c_read_cmd(client, ETP_I2C_IAP_CTRL_CMD, val);
0657 if (error) {
0658 dev_err(dev, "Failed to read IAP write result: %d\n", error);
0659 goto exit;
0660 }
0661
0662 result = le16_to_cpup((__le16 *)val);
0663 if (result & (ETP_FW_IAP_PAGE_ERR | ETP_FW_IAP_INTF_ERR)) {
0664 dev_err(dev, "IAP reports failed write: %04hx\n",
0665 result);
0666 error = -EIO;
0667 goto exit;
0668 }
0669
0670 exit:
0671 kfree(page_store);
0672 return error;
0673 }
0674
0675 static int elan_i2c_finish_fw_update(struct i2c_client *client,
0676 struct completion *completion)
0677 {
0678 struct device *dev = &client->dev;
0679 int error = 0;
0680 int len;
0681 u8 buffer[ETP_I2C_REPORT_MAX_LEN];
0682
0683 len = i2c_master_recv(client, buffer, ETP_I2C_REPORT_MAX_LEN);
0684 if (len <= 0) {
0685 error = len < 0 ? len : -EIO;
0686 dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n",
0687 error, len);
0688 }
0689
0690 reinit_completion(completion);
0691 enable_irq(client->irq);
0692
0693 error = elan_i2c_write_cmd(client, ETP_I2C_STAND_CMD, ETP_I2C_RESET);
0694 if (error) {
0695 dev_err(dev, "device reset failed: %d\n", error);
0696 } else if (!wait_for_completion_timeout(completion,
0697 msecs_to_jiffies(300))) {
0698 dev_err(dev, "timeout waiting for device reset\n");
0699 error = -ETIMEDOUT;
0700 }
0701
0702 disable_irq(client->irq);
0703
0704 if (error)
0705 return error;
0706
0707 len = i2c_master_recv(client, buffer, ETP_I2C_INF_LENGTH);
0708 if (len != ETP_I2C_INF_LENGTH) {
0709 error = len < 0 ? len : -EIO;
0710 dev_err(dev, "failed to read INT signal: %d (%d)\n",
0711 error, len);
0712 return error;
0713 }
0714
0715 return 0;
0716 }
0717
0718 static int elan_i2c_get_report_features(struct i2c_client *client, u8 pattern,
0719 unsigned int *features,
0720 unsigned int *report_len)
0721 {
0722 *features = ETP_FEATURE_REPORT_MK;
0723 *report_len = pattern <= 0x01 ?
0724 ETP_I2C_REPORT_LEN : ETP_I2C_REPORT_LEN_ID2;
0725 return 0;
0726 }
0727
0728 static int elan_i2c_get_report(struct i2c_client *client,
0729 u8 *report, unsigned int report_len)
0730 {
0731 int len;
0732
0733 len = i2c_master_recv(client, report, report_len);
0734 if (len < 0) {
0735 dev_err(&client->dev, "failed to read report data: %d\n", len);
0736 return len;
0737 }
0738
0739 if (len != report_len) {
0740 dev_err(&client->dev,
0741 "wrong report length (%d vs %d expected)\n",
0742 len, report_len);
0743 return -EIO;
0744 }
0745
0746 return 0;
0747 }
0748
0749 const struct elan_transport_ops elan_i2c_ops = {
0750 .initialize = elan_i2c_initialize,
0751 .sleep_control = elan_i2c_sleep_control,
0752 .power_control = elan_i2c_power_control,
0753 .set_mode = elan_i2c_set_mode,
0754
0755 .calibrate = elan_i2c_calibrate,
0756 .calibrate_result = elan_i2c_calibrate_result,
0757
0758 .get_baseline_data = elan_i2c_get_baseline_data,
0759
0760 .get_version = elan_i2c_get_version,
0761 .get_sm_version = elan_i2c_get_sm_version,
0762 .get_product_id = elan_i2c_get_product_id,
0763 .get_checksum = elan_i2c_get_checksum,
0764 .get_pressure_adjustment = elan_i2c_get_pressure_adjustment,
0765
0766 .get_max = elan_i2c_get_max,
0767 .get_resolution = elan_i2c_get_resolution,
0768 .get_num_traces = elan_i2c_get_num_traces,
0769
0770 .iap_get_mode = elan_i2c_iap_get_mode,
0771 .iap_reset = elan_i2c_iap_reset,
0772
0773 .prepare_fw_update = elan_i2c_prepare_fw_update,
0774 .write_fw_block = elan_i2c_write_fw_block,
0775 .finish_fw_update = elan_i2c_finish_fw_update,
0776
0777 .get_pattern = elan_i2c_get_pattern,
0778
0779 .get_report_features = elan_i2c_get_report_features,
0780 .get_report = elan_i2c_get_report,
0781 };