elants_i2c.c 42 KB

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