hid-rmi.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282
  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. /* device flags */
  33. #define RMI_DEVICE BIT(0)
  34. #define RMI_DEVICE_HAS_PHYS_BUTTONS BIT(1)
  35. enum rmi_mode_type {
  36. RMI_MODE_OFF = 0,
  37. RMI_MODE_ATTN_REPORTS = 1,
  38. RMI_MODE_NO_PACKED_ATTN_REPORTS = 2,
  39. };
  40. struct rmi_function {
  41. unsigned page; /* page of the function */
  42. u16 query_base_addr; /* base address for queries */
  43. u16 command_base_addr; /* base address for commands */
  44. u16 control_base_addr; /* base address for controls */
  45. u16 data_base_addr; /* base address for datas */
  46. unsigned int interrupt_base; /* cross-function interrupt number
  47. * (uniq in the device)*/
  48. unsigned int interrupt_count; /* number of interrupts */
  49. unsigned int report_size; /* size of a report */
  50. unsigned long irq_mask; /* mask of the interrupts
  51. * (to be applied against ATTN IRQ) */
  52. };
  53. /**
  54. * struct rmi_data - stores information for hid communication
  55. *
  56. * @page_mutex: Locks current page to avoid changing pages in unexpected ways.
  57. * @page: Keeps track of the current virtual page
  58. *
  59. * @wait: Used for waiting for read data
  60. *
  61. * @writeReport: output buffer when writing RMI registers
  62. * @readReport: input buffer when reading RMI registers
  63. *
  64. * @input_report_size: size of an input report (advertised by HID)
  65. * @output_report_size: size of an output report (advertised by HID)
  66. *
  67. * @flags: flags for the current device (started, reading, etc...)
  68. *
  69. * @f11: placeholder of internal RMI function F11 description
  70. * @f30: placeholder of internal RMI function F30 description
  71. *
  72. * @max_fingers: maximum finger count reported by the device
  73. * @max_x: maximum x value reported by the device
  74. * @max_y: maximum y value reported by the device
  75. *
  76. * @gpio_led_count: count of GPIOs + LEDs reported by F30
  77. * @button_count: actual physical buttons count
  78. * @button_mask: button mask used to decode GPIO ATTN reports
  79. * @button_state_mask: pull state of the buttons
  80. *
  81. * @input: pointer to the kernel input device
  82. *
  83. * @reset_work: worker which will be called in case of a mouse report
  84. * @hdev: pointer to the struct hid_device
  85. */
  86. struct rmi_data {
  87. struct mutex page_mutex;
  88. int page;
  89. wait_queue_head_t wait;
  90. u8 *writeReport;
  91. u8 *readReport;
  92. int input_report_size;
  93. int output_report_size;
  94. unsigned long flags;
  95. struct rmi_function f01;
  96. struct rmi_function f11;
  97. struct rmi_function f30;
  98. unsigned int max_fingers;
  99. unsigned int max_x;
  100. unsigned int max_y;
  101. unsigned int x_size_mm;
  102. unsigned int y_size_mm;
  103. unsigned int gpio_led_count;
  104. unsigned int button_count;
  105. unsigned long button_mask;
  106. unsigned long button_state_mask;
  107. struct input_dev *input;
  108. struct work_struct reset_work;
  109. struct hid_device *hdev;
  110. unsigned long device_flags;
  111. unsigned long firmware_id;
  112. };
  113. #define RMI_PAGE(addr) (((addr) >> 8) & 0xff)
  114. static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
  115. /**
  116. * rmi_set_page - Set RMI page
  117. * @hdev: The pointer to the hid_device struct
  118. * @page: The new page address.
  119. *
  120. * RMI devices have 16-bit addressing, but some of the physical
  121. * implementations (like SMBus) only have 8-bit addressing. So RMI implements
  122. * a page address at 0xff of every page so we can reliable page addresses
  123. * every 256 registers.
  124. *
  125. * The page_mutex lock must be held when this function is entered.
  126. *
  127. * Returns zero on success, non-zero on failure.
  128. */
  129. static int rmi_set_page(struct hid_device *hdev, u8 page)
  130. {
  131. struct rmi_data *data = hid_get_drvdata(hdev);
  132. int retval;
  133. data->writeReport[0] = RMI_WRITE_REPORT_ID;
  134. data->writeReport[1] = 1;
  135. data->writeReport[2] = 0xFF;
  136. data->writeReport[4] = page;
  137. retval = rmi_write_report(hdev, data->writeReport,
  138. data->output_report_size);
  139. if (retval != data->output_report_size) {
  140. dev_err(&hdev->dev,
  141. "%s: set page failed: %d.", __func__, retval);
  142. return retval;
  143. }
  144. data->page = page;
  145. return 0;
  146. }
  147. static int rmi_set_mode(struct hid_device *hdev, u8 mode)
  148. {
  149. int ret;
  150. u8 txbuf[2] = {RMI_SET_RMI_MODE_REPORT_ID, mode};
  151. ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, txbuf,
  152. sizeof(txbuf), HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
  153. if (ret < 0) {
  154. dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode,
  155. ret);
  156. return ret;
  157. }
  158. return 0;
  159. }
  160. static int rmi_write_report(struct hid_device *hdev, u8 *report, int len)
  161. {
  162. int ret;
  163. ret = hid_hw_output_report(hdev, (void *)report, len);
  164. if (ret < 0) {
  165. dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret);
  166. return ret;
  167. }
  168. return ret;
  169. }
  170. static int rmi_read_block(struct hid_device *hdev, u16 addr, void *buf,
  171. const int len)
  172. {
  173. struct rmi_data *data = hid_get_drvdata(hdev);
  174. int ret;
  175. int bytes_read;
  176. int bytes_needed;
  177. int retries;
  178. int read_input_count;
  179. mutex_lock(&data->page_mutex);
  180. if (RMI_PAGE(addr) != data->page) {
  181. ret = rmi_set_page(hdev, RMI_PAGE(addr));
  182. if (ret < 0)
  183. goto exit;
  184. }
  185. for (retries = 5; retries > 0; retries--) {
  186. data->writeReport[0] = RMI_READ_ADDR_REPORT_ID;
  187. data->writeReport[1] = 0; /* old 1 byte read count */
  188. data->writeReport[2] = addr & 0xFF;
  189. data->writeReport[3] = (addr >> 8) & 0xFF;
  190. data->writeReport[4] = len & 0xFF;
  191. data->writeReport[5] = (len >> 8) & 0xFF;
  192. set_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  193. ret = rmi_write_report(hdev, data->writeReport,
  194. data->output_report_size);
  195. if (ret != data->output_report_size) {
  196. clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  197. dev_err(&hdev->dev,
  198. "failed to write request output report (%d)\n",
  199. ret);
  200. goto exit;
  201. }
  202. bytes_read = 0;
  203. bytes_needed = len;
  204. while (bytes_read < len) {
  205. if (!wait_event_timeout(data->wait,
  206. test_bit(RMI_READ_DATA_PENDING, &data->flags),
  207. msecs_to_jiffies(1000))) {
  208. hid_warn(hdev, "%s: timeout elapsed\n",
  209. __func__);
  210. ret = -EAGAIN;
  211. break;
  212. }
  213. read_input_count = data->readReport[1];
  214. memcpy(buf + bytes_read, &data->readReport[2],
  215. read_input_count < bytes_needed ?
  216. read_input_count : bytes_needed);
  217. bytes_read += read_input_count;
  218. bytes_needed -= read_input_count;
  219. clear_bit(RMI_READ_DATA_PENDING, &data->flags);
  220. }
  221. if (ret >= 0) {
  222. ret = 0;
  223. break;
  224. }
  225. }
  226. exit:
  227. clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
  228. mutex_unlock(&data->page_mutex);
  229. return ret;
  230. }
  231. static inline int rmi_read(struct hid_device *hdev, u16 addr, void *buf)
  232. {
  233. return rmi_read_block(hdev, addr, buf, 1);
  234. }
  235. static int rmi_write_block(struct hid_device *hdev, u16 addr, void *buf,
  236. const int len)
  237. {
  238. struct rmi_data *data = hid_get_drvdata(hdev);
  239. int ret;
  240. mutex_lock(&data->page_mutex);
  241. if (RMI_PAGE(addr) != data->page) {
  242. ret = rmi_set_page(hdev, RMI_PAGE(addr));
  243. if (ret < 0)
  244. goto exit;
  245. }
  246. data->writeReport[0] = RMI_WRITE_REPORT_ID;
  247. data->writeReport[1] = len;
  248. data->writeReport[2] = addr & 0xFF;
  249. data->writeReport[3] = (addr >> 8) & 0xFF;
  250. memcpy(&data->writeReport[4], buf, len);
  251. ret = rmi_write_report(hdev, data->writeReport,
  252. data->output_report_size);
  253. if (ret < 0) {
  254. dev_err(&hdev->dev,
  255. "failed to write request output report (%d)\n",
  256. ret);
  257. goto exit;
  258. }
  259. ret = 0;
  260. exit:
  261. mutex_unlock(&data->page_mutex);
  262. return ret;
  263. }
  264. static inline int rmi_write(struct hid_device *hdev, u16 addr, void *buf)
  265. {
  266. return rmi_write_block(hdev, addr, buf, 1);
  267. }
  268. static void rmi_f11_process_touch(struct rmi_data *hdata, int slot,
  269. u8 finger_state, u8 *touch_data)
  270. {
  271. int x, y, wx, wy;
  272. int wide, major, minor;
  273. int z;
  274. input_mt_slot(hdata->input, slot);
  275. input_mt_report_slot_state(hdata->input, MT_TOOL_FINGER,
  276. finger_state == 0x01);
  277. if (finger_state == 0x01) {
  278. x = (touch_data[0] << 4) | (touch_data[2] & 0x0F);
  279. y = (touch_data[1] << 4) | (touch_data[2] >> 4);
  280. wx = touch_data[3] & 0x0F;
  281. wy = touch_data[3] >> 4;
  282. wide = (wx > wy);
  283. major = max(wx, wy);
  284. minor = min(wx, wy);
  285. z = touch_data[4];
  286. /* y is inverted */
  287. y = hdata->max_y - y;
  288. input_event(hdata->input, EV_ABS, ABS_MT_POSITION_X, x);
  289. input_event(hdata->input, EV_ABS, ABS_MT_POSITION_Y, y);
  290. input_event(hdata->input, EV_ABS, ABS_MT_ORIENTATION, wide);
  291. input_event(hdata->input, EV_ABS, ABS_MT_PRESSURE, z);
  292. input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
  293. input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
  294. }
  295. }
  296. static void rmi_reset_work(struct work_struct *work)
  297. {
  298. struct rmi_data *hdata = container_of(work, struct rmi_data,
  299. reset_work);
  300. /* switch the device to RMI if we receive a generic mouse report */
  301. rmi_set_mode(hdata->hdev, RMI_MODE_ATTN_REPORTS);
  302. }
  303. static inline int rmi_schedule_reset(struct hid_device *hdev)
  304. {
  305. struct rmi_data *hdata = hid_get_drvdata(hdev);
  306. return schedule_work(&hdata->reset_work);
  307. }
  308. static int rmi_f11_input_event(struct hid_device *hdev, u8 irq, u8 *data,
  309. int size)
  310. {
  311. struct rmi_data *hdata = hid_get_drvdata(hdev);
  312. int offset;
  313. int i;
  314. if (!(irq & hdata->f11.irq_mask) || size <= 0)
  315. return 0;
  316. offset = (hdata->max_fingers >> 2) + 1;
  317. for (i = 0; i < hdata->max_fingers; i++) {
  318. int fs_byte_position = i >> 2;
  319. int fs_bit_position = (i & 0x3) << 1;
  320. int finger_state = (data[fs_byte_position] >> fs_bit_position) &
  321. 0x03;
  322. int position = offset + 5 * i;
  323. if (position + 5 > size) {
  324. /* partial report, go on with what we received */
  325. printk_once(KERN_WARNING
  326. "%s %s: Detected incomplete finger report. Finger reports may occasionally get dropped on this platform.\n",
  327. dev_driver_string(&hdev->dev),
  328. dev_name(&hdev->dev));
  329. hid_dbg(hdev, "Incomplete finger report\n");
  330. break;
  331. }
  332. rmi_f11_process_touch(hdata, i, finger_state, &data[position]);
  333. }
  334. input_mt_sync_frame(hdata->input);
  335. input_sync(hdata->input);
  336. return hdata->f11.report_size;
  337. }
  338. static int rmi_f30_input_event(struct hid_device *hdev, u8 irq, u8 *data,
  339. int size)
  340. {
  341. struct rmi_data *hdata = hid_get_drvdata(hdev);
  342. int i;
  343. int button = 0;
  344. bool value;
  345. if (!(irq & hdata->f30.irq_mask))
  346. return 0;
  347. if (size < (int)hdata->f30.report_size) {
  348. hid_warn(hdev, "Click Button pressed, but the click data is missing\n");
  349. return 0;
  350. }
  351. for (i = 0; i < hdata->gpio_led_count; i++) {
  352. if (test_bit(i, &hdata->button_mask)) {
  353. value = (data[i / 8] >> (i & 0x07)) & BIT(0);
  354. if (test_bit(i, &hdata->button_state_mask))
  355. value = !value;
  356. input_event(hdata->input, EV_KEY, BTN_LEFT + button++,
  357. value);
  358. }
  359. }
  360. return hdata->f30.report_size;
  361. }
  362. static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
  363. {
  364. struct rmi_data *hdata = hid_get_drvdata(hdev);
  365. unsigned long irq_mask = 0;
  366. unsigned index = 2;
  367. if (!(test_bit(RMI_STARTED, &hdata->flags)))
  368. return 0;
  369. irq_mask |= hdata->f11.irq_mask;
  370. irq_mask |= hdata->f30.irq_mask;
  371. if (data[1] & ~irq_mask)
  372. hid_dbg(hdev, "unknown intr source:%02lx %s:%d\n",
  373. data[1] & ~irq_mask, __FILE__, __LINE__);
  374. if (hdata->f11.interrupt_base < hdata->f30.interrupt_base) {
  375. index += rmi_f11_input_event(hdev, data[1], &data[index],
  376. size - index);
  377. index += rmi_f30_input_event(hdev, data[1], &data[index],
  378. size - index);
  379. } else {
  380. index += rmi_f30_input_event(hdev, data[1], &data[index],
  381. size - index);
  382. index += rmi_f11_input_event(hdev, data[1], &data[index],
  383. size - index);
  384. }
  385. return 1;
  386. }
  387. static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size)
  388. {
  389. struct rmi_data *hdata = hid_get_drvdata(hdev);
  390. if (!test_bit(RMI_READ_REQUEST_PENDING, &hdata->flags)) {
  391. hid_dbg(hdev, "no read request pending\n");
  392. return 0;
  393. }
  394. memcpy(hdata->readReport, data, size < hdata->input_report_size ?
  395. size : hdata->input_report_size);
  396. set_bit(RMI_READ_DATA_PENDING, &hdata->flags);
  397. wake_up(&hdata->wait);
  398. return 1;
  399. }
  400. static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size)
  401. {
  402. int valid_size = size;
  403. /*
  404. * On the Dell XPS 13 9333, the bus sometimes get confused and fills
  405. * the report with a sentinel value "ff". Synaptics told us that such
  406. * behavior does not comes from the touchpad itself, so we filter out
  407. * such reports here.
  408. */
  409. while ((data[valid_size - 1] == 0xff) && valid_size > 0)
  410. valid_size--;
  411. return valid_size;
  412. }
  413. static int rmi_raw_event(struct hid_device *hdev,
  414. struct hid_report *report, u8 *data, int size)
  415. {
  416. size = rmi_check_sanity(hdev, data, size);
  417. if (size < 2)
  418. return 0;
  419. switch (data[0]) {
  420. case RMI_READ_DATA_REPORT_ID:
  421. return rmi_read_data_event(hdev, data, size);
  422. case RMI_ATTN_REPORT_ID:
  423. return rmi_input_event(hdev, data, size);
  424. default:
  425. return 1;
  426. }
  427. return 0;
  428. }
  429. static int rmi_event(struct hid_device *hdev, struct hid_field *field,
  430. struct hid_usage *usage, __s32 value)
  431. {
  432. struct rmi_data *data = hid_get_drvdata(hdev);
  433. if ((data->device_flags & RMI_DEVICE) &&
  434. (field->application == HID_GD_POINTER ||
  435. field->application == HID_GD_MOUSE)) {
  436. if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) {
  437. if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
  438. return 0;
  439. if ((usage->hid == HID_GD_X || usage->hid == HID_GD_Y)
  440. && !value)
  441. return 1;
  442. }
  443. rmi_schedule_reset(hdev);
  444. return 1;
  445. }
  446. return 0;
  447. }
  448. #ifdef CONFIG_PM
  449. static int rmi_post_reset(struct hid_device *hdev)
  450. {
  451. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  452. }
  453. static int rmi_post_resume(struct hid_device *hdev)
  454. {
  455. return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  456. }
  457. #endif /* CONFIG_PM */
  458. #define RMI4_MAX_PAGE 0xff
  459. #define RMI4_PAGE_SIZE 0x0100
  460. #define PDT_START_SCAN_LOCATION 0x00e9
  461. #define PDT_END_SCAN_LOCATION 0x0005
  462. #define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff)
  463. struct pdt_entry {
  464. u8 query_base_addr:8;
  465. u8 command_base_addr:8;
  466. u8 control_base_addr:8;
  467. u8 data_base_addr:8;
  468. u8 interrupt_source_count:3;
  469. u8 bits3and4:2;
  470. u8 function_version:2;
  471. u8 bit7:1;
  472. u8 function_number:8;
  473. } __attribute__((__packed__));
  474. static inline unsigned long rmi_gen_mask(unsigned irq_base, unsigned irq_count)
  475. {
  476. return GENMASK(irq_count + irq_base - 1, irq_base);
  477. }
  478. static void rmi_register_function(struct rmi_data *data,
  479. struct pdt_entry *pdt_entry, int page, unsigned interrupt_count)
  480. {
  481. struct rmi_function *f = NULL;
  482. u16 page_base = page << 8;
  483. switch (pdt_entry->function_number) {
  484. case 0x01:
  485. f = &data->f01;
  486. break;
  487. case 0x11:
  488. f = &data->f11;
  489. break;
  490. case 0x30:
  491. f = &data->f30;
  492. break;
  493. }
  494. if (f) {
  495. f->page = page;
  496. f->query_base_addr = page_base | pdt_entry->query_base_addr;
  497. f->command_base_addr = page_base | pdt_entry->command_base_addr;
  498. f->control_base_addr = page_base | pdt_entry->control_base_addr;
  499. f->data_base_addr = page_base | pdt_entry->data_base_addr;
  500. f->interrupt_base = interrupt_count;
  501. f->interrupt_count = pdt_entry->interrupt_source_count;
  502. f->irq_mask = rmi_gen_mask(f->interrupt_base,
  503. f->interrupt_count);
  504. }
  505. }
  506. static int rmi_scan_pdt(struct hid_device *hdev)
  507. {
  508. struct rmi_data *data = hid_get_drvdata(hdev);
  509. struct pdt_entry entry;
  510. int page;
  511. bool page_has_function;
  512. int i;
  513. int retval;
  514. int interrupt = 0;
  515. u16 page_start, pdt_start , pdt_end;
  516. hid_info(hdev, "Scanning PDT...\n");
  517. for (page = 0; (page <= RMI4_MAX_PAGE); page++) {
  518. page_start = RMI4_PAGE_SIZE * page;
  519. pdt_start = page_start + PDT_START_SCAN_LOCATION;
  520. pdt_end = page_start + PDT_END_SCAN_LOCATION;
  521. page_has_function = false;
  522. for (i = pdt_start; i >= pdt_end; i -= sizeof(entry)) {
  523. retval = rmi_read_block(hdev, i, &entry, sizeof(entry));
  524. if (retval) {
  525. hid_err(hdev,
  526. "Read of PDT entry at %#06x failed.\n",
  527. i);
  528. goto error_exit;
  529. }
  530. if (RMI4_END_OF_PDT(entry.function_number))
  531. break;
  532. page_has_function = true;
  533. hid_info(hdev, "Found F%02X on page %#04x\n",
  534. entry.function_number, page);
  535. rmi_register_function(data, &entry, page, interrupt);
  536. interrupt += entry.interrupt_source_count;
  537. }
  538. if (!page_has_function)
  539. break;
  540. }
  541. hid_info(hdev, "%s: Done with PDT scan.\n", __func__);
  542. retval = 0;
  543. error_exit:
  544. return retval;
  545. }
  546. #define RMI_DEVICE_F01_BASIC_QUERY_LEN 11
  547. static int rmi_populate_f01(struct hid_device *hdev)
  548. {
  549. struct rmi_data *data = hid_get_drvdata(hdev);
  550. u8 basic_queries[RMI_DEVICE_F01_BASIC_QUERY_LEN];
  551. u8 info[3];
  552. int ret;
  553. bool has_query42;
  554. bool has_lts;
  555. bool has_sensor_id;
  556. bool has_ds4_queries = false;
  557. bool has_build_id_query = false;
  558. bool has_package_id_query = false;
  559. u16 query_offset = data->f01.query_base_addr;
  560. u16 prod_info_addr;
  561. u8 ds4_query_len;
  562. ret = rmi_read_block(hdev, query_offset, basic_queries,
  563. RMI_DEVICE_F01_BASIC_QUERY_LEN);
  564. if (ret) {
  565. hid_err(hdev, "Can not read basic queries from Function 0x1.\n");
  566. return ret;
  567. }
  568. has_lts = !!(basic_queries[0] & BIT(2));
  569. has_sensor_id = !!(basic_queries[1] & BIT(3));
  570. has_query42 = !!(basic_queries[1] & BIT(7));
  571. query_offset += 11;
  572. prod_info_addr = query_offset + 6;
  573. query_offset += 10;
  574. if (has_lts)
  575. query_offset += 20;
  576. if (has_sensor_id)
  577. query_offset++;
  578. if (has_query42) {
  579. ret = rmi_read(hdev, query_offset, info);
  580. if (ret) {
  581. hid_err(hdev, "Can not read query42.\n");
  582. return ret;
  583. }
  584. has_ds4_queries = !!(info[0] & BIT(0));
  585. query_offset++;
  586. }
  587. if (has_ds4_queries) {
  588. ret = rmi_read(hdev, query_offset, &ds4_query_len);
  589. if (ret) {
  590. hid_err(hdev, "Can not read DS4 Query length.\n");
  591. return ret;
  592. }
  593. query_offset++;
  594. if (ds4_query_len > 0) {
  595. ret = rmi_read(hdev, query_offset, info);
  596. if (ret) {
  597. hid_err(hdev, "Can not read DS4 query.\n");
  598. return ret;
  599. }
  600. has_package_id_query = !!(info[0] & BIT(0));
  601. has_build_id_query = !!(info[0] & BIT(1));
  602. }
  603. }
  604. if (has_package_id_query)
  605. prod_info_addr++;
  606. if (has_build_id_query) {
  607. ret = rmi_read_block(hdev, prod_info_addr, info, 3);
  608. if (ret) {
  609. hid_err(hdev, "Can not read product info.\n");
  610. return ret;
  611. }
  612. data->firmware_id = info[1] << 8 | info[0];
  613. data->firmware_id += info[2] * 65536;
  614. }
  615. return 0;
  616. }
  617. static int rmi_populate_f11(struct hid_device *hdev)
  618. {
  619. struct rmi_data *data = hid_get_drvdata(hdev);
  620. u8 buf[20];
  621. int ret;
  622. bool has_query9;
  623. bool has_query10 = false;
  624. bool has_query11;
  625. bool has_query12;
  626. bool has_query27;
  627. bool has_query28;
  628. bool has_query36 = false;
  629. bool has_physical_props;
  630. bool has_gestures;
  631. bool has_rel;
  632. bool has_data40 = false;
  633. bool has_dribble = false;
  634. bool has_palm_detect = false;
  635. unsigned x_size, y_size;
  636. u16 query_offset;
  637. if (!data->f11.query_base_addr) {
  638. hid_err(hdev, "No 2D sensor found, giving up.\n");
  639. return -ENODEV;
  640. }
  641. /* query 0 contains some useful information */
  642. ret = rmi_read(hdev, data->f11.query_base_addr, buf);
  643. if (ret) {
  644. hid_err(hdev, "can not get query 0: %d.\n", ret);
  645. return ret;
  646. }
  647. has_query9 = !!(buf[0] & BIT(3));
  648. has_query11 = !!(buf[0] & BIT(4));
  649. has_query12 = !!(buf[0] & BIT(5));
  650. has_query27 = !!(buf[0] & BIT(6));
  651. has_query28 = !!(buf[0] & BIT(7));
  652. /* query 1 to get the max number of fingers */
  653. ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf);
  654. if (ret) {
  655. hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret);
  656. return ret;
  657. }
  658. data->max_fingers = (buf[0] & 0x07) + 1;
  659. if (data->max_fingers > 5)
  660. data->max_fingers = 10;
  661. data->f11.report_size = data->max_fingers * 5 +
  662. DIV_ROUND_UP(data->max_fingers, 4);
  663. if (!(buf[0] & BIT(4))) {
  664. hid_err(hdev, "No absolute events, giving up.\n");
  665. return -ENODEV;
  666. }
  667. has_rel = !!(buf[0] & BIT(3));
  668. has_gestures = !!(buf[0] & BIT(5));
  669. ret = rmi_read(hdev, data->f11.query_base_addr + 5, buf);
  670. if (ret) {
  671. hid_err(hdev, "can not get absolute data sources: %d.\n", ret);
  672. return ret;
  673. }
  674. has_dribble = !!(buf[0] & BIT(4));
  675. /*
  676. * At least 4 queries are guaranteed to be present in F11
  677. * +1 for query 5 which is present since absolute events are
  678. * reported and +1 for query 12.
  679. */
  680. query_offset = 6;
  681. if (has_rel)
  682. ++query_offset; /* query 6 is present */
  683. if (has_gestures) {
  684. /* query 8 to find out if query 10 exists */
  685. ret = rmi_read(hdev,
  686. data->f11.query_base_addr + query_offset + 1, buf);
  687. if (ret) {
  688. hid_err(hdev, "can not read gesture information: %d.\n",
  689. ret);
  690. return ret;
  691. }
  692. has_palm_detect = !!(buf[0] & BIT(0));
  693. has_query10 = !!(buf[0] & BIT(2));
  694. query_offset += 2; /* query 7 and 8 are present */
  695. }
  696. if (has_query9)
  697. ++query_offset;
  698. if (has_query10)
  699. ++query_offset;
  700. if (has_query11)
  701. ++query_offset;
  702. /* query 12 to know if the physical properties are reported */
  703. if (has_query12) {
  704. ret = rmi_read(hdev, data->f11.query_base_addr
  705. + query_offset, buf);
  706. if (ret) {
  707. hid_err(hdev, "can not get query 12: %d.\n", ret);
  708. return ret;
  709. }
  710. has_physical_props = !!(buf[0] & BIT(5));
  711. if (has_physical_props) {
  712. query_offset += 1;
  713. ret = rmi_read_block(hdev,
  714. data->f11.query_base_addr
  715. + query_offset, buf, 4);
  716. if (ret) {
  717. hid_err(hdev, "can not read query 15-18: %d.\n",
  718. ret);
  719. return ret;
  720. }
  721. x_size = buf[0] | (buf[1] << 8);
  722. y_size = buf[2] | (buf[3] << 8);
  723. data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10);
  724. data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10);
  725. hid_info(hdev, "%s: size in mm: %d x %d\n",
  726. __func__, data->x_size_mm, data->y_size_mm);
  727. /*
  728. * query 15 - 18 contain the size of the sensor
  729. * and query 19 - 26 contain bezel dimensions
  730. */
  731. query_offset += 12;
  732. }
  733. }
  734. if (has_query27)
  735. ++query_offset;
  736. if (has_query28) {
  737. ret = rmi_read(hdev, data->f11.query_base_addr
  738. + query_offset, buf);
  739. if (ret) {
  740. hid_err(hdev, "can not get query 28: %d.\n", ret);
  741. return ret;
  742. }
  743. has_query36 = !!(buf[0] & BIT(6));
  744. }
  745. if (has_query36) {
  746. query_offset += 2;
  747. ret = rmi_read(hdev, data->f11.query_base_addr
  748. + query_offset, buf);
  749. if (ret) {
  750. hid_err(hdev, "can not get query 36: %d.\n", ret);
  751. return ret;
  752. }
  753. has_data40 = !!(buf[0] & BIT(5));
  754. }
  755. if (has_data40)
  756. data->f11.report_size += data->max_fingers * 2;
  757. /*
  758. * retrieve the ctrl registers
  759. * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
  760. * and there is no way to know if the first 20 bytes are here or not.
  761. * We use only the first 12 bytes, so get only them.
  762. */
  763. ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 12);
  764. if (ret) {
  765. hid_err(hdev, "can not read ctrl block of size 11: %d.\n", ret);
  766. return ret;
  767. }
  768. data->max_x = buf[6] | (buf[7] << 8);
  769. data->max_y = buf[8] | (buf[9] << 8);
  770. if (has_dribble) {
  771. buf[0] = buf[0] & ~BIT(6);
  772. ret = rmi_write(hdev, data->f11.control_base_addr, buf);
  773. if (ret) {
  774. hid_err(hdev, "can not write to control reg 0: %d.\n",
  775. ret);
  776. return ret;
  777. }
  778. }
  779. if (has_palm_detect) {
  780. buf[11] = buf[11] & ~BIT(0);
  781. ret = rmi_write(hdev, data->f11.control_base_addr + 11,
  782. &buf[11]);
  783. if (ret) {
  784. hid_err(hdev, "can not write to control reg 11: %d.\n",
  785. ret);
  786. return ret;
  787. }
  788. }
  789. return 0;
  790. }
  791. static int rmi_populate_f30(struct hid_device *hdev)
  792. {
  793. struct rmi_data *data = hid_get_drvdata(hdev);
  794. u8 buf[20];
  795. int ret;
  796. bool has_gpio, has_led;
  797. unsigned bytes_per_ctrl;
  798. u8 ctrl2_addr;
  799. int ctrl2_3_length;
  800. int i;
  801. /* function F30 is for physical buttons */
  802. if (!data->f30.query_base_addr) {
  803. hid_err(hdev, "No GPIO/LEDs found, giving up.\n");
  804. return -ENODEV;
  805. }
  806. ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2);
  807. if (ret) {
  808. hid_err(hdev, "can not get F30 query registers: %d.\n", ret);
  809. return ret;
  810. }
  811. has_gpio = !!(buf[0] & BIT(3));
  812. has_led = !!(buf[0] & BIT(2));
  813. data->gpio_led_count = buf[1] & 0x1f;
  814. /* retrieve ctrl 2 & 3 registers */
  815. bytes_per_ctrl = (data->gpio_led_count + 7) / 8;
  816. /* Ctrl0 is present only if both has_gpio and has_led are set*/
  817. ctrl2_addr = (has_gpio && has_led) ? bytes_per_ctrl : 0;
  818. /* Ctrl1 is always be present */
  819. ctrl2_addr += bytes_per_ctrl;
  820. ctrl2_3_length = 2 * bytes_per_ctrl;
  821. data->f30.report_size = bytes_per_ctrl;
  822. ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr,
  823. buf, ctrl2_3_length);
  824. if (ret) {
  825. hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n",
  826. ctrl2_3_length, ret);
  827. return ret;
  828. }
  829. for (i = 0; i < data->gpio_led_count; i++) {
  830. int byte_position = i >> 3;
  831. int bit_position = i & 0x07;
  832. u8 dir_byte = buf[byte_position];
  833. u8 data_byte = buf[byte_position + bytes_per_ctrl];
  834. bool dir = (dir_byte >> bit_position) & BIT(0);
  835. bool dat = (data_byte >> bit_position) & BIT(0);
  836. if (dir == 0) {
  837. /* input mode */
  838. if (dat) {
  839. /* actual buttons have pull up resistor */
  840. data->button_count++;
  841. set_bit(i, &data->button_mask);
  842. set_bit(i, &data->button_state_mask);
  843. }
  844. }
  845. }
  846. return 0;
  847. }
  848. static int rmi_populate(struct hid_device *hdev)
  849. {
  850. int ret;
  851. ret = rmi_scan_pdt(hdev);
  852. if (ret) {
  853. hid_err(hdev, "PDT scan failed with code %d.\n", ret);
  854. return ret;
  855. }
  856. ret = rmi_populate_f01(hdev);
  857. if (ret) {
  858. hid_err(hdev, "Error while initializing F01 (%d).\n", ret);
  859. return ret;
  860. }
  861. ret = rmi_populate_f11(hdev);
  862. if (ret) {
  863. hid_err(hdev, "Error while initializing F11 (%d).\n", ret);
  864. return ret;
  865. }
  866. ret = rmi_populate_f30(hdev);
  867. if (ret)
  868. hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
  869. return 0;
  870. }
  871. static void rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
  872. {
  873. struct rmi_data *data = hid_get_drvdata(hdev);
  874. struct input_dev *input = hi->input;
  875. int ret;
  876. int res_x, res_y, i;
  877. data->input = input;
  878. hid_dbg(hdev, "Opening low level driver\n");
  879. ret = hid_hw_open(hdev);
  880. if (ret)
  881. return;
  882. if (!(data->device_flags & RMI_DEVICE))
  883. return;
  884. /* Allow incoming hid reports */
  885. hid_device_io_start(hdev);
  886. ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
  887. if (ret < 0) {
  888. dev_err(&hdev->dev, "failed to set rmi mode\n");
  889. goto exit;
  890. }
  891. ret = rmi_set_page(hdev, 0);
  892. if (ret < 0) {
  893. dev_err(&hdev->dev, "failed to set page select to 0.\n");
  894. goto exit;
  895. }
  896. ret = rmi_populate(hdev);
  897. if (ret)
  898. goto exit;
  899. hid_info(hdev, "firmware id: %ld\n", data->firmware_id);
  900. __set_bit(EV_ABS, input->evbit);
  901. input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0);
  902. input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0);
  903. if (data->x_size_mm && data->y_size_mm) {
  904. res_x = (data->max_x - 1) / data->x_size_mm;
  905. res_y = (data->max_y - 1) / data->y_size_mm;
  906. input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
  907. input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
  908. }
  909. input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
  910. input_set_abs_params(input, ABS_MT_PRESSURE, 0, 0xff, 0, 0);
  911. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 0x0f, 0, 0);
  912. input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 0x0f, 0, 0);
  913. input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER);
  914. if (data->button_count) {
  915. __set_bit(EV_KEY, input->evbit);
  916. for (i = 0; i < data->button_count; i++)
  917. __set_bit(BTN_LEFT + i, input->keybit);
  918. if (data->button_count == 1)
  919. __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
  920. }
  921. set_bit(RMI_STARTED, &data->flags);
  922. exit:
  923. hid_device_io_stop(hdev);
  924. hid_hw_close(hdev);
  925. }
  926. static int rmi_input_mapping(struct hid_device *hdev,
  927. struct hid_input *hi, struct hid_field *field,
  928. struct hid_usage *usage, unsigned long **bit, int *max)
  929. {
  930. struct rmi_data *data = hid_get_drvdata(hdev);
  931. /*
  932. * we want to make HID ignore the advertised HID collection
  933. * for RMI deivces
  934. */
  935. if (data->device_flags & RMI_DEVICE) {
  936. if ((data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) &&
  937. ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON))
  938. return 0;
  939. return -1;
  940. }
  941. return 0;
  942. }
  943. static int rmi_check_valid_report_id(struct hid_device *hdev, unsigned type,
  944. unsigned id, struct hid_report **report)
  945. {
  946. int i;
  947. *report = hdev->report_enum[type].report_id_hash[id];
  948. if (*report) {
  949. for (i = 0; i < (*report)->maxfield; i++) {
  950. unsigned app = (*report)->field[i]->application;
  951. if ((app & HID_USAGE_PAGE) >= HID_UP_MSVENDOR)
  952. return 1;
  953. }
  954. }
  955. return 0;
  956. }
  957. static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
  958. {
  959. struct rmi_data *data = NULL;
  960. int ret;
  961. size_t alloc_size;
  962. struct hid_report *input_report;
  963. struct hid_report *output_report;
  964. struct hid_report *feature_report;
  965. data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
  966. if (!data)
  967. return -ENOMEM;
  968. INIT_WORK(&data->reset_work, rmi_reset_work);
  969. data->hdev = hdev;
  970. hid_set_drvdata(hdev, data);
  971. hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
  972. ret = hid_parse(hdev);
  973. if (ret) {
  974. hid_err(hdev, "parse failed\n");
  975. return ret;
  976. }
  977. if (id->driver_data)
  978. data->device_flags = id->driver_data;
  979. /*
  980. * Check for the RMI specific report ids. If they are misisng
  981. * simply return and let the events be processed by hid-input
  982. */
  983. if (!rmi_check_valid_report_id(hdev, HID_FEATURE_REPORT,
  984. RMI_SET_RMI_MODE_REPORT_ID, &feature_report)) {
  985. hid_dbg(hdev, "device does not have set mode feature report\n");
  986. goto start;
  987. }
  988. if (!rmi_check_valid_report_id(hdev, HID_INPUT_REPORT,
  989. RMI_ATTN_REPORT_ID, &input_report)) {
  990. hid_dbg(hdev, "device does not have attention input report\n");
  991. goto start;
  992. }
  993. data->input_report_size = hid_report_len(input_report);
  994. if (!rmi_check_valid_report_id(hdev, HID_OUTPUT_REPORT,
  995. RMI_WRITE_REPORT_ID, &output_report)) {
  996. hid_dbg(hdev,
  997. "device does not have rmi write output report\n");
  998. goto start;
  999. }
  1000. data->output_report_size = hid_report_len(output_report);
  1001. data->device_flags |= RMI_DEVICE;
  1002. alloc_size = data->output_report_size + data->input_report_size;
  1003. data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
  1004. if (!data->writeReport) {
  1005. ret = -ENOMEM;
  1006. return ret;
  1007. }
  1008. data->readReport = data->writeReport + data->output_report_size;
  1009. init_waitqueue_head(&data->wait);
  1010. mutex_init(&data->page_mutex);
  1011. start:
  1012. ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
  1013. if (ret) {
  1014. hid_err(hdev, "hw start failed\n");
  1015. return ret;
  1016. }
  1017. if ((data->device_flags & RMI_DEVICE) &&
  1018. !test_bit(RMI_STARTED, &data->flags))
  1019. /*
  1020. * The device maybe in the bootloader if rmi_input_configured
  1021. * failed to find F11 in the PDT. Print an error, but don't
  1022. * return an error from rmi_probe so that hidraw will be
  1023. * accessible from userspace. That way a userspace tool
  1024. * can be used to reload working firmware on the touchpad.
  1025. */
  1026. hid_err(hdev, "Device failed to be properly configured\n");
  1027. return 0;
  1028. }
  1029. static void rmi_remove(struct hid_device *hdev)
  1030. {
  1031. struct rmi_data *hdata = hid_get_drvdata(hdev);
  1032. clear_bit(RMI_STARTED, &hdata->flags);
  1033. hid_hw_stop(hdev);
  1034. }
  1035. static const struct hid_device_id rmi_id[] = {
  1036. { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14),
  1037. .driver_data = RMI_DEVICE_HAS_PHYS_BUTTONS },
  1038. { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
  1039. { }
  1040. };
  1041. MODULE_DEVICE_TABLE(hid, rmi_id);
  1042. static struct hid_driver rmi_driver = {
  1043. .name = "hid-rmi",
  1044. .id_table = rmi_id,
  1045. .probe = rmi_probe,
  1046. .remove = rmi_remove,
  1047. .event = rmi_event,
  1048. .raw_event = rmi_raw_event,
  1049. .input_mapping = rmi_input_mapping,
  1050. .input_configured = rmi_input_configured,
  1051. #ifdef CONFIG_PM
  1052. .resume = rmi_post_resume,
  1053. .reset_resume = rmi_post_reset,
  1054. #endif
  1055. };
  1056. module_hid_driver(rmi_driver);
  1057. MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
  1058. MODULE_DESCRIPTION("RMI HID driver");
  1059. MODULE_LICENSE("GPL");