zinitix.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. #include <linux/delay.h>
  3. #include <linux/i2c.h>
  4. #include <linux/input.h>
  5. #include <linux/input/mt.h>
  6. #include <linux/input/touchscreen.h>
  7. #include <linux/interrupt.h>
  8. #include <linux/irq.h>
  9. #include <linux/kernel.h>
  10. #include <linux/module.h>
  11. #include <linux/of.h>
  12. #include <linux/regulator/consumer.h>
  13. #include <linux/slab.h>
  14. /* Register Map */
  15. #define ZINITIX_SWRESET_CMD 0x0000
  16. #define ZINITIX_WAKEUP_CMD 0x0001
  17. #define ZINITIX_IDLE_CMD 0x0004
  18. #define ZINITIX_SLEEP_CMD 0x0005
  19. #define ZINITIX_CLEAR_INT_STATUS_CMD 0x0003
  20. #define ZINITIX_CALIBRATE_CMD 0x0006
  21. #define ZINITIX_SAVE_STATUS_CMD 0x0007
  22. #define ZINITIX_SAVE_CALIBRATION_CMD 0x0008
  23. #define ZINITIX_RECALL_FACTORY_CMD 0x000f
  24. #define ZINITIX_THRESHOLD 0x0020
  25. #define ZINITIX_LARGE_PALM_REJECT_AREA_TH 0x003F
  26. #define ZINITIX_DEBUG_REG 0x0115 /* 0~7 */
  27. #define ZINITIX_TOUCH_MODE 0x0010
  28. #define ZINITIX_CHIP_REVISION 0x0011
  29. #define ZINITIX_FIRMWARE_VERSION 0x0012
  30. #define ZINITIX_USB_DETECT 0x116
  31. #define ZINITIX_MINOR_FW_VERSION 0x0121
  32. #define ZINITIX_VENDOR_ID 0x001C
  33. #define ZINITIX_HW_ID 0x0014
  34. #define ZINITIX_DATA_VERSION_REG 0x0013
  35. #define ZINITIX_SUPPORTED_FINGER_NUM 0x0015
  36. #define ZINITIX_EEPROM_INFO 0x0018
  37. #define ZINITIX_INITIAL_TOUCH_MODE 0x0019
  38. #define ZINITIX_TOTAL_NUMBER_OF_X 0x0060
  39. #define ZINITIX_TOTAL_NUMBER_OF_Y 0x0061
  40. #define ZINITIX_DELAY_RAW_FOR_HOST 0x007f
  41. #define ZINITIX_BUTTON_SUPPORTED_NUM 0x00B0
  42. #define ZINITIX_BUTTON_SENSITIVITY 0x00B2
  43. #define ZINITIX_DUMMY_BUTTON_SENSITIVITY 0X00C8
  44. #define ZINITIX_X_RESOLUTION 0x00C0
  45. #define ZINITIX_Y_RESOLUTION 0x00C1
  46. #define ZINITIX_POINT_STATUS_REG 0x0080
  47. #define ZINITIX_ICON_STATUS_REG 0x00AA
  48. #define ZINITIX_POINT_COORD_REG (ZINITIX_POINT_STATUS_REG + 2)
  49. #define ZINITIX_AFE_FREQUENCY 0x0100
  50. #define ZINITIX_DND_N_COUNT 0x0122
  51. #define ZINITIX_DND_U_COUNT 0x0135
  52. #define ZINITIX_RAWDATA_REG 0x0200
  53. #define ZINITIX_EEPROM_INFO_REG 0x0018
  54. #define ZINITIX_INT_ENABLE_FLAG 0x00f0
  55. #define ZINITIX_PERIODICAL_INTERRUPT_INTERVAL 0x00f1
  56. #define ZINITIX_BTN_WIDTH 0x016d
  57. #define ZINITIX_CHECKSUM_RESULT 0x012c
  58. #define ZINITIX_INIT_FLASH 0x01d0
  59. #define ZINITIX_WRITE_FLASH 0x01d1
  60. #define ZINITIX_READ_FLASH 0x01d2
  61. #define ZINITIX_INTERNAL_FLAG_02 0x011e
  62. #define ZINITIX_INTERNAL_FLAG_03 0x011f
  63. #define ZINITIX_I2C_CHECKSUM_WCNT 0x016a
  64. #define ZINITIX_I2C_CHECKSUM_RESULT 0x016c
  65. /* Interrupt & status register flags */
  66. #define BIT_PT_CNT_CHANGE BIT(0)
  67. #define BIT_DOWN BIT(1)
  68. #define BIT_MOVE BIT(2)
  69. #define BIT_UP BIT(3)
  70. #define BIT_PALM BIT(4)
  71. #define BIT_PALM_REJECT BIT(5)
  72. #define BIT_RESERVED_0 BIT(6)
  73. #define BIT_RESERVED_1 BIT(7)
  74. #define BIT_WEIGHT_CHANGE BIT(8)
  75. #define BIT_PT_NO_CHANGE BIT(9)
  76. #define BIT_REJECT BIT(10)
  77. #define BIT_PT_EXIST BIT(11)
  78. #define BIT_RESERVED_2 BIT(12)
  79. #define BIT_ERROR BIT(13)
  80. #define BIT_DEBUG BIT(14)
  81. #define BIT_ICON_EVENT BIT(15)
  82. #define SUB_BIT_EXIST BIT(0)
  83. #define SUB_BIT_DOWN BIT(1)
  84. #define SUB_BIT_MOVE BIT(2)
  85. #define SUB_BIT_UP BIT(3)
  86. #define SUB_BIT_UPDATE BIT(4)
  87. #define SUB_BIT_WAIT BIT(5)
  88. #define DEFAULT_TOUCH_POINT_MODE 2
  89. #define MAX_SUPPORTED_FINGER_NUM 5
  90. #define CHIP_ON_DELAY 15 // ms
  91. #define FIRMWARE_ON_DELAY 40 // ms
  92. struct point_coord {
  93. __le16 x;
  94. __le16 y;
  95. u8 width;
  96. u8 sub_status;
  97. // currently unused, but needed as padding:
  98. u8 minor_width;
  99. u8 angle;
  100. };
  101. struct touch_event {
  102. __le16 status;
  103. u8 finger_mask;
  104. u8 time_stamp;
  105. struct point_coord point_coord[MAX_SUPPORTED_FINGER_NUM];
  106. };
  107. struct bt541_ts_data {
  108. struct i2c_client *client;
  109. struct input_dev *input_dev;
  110. struct touchscreen_properties prop;
  111. struct regulator_bulk_data supplies[2];
  112. u32 zinitix_mode;
  113. };
  114. static int zinitix_read_data(struct i2c_client *client,
  115. u16 reg, void *values, size_t length)
  116. {
  117. __le16 reg_le = cpu_to_le16(reg);
  118. int ret;
  119. /* A single i2c_transfer() transaction does not work here. */
  120. ret = i2c_master_send(client, (u8 *)&reg_le, sizeof(reg_le));
  121. if (ret != sizeof(reg_le))
  122. return ret < 0 ? ret : -EIO;
  123. ret = i2c_master_recv(client, (u8 *)values, length);
  124. if (ret != length)
  125. return ret < 0 ? ret : -EIO;
  126. return 0;
  127. }
  128. static int zinitix_write_u16(struct i2c_client *client, u16 reg, u16 value)
  129. {
  130. __le16 packet[2] = {cpu_to_le16(reg), cpu_to_le16(value)};
  131. int ret;
  132. ret = i2c_master_send(client, (u8 *)packet, sizeof(packet));
  133. if (ret != sizeof(packet))
  134. return ret < 0 ? ret : -EIO;
  135. return 0;
  136. }
  137. static int zinitix_write_cmd(struct i2c_client *client, u16 reg)
  138. {
  139. __le16 reg_le = cpu_to_le16(reg);
  140. int ret;
  141. ret = i2c_master_send(client, (u8 *)&reg_le, sizeof(reg_le));
  142. if (ret != sizeof(reg_le))
  143. return ret < 0 ? ret : -EIO;
  144. return 0;
  145. }
  146. static int zinitix_init_touch(struct bt541_ts_data *bt541)
  147. {
  148. struct i2c_client *client = bt541->client;
  149. int i;
  150. int error;
  151. error = zinitix_write_cmd(client, ZINITIX_SWRESET_CMD);
  152. if (error) {
  153. dev_err(&client->dev, "Failed to write reset command\n");
  154. return error;
  155. }
  156. error = zinitix_write_u16(client, ZINITIX_INT_ENABLE_FLAG, 0x0);
  157. if (error) {
  158. dev_err(&client->dev,
  159. "Failed to reset interrupt enable flag\n");
  160. return error;
  161. }
  162. /* initialize */
  163. error = zinitix_write_u16(client, ZINITIX_X_RESOLUTION,
  164. bt541->prop.max_x);
  165. if (error)
  166. return error;
  167. error = zinitix_write_u16(client, ZINITIX_Y_RESOLUTION,
  168. bt541->prop.max_y);
  169. if (error)
  170. return error;
  171. error = zinitix_write_u16(client, ZINITIX_SUPPORTED_FINGER_NUM,
  172. MAX_SUPPORTED_FINGER_NUM);
  173. if (error)
  174. return error;
  175. error = zinitix_write_u16(client, ZINITIX_INITIAL_TOUCH_MODE,
  176. bt541->zinitix_mode);
  177. if (error)
  178. return error;
  179. error = zinitix_write_u16(client, ZINITIX_TOUCH_MODE,
  180. bt541->zinitix_mode);
  181. if (error)
  182. return error;
  183. error = zinitix_write_u16(client, ZINITIX_INT_ENABLE_FLAG,
  184. BIT_PT_CNT_CHANGE | BIT_DOWN | BIT_MOVE |
  185. BIT_UP);
  186. if (error)
  187. return error;
  188. /* clear queue */
  189. for (i = 0; i < 10; i++) {
  190. zinitix_write_cmd(client, ZINITIX_CLEAR_INT_STATUS_CMD);
  191. udelay(10);
  192. }
  193. return 0;
  194. }
  195. static int zinitix_init_regulators(struct bt541_ts_data *bt541)
  196. {
  197. struct device *dev = &bt541->client->dev;
  198. int error;
  199. /*
  200. * Some older device trees have erroneous names for the regulators,
  201. * so check if "vddo" is present and in that case use these names.
  202. * Else use the proper supply names on the component.
  203. */
  204. if (of_find_property(dev->of_node, "vddo-supply", NULL)) {
  205. bt541->supplies[0].supply = "vdd";
  206. bt541->supplies[1].supply = "vddo";
  207. } else {
  208. /* Else use the proper supply names */
  209. bt541->supplies[0].supply = "vcca";
  210. bt541->supplies[1].supply = "vdd";
  211. }
  212. error = devm_regulator_bulk_get(dev,
  213. ARRAY_SIZE(bt541->supplies),
  214. bt541->supplies);
  215. if (error < 0) {
  216. dev_err(dev, "Failed to get regulators: %d\n", error);
  217. return error;
  218. }
  219. return 0;
  220. }
  221. static int zinitix_send_power_on_sequence(struct bt541_ts_data *bt541)
  222. {
  223. int error;
  224. struct i2c_client *client = bt541->client;
  225. error = zinitix_write_u16(client, 0xc000, 0x0001);
  226. if (error) {
  227. dev_err(&client->dev,
  228. "Failed to send power sequence(vendor cmd enable)\n");
  229. return error;
  230. }
  231. udelay(10);
  232. error = zinitix_write_cmd(client, 0xc004);
  233. if (error) {
  234. dev_err(&client->dev,
  235. "Failed to send power sequence (intn clear)\n");
  236. return error;
  237. }
  238. udelay(10);
  239. error = zinitix_write_u16(client, 0xc002, 0x0001);
  240. if (error) {
  241. dev_err(&client->dev,
  242. "Failed to send power sequence (nvm init)\n");
  243. return error;
  244. }
  245. mdelay(2);
  246. error = zinitix_write_u16(client, 0xc001, 0x0001);
  247. if (error) {
  248. dev_err(&client->dev,
  249. "Failed to send power sequence (program start)\n");
  250. return error;
  251. }
  252. msleep(FIRMWARE_ON_DELAY);
  253. return 0;
  254. }
  255. static void zinitix_report_finger(struct bt541_ts_data *bt541, int slot,
  256. const struct point_coord *p)
  257. {
  258. u16 x, y;
  259. if (unlikely(!(p->sub_status &
  260. (SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE)))) {
  261. dev_dbg(&bt541->client->dev, "unknown finger event %#02x\n",
  262. p->sub_status);
  263. return;
  264. }
  265. x = le16_to_cpu(p->x);
  266. y = le16_to_cpu(p->y);
  267. input_mt_slot(bt541->input_dev, slot);
  268. if (input_mt_report_slot_state(bt541->input_dev, MT_TOOL_FINGER,
  269. !(p->sub_status & SUB_BIT_UP))) {
  270. touchscreen_report_pos(bt541->input_dev,
  271. &bt541->prop, x, y, true);
  272. input_report_abs(bt541->input_dev,
  273. ABS_MT_TOUCH_MAJOR, p->width);
  274. dev_dbg(&bt541->client->dev, "finger %d %s (%u, %u)\n",
  275. slot, p->sub_status & SUB_BIT_DOWN ? "down" : "move",
  276. x, y);
  277. } else {
  278. dev_dbg(&bt541->client->dev, "finger %d up (%u, %u)\n",
  279. slot, x, y);
  280. }
  281. }
  282. static irqreturn_t zinitix_ts_irq_handler(int irq, void *bt541_handler)
  283. {
  284. struct bt541_ts_data *bt541 = bt541_handler;
  285. struct i2c_client *client = bt541->client;
  286. struct touch_event touch_event;
  287. unsigned long finger_mask;
  288. int error;
  289. int i;
  290. memset(&touch_event, 0, sizeof(struct touch_event));
  291. error = zinitix_read_data(bt541->client, ZINITIX_POINT_STATUS_REG,
  292. &touch_event, sizeof(struct touch_event));
  293. if (error) {
  294. dev_err(&client->dev, "Failed to read in touchpoint struct\n");
  295. goto out;
  296. }
  297. finger_mask = touch_event.finger_mask;
  298. for_each_set_bit(i, &finger_mask, MAX_SUPPORTED_FINGER_NUM) {
  299. const struct point_coord *p = &touch_event.point_coord[i];
  300. /* Only process contacts that are actually reported */
  301. if (p->sub_status & SUB_BIT_EXIST)
  302. zinitix_report_finger(bt541, i, p);
  303. }
  304. input_mt_sync_frame(bt541->input_dev);
  305. input_sync(bt541->input_dev);
  306. out:
  307. zinitix_write_cmd(bt541->client, ZINITIX_CLEAR_INT_STATUS_CMD);
  308. return IRQ_HANDLED;
  309. }
  310. static int zinitix_start(struct bt541_ts_data *bt541)
  311. {
  312. int error;
  313. error = regulator_bulk_enable(ARRAY_SIZE(bt541->supplies),
  314. bt541->supplies);
  315. if (error) {
  316. dev_err(&bt541->client->dev,
  317. "Failed to enable regulators: %d\n", error);
  318. return error;
  319. }
  320. msleep(CHIP_ON_DELAY);
  321. error = zinitix_send_power_on_sequence(bt541);
  322. if (error) {
  323. dev_err(&bt541->client->dev,
  324. "Error while sending power-on sequence: %d\n", error);
  325. return error;
  326. }
  327. error = zinitix_init_touch(bt541);
  328. if (error) {
  329. dev_err(&bt541->client->dev,
  330. "Error while configuring touch IC\n");
  331. return error;
  332. }
  333. enable_irq(bt541->client->irq);
  334. return 0;
  335. }
  336. static int zinitix_stop(struct bt541_ts_data *bt541)
  337. {
  338. int error;
  339. disable_irq(bt541->client->irq);
  340. error = regulator_bulk_disable(ARRAY_SIZE(bt541->supplies),
  341. bt541->supplies);
  342. if (error) {
  343. dev_err(&bt541->client->dev,
  344. "Failed to disable regulators: %d\n", error);
  345. return error;
  346. }
  347. return 0;
  348. }
  349. static int zinitix_input_open(struct input_dev *dev)
  350. {
  351. struct bt541_ts_data *bt541 = input_get_drvdata(dev);
  352. return zinitix_start(bt541);
  353. }
  354. static void zinitix_input_close(struct input_dev *dev)
  355. {
  356. struct bt541_ts_data *bt541 = input_get_drvdata(dev);
  357. zinitix_stop(bt541);
  358. }
  359. static int zinitix_init_input_dev(struct bt541_ts_data *bt541)
  360. {
  361. struct input_dev *input_dev;
  362. int error;
  363. input_dev = devm_input_allocate_device(&bt541->client->dev);
  364. if (!input_dev) {
  365. dev_err(&bt541->client->dev,
  366. "Failed to allocate input device.");
  367. return -ENOMEM;
  368. }
  369. input_set_drvdata(input_dev, bt541);
  370. bt541->input_dev = input_dev;
  371. input_dev->name = "Zinitix Capacitive TouchScreen";
  372. input_dev->phys = "input/ts";
  373. input_dev->id.bustype = BUS_I2C;
  374. input_dev->open = zinitix_input_open;
  375. input_dev->close = zinitix_input_close;
  376. input_set_capability(input_dev, EV_ABS, ABS_MT_POSITION_X);
  377. input_set_capability(input_dev, EV_ABS, ABS_MT_POSITION_Y);
  378. input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
  379. input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
  380. touchscreen_parse_properties(input_dev, true, &bt541->prop);
  381. if (!bt541->prop.max_x || !bt541->prop.max_y) {
  382. dev_err(&bt541->client->dev,
  383. "Touchscreen-size-x and/or touchscreen-size-y not set in dts\n");
  384. return -EINVAL;
  385. }
  386. error = input_mt_init_slots(input_dev, MAX_SUPPORTED_FINGER_NUM,
  387. INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
  388. if (error) {
  389. dev_err(&bt541->client->dev,
  390. "Failed to initialize MT slots: %d", error);
  391. return error;
  392. }
  393. error = input_register_device(input_dev);
  394. if (error) {
  395. dev_err(&bt541->client->dev,
  396. "Failed to register input device: %d", error);
  397. return error;
  398. }
  399. return 0;
  400. }
  401. static int zinitix_ts_probe(struct i2c_client *client)
  402. {
  403. struct bt541_ts_data *bt541;
  404. int error;
  405. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  406. dev_err(&client->dev,
  407. "Failed to assert adapter's support for plain I2C.\n");
  408. return -ENXIO;
  409. }
  410. bt541 = devm_kzalloc(&client->dev, sizeof(*bt541), GFP_KERNEL);
  411. if (!bt541)
  412. return -ENOMEM;
  413. bt541->client = client;
  414. i2c_set_clientdata(client, bt541);
  415. error = zinitix_init_regulators(bt541);
  416. if (error) {
  417. dev_err(&client->dev,
  418. "Failed to initialize regulators: %d\n", error);
  419. return error;
  420. }
  421. error = devm_request_threaded_irq(&client->dev, client->irq,
  422. NULL, zinitix_ts_irq_handler,
  423. IRQF_ONESHOT | IRQF_NO_AUTOEN,
  424. client->name, bt541);
  425. if (error) {
  426. dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
  427. return error;
  428. }
  429. error = zinitix_init_input_dev(bt541);
  430. if (error) {
  431. dev_err(&client->dev,
  432. "Failed to initialize input device: %d\n", error);
  433. return error;
  434. }
  435. error = device_property_read_u32(&client->dev, "zinitix,mode",
  436. &bt541->zinitix_mode);
  437. if (error < 0) {
  438. /* fall back to mode 2 */
  439. bt541->zinitix_mode = DEFAULT_TOUCH_POINT_MODE;
  440. }
  441. if (bt541->zinitix_mode != 2) {
  442. /*
  443. * If there are devices that don't support mode 2, support
  444. * for other modes (0, 1) will be needed.
  445. */
  446. dev_err(&client->dev,
  447. "Malformed zinitix,mode property, must be 2 (supplied: %d)\n",
  448. bt541->zinitix_mode);
  449. return -EINVAL;
  450. }
  451. return 0;
  452. }
  453. static int __maybe_unused zinitix_suspend(struct device *dev)
  454. {
  455. struct i2c_client *client = to_i2c_client(dev);
  456. struct bt541_ts_data *bt541 = i2c_get_clientdata(client);
  457. mutex_lock(&bt541->input_dev->mutex);
  458. if (input_device_enabled(bt541->input_dev))
  459. zinitix_stop(bt541);
  460. mutex_unlock(&bt541->input_dev->mutex);
  461. return 0;
  462. }
  463. static int __maybe_unused zinitix_resume(struct device *dev)
  464. {
  465. struct i2c_client *client = to_i2c_client(dev);
  466. struct bt541_ts_data *bt541 = i2c_get_clientdata(client);
  467. int ret = 0;
  468. mutex_lock(&bt541->input_dev->mutex);
  469. if (input_device_enabled(bt541->input_dev))
  470. ret = zinitix_start(bt541);
  471. mutex_unlock(&bt541->input_dev->mutex);
  472. return ret;
  473. }
  474. static SIMPLE_DEV_PM_OPS(zinitix_pm_ops, zinitix_suspend, zinitix_resume);
  475. #ifdef CONFIG_OF
  476. static const struct of_device_id zinitix_of_match[] = {
  477. { .compatible = "zinitix,bt402" },
  478. { .compatible = "zinitix,bt403" },
  479. { .compatible = "zinitix,bt404" },
  480. { .compatible = "zinitix,bt412" },
  481. { .compatible = "zinitix,bt413" },
  482. { .compatible = "zinitix,bt431" },
  483. { .compatible = "zinitix,bt432" },
  484. { .compatible = "zinitix,bt531" },
  485. { .compatible = "zinitix,bt532" },
  486. { .compatible = "zinitix,bt538" },
  487. { .compatible = "zinitix,bt541" },
  488. { .compatible = "zinitix,bt548" },
  489. { .compatible = "zinitix,bt554" },
  490. { .compatible = "zinitix,at100" },
  491. { }
  492. };
  493. MODULE_DEVICE_TABLE(of, zinitix_of_match);
  494. #endif
  495. static struct i2c_driver zinitix_ts_driver = {
  496. .probe_new = zinitix_ts_probe,
  497. .driver = {
  498. .name = "Zinitix-TS",
  499. .pm = &zinitix_pm_ops,
  500. .of_match_table = of_match_ptr(zinitix_of_match),
  501. },
  502. };
  503. module_i2c_driver(zinitix_ts_driver);
  504. MODULE_AUTHOR("Michael Srba <[email protected]>");
  505. MODULE_DESCRIPTION("Zinitix touchscreen driver");
  506. MODULE_LICENSE("GPL v2");