hid-rmi.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  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 (!(irq & hdata->f11.irq_mask) || size <= 0)
  276. return 0;
  277. offset = (hdata->max_fingers >> 2) + 1;
  278. for (i = 0; i < hdata->max_fingers; i++) {
  279. int fs_byte_position = i >> 2;
  280. int fs_bit_position = (i & 0x3) << 1;
  281. int finger_state = (data[fs_byte_position] >> fs_bit_position) &
  282. 0x03;
  283. int position = offset + 5 * i;
  284. if (position + 5 > size) {
  285. /* partial report, go on with what we received */
  286. printk_once(KERN_WARNING
  287. "%s %s: Detected incomplete finger report. Finger reports may occasionally get dropped on this platform.\n",
  288. dev_driver_string(&hdev->dev),
  289. dev_name(&hdev->dev));
  290. hid_dbg(hdev, "Incomplete finger report\n");
  291. break;
  292. }
  293. rmi_f11_process_touch(hdata, i, finger_state, &data[position]);
  294. }
  295. input_mt_sync_frame(hdata->input);
  296. input_sync(hdata->input);
  297. return hdata->f11.report_size;
  298. }
  299. static int rmi_f30_input_event(struct hid_device *hdev, u8 irq, u8 *data,
  300. int size)
  301. {
  302. struct rmi_data *hdata = hid_get_drvdata(hdev);
  303. int i;
  304. int button = 0;
  305. bool value;
  306. if (!(irq & hdata->f30.irq_mask))
  307. return 0;
  308. if (size < (int)hdata->f30.report_size) {
  309. hid_warn(hdev, "Click Button pressed, but the click data is missing\n");
  310. return 0;
  311. }
  312. for (i = 0; i < hdata->gpio_led_count; i++) {
  313. if (test_bit(i, &hdata->button_mask)) {
  314. value = (data[i / 8] >> (i & 0x07)) & BIT(0);
  315. if (test_bit(i, &hdata->button_state_mask))
  316. value = !value;
  317. input_event(hdata->input, EV_KEY, BTN_LEFT + button++,
  318. value);
  319. }
  320. }
  321. return hdata->f30.report_size;
  322. }
  323. static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
  324. {
  325. struct rmi_data *hdata = hid_get_drvdata(hdev);
  326. unsigned long irq_mask = 0;
  327. unsigned index = 2;
  328. if (!(test_bit(RMI_STARTED, &hdata->flags)))
  329. return 0;
  330. irq_mask |= hdata->f11.irq_mask;
  331. irq_mask |= hdata->f30.irq_mask;
  332. if (data[1] & ~irq_mask)
  333. hid_dbg(hdev, "unknown intr source:%02lx %s:%d\n",
  334. data[1] & ~irq_mask, __FILE__, __LINE__);
  335. if (hdata->f11.interrupt_base < hdata->f30.interrupt_base) {
  336. index += rmi_f11_input_event(hdev, data[1], &data[index],
  337. size - index);
  338. index += rmi_f30_input_event(hdev, data[1], &data[index],
  339. size - index);
  340. } else {
  341. index += rmi_f30_input_event(hdev, data[1], &data[index],
  342. size - index);
  343. index += rmi_f11_input_event(hdev, data[1], &data[index],
  344. size - index);
  345. }
  346. return 1;
  347. }
  348. static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size)
  349. {
  350. struct rmi_data *hdata = hid_get_drvdata(hdev);
  351. if (!test_bit(RMI_READ_REQUEST_PENDING, &hdata->flags)) {
  352. hid_dbg(hdev, "no read request pending\n");
  353. return 0;
  354. }
  355. memcpy(hdata->readReport, data, size < hdata->input_report_size ?
  356. size : hdata->input_report_size);
  357. set_bit(RMI_READ_DATA_PENDING, &hdata->flags);
  358. wake_up(&hdata->wait);
  359. return 1;
  360. }
  361. static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size)
  362. {
  363. int valid_size = size;
  364. /*
  365. * On the Dell XPS 13 9333, the bus sometimes get confused and fills
  366. * the report with a sentinel value "ff". Synaptics told us that such
  367. * behavior does not comes from the touchpad itself, so we filter out
  368. * such reports here.
  369. */
  370. while ((data[valid_size - 1] == 0xff) && valid_size > 0)
  371. valid_size--;
  372. return valid_size;
  373. }
  374. static int rmi_raw_event(struct hid_device *hdev,
  375. struct hid_report *report, u8 *data, int size)
  376. {
  377. size = rmi_check_sanity(hdev, data, size);
  378. if (size < 2)
  379. return 0;
  380. switch (data[0]) {
  381. case RMI_READ_DATA_REPORT_ID:
  382. return rmi_read_data_event(hdev, data, size);
  383. case RMI_ATTN_REPORT_ID:
  384. return rmi_input_event(hdev, data, size);
  385. case RMI_MOUSE_REPORT_ID:
  386. rmi_schedule_reset(hdev);
  387. break;
  388. }
  389. return 0;
  390. }
  391. #ifdef CONFIG_PM
  392. static int rmi_post_reset(struct hid_device *hdev)
  393. {
  394. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  395. }
  396. static int rmi_post_resume(struct hid_device *hdev)
  397. {
  398. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  399. }
  400. #endif /* CONFIG_PM */
  401. #define RMI4_MAX_PAGE 0xff
  402. #define RMI4_PAGE_SIZE 0x0100
  403. #define PDT_START_SCAN_LOCATION 0x00e9
  404. #define PDT_END_SCAN_LOCATION 0x0005
  405. #define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff)
  406. struct pdt_entry {
  407. u8 query_base_addr:8;
  408. u8 command_base_addr:8;
  409. u8 control_base_addr:8;
  410. u8 data_base_addr:8;
  411. u8 interrupt_source_count:3;
  412. u8 bits3and4:2;
  413. u8 function_version:2;
  414. u8 bit7:1;
  415. u8 function_number:8;
  416. } __attribute__((__packed__));
  417. static inline unsigned long rmi_gen_mask(unsigned irq_base, unsigned irq_count)
  418. {
  419. return GENMASK(irq_count + irq_base - 1, irq_base);
  420. }
  421. static void rmi_register_function(struct rmi_data *data,
  422. struct pdt_entry *pdt_entry, int page, unsigned interrupt_count)
  423. {
  424. struct rmi_function *f = NULL;
  425. u16 page_base = page << 8;
  426. switch (pdt_entry->function_number) {
  427. case 0x11:
  428. f = &data->f11;
  429. break;
  430. case 0x30:
  431. f = &data->f30;
  432. break;
  433. }
  434. if (f) {
  435. f->page = page;
  436. f->query_base_addr = page_base | pdt_entry->query_base_addr;
  437. f->command_base_addr = page_base | pdt_entry->command_base_addr;
  438. f->control_base_addr = page_base | pdt_entry->control_base_addr;
  439. f->data_base_addr = page_base | pdt_entry->data_base_addr;
  440. f->interrupt_base = interrupt_count;
  441. f->interrupt_count = pdt_entry->interrupt_source_count;
  442. f->irq_mask = rmi_gen_mask(f->interrupt_base,
  443. f->interrupt_count);
  444. }
  445. }
  446. static int rmi_scan_pdt(struct hid_device *hdev)
  447. {
  448. struct rmi_data *data = hid_get_drvdata(hdev);
  449. struct pdt_entry entry;
  450. int page;
  451. bool page_has_function;
  452. int i;
  453. int retval;
  454. int interrupt = 0;
  455. u16 page_start, pdt_start , pdt_end;
  456. hid_info(hdev, "Scanning PDT...\n");
  457. for (page = 0; (page <= RMI4_MAX_PAGE); page++) {
  458. page_start = RMI4_PAGE_SIZE * page;
  459. pdt_start = page_start + PDT_START_SCAN_LOCATION;
  460. pdt_end = page_start + PDT_END_SCAN_LOCATION;
  461. page_has_function = false;
  462. for (i = pdt_start; i >= pdt_end; i -= sizeof(entry)) {
  463. retval = rmi_read_block(hdev, i, &entry, sizeof(entry));
  464. if (retval) {
  465. hid_err(hdev,
  466. "Read of PDT entry at %#06x failed.\n",
  467. i);
  468. goto error_exit;
  469. }
  470. if (RMI4_END_OF_PDT(entry.function_number))
  471. break;
  472. page_has_function = true;
  473. hid_info(hdev, "Found F%02X on page %#04x\n",
  474. entry.function_number, page);
  475. rmi_register_function(data, &entry, page, interrupt);
  476. interrupt += entry.interrupt_source_count;
  477. }
  478. if (!page_has_function)
  479. break;
  480. }
  481. hid_info(hdev, "%s: Done with PDT scan.\n", __func__);
  482. retval = 0;
  483. error_exit:
  484. return retval;
  485. }
  486. static int rmi_populate_f11(struct hid_device *hdev)
  487. {
  488. struct rmi_data *data = hid_get_drvdata(hdev);
  489. u8 buf[20];
  490. int ret;
  491. bool has_query9;
  492. bool has_query10 = false;
  493. bool has_query11;
  494. bool has_query12;
  495. bool has_physical_props;
  496. bool has_gestures;
  497. bool has_rel;
  498. unsigned x_size, y_size;
  499. u16 query12_offset;
  500. if (!data->f11.query_base_addr) {
  501. hid_err(hdev, "No 2D sensor found, giving up.\n");
  502. return -ENODEV;
  503. }
  504. /* query 0 contains some useful information */
  505. ret = rmi_read(hdev, data->f11.query_base_addr, buf);
  506. if (ret) {
  507. hid_err(hdev, "can not get query 0: %d.\n", ret);
  508. return ret;
  509. }
  510. has_query9 = !!(buf[0] & BIT(3));
  511. has_query11 = !!(buf[0] & BIT(4));
  512. has_query12 = !!(buf[0] & BIT(5));
  513. /* query 1 to get the max number of fingers */
  514. ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf);
  515. if (ret) {
  516. hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret);
  517. return ret;
  518. }
  519. data->max_fingers = (buf[0] & 0x07) + 1;
  520. if (data->max_fingers > 5)
  521. data->max_fingers = 10;
  522. data->f11.report_size = data->max_fingers * 5 +
  523. DIV_ROUND_UP(data->max_fingers, 4);
  524. if (!(buf[0] & BIT(4))) {
  525. hid_err(hdev, "No absolute events, giving up.\n");
  526. return -ENODEV;
  527. }
  528. has_rel = !!(buf[0] & BIT(3));
  529. has_gestures = !!(buf[0] & BIT(5));
  530. if (has_gestures) {
  531. /* query 8 to find out if query 10 exists */
  532. ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf);
  533. if (ret) {
  534. hid_err(hdev, "can not read gesture information: %d.\n",
  535. ret);
  536. return ret;
  537. }
  538. has_query10 = !!(buf[0] & BIT(2));
  539. }
  540. /*
  541. * At least 4 queries are guaranteed to be present in F11
  542. * +1 for query 5 which is present since absolute events are
  543. * reported and +1 for query 12.
  544. */
  545. query12_offset = 6;
  546. if (has_rel)
  547. ++query12_offset; /* query 6 is present */
  548. if (has_gestures)
  549. query12_offset += 2; /* query 7 and 8 are present */
  550. if (has_query9)
  551. ++query12_offset;
  552. if (has_query10)
  553. ++query12_offset;
  554. if (has_query11)
  555. ++query12_offset;
  556. /* query 12 to know if the physical properties are reported */
  557. if (has_query12) {
  558. ret = rmi_read(hdev, data->f11.query_base_addr
  559. + query12_offset, buf);
  560. if (ret) {
  561. hid_err(hdev, "can not get query 12: %d.\n", ret);
  562. return ret;
  563. }
  564. has_physical_props = !!(buf[0] & BIT(5));
  565. if (has_physical_props) {
  566. ret = rmi_read_block(hdev,
  567. data->f11.query_base_addr
  568. + query12_offset + 1, buf, 4);
  569. if (ret) {
  570. hid_err(hdev, "can not read query 15-18: %d.\n",
  571. ret);
  572. return ret;
  573. }
  574. x_size = buf[0] | (buf[1] << 8);
  575. y_size = buf[2] | (buf[3] << 8);
  576. data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10);
  577. data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10);
  578. hid_info(hdev, "%s: size in mm: %d x %d\n",
  579. __func__, data->x_size_mm, data->y_size_mm);
  580. }
  581. }
  582. /*
  583. * retrieve the ctrl registers
  584. * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
  585. * and there is no way to know if the first 20 bytes are here or not.
  586. * We use only the first 10 bytes, so get only them.
  587. */
  588. ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 10);
  589. if (ret) {
  590. hid_err(hdev, "can not read ctrl block of size 10: %d.\n", ret);
  591. return ret;
  592. }
  593. data->max_x = buf[6] | (buf[7] << 8);
  594. data->max_y = buf[8] | (buf[9] << 8);
  595. return 0;
  596. }
  597. static int rmi_populate_f30(struct hid_device *hdev)
  598. {
  599. struct rmi_data *data = hid_get_drvdata(hdev);
  600. u8 buf[20];
  601. int ret;
  602. bool has_gpio, has_led;
  603. unsigned bytes_per_ctrl;
  604. u8 ctrl2_addr;
  605. int ctrl2_3_length;
  606. int i;
  607. /* function F30 is for physical buttons */
  608. if (!data->f30.query_base_addr) {
  609. hid_err(hdev, "No GPIO/LEDs found, giving up.\n");
  610. return -ENODEV;
  611. }
  612. ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2);
  613. if (ret) {
  614. hid_err(hdev, "can not get F30 query registers: %d.\n", ret);
  615. return ret;
  616. }
  617. has_gpio = !!(buf[0] & BIT(3));
  618. has_led = !!(buf[0] & BIT(2));
  619. data->gpio_led_count = buf[1] & 0x1f;
  620. /* retrieve ctrl 2 & 3 registers */
  621. bytes_per_ctrl = (data->gpio_led_count + 7) / 8;
  622. /* Ctrl0 is present only if both has_gpio and has_led are set*/
  623. ctrl2_addr = (has_gpio && has_led) ? bytes_per_ctrl : 0;
  624. /* Ctrl1 is always be present */
  625. ctrl2_addr += bytes_per_ctrl;
  626. ctrl2_3_length = 2 * bytes_per_ctrl;
  627. data->f30.report_size = bytes_per_ctrl;
  628. ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr,
  629. buf, ctrl2_3_length);
  630. if (ret) {
  631. hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n",
  632. ctrl2_3_length, ret);
  633. return ret;
  634. }
  635. for (i = 0; i < data->gpio_led_count; i++) {
  636. int byte_position = i >> 3;
  637. int bit_position = i & 0x07;
  638. u8 dir_byte = buf[byte_position];
  639. u8 data_byte = buf[byte_position + bytes_per_ctrl];
  640. bool dir = (dir_byte >> bit_position) & BIT(0);
  641. bool dat = (data_byte >> bit_position) & BIT(0);
  642. if (dir == 0) {
  643. /* input mode */
  644. if (dat) {
  645. /* actual buttons have pull up resistor */
  646. data->button_count++;
  647. set_bit(i, &data->button_mask);
  648. set_bit(i, &data->button_state_mask);
  649. }
  650. }
  651. }
  652. return 0;
  653. }
  654. static int rmi_populate(struct hid_device *hdev)
  655. {
  656. int ret;
  657. ret = rmi_scan_pdt(hdev);
  658. if (ret) {
  659. hid_err(hdev, "PDT scan failed with code %d.\n", ret);
  660. return ret;
  661. }
  662. ret = rmi_populate_f11(hdev);
  663. if (ret) {
  664. hid_err(hdev, "Error while initializing F11 (%d).\n", ret);
  665. return ret;
  666. }
  667. ret = rmi_populate_f30(hdev);
  668. if (ret)
  669. hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
  670. return 0;
  671. }
  672. static void rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
  673. {
  674. struct rmi_data *data = hid_get_drvdata(hdev);
  675. struct input_dev *input = hi->input;
  676. int ret;
  677. int res_x, res_y, i;
  678. data->input = input;
  679. hid_dbg(hdev, "Opening low level driver\n");
  680. ret = hid_hw_open(hdev);
  681. if (ret)
  682. return;
  683. /* Allow incoming hid reports */
  684. hid_device_io_start(hdev);
  685. ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  686. if (ret < 0) {
  687. dev_err(&hdev->dev, "failed to set rmi mode\n");
  688. goto exit;
  689. }
  690. ret = rmi_set_page(hdev, 0);
  691. if (ret < 0) {
  692. dev_err(&hdev->dev, "failed to set page select to 0.\n");
  693. goto exit;
  694. }
  695. ret = rmi_populate(hdev);
  696. if (ret)
  697. goto exit;
  698. __set_bit(EV_ABS, input->evbit);
  699. input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0);
  700. input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0);
  701. if (data->x_size_mm && data->y_size_mm) {
  702. res_x = (data->max_x - 1) / data->x_size_mm;
  703. res_y = (data->max_y - 1) / data->y_size_mm;
  704. input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
  705. input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
  706. }
  707. input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
  708. input_set_abs_params(input, ABS_MT_PRESSURE, 0, 0xff, 0, 0);
  709. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 0x0f, 0, 0);
  710. input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 0x0f, 0, 0);
  711. input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER);
  712. if (data->button_count) {
  713. __set_bit(EV_KEY, input->evbit);
  714. for (i = 0; i < data->button_count; i++)
  715. __set_bit(BTN_LEFT + i, input->keybit);
  716. if (data->button_count == 1)
  717. __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
  718. }
  719. set_bit(RMI_STARTED, &data->flags);
  720. exit:
  721. hid_device_io_stop(hdev);
  722. hid_hw_close(hdev);
  723. }
  724. static int rmi_input_mapping(struct hid_device *hdev,
  725. struct hid_input *hi, struct hid_field *field,
  726. struct hid_usage *usage, unsigned long **bit, int *max)
  727. {
  728. /* we want to make HID ignore the advertised HID collection */
  729. return -1;
  730. }
  731. static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
  732. {
  733. struct rmi_data *data = NULL;
  734. int ret;
  735. size_t alloc_size;
  736. struct hid_report *input_report;
  737. struct hid_report *output_report;
  738. data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
  739. if (!data)
  740. return -ENOMEM;
  741. INIT_WORK(&data->reset_work, rmi_reset_work);
  742. data->hdev = hdev;
  743. hid_set_drvdata(hdev, data);
  744. hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
  745. ret = hid_parse(hdev);
  746. if (ret) {
  747. hid_err(hdev, "parse failed\n");
  748. return ret;
  749. }
  750. input_report = hdev->report_enum[HID_INPUT_REPORT]
  751. .report_id_hash[RMI_ATTN_REPORT_ID];
  752. if (!input_report) {
  753. hid_err(hdev, "device does not have expected input report\n");
  754. ret = -ENODEV;
  755. return ret;
  756. }
  757. data->input_report_size = (input_report->size >> 3) + 1 /* report id */;
  758. output_report = hdev->report_enum[HID_OUTPUT_REPORT]
  759. .report_id_hash[RMI_WRITE_REPORT_ID];
  760. if (!output_report) {
  761. hid_err(hdev, "device does not have expected output report\n");
  762. ret = -ENODEV;
  763. return ret;
  764. }
  765. data->output_report_size = (output_report->size >> 3)
  766. + 1 /* report id */;
  767. alloc_size = data->output_report_size + data->input_report_size;
  768. data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
  769. if (!data->writeReport) {
  770. ret = -ENOMEM;
  771. return ret;
  772. }
  773. data->readReport = data->writeReport + data->output_report_size;
  774. init_waitqueue_head(&data->wait);
  775. mutex_init(&data->page_mutex);
  776. ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
  777. if (ret) {
  778. hid_err(hdev, "hw start failed\n");
  779. return ret;
  780. }
  781. if (!test_bit(RMI_STARTED, &data->flags))
  782. /*
  783. * The device maybe in the bootloader if rmi_input_configured
  784. * failed to find F11 in the PDT. Print an error, but don't
  785. * return an error from rmi_probe so that hidraw will be
  786. * accessible from userspace. That way a userspace tool
  787. * can be used to reload working firmware on the touchpad.
  788. */
  789. hid_err(hdev, "Device failed to be properly configured\n");
  790. return 0;
  791. }
  792. static void rmi_remove(struct hid_device *hdev)
  793. {
  794. struct rmi_data *hdata = hid_get_drvdata(hdev);
  795. clear_bit(RMI_STARTED, &hdata->flags);
  796. hid_hw_stop(hdev);
  797. }
  798. static const struct hid_device_id rmi_id[] = {
  799. { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
  800. { }
  801. };
  802. MODULE_DEVICE_TABLE(hid, rmi_id);
  803. static struct hid_driver rmi_driver = {
  804. .name = "hid-rmi",
  805. .id_table = rmi_id,
  806. .probe = rmi_probe,
  807. .remove = rmi_remove,
  808. .raw_event = rmi_raw_event,
  809. .input_mapping = rmi_input_mapping,
  810. .input_configured = rmi_input_configured,
  811. #ifdef CONFIG_PM
  812. .resume = rmi_post_resume,
  813. .reset_resume = rmi_post_reset,
  814. #endif
  815. };
  816. module_hid_driver(rmi_driver);
  817. MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
  818. MODULE_DESCRIPTION("RMI HID driver");
  819. MODULE_LICENSE("GPL");