elan_i2c_core.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137
  1. /*
  2. * Elan I2C/SMBus Touchpad driver
  3. *
  4. * Copyright (c) 2013 ELAN Microelectronics Corp.
  5. *
  6. * Author: 林政維 (Duson Lin) <dusonlin@emc.com.tw>
  7. * Version: 1.5.5
  8. *
  9. * Based on cyapa driver:
  10. * copyright (c) 2011-2012 Cypress Semiconductor, Inc.
  11. * copyright (c) 2011-2012 Google, Inc.
  12. *
  13. * This program is free software; you can redistribute it and/or modify it
  14. * under the terms of the GNU General Public License version 2 as published
  15. * by the Free Software Foundation.
  16. *
  17. * Trademarks are the property of their respective owners.
  18. */
  19. #include <linux/acpi.h>
  20. #include <linux/delay.h>
  21. #include <linux/device.h>
  22. #include <linux/firmware.h>
  23. #include <linux/i2c.h>
  24. #include <linux/init.h>
  25. #include <linux/input/mt.h>
  26. #include <linux/interrupt.h>
  27. #include <linux/module.h>
  28. #include <linux/slab.h>
  29. #include <linux/kernel.h>
  30. #include <linux/sched.h>
  31. #include <linux/input.h>
  32. #include <linux/uaccess.h>
  33. #include <linux/jiffies.h>
  34. #include <linux/completion.h>
  35. #include <linux/of.h>
  36. #include <linux/regulator/consumer.h>
  37. #include <asm/unaligned.h>
  38. #include "elan_i2c.h"
  39. #define DRIVER_NAME "elan_i2c"
  40. #define ELAN_DRIVER_VERSION "1.5.5"
  41. #define ETP_PRESSURE_OFFSET 25
  42. #define ETP_MAX_PRESSURE 255
  43. #define ETP_FWIDTH_REDUCE 90
  44. #define ETP_FINGER_WIDTH 15
  45. #define ETP_RETRY_COUNT 3
  46. #define ETP_MAX_FINGERS 5
  47. #define ETP_FINGER_DATA_LEN 5
  48. #define ETP_REPORT_ID 0x5D
  49. #define ETP_REPORT_ID_OFFSET 2
  50. #define ETP_TOUCH_INFO_OFFSET 3
  51. #define ETP_FINGER_DATA_OFFSET 4
  52. #define ETP_MAX_REPORT_LEN 34
  53. /* The main device structure */
  54. struct elan_tp_data {
  55. struct i2c_client *client;
  56. struct input_dev *input;
  57. struct regulator *vcc;
  58. const struct elan_transport_ops *ops;
  59. /* for fw update */
  60. struct completion fw_completion;
  61. bool in_fw_update;
  62. struct mutex sysfs_mutex;
  63. unsigned int max_x;
  64. unsigned int max_y;
  65. unsigned int width_x;
  66. unsigned int width_y;
  67. unsigned int x_res;
  68. unsigned int y_res;
  69. u8 product_id;
  70. u8 fw_version;
  71. u8 sm_version;
  72. u8 iap_version;
  73. u16 fw_checksum;
  74. u8 mode;
  75. bool irq_wake;
  76. u8 min_baseline;
  77. u8 max_baseline;
  78. bool baseline_ready;
  79. };
  80. static int elan_enable_power(struct elan_tp_data *data)
  81. {
  82. int repeat = ETP_RETRY_COUNT;
  83. int error;
  84. error = regulator_enable(data->vcc);
  85. if (error) {
  86. dev_err(&data->client->dev,
  87. "Failed to enable regulator: %d\n", error);
  88. return error;
  89. }
  90. do {
  91. error = data->ops->power_control(data->client, true);
  92. if (error >= 0)
  93. return 0;
  94. msleep(30);
  95. } while (--repeat > 0);
  96. return error;
  97. }
  98. static int elan_disable_power(struct elan_tp_data *data)
  99. {
  100. int repeat = ETP_RETRY_COUNT;
  101. int error;
  102. do {
  103. error = data->ops->power_control(data->client, false);
  104. if (!error) {
  105. error = regulator_disable(data->vcc);
  106. if (error) {
  107. dev_err(&data->client->dev,
  108. "Failed to disable regulator: %d\n",
  109. error);
  110. /* Attempt to power the chip back up */
  111. data->ops->power_control(data->client, true);
  112. break;
  113. }
  114. return 0;
  115. }
  116. msleep(30);
  117. } while (--repeat > 0);
  118. return error;
  119. }
  120. static int elan_sleep(struct elan_tp_data *data)
  121. {
  122. int repeat = ETP_RETRY_COUNT;
  123. int error;
  124. do {
  125. error = data->ops->sleep_control(data->client, true);
  126. if (!error)
  127. return 0;
  128. msleep(30);
  129. } while (--repeat > 0);
  130. return error;
  131. }
  132. static int __elan_initialize(struct elan_tp_data *data)
  133. {
  134. struct i2c_client *client = data->client;
  135. int error;
  136. error = data->ops->initialize(client);
  137. if (error) {
  138. dev_err(&client->dev, "device initialize failed: %d\n", error);
  139. return error;
  140. }
  141. data->mode |= ETP_ENABLE_ABS;
  142. error = data->ops->set_mode(client, data->mode);
  143. if (error) {
  144. dev_err(&client->dev,
  145. "failed to switch to absolute mode: %d\n", error);
  146. return error;
  147. }
  148. error = data->ops->sleep_control(client, false);
  149. if (error) {
  150. dev_err(&client->dev,
  151. "failed to wake device up: %d\n", error);
  152. return error;
  153. }
  154. return 0;
  155. }
  156. static int elan_initialize(struct elan_tp_data *data)
  157. {
  158. int repeat = ETP_RETRY_COUNT;
  159. int error;
  160. do {
  161. error = __elan_initialize(data);
  162. if (!error)
  163. return 0;
  164. repeat--;
  165. msleep(30);
  166. } while (--repeat > 0);
  167. return error;
  168. }
  169. static int elan_query_device_info(struct elan_tp_data *data)
  170. {
  171. int error;
  172. error = data->ops->get_product_id(data->client, &data->product_id);
  173. if (error)
  174. return error;
  175. error = data->ops->get_version(data->client, false, &data->fw_version);
  176. if (error)
  177. return error;
  178. error = data->ops->get_checksum(data->client, false,
  179. &data->fw_checksum);
  180. if (error)
  181. return error;
  182. error = data->ops->get_sm_version(data->client, &data->sm_version);
  183. if (error)
  184. return error;
  185. error = data->ops->get_version(data->client, true, &data->iap_version);
  186. if (error)
  187. return error;
  188. return 0;
  189. }
  190. static unsigned int elan_convert_resolution(u8 val)
  191. {
  192. /*
  193. * (value from firmware) * 10 + 790 = dpi
  194. *
  195. * We also have to convert dpi to dots/mm (*10/254 to avoid floating
  196. * point).
  197. */
  198. return ((int)(char)val * 10 + 790) * 10 / 254;
  199. }
  200. static int elan_query_device_parameters(struct elan_tp_data *data)
  201. {
  202. unsigned int x_traces, y_traces;
  203. u8 hw_x_res, hw_y_res;
  204. int error;
  205. error = data->ops->get_max(data->client, &data->max_x, &data->max_y);
  206. if (error)
  207. return error;
  208. error = data->ops->get_num_traces(data->client, &x_traces, &y_traces);
  209. if (error)
  210. return error;
  211. data->width_x = data->max_x / x_traces;
  212. data->width_y = data->max_y / y_traces;
  213. error = data->ops->get_resolution(data->client, &hw_x_res, &hw_y_res);
  214. if (error)
  215. return error;
  216. data->x_res = elan_convert_resolution(hw_x_res);
  217. data->y_res = elan_convert_resolution(hw_y_res);
  218. return 0;
  219. }
  220. /*
  221. **********************************************************
  222. * IAP firmware updater related routines
  223. **********************************************************
  224. */
  225. static int elan_write_fw_block(struct elan_tp_data *data,
  226. const u8 *page, u16 checksum, int idx)
  227. {
  228. int retry = ETP_RETRY_COUNT;
  229. int error;
  230. do {
  231. error = data->ops->write_fw_block(data->client,
  232. page, checksum, idx);
  233. if (!error)
  234. return 0;
  235. dev_dbg(&data->client->dev,
  236. "IAP retrying page %d (error: %d)\n", idx, error);
  237. } while (--retry > 0);
  238. return error;
  239. }
  240. static int __elan_update_firmware(struct elan_tp_data *data,
  241. const struct firmware *fw)
  242. {
  243. struct i2c_client *client = data->client;
  244. struct device *dev = &client->dev;
  245. int i, j;
  246. int error;
  247. u16 iap_start_addr;
  248. u16 boot_page_count;
  249. u16 sw_checksum = 0, fw_checksum = 0;
  250. error = data->ops->prepare_fw_update(client);
  251. if (error)
  252. return error;
  253. iap_start_addr = get_unaligned_le16(&fw->data[ETP_IAP_START_ADDR * 2]);
  254. boot_page_count = (iap_start_addr * 2) / ETP_FW_PAGE_SIZE;
  255. for (i = boot_page_count; i < ETP_FW_PAGE_COUNT; i++) {
  256. u16 checksum = 0;
  257. const u8 *page = &fw->data[i * ETP_FW_PAGE_SIZE];
  258. for (j = 0; j < ETP_FW_PAGE_SIZE; j += 2)
  259. checksum += ((page[j + 1] << 8) | page[j]);
  260. error = elan_write_fw_block(data, page, checksum, i);
  261. if (error) {
  262. dev_err(dev, "write page %d fail: %d\n", i, error);
  263. return error;
  264. }
  265. sw_checksum += checksum;
  266. }
  267. /* Wait WDT reset and power on reset */
  268. msleep(600);
  269. error = data->ops->finish_fw_update(client, &data->fw_completion);
  270. if (error)
  271. return error;
  272. error = data->ops->get_checksum(client, true, &fw_checksum);
  273. if (error)
  274. return error;
  275. if (sw_checksum != fw_checksum) {
  276. dev_err(dev, "checksum diff sw=[%04X], fw=[%04X]\n",
  277. sw_checksum, fw_checksum);
  278. return -EIO;
  279. }
  280. return 0;
  281. }
  282. static int elan_update_firmware(struct elan_tp_data *data,
  283. const struct firmware *fw)
  284. {
  285. struct i2c_client *client = data->client;
  286. int retval;
  287. dev_dbg(&client->dev, "Starting firmware update....\n");
  288. disable_irq(client->irq);
  289. data->in_fw_update = true;
  290. retval = __elan_update_firmware(data, fw);
  291. if (retval) {
  292. dev_err(&client->dev, "firmware update failed: %d\n", retval);
  293. data->ops->iap_reset(client);
  294. } else {
  295. /* Reinitialize TP after fw is updated */
  296. elan_initialize(data);
  297. elan_query_device_info(data);
  298. }
  299. data->in_fw_update = false;
  300. enable_irq(client->irq);
  301. return retval;
  302. }
  303. /*
  304. *******************************************************************
  305. * SYSFS attributes
  306. *******************************************************************
  307. */
  308. static ssize_t elan_sysfs_read_fw_checksum(struct device *dev,
  309. struct device_attribute *attr,
  310. char *buf)
  311. {
  312. struct i2c_client *client = to_i2c_client(dev);
  313. struct elan_tp_data *data = i2c_get_clientdata(client);
  314. return sprintf(buf, "0x%04x\n", data->fw_checksum);
  315. }
  316. static ssize_t elan_sysfs_read_product_id(struct device *dev,
  317. struct device_attribute *attr,
  318. char *buf)
  319. {
  320. struct i2c_client *client = to_i2c_client(dev);
  321. struct elan_tp_data *data = i2c_get_clientdata(client);
  322. return sprintf(buf, "%d.0\n", data->product_id);
  323. }
  324. static ssize_t elan_sysfs_read_fw_ver(struct device *dev,
  325. struct device_attribute *attr,
  326. char *buf)
  327. {
  328. struct i2c_client *client = to_i2c_client(dev);
  329. struct elan_tp_data *data = i2c_get_clientdata(client);
  330. return sprintf(buf, "%d.0\n", data->fw_version);
  331. }
  332. static ssize_t elan_sysfs_read_sm_ver(struct device *dev,
  333. struct device_attribute *attr,
  334. char *buf)
  335. {
  336. struct i2c_client *client = to_i2c_client(dev);
  337. struct elan_tp_data *data = i2c_get_clientdata(client);
  338. return sprintf(buf, "%d.0\n", data->sm_version);
  339. }
  340. static ssize_t elan_sysfs_read_iap_ver(struct device *dev,
  341. struct device_attribute *attr,
  342. char *buf)
  343. {
  344. struct i2c_client *client = to_i2c_client(dev);
  345. struct elan_tp_data *data = i2c_get_clientdata(client);
  346. return sprintf(buf, "%d.0\n", data->iap_version);
  347. }
  348. static ssize_t elan_sysfs_update_fw(struct device *dev,
  349. struct device_attribute *attr,
  350. const char *buf, size_t count)
  351. {
  352. struct i2c_client *client = to_i2c_client(dev);
  353. struct elan_tp_data *data = i2c_get_clientdata(client);
  354. const struct firmware *fw;
  355. int error;
  356. error = request_firmware(&fw, ETP_FW_NAME, dev);
  357. if (error) {
  358. dev_err(dev, "cannot load firmware %s: %d\n",
  359. ETP_FW_NAME, error);
  360. return error;
  361. }
  362. /* Firmware must be exactly PAGE_NUM * PAGE_SIZE bytes */
  363. if (fw->size != ETP_FW_SIZE) {
  364. dev_err(dev, "invalid firmware size = %zu, expected %d.\n",
  365. fw->size, ETP_FW_SIZE);
  366. error = -EBADF;
  367. goto out_release_fw;
  368. }
  369. error = mutex_lock_interruptible(&data->sysfs_mutex);
  370. if (error)
  371. goto out_release_fw;
  372. error = elan_update_firmware(data, fw);
  373. mutex_unlock(&data->sysfs_mutex);
  374. out_release_fw:
  375. release_firmware(fw);
  376. return error ?: count;
  377. }
  378. static ssize_t calibrate_store(struct device *dev,
  379. struct device_attribute *attr,
  380. const char *buf, size_t count)
  381. {
  382. struct i2c_client *client = to_i2c_client(dev);
  383. struct elan_tp_data *data = i2c_get_clientdata(client);
  384. int tries = 20;
  385. int retval;
  386. int error;
  387. u8 val[3];
  388. retval = mutex_lock_interruptible(&data->sysfs_mutex);
  389. if (retval)
  390. return retval;
  391. disable_irq(client->irq);
  392. data->mode |= ETP_ENABLE_CALIBRATE;
  393. retval = data->ops->set_mode(client, data->mode);
  394. if (retval) {
  395. dev_err(dev, "failed to enable calibration mode: %d\n",
  396. retval);
  397. goto out;
  398. }
  399. retval = data->ops->calibrate(client);
  400. if (retval) {
  401. dev_err(dev, "failed to start calibration: %d\n",
  402. retval);
  403. goto out_disable_calibrate;
  404. }
  405. val[0] = 0xff;
  406. do {
  407. /* Wait 250ms before checking if calibration has completed. */
  408. msleep(250);
  409. retval = data->ops->calibrate_result(client, val);
  410. if (retval)
  411. dev_err(dev, "failed to check calibration result: %d\n",
  412. retval);
  413. else if (val[0] == 0)
  414. break; /* calibration done */
  415. } while (--tries);
  416. if (tries == 0) {
  417. dev_err(dev, "failed to calibrate. Timeout.\n");
  418. retval = -ETIMEDOUT;
  419. }
  420. out_disable_calibrate:
  421. data->mode &= ~ETP_ENABLE_CALIBRATE;
  422. error = data->ops->set_mode(data->client, data->mode);
  423. if (error) {
  424. dev_err(dev, "failed to disable calibration mode: %d\n",
  425. error);
  426. if (!retval)
  427. retval = error;
  428. }
  429. out:
  430. enable_irq(client->irq);
  431. mutex_unlock(&data->sysfs_mutex);
  432. return retval ?: count;
  433. }
  434. static ssize_t elan_sysfs_read_mode(struct device *dev,
  435. struct device_attribute *attr,
  436. char *buf)
  437. {
  438. struct i2c_client *client = to_i2c_client(dev);
  439. struct elan_tp_data *data = i2c_get_clientdata(client);
  440. int error;
  441. enum tp_mode mode;
  442. error = mutex_lock_interruptible(&data->sysfs_mutex);
  443. if (error)
  444. return error;
  445. error = data->ops->iap_get_mode(data->client, &mode);
  446. mutex_unlock(&data->sysfs_mutex);
  447. if (error)
  448. return error;
  449. return sprintf(buf, "%d\n", (int)mode);
  450. }
  451. static DEVICE_ATTR(product_id, S_IRUGO, elan_sysfs_read_product_id, NULL);
  452. static DEVICE_ATTR(firmware_version, S_IRUGO, elan_sysfs_read_fw_ver, NULL);
  453. static DEVICE_ATTR(sample_version, S_IRUGO, elan_sysfs_read_sm_ver, NULL);
  454. static DEVICE_ATTR(iap_version, S_IRUGO, elan_sysfs_read_iap_ver, NULL);
  455. static DEVICE_ATTR(fw_checksum, S_IRUGO, elan_sysfs_read_fw_checksum, NULL);
  456. static DEVICE_ATTR(mode, S_IRUGO, elan_sysfs_read_mode, NULL);
  457. static DEVICE_ATTR(update_fw, S_IWUSR, NULL, elan_sysfs_update_fw);
  458. static DEVICE_ATTR_WO(calibrate);
  459. static struct attribute *elan_sysfs_entries[] = {
  460. &dev_attr_product_id.attr,
  461. &dev_attr_firmware_version.attr,
  462. &dev_attr_sample_version.attr,
  463. &dev_attr_iap_version.attr,
  464. &dev_attr_fw_checksum.attr,
  465. &dev_attr_calibrate.attr,
  466. &dev_attr_mode.attr,
  467. &dev_attr_update_fw.attr,
  468. NULL,
  469. };
  470. static const struct attribute_group elan_sysfs_group = {
  471. .attrs = elan_sysfs_entries,
  472. };
  473. static ssize_t acquire_store(struct device *dev, struct device_attribute *attr,
  474. const char *buf, size_t count)
  475. {
  476. struct i2c_client *client = to_i2c_client(dev);
  477. struct elan_tp_data *data = i2c_get_clientdata(client);
  478. int error;
  479. int retval;
  480. retval = mutex_lock_interruptible(&data->sysfs_mutex);
  481. if (retval)
  482. return retval;
  483. disable_irq(client->irq);
  484. data->baseline_ready = false;
  485. data->mode |= ETP_ENABLE_CALIBRATE;
  486. retval = data->ops->set_mode(data->client, data->mode);
  487. if (retval) {
  488. dev_err(dev, "Failed to enable calibration mode to get baseline: %d\n",
  489. retval);
  490. goto out;
  491. }
  492. msleep(250);
  493. retval = data->ops->get_baseline_data(data->client, true,
  494. &data->max_baseline);
  495. if (retval) {
  496. dev_err(dev, "Failed to read max baseline form device: %d\n",
  497. retval);
  498. goto out_disable_calibrate;
  499. }
  500. retval = data->ops->get_baseline_data(data->client, false,
  501. &data->min_baseline);
  502. if (retval) {
  503. dev_err(dev, "Failed to read min baseline form device: %d\n",
  504. retval);
  505. goto out_disable_calibrate;
  506. }
  507. data->baseline_ready = true;
  508. out_disable_calibrate:
  509. data->mode &= ~ETP_ENABLE_CALIBRATE;
  510. error = data->ops->set_mode(data->client, data->mode);
  511. if (error) {
  512. dev_err(dev, "Failed to disable calibration mode after acquiring baseline: %d\n",
  513. error);
  514. if (!retval)
  515. retval = error;
  516. }
  517. out:
  518. enable_irq(client->irq);
  519. mutex_unlock(&data->sysfs_mutex);
  520. return retval ?: count;
  521. }
  522. static ssize_t min_show(struct device *dev,
  523. struct device_attribute *attr, char *buf)
  524. {
  525. struct i2c_client *client = to_i2c_client(dev);
  526. struct elan_tp_data *data = i2c_get_clientdata(client);
  527. int retval;
  528. retval = mutex_lock_interruptible(&data->sysfs_mutex);
  529. if (retval)
  530. return retval;
  531. if (!data->baseline_ready) {
  532. retval = -ENODATA;
  533. goto out;
  534. }
  535. retval = snprintf(buf, PAGE_SIZE, "%d", data->min_baseline);
  536. out:
  537. mutex_unlock(&data->sysfs_mutex);
  538. return retval;
  539. }
  540. static ssize_t max_show(struct device *dev,
  541. struct device_attribute *attr, char *buf)
  542. {
  543. struct i2c_client *client = to_i2c_client(dev);
  544. struct elan_tp_data *data = i2c_get_clientdata(client);
  545. int retval;
  546. retval = mutex_lock_interruptible(&data->sysfs_mutex);
  547. if (retval)
  548. return retval;
  549. if (!data->baseline_ready) {
  550. retval = -ENODATA;
  551. goto out;
  552. }
  553. retval = snprintf(buf, PAGE_SIZE, "%d", data->max_baseline);
  554. out:
  555. mutex_unlock(&data->sysfs_mutex);
  556. return retval;
  557. }
  558. static DEVICE_ATTR_WO(acquire);
  559. static DEVICE_ATTR_RO(min);
  560. static DEVICE_ATTR_RO(max);
  561. static struct attribute *elan_baseline_sysfs_entries[] = {
  562. &dev_attr_acquire.attr,
  563. &dev_attr_min.attr,
  564. &dev_attr_max.attr,
  565. NULL,
  566. };
  567. static const struct attribute_group elan_baseline_sysfs_group = {
  568. .name = "baseline",
  569. .attrs = elan_baseline_sysfs_entries,
  570. };
  571. static const struct attribute_group *elan_sysfs_groups[] = {
  572. &elan_sysfs_group,
  573. &elan_baseline_sysfs_group,
  574. NULL
  575. };
  576. /*
  577. ******************************************************************
  578. * Elan isr functions
  579. ******************************************************************
  580. */
  581. static void elan_report_contact(struct elan_tp_data *data,
  582. int contact_num, bool contact_valid,
  583. u8 *finger_data)
  584. {
  585. struct input_dev *input = data->input;
  586. unsigned int pos_x, pos_y;
  587. unsigned int pressure, mk_x, mk_y;
  588. unsigned int area_x, area_y, major, minor, new_pressure;
  589. if (contact_valid) {
  590. pos_x = ((finger_data[0] & 0xf0) << 4) |
  591. finger_data[1];
  592. pos_y = ((finger_data[0] & 0x0f) << 8) |
  593. finger_data[2];
  594. mk_x = (finger_data[3] & 0x0f);
  595. mk_y = (finger_data[3] >> 4);
  596. pressure = finger_data[4];
  597. if (pos_x > data->max_x || pos_y > data->max_y) {
  598. dev_dbg(input->dev.parent,
  599. "[%d] x=%d y=%d over max (%d, %d)",
  600. contact_num, pos_x, pos_y,
  601. data->max_x, data->max_y);
  602. return;
  603. }
  604. /*
  605. * To avoid treating large finger as palm, let's reduce the
  606. * width x and y per trace.
  607. */
  608. area_x = mk_x * (data->width_x - ETP_FWIDTH_REDUCE);
  609. area_y = mk_y * (data->width_y - ETP_FWIDTH_REDUCE);
  610. major = max(area_x, area_y);
  611. minor = min(area_x, area_y);
  612. new_pressure = pressure + ETP_PRESSURE_OFFSET;
  613. if (new_pressure > ETP_MAX_PRESSURE)
  614. new_pressure = ETP_MAX_PRESSURE;
  615. input_mt_slot(input, contact_num);
  616. input_mt_report_slot_state(input, MT_TOOL_FINGER, true);
  617. input_report_abs(input, ABS_MT_POSITION_X, pos_x);
  618. input_report_abs(input, ABS_MT_POSITION_Y, data->max_y - pos_y);
  619. input_report_abs(input, ABS_MT_PRESSURE, new_pressure);
  620. input_report_abs(input, ABS_TOOL_WIDTH, mk_x);
  621. input_report_abs(input, ABS_MT_TOUCH_MAJOR, major);
  622. input_report_abs(input, ABS_MT_TOUCH_MINOR, minor);
  623. } else {
  624. input_mt_slot(input, contact_num);
  625. input_mt_report_slot_state(input, MT_TOOL_FINGER, false);
  626. }
  627. }
  628. static void elan_report_absolute(struct elan_tp_data *data, u8 *packet)
  629. {
  630. struct input_dev *input = data->input;
  631. u8 *finger_data = &packet[ETP_FINGER_DATA_OFFSET];
  632. int i;
  633. u8 tp_info = packet[ETP_TOUCH_INFO_OFFSET];
  634. bool contact_valid;
  635. for (i = 0; i < ETP_MAX_FINGERS; i++) {
  636. contact_valid = tp_info & (1U << (3 + i));
  637. elan_report_contact(data, i, contact_valid, finger_data);
  638. if (contact_valid)
  639. finger_data += ETP_FINGER_DATA_LEN;
  640. }
  641. input_report_key(input, BTN_LEFT, tp_info & 0x01);
  642. input_mt_report_pointer_emulation(input, true);
  643. input_sync(input);
  644. }
  645. static irqreturn_t elan_isr(int irq, void *dev_id)
  646. {
  647. struct elan_tp_data *data = dev_id;
  648. struct device *dev = &data->client->dev;
  649. int error;
  650. u8 report[ETP_MAX_REPORT_LEN];
  651. /*
  652. * When device is connected to i2c bus, when all IAP page writes
  653. * complete, the driver will receive interrupt and must read
  654. * 0000 to confirm that IAP is finished.
  655. */
  656. if (data->in_fw_update) {
  657. complete(&data->fw_completion);
  658. goto out;
  659. }
  660. error = data->ops->get_report(data->client, report);
  661. if (error)
  662. goto out;
  663. if (report[ETP_REPORT_ID_OFFSET] != ETP_REPORT_ID)
  664. dev_err(dev, "invalid report id data (%x)\n",
  665. report[ETP_REPORT_ID_OFFSET]);
  666. else
  667. elan_report_absolute(data, report);
  668. out:
  669. return IRQ_HANDLED;
  670. }
  671. /*
  672. ******************************************************************
  673. * Elan initialization functions
  674. ******************************************************************
  675. */
  676. static int elan_setup_input_device(struct elan_tp_data *data)
  677. {
  678. struct device *dev = &data->client->dev;
  679. struct input_dev *input;
  680. unsigned int max_width = max(data->width_x, data->width_y);
  681. unsigned int min_width = min(data->width_x, data->width_y);
  682. int error;
  683. input = devm_input_allocate_device(dev);
  684. if (!input)
  685. return -ENOMEM;
  686. input->name = "Elan Touchpad";
  687. input->id.bustype = BUS_I2C;
  688. input_set_drvdata(input, data);
  689. error = input_mt_init_slots(input, ETP_MAX_FINGERS,
  690. INPUT_MT_POINTER | INPUT_MT_DROP_UNUSED);
  691. if (error) {
  692. dev_err(dev, "failed to initialize MT slots: %d\n", error);
  693. return error;
  694. }
  695. __set_bit(EV_ABS, input->evbit);
  696. __set_bit(INPUT_PROP_POINTER, input->propbit);
  697. __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
  698. __set_bit(BTN_LEFT, input->keybit);
  699. /* Set up ST parameters */
  700. input_set_abs_params(input, ABS_X, 0, data->max_x, 0, 0);
  701. input_set_abs_params(input, ABS_Y, 0, data->max_y, 0, 0);
  702. input_abs_set_res(input, ABS_X, data->x_res);
  703. input_abs_set_res(input, ABS_Y, data->y_res);
  704. input_set_abs_params(input, ABS_PRESSURE, 0, ETP_MAX_PRESSURE, 0, 0);
  705. input_set_abs_params(input, ABS_TOOL_WIDTH, 0, ETP_FINGER_WIDTH, 0, 0);
  706. /* And MT parameters */
  707. input_set_abs_params(input, ABS_MT_POSITION_X, 0, data->max_x, 0, 0);
  708. input_set_abs_params(input, ABS_MT_POSITION_Y, 0, data->max_y, 0, 0);
  709. input_abs_set_res(input, ABS_MT_POSITION_X, data->x_res);
  710. input_abs_set_res(input, ABS_MT_POSITION_Y, data->y_res);
  711. input_set_abs_params(input, ABS_MT_PRESSURE, 0,
  712. ETP_MAX_PRESSURE, 0, 0);
  713. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0,
  714. ETP_FINGER_WIDTH * max_width, 0, 0);
  715. input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0,
  716. ETP_FINGER_WIDTH * min_width, 0, 0);
  717. data->input = input;
  718. return 0;
  719. }
  720. static void elan_disable_regulator(void *_data)
  721. {
  722. struct elan_tp_data *data = _data;
  723. regulator_disable(data->vcc);
  724. }
  725. static void elan_remove_sysfs_groups(void *_data)
  726. {
  727. struct elan_tp_data *data = _data;
  728. sysfs_remove_groups(&data->client->dev.kobj, elan_sysfs_groups);
  729. }
  730. static int elan_probe(struct i2c_client *client,
  731. const struct i2c_device_id *dev_id)
  732. {
  733. const struct elan_transport_ops *transport_ops;
  734. struct device *dev = &client->dev;
  735. struct elan_tp_data *data;
  736. unsigned long irqflags;
  737. int error;
  738. if (IS_ENABLED(CONFIG_MOUSE_ELAN_I2C_I2C) &&
  739. i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  740. transport_ops = &elan_i2c_ops;
  741. } else if (IS_ENABLED(CONFIG_MOUSE_ELAN_I2C_SMBUS) &&
  742. i2c_check_functionality(client->adapter,
  743. I2C_FUNC_SMBUS_BYTE_DATA |
  744. I2C_FUNC_SMBUS_BLOCK_DATA |
  745. I2C_FUNC_SMBUS_I2C_BLOCK)) {
  746. transport_ops = &elan_smbus_ops;
  747. } else {
  748. dev_err(dev, "not a supported I2C/SMBus adapter\n");
  749. return -EIO;
  750. }
  751. data = devm_kzalloc(&client->dev, sizeof(struct elan_tp_data),
  752. GFP_KERNEL);
  753. if (!data)
  754. return -ENOMEM;
  755. i2c_set_clientdata(client, data);
  756. data->ops = transport_ops;
  757. data->client = client;
  758. init_completion(&data->fw_completion);
  759. mutex_init(&data->sysfs_mutex);
  760. data->vcc = devm_regulator_get(&client->dev, "vcc");
  761. if (IS_ERR(data->vcc)) {
  762. error = PTR_ERR(data->vcc);
  763. if (error != -EPROBE_DEFER)
  764. dev_err(&client->dev,
  765. "Failed to get 'vcc' regulator: %d\n",
  766. error);
  767. return error;
  768. }
  769. error = regulator_enable(data->vcc);
  770. if (error) {
  771. dev_err(&client->dev,
  772. "Failed to enable regulator: %d\n", error);
  773. return error;
  774. }
  775. error = devm_add_action(&client->dev,
  776. elan_disable_regulator, data);
  777. if (error) {
  778. regulator_disable(data->vcc);
  779. dev_err(&client->dev,
  780. "Failed to add disable regulator action: %d\n",
  781. error);
  782. return error;
  783. }
  784. /* Initialize the touchpad. */
  785. error = elan_initialize(data);
  786. if (error)
  787. return error;
  788. error = elan_query_device_info(data);
  789. if (error)
  790. return error;
  791. error = elan_query_device_parameters(data);
  792. if (error)
  793. return error;
  794. dev_dbg(&client->dev,
  795. "Elan Touchpad Information:\n"
  796. " Module product ID: 0x%04x\n"
  797. " Firmware Version: 0x%04x\n"
  798. " Sample Version: 0x%04x\n"
  799. " IAP Version: 0x%04x\n"
  800. " Max ABS X,Y: %d,%d\n"
  801. " Width X,Y: %d,%d\n"
  802. " Resolution X,Y: %d,%d (dots/mm)\n",
  803. data->product_id,
  804. data->fw_version,
  805. data->sm_version,
  806. data->iap_version,
  807. data->max_x, data->max_y,
  808. data->width_x, data->width_y,
  809. data->x_res, data->y_res);
  810. /* Set up input device properties based on queried parameters. */
  811. error = elan_setup_input_device(data);
  812. if (error)
  813. return error;
  814. /*
  815. * Systems using device tree should set up interrupt via DTS,
  816. * the rest will use the default falling edge interrupts.
  817. */
  818. irqflags = client->dev.of_node ? 0 : IRQF_TRIGGER_FALLING;
  819. error = devm_request_threaded_irq(&client->dev, client->irq,
  820. NULL, elan_isr,
  821. irqflags | IRQF_ONESHOT,
  822. client->name, data);
  823. if (error) {
  824. dev_err(&client->dev, "cannot register irq=%d\n", client->irq);
  825. return error;
  826. }
  827. error = sysfs_create_groups(&client->dev.kobj, elan_sysfs_groups);
  828. if (error) {
  829. dev_err(&client->dev, "failed to create sysfs attributes: %d\n",
  830. error);
  831. return error;
  832. }
  833. error = devm_add_action(&client->dev,
  834. elan_remove_sysfs_groups, data);
  835. if (error) {
  836. elan_remove_sysfs_groups(data);
  837. dev_err(&client->dev,
  838. "Failed to add sysfs cleanup action: %d\n",
  839. error);
  840. return error;
  841. }
  842. error = input_register_device(data->input);
  843. if (error) {
  844. dev_err(&client->dev, "failed to register input device: %d\n",
  845. error);
  846. return error;
  847. }
  848. /*
  849. * Systems using device tree should set up wakeup via DTS,
  850. * the rest will configure device as wakeup source by default.
  851. */
  852. if (!client->dev.of_node)
  853. device_init_wakeup(&client->dev, true);
  854. return 0;
  855. }
  856. static int __maybe_unused elan_suspend(struct device *dev)
  857. {
  858. struct i2c_client *client = to_i2c_client(dev);
  859. struct elan_tp_data *data = i2c_get_clientdata(client);
  860. int ret;
  861. /*
  862. * We are taking the mutex to make sure sysfs operations are
  863. * complete before we attempt to bring the device into low[er]
  864. * power mode.
  865. */
  866. ret = mutex_lock_interruptible(&data->sysfs_mutex);
  867. if (ret)
  868. return ret;
  869. disable_irq(client->irq);
  870. if (device_may_wakeup(dev)) {
  871. ret = elan_sleep(data);
  872. /* Enable wake from IRQ */
  873. data->irq_wake = (enable_irq_wake(client->irq) == 0);
  874. } else {
  875. ret = elan_disable_power(data);
  876. }
  877. mutex_unlock(&data->sysfs_mutex);
  878. return ret;
  879. }
  880. static int __maybe_unused elan_resume(struct device *dev)
  881. {
  882. struct i2c_client *client = to_i2c_client(dev);
  883. struct elan_tp_data *data = i2c_get_clientdata(client);
  884. int error;
  885. if (device_may_wakeup(dev) && data->irq_wake) {
  886. disable_irq_wake(client->irq);
  887. data->irq_wake = false;
  888. }
  889. error = elan_enable_power(data);
  890. if (error)
  891. dev_err(dev, "power up when resuming failed: %d\n", error);
  892. error = elan_initialize(data);
  893. if (error)
  894. dev_err(dev, "initialize when resuming failed: %d\n", error);
  895. enable_irq(data->client->irq);
  896. return 0;
  897. }
  898. static SIMPLE_DEV_PM_OPS(elan_pm_ops, elan_suspend, elan_resume);
  899. static const struct i2c_device_id elan_id[] = {
  900. { DRIVER_NAME, 0 },
  901. { },
  902. };
  903. MODULE_DEVICE_TABLE(i2c, elan_id);
  904. #ifdef CONFIG_ACPI
  905. static const struct acpi_device_id elan_acpi_id[] = {
  906. { "ELAN0000", 0 },
  907. { }
  908. };
  909. MODULE_DEVICE_TABLE(acpi, elan_acpi_id);
  910. #endif
  911. #ifdef CONFIG_OF
  912. static const struct of_device_id elan_of_match[] = {
  913. { .compatible = "elan,ekth3000" },
  914. { /* sentinel */ }
  915. };
  916. MODULE_DEVICE_TABLE(of, elan_of_match);
  917. #endif
  918. static struct i2c_driver elan_driver = {
  919. .driver = {
  920. .name = DRIVER_NAME,
  921. .owner = THIS_MODULE,
  922. .pm = &elan_pm_ops,
  923. .acpi_match_table = ACPI_PTR(elan_acpi_id),
  924. .of_match_table = of_match_ptr(elan_of_match),
  925. },
  926. .probe = elan_probe,
  927. .id_table = elan_id,
  928. };
  929. module_i2c_driver(elan_driver);
  930. MODULE_AUTHOR("Duson Lin <dusonlin@emc.com.tw>");
  931. MODULE_DESCRIPTION("Elan I2C/SMBus Touchpad driver");
  932. MODULE_LICENSE("GPL");
  933. MODULE_VERSION(ELAN_DRIVER_VERSION);