hid-rmi.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. /*
  2. * Copyright (c) 2013 Andrew Duggan <aduggan@synaptics.com>
  3. * Copyright (c) 2013 Synaptics Incorporated
  4. * Copyright (c) 2014 Benjamin Tissoires <benjamin.tissoires@gmail.com>
  5. * Copyright (c) 2014 Red Hat, Inc
  6. *
  7. * This program is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU General Public License as published by the Free
  9. * Software Foundation; either version 2 of the License, or (at your option)
  10. * any later version.
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/hid.h>
  14. #include <linux/input.h>
  15. #include <linux/input/mt.h>
  16. #include <linux/module.h>
  17. #include <linux/pm.h>
  18. #include <linux/slab.h>
  19. #include <linux/wait.h>
  20. #include <linux/sched.h>
  21. #include "hid-ids.h"
  22. #define RMI_MOUSE_REPORT_ID 0x01 /* Mouse emulation Report */
  23. #define RMI_WRITE_REPORT_ID 0x09 /* Output Report */
  24. #define RMI_READ_ADDR_REPORT_ID 0x0a /* Output Report */
  25. #define RMI_READ_DATA_REPORT_ID 0x0b /* Input Report */
  26. #define RMI_ATTN_REPORT_ID 0x0c /* Input Report */
  27. #define RMI_SET_RMI_MODE_REPORT_ID 0x0f /* Feature Report */
  28. /* flags */
  29. #define RMI_READ_REQUEST_PENDING BIT(0)
  30. #define RMI_READ_DATA_PENDING BIT(1)
  31. #define RMI_STARTED BIT(2)
  32. enum rmi_mode_type {
  33. RMI_MODE_OFF = 0,
  34. RMI_MODE_ATTN_REPORTS = 1,
  35. RMI_MODE_NO_PACKED_ATTN_REPORTS = 2,
  36. };
  37. struct rmi_function {
  38. unsigned page; /* page of the function */
  39. u16 query_base_addr; /* base address for queries */
  40. u16 command_base_addr; /* base address for commands */
  41. u16 control_base_addr; /* base address for controls */
  42. u16 data_base_addr; /* base address for datas */
  43. unsigned int interrupt_base; /* cross-function interrupt number
  44. * (uniq in the device)*/
  45. unsigned int interrupt_count; /* number of interrupts */
  46. unsigned int report_size; /* size of a report */
  47. unsigned long irq_mask; /* mask of the interrupts
  48. * (to be applied against ATTN IRQ) */
  49. };
  50. /**
  51. * struct rmi_data - stores information for hid communication
  52. *
  53. * @page_mutex: Locks current page to avoid changing pages in unexpected ways.
  54. * @page: Keeps track of the current virtual page
  55. *
  56. * @wait: Used for waiting for read data
  57. *
  58. * @writeReport: output buffer when writing RMI registers
  59. * @readReport: input buffer when reading RMI registers
  60. *
  61. * @input_report_size: size of an input report (advertised by HID)
  62. * @output_report_size: size of an output report (advertised by HID)
  63. *
  64. * @flags: flags for the current device (started, reading, etc...)
  65. *
  66. * @f11: placeholder of internal RMI function F11 description
  67. * @f30: placeholder of internal RMI function F30 description
  68. *
  69. * @max_fingers: maximum finger count reported by the device
  70. * @max_x: maximum x value reported by the device
  71. * @max_y: maximum y value reported by the device
  72. *
  73. * @gpio_led_count: count of GPIOs + LEDs reported by F30
  74. * @button_count: actual physical buttons count
  75. * @button_mask: button mask used to decode GPIO ATTN reports
  76. * @button_state_mask: pull state of the buttons
  77. *
  78. * @input: pointer to the kernel input device
  79. *
  80. * @reset_work: worker which will be called in case of a mouse report
  81. * @hdev: pointer to the struct hid_device
  82. */
  83. struct rmi_data {
  84. struct mutex page_mutex;
  85. int page;
  86. wait_queue_head_t wait;
  87. u8 *writeReport;
  88. u8 *readReport;
  89. int input_report_size;
  90. int output_report_size;
  91. unsigned long flags;
  92. struct rmi_function f11;
  93. struct rmi_function f30;
  94. unsigned int max_fingers;
  95. unsigned int max_x;
  96. unsigned int max_y;
  97. unsigned int x_size_mm;
  98. unsigned int y_size_mm;
  99. unsigned int gpio_led_count;
  100. unsigned int button_count;
  101. unsigned long button_mask;
  102. unsigned long button_state_mask;
  103. struct input_dev *input;
  104. struct work_struct reset_work;
  105. struct hid_device *hdev;
  106. };
  107. #define RMI_PAGE(addr) (((addr) >> 8) & 0xff)
  108. static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
  109. /**
  110. * rmi_set_page - Set RMI page
  111. * @hdev: The pointer to the hid_device struct
  112. * @page: The new page address.
  113. *
  114. * RMI devices have 16-bit addressing, but some of the physical
  115. * implementations (like SMBus) only have 8-bit addressing. So RMI implements
  116. * a page address at 0xff of every page so we can reliable page addresses
  117. * every 256 registers.
  118. *
  119. * The page_mutex lock must be held when this function is entered.
  120. *
  121. * Returns zero on success, non-zero on failure.
  122. */
  123. static int rmi_set_page(struct hid_device *hdev, u8 page)
  124. {
  125. struct rmi_data *data = hid_get_drvdata(hdev);
  126. int retval;
  127. data->writeReport[0] = RMI_WRITE_REPORT_ID;
  128. data->writeReport[1] = 1;
  129. data->writeReport[2] = 0xFF;
  130. data->writeReport[4] = page;
  131. retval = rmi_write_report(hdev, data->writeReport,
  132. data->output_report_size);
  133. if (retval != data->output_report_size) {
  134. dev_err(&hdev->dev,
  135. "%s: set page failed: %d.", __func__, retval);
  136. return retval;
  137. }
  138. data->page = page;
  139. return 0;
  140. }
  141. static int rmi_set_mode(struct hid_device *hdev, u8 mode)
  142. {
  143. int ret;
  144. u8 txbuf[2] = {RMI_SET_RMI_MODE_REPORT_ID, mode};
  145. ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, txbuf,
  146. sizeof(txbuf), HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
  147. if (ret < 0) {
  148. dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode,
  149. ret);
  150. return ret;
  151. }
  152. return 0;
  153. }
  154. static int rmi_write_report(struct hid_device *hdev, u8 *report, int len)
  155. {
  156. int ret;
  157. ret = hid_hw_output_report(hdev, (void *)report, len);
  158. if (ret < 0) {
  159. dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret);
  160. return ret;
  161. }
  162. return ret;
  163. }
  164. static int rmi_read_block(struct hid_device *hdev, u16 addr, void *buf,
  165. const int len)
  166. {
  167. struct rmi_data *data = hid_get_drvdata(hdev);
  168. int ret;
  169. int bytes_read;
  170. int bytes_needed;
  171. int retries;
  172. int read_input_count;
  173. mutex_lock(&data->page_mutex);
  174. if (RMI_PAGE(addr) != data->page) {
  175. ret = rmi_set_page(hdev, RMI_PAGE(addr));
  176. if (ret < 0)
  177. goto exit;
  178. }
  179. for (retries = 5; retries > 0; retries--) {
  180. data->writeReport[0] = RMI_READ_ADDR_REPORT_ID;
  181. data->writeReport[1] = 0; /* old 1 byte read count */
  182. data->writeReport[2] = addr & 0xFF;
  183. data->writeReport[3] = (addr >> 8) & 0xFF;
  184. data->writeReport[4] = len & 0xFF;
  185. data->writeReport[5] = (len >> 8) & 0xFF;
  186. set_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  187. ret = rmi_write_report(hdev, data->writeReport,
  188. data->output_report_size);
  189. if (ret != data->output_report_size) {
  190. clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  191. dev_err(&hdev->dev,
  192. "failed to write request output report (%d)\n",
  193. ret);
  194. goto exit;
  195. }
  196. bytes_read = 0;
  197. bytes_needed = len;
  198. while (bytes_read < len) {
  199. if (!wait_event_timeout(data->wait,
  200. test_bit(RMI_READ_DATA_PENDING, &data->flags),
  201. msecs_to_jiffies(1000))) {
  202. hid_warn(hdev, "%s: timeout elapsed\n",
  203. __func__);
  204. ret = -EAGAIN;
  205. break;
  206. }
  207. read_input_count = data->readReport[1];
  208. memcpy(buf + bytes_read, &data->readReport[2],
  209. read_input_count < bytes_needed ?
  210. read_input_count : bytes_needed);
  211. bytes_read += read_input_count;
  212. bytes_needed -= read_input_count;
  213. clear_bit(RMI_READ_DATA_PENDING, &data->flags);
  214. }
  215. if (ret >= 0) {
  216. ret = 0;
  217. break;
  218. }
  219. }
  220. exit:
  221. clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  222. mutex_unlock(&data->page_mutex);
  223. return ret;
  224. }
  225. static inline int rmi_read(struct hid_device *hdev, u16 addr, void *buf)
  226. {
  227. return rmi_read_block(hdev, addr, buf, 1);
  228. }
  229. static void rmi_f11_process_touch(struct rmi_data *hdata, int slot,
  230. u8 finger_state, u8 *touch_data)
  231. {
  232. int x, y, wx, wy;
  233. int wide, major, minor;
  234. int z;
  235. input_mt_slot(hdata->input, slot);
  236. input_mt_report_slot_state(hdata->input, MT_TOOL_FINGER,
  237. finger_state == 0x01);
  238. if (finger_state == 0x01) {
  239. x = (touch_data[0] << 4) | (touch_data[2] & 0x0F);
  240. y = (touch_data[1] << 4) | (touch_data[2] >> 4);
  241. wx = touch_data[3] & 0x0F;
  242. wy = touch_data[3] >> 4;
  243. wide = (wx > wy);
  244. major = max(wx, wy);
  245. minor = min(wx, wy);
  246. z = touch_data[4];
  247. /* y is inverted */
  248. y = hdata->max_y - y;
  249. input_event(hdata->input, EV_ABS, ABS_MT_POSITION_X, x);
  250. input_event(hdata->input, EV_ABS, ABS_MT_POSITION_Y, y);
  251. input_event(hdata->input, EV_ABS, ABS_MT_ORIENTATION, wide);
  252. input_event(hdata->input, EV_ABS, ABS_MT_PRESSURE, z);
  253. input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
  254. input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
  255. }
  256. }
  257. static void rmi_reset_work(struct work_struct *work)
  258. {
  259. struct rmi_data *hdata = container_of(work, struct rmi_data,
  260. reset_work);
  261. /* switch the device to RMI if we receive a generic mouse report */
  262. rmi_set_mode(hdata->hdev, RMI_MODE_ATTN_REPORTS);
  263. }
  264. static inline int rmi_schedule_reset(struct hid_device *hdev)
  265. {
  266. struct rmi_data *hdata = hid_get_drvdata(hdev);
  267. return schedule_work(&hdata->reset_work);
  268. }
  269. static int rmi_f11_input_event(struct hid_device *hdev, u8 irq, u8 *data,
  270. int size)
  271. {
  272. struct rmi_data *hdata = hid_get_drvdata(hdev);
  273. int offset;
  274. int i;
  275. if (size < hdata->f11.report_size)
  276. return 0;
  277. if (!(irq & hdata->f11.irq_mask))
  278. return 0;
  279. offset = (hdata->max_fingers >> 2) + 1;
  280. for (i = 0; i < hdata->max_fingers; i++) {
  281. int fs_byte_position = i >> 2;
  282. int fs_bit_position = (i & 0x3) << 1;
  283. int finger_state = (data[fs_byte_position] >> fs_bit_position) &
  284. 0x03;
  285. rmi_f11_process_touch(hdata, i, finger_state,
  286. &data[offset + 5 * i]);
  287. }
  288. input_mt_sync_frame(hdata->input);
  289. input_sync(hdata->input);
  290. return hdata->f11.report_size;
  291. }
  292. static int rmi_f30_input_event(struct hid_device *hdev, u8 irq, u8 *data,
  293. int size)
  294. {
  295. struct rmi_data *hdata = hid_get_drvdata(hdev);
  296. int i;
  297. int button = 0;
  298. bool value;
  299. if (!(irq & hdata->f30.irq_mask))
  300. return 0;
  301. for (i = 0; i < hdata->gpio_led_count; i++) {
  302. if (test_bit(i, &hdata->button_mask)) {
  303. value = (data[i / 8] >> (i & 0x07)) & BIT(0);
  304. if (test_bit(i, &hdata->button_state_mask))
  305. value = !value;
  306. input_event(hdata->input, EV_KEY, BTN_LEFT + button++,
  307. value);
  308. }
  309. }
  310. return hdata->f30.report_size;
  311. }
  312. static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
  313. {
  314. struct rmi_data *hdata = hid_get_drvdata(hdev);
  315. unsigned long irq_mask = 0;
  316. unsigned index = 2;
  317. if (!(test_bit(RMI_STARTED, &hdata->flags)))
  318. return 0;
  319. irq_mask |= hdata->f11.irq_mask;
  320. irq_mask |= hdata->f30.irq_mask;
  321. if (data[1] & ~irq_mask)
  322. hid_warn(hdev, "unknown intr source:%02lx %s:%d\n",
  323. data[1] & ~irq_mask, __FILE__, __LINE__);
  324. if (hdata->f11.interrupt_base < hdata->f30.interrupt_base) {
  325. index += rmi_f11_input_event(hdev, data[1], &data[index],
  326. size - index);
  327. index += rmi_f30_input_event(hdev, data[1], &data[index],
  328. size - index);
  329. } else {
  330. index += rmi_f30_input_event(hdev, data[1], &data[index],
  331. size - index);
  332. index += rmi_f11_input_event(hdev, data[1], &data[index],
  333. size - index);
  334. }
  335. return 1;
  336. }
  337. static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size)
  338. {
  339. struct rmi_data *hdata = hid_get_drvdata(hdev);
  340. if (!test_bit(RMI_READ_REQUEST_PENDING, &hdata->flags)) {
  341. hid_err(hdev, "no read request pending\n");
  342. return 0;
  343. }
  344. memcpy(hdata->readReport, data, size < hdata->input_report_size ?
  345. size : hdata->input_report_size);
  346. set_bit(RMI_READ_DATA_PENDING, &hdata->flags);
  347. wake_up(&hdata->wait);
  348. return 1;
  349. }
  350. static int rmi_raw_event(struct hid_device *hdev,
  351. struct hid_report *report, u8 *data, int size)
  352. {
  353. switch (data[0]) {
  354. case RMI_READ_DATA_REPORT_ID:
  355. return rmi_read_data_event(hdev, data, size);
  356. case RMI_ATTN_REPORT_ID:
  357. return rmi_input_event(hdev, data, size);
  358. case RMI_MOUSE_REPORT_ID:
  359. rmi_schedule_reset(hdev);
  360. break;
  361. }
  362. return 0;
  363. }
  364. #ifdef CONFIG_PM
  365. static int rmi_post_reset(struct hid_device *hdev)
  366. {
  367. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  368. }
  369. static int rmi_post_resume(struct hid_device *hdev)
  370. {
  371. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  372. }
  373. #endif /* CONFIG_PM */
  374. #define RMI4_MAX_PAGE 0xff
  375. #define RMI4_PAGE_SIZE 0x0100
  376. #define PDT_START_SCAN_LOCATION 0x00e9
  377. #define PDT_END_SCAN_LOCATION 0x0005
  378. #define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff)
  379. struct pdt_entry {
  380. u8 query_base_addr:8;
  381. u8 command_base_addr:8;
  382. u8 control_base_addr:8;
  383. u8 data_base_addr:8;
  384. u8 interrupt_source_count:3;
  385. u8 bits3and4:2;
  386. u8 function_version:2;
  387. u8 bit7:1;
  388. u8 function_number:8;
  389. } __attribute__((__packed__));
  390. static inline unsigned long rmi_gen_mask(unsigned irq_base, unsigned irq_count)
  391. {
  392. return GENMASK(irq_count + irq_base - 1, irq_base);
  393. }
  394. static void rmi_register_function(struct rmi_data *data,
  395. struct pdt_entry *pdt_entry, int page, unsigned interrupt_count)
  396. {
  397. struct rmi_function *f = NULL;
  398. u16 page_base = page << 8;
  399. switch (pdt_entry->function_number) {
  400. case 0x11:
  401. f = &data->f11;
  402. break;
  403. case 0x30:
  404. f = &data->f30;
  405. break;
  406. }
  407. if (f) {
  408. f->page = page;
  409. f->query_base_addr = page_base | pdt_entry->query_base_addr;
  410. f->command_base_addr = page_base | pdt_entry->command_base_addr;
  411. f->control_base_addr = page_base | pdt_entry->control_base_addr;
  412. f->data_base_addr = page_base | pdt_entry->data_base_addr;
  413. f->interrupt_base = interrupt_count;
  414. f->interrupt_count = pdt_entry->interrupt_source_count;
  415. f->irq_mask = rmi_gen_mask(f->interrupt_base,
  416. f->interrupt_count);
  417. }
  418. }
  419. static int rmi_scan_pdt(struct hid_device *hdev)
  420. {
  421. struct rmi_data *data = hid_get_drvdata(hdev);
  422. struct pdt_entry entry;
  423. int page;
  424. bool page_has_function;
  425. int i;
  426. int retval;
  427. int interrupt = 0;
  428. u16 page_start, pdt_start , pdt_end;
  429. hid_info(hdev, "Scanning PDT...\n");
  430. for (page = 0; (page <= RMI4_MAX_PAGE); page++) {
  431. page_start = RMI4_PAGE_SIZE * page;
  432. pdt_start = page_start + PDT_START_SCAN_LOCATION;
  433. pdt_end = page_start + PDT_END_SCAN_LOCATION;
  434. page_has_function = false;
  435. for (i = pdt_start; i >= pdt_end; i -= sizeof(entry)) {
  436. retval = rmi_read_block(hdev, i, &entry, sizeof(entry));
  437. if (retval) {
  438. hid_err(hdev,
  439. "Read of PDT entry at %#06x failed.\n",
  440. i);
  441. goto error_exit;
  442. }
  443. if (RMI4_END_OF_PDT(entry.function_number))
  444. break;
  445. page_has_function = true;
  446. hid_info(hdev, "Found F%02X on page %#04x\n",
  447. entry.function_number, page);
  448. rmi_register_function(data, &entry, page, interrupt);
  449. interrupt += entry.interrupt_source_count;
  450. }
  451. if (!page_has_function)
  452. break;
  453. }
  454. hid_info(hdev, "%s: Done with PDT scan.\n", __func__);
  455. retval = 0;
  456. error_exit:
  457. return retval;
  458. }
  459. static int rmi_populate_f11(struct hid_device *hdev)
  460. {
  461. struct rmi_data *data = hid_get_drvdata(hdev);
  462. u8 buf[20];
  463. int ret;
  464. bool has_query9;
  465. bool has_query10;
  466. bool has_query11;
  467. bool has_query12;
  468. bool has_physical_props;
  469. unsigned x_size, y_size;
  470. u16 query12_offset;
  471. if (!data->f11.query_base_addr) {
  472. hid_err(hdev, "No 2D sensor found, giving up.\n");
  473. return -ENODEV;
  474. }
  475. /* query 0 contains some useful information */
  476. ret = rmi_read(hdev, data->f11.query_base_addr, buf);
  477. if (ret) {
  478. hid_err(hdev, "can not get query 0: %d.\n", ret);
  479. return ret;
  480. }
  481. has_query9 = !!(buf[0] & BIT(3));
  482. has_query11 = !!(buf[0] & BIT(4));
  483. has_query12 = !!(buf[0] & BIT(5));
  484. /* query 1 to get the max number of fingers */
  485. ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf);
  486. if (ret) {
  487. hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret);
  488. return ret;
  489. }
  490. data->max_fingers = (buf[0] & 0x07) + 1;
  491. if (data->max_fingers > 5)
  492. data->max_fingers = 10;
  493. data->f11.report_size = data->max_fingers * 5 +
  494. DIV_ROUND_UP(data->max_fingers, 4);
  495. if (!(buf[0] & BIT(4))) {
  496. hid_err(hdev, "No absolute events, giving up.\n");
  497. return -ENODEV;
  498. }
  499. /* query 8 to find out if query 10 exists */
  500. ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf);
  501. if (ret) {
  502. hid_err(hdev, "can not read gesture information: %d.\n", ret);
  503. return ret;
  504. }
  505. has_query10 = !!(buf[0] & BIT(2));
  506. /*
  507. * At least 8 queries are guaranteed to be present in F11
  508. * +1 for query12.
  509. */
  510. query12_offset = 9;
  511. if (has_query9)
  512. ++query12_offset;
  513. if (has_query10)
  514. ++query12_offset;
  515. if (has_query11)
  516. ++query12_offset;
  517. /* query 12 to know if the physical properties are reported */
  518. if (has_query12) {
  519. ret = rmi_read(hdev, data->f11.query_base_addr
  520. + query12_offset, buf);
  521. if (ret) {
  522. hid_err(hdev, "can not get query 12: %d.\n", ret);
  523. return ret;
  524. }
  525. has_physical_props = !!(buf[0] & BIT(5));
  526. if (has_physical_props) {
  527. ret = rmi_read_block(hdev,
  528. data->f11.query_base_addr
  529. + query12_offset + 1, buf, 4);
  530. if (ret) {
  531. hid_err(hdev, "can not read query 15-18: %d.\n",
  532. ret);
  533. return ret;
  534. }
  535. x_size = buf[0] | (buf[1] << 8);
  536. y_size = buf[2] | (buf[3] << 8);
  537. data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10);
  538. data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10);
  539. hid_info(hdev, "%s: size in mm: %d x %d\n",
  540. __func__, data->x_size_mm, data->y_size_mm);
  541. }
  542. }
  543. /*
  544. * retrieve the ctrl registers
  545. * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
  546. * and there is no way to know if the first 20 bytes are here or not.
  547. * We use only the first 10 bytes, so get only them.
  548. */
  549. ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 10);
  550. if (ret) {
  551. hid_err(hdev, "can not read ctrl block of size 10: %d.\n", ret);
  552. return ret;
  553. }
  554. data->max_x = buf[6] | (buf[7] << 8);
  555. data->max_y = buf[8] | (buf[9] << 8);
  556. return 0;
  557. }
  558. static int rmi_populate_f30(struct hid_device *hdev)
  559. {
  560. struct rmi_data *data = hid_get_drvdata(hdev);
  561. u8 buf[20];
  562. int ret;
  563. bool has_gpio, has_led;
  564. unsigned bytes_per_ctrl;
  565. u8 ctrl2_addr;
  566. int ctrl2_3_length;
  567. int i;
  568. /* function F30 is for physical buttons */
  569. if (!data->f30.query_base_addr) {
  570. hid_err(hdev, "No GPIO/LEDs found, giving up.\n");
  571. return -ENODEV;
  572. }
  573. ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2);
  574. if (ret) {
  575. hid_err(hdev, "can not get F30 query registers: %d.\n", ret);
  576. return ret;
  577. }
  578. has_gpio = !!(buf[0] & BIT(3));
  579. has_led = !!(buf[0] & BIT(2));
  580. data->gpio_led_count = buf[1] & 0x1f;
  581. /* retrieve ctrl 2 & 3 registers */
  582. bytes_per_ctrl = (data->gpio_led_count + 7) / 8;
  583. /* Ctrl0 is present only if both has_gpio and has_led are set*/
  584. ctrl2_addr = (has_gpio && has_led) ? bytes_per_ctrl : 0;
  585. /* Ctrl1 is always be present */
  586. ctrl2_addr += bytes_per_ctrl;
  587. ctrl2_3_length = 2 * bytes_per_ctrl;
  588. data->f30.report_size = bytes_per_ctrl;
  589. ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr,
  590. buf, ctrl2_3_length);
  591. if (ret) {
  592. hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n",
  593. ctrl2_3_length, ret);
  594. return ret;
  595. }
  596. for (i = 0; i < data->gpio_led_count; i++) {
  597. int byte_position = i >> 3;
  598. int bit_position = i & 0x07;
  599. u8 dir_byte = buf[byte_position];
  600. u8 data_byte = buf[byte_position + bytes_per_ctrl];
  601. bool dir = (dir_byte >> bit_position) & BIT(0);
  602. bool dat = (data_byte >> bit_position) & BIT(0);
  603. if (dir == 0) {
  604. /* input mode */
  605. if (dat) {
  606. /* actual buttons have pull up resistor */
  607. data->button_count++;
  608. set_bit(i, &data->button_mask);
  609. set_bit(i, &data->button_state_mask);
  610. }
  611. }
  612. }
  613. return 0;
  614. }
  615. static int rmi_populate(struct hid_device *hdev)
  616. {
  617. int ret;
  618. ret = rmi_scan_pdt(hdev);
  619. if (ret) {
  620. hid_err(hdev, "PDT scan failed with code %d.\n", ret);
  621. return ret;
  622. }
  623. ret = rmi_populate_f11(hdev);
  624. if (ret) {
  625. hid_err(hdev, "Error while initializing F11 (%d).\n", ret);
  626. return ret;
  627. }
  628. ret = rmi_populate_f30(hdev);
  629. if (ret)
  630. hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
  631. return 0;
  632. }
  633. static void rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
  634. {
  635. struct rmi_data *data = hid_get_drvdata(hdev);
  636. struct input_dev *input = hi->input;
  637. int ret;
  638. int res_x, res_y, i;
  639. data->input = input;
  640. hid_dbg(hdev, "Opening low level driver\n");
  641. ret = hid_hw_open(hdev);
  642. if (ret)
  643. return;
  644. /* Allow incoming hid reports */
  645. hid_device_io_start(hdev);
  646. ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  647. if (ret < 0) {
  648. dev_err(&hdev->dev, "failed to set rmi mode\n");
  649. goto exit;
  650. }
  651. ret = rmi_set_page(hdev, 0);
  652. if (ret < 0) {
  653. dev_err(&hdev->dev, "failed to set page select to 0.\n");
  654. goto exit;
  655. }
  656. ret = rmi_populate(hdev);
  657. if (ret)
  658. goto exit;
  659. __set_bit(EV_ABS, input->evbit);
  660. input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0);
  661. input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0);
  662. if (data->x_size_mm && data->y_size_mm) {
  663. res_x = (data->max_x - 1) / data->x_size_mm;
  664. res_y = (data->max_y - 1) / data->y_size_mm;
  665. input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
  666. input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
  667. }
  668. input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
  669. input_set_abs_params(input, ABS_MT_PRESSURE, 0, 0xff, 0, 0);
  670. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 0x0f, 0, 0);
  671. input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 0x0f, 0, 0);
  672. input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER);
  673. if (data->button_count) {
  674. __set_bit(EV_KEY, input->evbit);
  675. for (i = 0; i < data->button_count; i++)
  676. __set_bit(BTN_LEFT + i, input->keybit);
  677. if (data->button_count == 1)
  678. __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
  679. }
  680. set_bit(RMI_STARTED, &data->flags);
  681. exit:
  682. hid_device_io_stop(hdev);
  683. hid_hw_close(hdev);
  684. }
  685. static int rmi_input_mapping(struct hid_device *hdev,
  686. struct hid_input *hi, struct hid_field *field,
  687. struct hid_usage *usage, unsigned long **bit, int *max)
  688. {
  689. /* we want to make HID ignore the advertised HID collection */
  690. return -1;
  691. }
  692. static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
  693. {
  694. struct rmi_data *data = NULL;
  695. int ret;
  696. size_t alloc_size;
  697. data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
  698. if (!data)
  699. return -ENOMEM;
  700. INIT_WORK(&data->reset_work, rmi_reset_work);
  701. data->hdev = hdev;
  702. hid_set_drvdata(hdev, data);
  703. hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
  704. ret = hid_parse(hdev);
  705. if (ret) {
  706. hid_err(hdev, "parse failed\n");
  707. return ret;
  708. }
  709. data->input_report_size = (hdev->report_enum[HID_INPUT_REPORT]
  710. .report_id_hash[RMI_ATTN_REPORT_ID]->size >> 3)
  711. + 1 /* report id */;
  712. data->output_report_size = (hdev->report_enum[HID_OUTPUT_REPORT]
  713. .report_id_hash[RMI_WRITE_REPORT_ID]->size >> 3)
  714. + 1 /* report id */;
  715. alloc_size = data->output_report_size + data->input_report_size;
  716. data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
  717. if (!data->writeReport) {
  718. ret = -ENOMEM;
  719. return ret;
  720. }
  721. data->readReport = data->writeReport + data->output_report_size;
  722. init_waitqueue_head(&data->wait);
  723. mutex_init(&data->page_mutex);
  724. ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
  725. if (ret) {
  726. hid_err(hdev, "hw start failed\n");
  727. return ret;
  728. }
  729. if (!test_bit(RMI_STARTED, &data->flags)) {
  730. hid_hw_stop(hdev);
  731. return -EIO;
  732. }
  733. return 0;
  734. }
  735. static void rmi_remove(struct hid_device *hdev)
  736. {
  737. struct rmi_data *hdata = hid_get_drvdata(hdev);
  738. clear_bit(RMI_STARTED, &hdata->flags);
  739. hid_hw_stop(hdev);
  740. }
  741. static const struct hid_device_id rmi_id[] = {
  742. { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
  743. { }
  744. };
  745. MODULE_DEVICE_TABLE(hid, rmi_id);
  746. static struct hid_driver rmi_driver = {
  747. .name = "hid-rmi",
  748. .id_table = rmi_id,
  749. .probe = rmi_probe,
  750. .remove = rmi_remove,
  751. .raw_event = rmi_raw_event,
  752. .input_mapping = rmi_input_mapping,
  753. .input_configured = rmi_input_configured,
  754. #ifdef CONFIG_PM
  755. .resume = rmi_post_resume,
  756. .reset_resume = rmi_post_reset,
  757. #endif
  758. };
  759. module_hid_driver(rmi_driver);
  760. MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
  761. MODULE_DESCRIPTION("RMI HID driver");
  762. MODULE_LICENSE("GPL");