hid-rmi.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  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_dbg(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_dbg(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 = false;
  466. bool has_query11;
  467. bool has_query12;
  468. bool has_physical_props;
  469. bool has_gestures;
  470. bool has_rel;
  471. unsigned x_size, y_size;
  472. u16 query12_offset;
  473. if (!data->f11.query_base_addr) {
  474. hid_err(hdev, "No 2D sensor found, giving up.\n");
  475. return -ENODEV;
  476. }
  477. /* query 0 contains some useful information */
  478. ret = rmi_read(hdev, data->f11.query_base_addr, buf);
  479. if (ret) {
  480. hid_err(hdev, "can not get query 0: %d.\n", ret);
  481. return ret;
  482. }
  483. has_query9 = !!(buf[0] & BIT(3));
  484. has_query11 = !!(buf[0] & BIT(4));
  485. has_query12 = !!(buf[0] & BIT(5));
  486. /* query 1 to get the max number of fingers */
  487. ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf);
  488. if (ret) {
  489. hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret);
  490. return ret;
  491. }
  492. data->max_fingers = (buf[0] & 0x07) + 1;
  493. if (data->max_fingers > 5)
  494. data->max_fingers = 10;
  495. data->f11.report_size = data->max_fingers * 5 +
  496. DIV_ROUND_UP(data->max_fingers, 4);
  497. if (!(buf[0] & BIT(4))) {
  498. hid_err(hdev, "No absolute events, giving up.\n");
  499. return -ENODEV;
  500. }
  501. has_rel = !!(buf[0] & BIT(3));
  502. has_gestures = !!(buf[0] & BIT(5));
  503. if (has_gestures) {
  504. /* query 8 to find out if query 10 exists */
  505. ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf);
  506. if (ret) {
  507. hid_err(hdev, "can not read gesture information: %d.\n",
  508. ret);
  509. return ret;
  510. }
  511. has_query10 = !!(buf[0] & BIT(2));
  512. }
  513. /*
  514. * At least 4 queries are guaranteed to be present in F11
  515. * +1 for query 5 which is present since absolute events are
  516. * reported and +1 for query 12.
  517. */
  518. query12_offset = 6;
  519. if (has_rel)
  520. ++query12_offset; /* query 6 is present */
  521. if (has_gestures)
  522. query12_offset += 2; /* query 7 and 8 are present */
  523. if (has_query9)
  524. ++query12_offset;
  525. if (has_query10)
  526. ++query12_offset;
  527. if (has_query11)
  528. ++query12_offset;
  529. /* query 12 to know if the physical properties are reported */
  530. if (has_query12) {
  531. ret = rmi_read(hdev, data->f11.query_base_addr
  532. + query12_offset, buf);
  533. if (ret) {
  534. hid_err(hdev, "can not get query 12: %d.\n", ret);
  535. return ret;
  536. }
  537. has_physical_props = !!(buf[0] & BIT(5));
  538. if (has_physical_props) {
  539. ret = rmi_read_block(hdev,
  540. data->f11.query_base_addr
  541. + query12_offset + 1, buf, 4);
  542. if (ret) {
  543. hid_err(hdev, "can not read query 15-18: %d.\n",
  544. ret);
  545. return ret;
  546. }
  547. x_size = buf[0] | (buf[1] << 8);
  548. y_size = buf[2] | (buf[3] << 8);
  549. data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10);
  550. data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10);
  551. hid_info(hdev, "%s: size in mm: %d x %d\n",
  552. __func__, data->x_size_mm, data->y_size_mm);
  553. }
  554. }
  555. /*
  556. * retrieve the ctrl registers
  557. * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
  558. * and there is no way to know if the first 20 bytes are here or not.
  559. * We use only the first 10 bytes, so get only them.
  560. */
  561. ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 10);
  562. if (ret) {
  563. hid_err(hdev, "can not read ctrl block of size 10: %d.\n", ret);
  564. return ret;
  565. }
  566. data->max_x = buf[6] | (buf[7] << 8);
  567. data->max_y = buf[8] | (buf[9] << 8);
  568. return 0;
  569. }
  570. static int rmi_populate_f30(struct hid_device *hdev)
  571. {
  572. struct rmi_data *data = hid_get_drvdata(hdev);
  573. u8 buf[20];
  574. int ret;
  575. bool has_gpio, has_led;
  576. unsigned bytes_per_ctrl;
  577. u8 ctrl2_addr;
  578. int ctrl2_3_length;
  579. int i;
  580. /* function F30 is for physical buttons */
  581. if (!data->f30.query_base_addr) {
  582. hid_err(hdev, "No GPIO/LEDs found, giving up.\n");
  583. return -ENODEV;
  584. }
  585. ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2);
  586. if (ret) {
  587. hid_err(hdev, "can not get F30 query registers: %d.\n", ret);
  588. return ret;
  589. }
  590. has_gpio = !!(buf[0] & BIT(3));
  591. has_led = !!(buf[0] & BIT(2));
  592. data->gpio_led_count = buf[1] & 0x1f;
  593. /* retrieve ctrl 2 & 3 registers */
  594. bytes_per_ctrl = (data->gpio_led_count + 7) / 8;
  595. /* Ctrl0 is present only if both has_gpio and has_led are set*/
  596. ctrl2_addr = (has_gpio && has_led) ? bytes_per_ctrl : 0;
  597. /* Ctrl1 is always be present */
  598. ctrl2_addr += bytes_per_ctrl;
  599. ctrl2_3_length = 2 * bytes_per_ctrl;
  600. data->f30.report_size = bytes_per_ctrl;
  601. ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr,
  602. buf, ctrl2_3_length);
  603. if (ret) {
  604. hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n",
  605. ctrl2_3_length, ret);
  606. return ret;
  607. }
  608. for (i = 0; i < data->gpio_led_count; i++) {
  609. int byte_position = i >> 3;
  610. int bit_position = i & 0x07;
  611. u8 dir_byte = buf[byte_position];
  612. u8 data_byte = buf[byte_position + bytes_per_ctrl];
  613. bool dir = (dir_byte >> bit_position) & BIT(0);
  614. bool dat = (data_byte >> bit_position) & BIT(0);
  615. if (dir == 0) {
  616. /* input mode */
  617. if (dat) {
  618. /* actual buttons have pull up resistor */
  619. data->button_count++;
  620. set_bit(i, &data->button_mask);
  621. set_bit(i, &data->button_state_mask);
  622. }
  623. }
  624. }
  625. return 0;
  626. }
  627. static int rmi_populate(struct hid_device *hdev)
  628. {
  629. int ret;
  630. ret = rmi_scan_pdt(hdev);
  631. if (ret) {
  632. hid_err(hdev, "PDT scan failed with code %d.\n", ret);
  633. return ret;
  634. }
  635. ret = rmi_populate_f11(hdev);
  636. if (ret) {
  637. hid_err(hdev, "Error while initializing F11 (%d).\n", ret);
  638. return ret;
  639. }
  640. ret = rmi_populate_f30(hdev);
  641. if (ret)
  642. hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
  643. return 0;
  644. }
  645. static void rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
  646. {
  647. struct rmi_data *data = hid_get_drvdata(hdev);
  648. struct input_dev *input = hi->input;
  649. int ret;
  650. int res_x, res_y, i;
  651. data->input = input;
  652. hid_dbg(hdev, "Opening low level driver\n");
  653. ret = hid_hw_open(hdev);
  654. if (ret)
  655. return;
  656. /* Allow incoming hid reports */
  657. hid_device_io_start(hdev);
  658. ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  659. if (ret < 0) {
  660. dev_err(&hdev->dev, "failed to set rmi mode\n");
  661. goto exit;
  662. }
  663. ret = rmi_set_page(hdev, 0);
  664. if (ret < 0) {
  665. dev_err(&hdev->dev, "failed to set page select to 0.\n");
  666. goto exit;
  667. }
  668. ret = rmi_populate(hdev);
  669. if (ret)
  670. goto exit;
  671. __set_bit(EV_ABS, input->evbit);
  672. input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0);
  673. input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0);
  674. if (data->x_size_mm && data->y_size_mm) {
  675. res_x = (data->max_x - 1) / data->x_size_mm;
  676. res_y = (data->max_y - 1) / data->y_size_mm;
  677. input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
  678. input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
  679. }
  680. input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
  681. input_set_abs_params(input, ABS_MT_PRESSURE, 0, 0xff, 0, 0);
  682. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 0x0f, 0, 0);
  683. input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 0x0f, 0, 0);
  684. input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER);
  685. if (data->button_count) {
  686. __set_bit(EV_KEY, input->evbit);
  687. for (i = 0; i < data->button_count; i++)
  688. __set_bit(BTN_LEFT + i, input->keybit);
  689. if (data->button_count == 1)
  690. __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
  691. }
  692. set_bit(RMI_STARTED, &data->flags);
  693. exit:
  694. hid_device_io_stop(hdev);
  695. hid_hw_close(hdev);
  696. }
  697. static int rmi_input_mapping(struct hid_device *hdev,
  698. struct hid_input *hi, struct hid_field *field,
  699. struct hid_usage *usage, unsigned long **bit, int *max)
  700. {
  701. /* we want to make HID ignore the advertised HID collection */
  702. return -1;
  703. }
  704. static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
  705. {
  706. struct rmi_data *data = NULL;
  707. int ret;
  708. size_t alloc_size;
  709. struct hid_report *input_report;
  710. struct hid_report *output_report;
  711. data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
  712. if (!data)
  713. return -ENOMEM;
  714. INIT_WORK(&data->reset_work, rmi_reset_work);
  715. data->hdev = hdev;
  716. hid_set_drvdata(hdev, data);
  717. hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
  718. ret = hid_parse(hdev);
  719. if (ret) {
  720. hid_err(hdev, "parse failed\n");
  721. return ret;
  722. }
  723. input_report = hdev->report_enum[HID_INPUT_REPORT]
  724. .report_id_hash[RMI_ATTN_REPORT_ID];
  725. if (!input_report) {
  726. hid_err(hdev, "device does not have expected input report\n");
  727. ret = -ENODEV;
  728. return ret;
  729. }
  730. data->input_report_size = (input_report->size >> 3) + 1 /* report id */;
  731. output_report = hdev->report_enum[HID_OUTPUT_REPORT]
  732. .report_id_hash[RMI_WRITE_REPORT_ID];
  733. if (!output_report) {
  734. hid_err(hdev, "device does not have expected output report\n");
  735. ret = -ENODEV;
  736. return ret;
  737. }
  738. data->output_report_size = (output_report->size >> 3)
  739. + 1 /* report id */;
  740. alloc_size = data->output_report_size + data->input_report_size;
  741. data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
  742. if (!data->writeReport) {
  743. ret = -ENOMEM;
  744. return ret;
  745. }
  746. data->readReport = data->writeReport + data->output_report_size;
  747. init_waitqueue_head(&data->wait);
  748. mutex_init(&data->page_mutex);
  749. ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
  750. if (ret) {
  751. hid_err(hdev, "hw start failed\n");
  752. return ret;
  753. }
  754. if (!test_bit(RMI_STARTED, &data->flags))
  755. /*
  756. * The device maybe in the bootloader if rmi_input_configured
  757. * failed to find F11 in the PDT. Print an error, but don't
  758. * return an error from rmi_probe so that hidraw will be
  759. * accessible from userspace. That way a userspace tool
  760. * can be used to reload working firmware on the touchpad.
  761. */
  762. hid_err(hdev, "Device failed to be properly configured\n");
  763. return 0;
  764. }
  765. static void rmi_remove(struct hid_device *hdev)
  766. {
  767. struct rmi_data *hdata = hid_get_drvdata(hdev);
  768. clear_bit(RMI_STARTED, &hdata->flags);
  769. hid_hw_stop(hdev);
  770. }
  771. static const struct hid_device_id rmi_id[] = {
  772. { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
  773. { }
  774. };
  775. MODULE_DEVICE_TABLE(hid, rmi_id);
  776. static struct hid_driver rmi_driver = {
  777. .name = "hid-rmi",
  778. .id_table = rmi_id,
  779. .probe = rmi_probe,
  780. .remove = rmi_remove,
  781. .raw_event = rmi_raw_event,
  782. .input_mapping = rmi_input_mapping,
  783. .input_configured = rmi_input_configured,
  784. #ifdef CONFIG_PM
  785. .resume = rmi_post_resume,
  786. .reset_resume = rmi_post_reset,
  787. #endif
  788. };
  789. module_hid_driver(rmi_driver);
  790. MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
  791. MODULE_DESCRIPTION("RMI HID driver");
  792. MODULE_LICENSE("GPL");