qpnp-keypad.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. /* Copyright (c) 2013, The Linux Foundation. All rights reserved.
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License version 2 and
  4. * only version 2 as published by the Free Software Foundation.
  5. *
  6. * This program is distributed in the hope that it will be useful,
  7. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. * GNU General Public License for more details.
  10. */
  11. #include <linux/module.h>
  12. #include <linux/kernel.h>
  13. #include <linux/interrupt.h>
  14. #include <linux/slab.h>
  15. #include <linux/input.h>
  16. #include <linux/bitops.h>
  17. #include <linux/delay.h>
  18. #include <linux/mutex.h>
  19. #include <linux/of.h>
  20. #include <linux/of_device.h>
  21. #include <linux/input/matrix_keypad.h>
  22. #include <linux/spmi.h>
  23. #define QPNP_MAX_ROWS 10
  24. #define QPNP_MAX_COLS 8
  25. #define QPNP_MIN_ROWS 2
  26. #define QPNP_MIN_COLS 1
  27. #define QPNP_ROW_SHIFT 3
  28. #define QPNP_MATRIX_MAX_SIZE (QPNP_MAX_ROWS * QPNP_MAX_COLS)
  29. /* in ms */
  30. #define MAX_SCAN_DELAY 128
  31. #define MIN_SCAN_DELAY 1
  32. #define KEYP_DEFAULT_SCAN_DELAY 32
  33. /* in ns */
  34. #define MAX_ROW_HOLD_DELAY 250000
  35. #define MIN_ROW_HOLD_DELAY 31250
  36. /* in ms */
  37. #define MAX_DEBOUNCE_TIME 20
  38. #define MIN_DEBOUNCE_TIME 5
  39. #define KEYP_DEFAULT_DEBOUNCE 15
  40. /* register offsets */
  41. #define KEYP_STATUS(base) (base + 0x08)
  42. #define KEYP_SIZE_CTRL(base) (base + 0x40)
  43. #define KEYP_SCAN_CTRL(base) (base + 0x42)
  44. #define KEYP_FSM_CNTL(base) (base + 0x44)
  45. #define KEYP_EN_CTRL(base) (base + 0x46)
  46. #define KEYP_CTRL_KEYP_EN BIT(7)
  47. #define KEYP_CTRL_EVNTS BIT(0)
  48. #define KEYP_CTRL_EVNTS_MASK 0x3
  49. #define KEYP_SIZE_COLS_SHIFT 4
  50. #define KEYP_SIZE_COLS_MASK 0x70
  51. #define KEYP_SIZE_ROWS_MASK 0x0F
  52. #define KEYP_SCAN_DBC_MASK 0x03
  53. #define KEYP_SCAN_SCNP_MASK 0x38
  54. #define KEYP_SCAN_ROWP_MASK 0xC0
  55. #define KEYP_SCAN_SCNP_SHIFT 3
  56. #define KEYP_SCAN_ROWP_SHIFT 6
  57. #define KEYP_CTRL_SCAN_ROWS_BITS 0x7
  58. #define KEYP_SCAN_DBOUNCE_SHIFT 1
  59. #define KEYP_SCAN_PAUSE_SHIFT 3
  60. #define KEYP_SCAN_ROW_HOLD_SHIFT 6
  61. #define KEYP_FSM_READ_EN BIT(0)
  62. /* bits of these registers represent
  63. * '0' for key press
  64. * '1' for key release
  65. */
  66. #define KEYP_RECENT_DATA(base) (base + 0x7C)
  67. #define KEYP_OLD_DATA(base) (base + 0x5C)
  68. #define KEYP_CLOCK_FREQ 32768
  69. struct qpnp_kp {
  70. const struct matrix_keymap_data *keymap_data;
  71. struct input_dev *input;
  72. struct spmi_device *spmi;
  73. int key_sense_irq;
  74. int key_stuck_irq;
  75. u16 base;
  76. u32 num_rows;
  77. u32 num_cols;
  78. u32 debounce_ms;
  79. u32 row_hold_ns;
  80. u32 scan_delay_ms;
  81. bool wakeup;
  82. bool rep;
  83. unsigned short keycodes[QPNP_MATRIX_MAX_SIZE];
  84. u16 keystate[QPNP_MAX_ROWS];
  85. u16 stuckstate[QPNP_MAX_ROWS];
  86. };
  87. static int qpnp_kp_write_u8(struct qpnp_kp *kp, u8 data, u16 reg)
  88. {
  89. int rc;
  90. rc = spmi_ext_register_writel(kp->spmi->ctrl, kp->spmi->sid,
  91. reg, &data, 1);
  92. if (rc < 0)
  93. dev_err(&kp->spmi->dev,
  94. "Error writing to address: %X - ret %d\n", reg, rc);
  95. return rc;
  96. }
  97. static int qpnp_kp_read(struct qpnp_kp *kp,
  98. u8 *data, u16 reg, unsigned num_bytes)
  99. {
  100. int rc;
  101. rc = spmi_ext_register_readl(kp->spmi->ctrl, kp->spmi->sid,
  102. reg, data, num_bytes);
  103. if (rc < 0)
  104. dev_err(&kp->spmi->dev,
  105. "Error reading from address : %X - ret %d\n", reg, rc);
  106. return rc;
  107. }
  108. static int qpnp_kp_read_u8(struct qpnp_kp *kp, u8 *data, u16 reg)
  109. {
  110. int rc;
  111. rc = qpnp_kp_read(kp, data, reg, 1);
  112. if (rc < 0)
  113. dev_err(&kp->spmi->dev, "Error reading qpnp: %X - ret %d\n",
  114. reg, rc);
  115. return rc;
  116. }
  117. static u8 qpnp_col_state(struct qpnp_kp *kp, u8 col)
  118. {
  119. /* all keys pressed on that particular row? */
  120. if (col == 0x00)
  121. return 1 << kp->num_cols;
  122. else
  123. return col & ((1 << kp->num_cols) - 1);
  124. }
  125. /*
  126. * Synchronous read protocol
  127. *
  128. * 1. Write '1' to ReadState bit in KEYP_FSM_CNTL register
  129. * 2. Wait 2*32KHz clocks, so that HW can successfully enter read mode
  130. * synchronously
  131. * 3. Read rows in old array first if events are more than one
  132. * 4. Read rows in recent array
  133. * 5. Wait 4*32KHz clocks
  134. * 6. Write '0' to ReadState bit of KEYP_FSM_CNTL register so that hw can
  135. * synchronously exit read mode.
  136. */
  137. static int qpnp_sync_read(struct qpnp_kp *kp, bool enable)
  138. {
  139. int rc;
  140. u8 fsm_ctl;
  141. rc = qpnp_kp_read_u8(kp, &fsm_ctl, KEYP_FSM_CNTL(kp->base));
  142. if (rc < 0) {
  143. dev_err(&kp->spmi->dev,
  144. "Error reading KEYP_FSM_CNTL reg, rc=%d\n", rc);
  145. return rc;
  146. }
  147. if (enable)
  148. fsm_ctl |= KEYP_FSM_READ_EN;
  149. else
  150. fsm_ctl &= ~KEYP_FSM_READ_EN;
  151. rc = qpnp_kp_write_u8(kp, fsm_ctl, KEYP_FSM_CNTL(kp->base));
  152. if (rc < 0) {
  153. dev_err(&kp->spmi->dev,
  154. "Error writing KEYP_FSM_CNTL reg, rc=%d\n", rc);
  155. return rc;
  156. }
  157. /* 2 * 32KHz clocks */
  158. udelay((2 * DIV_ROUND_UP(USEC_PER_SEC, KEYP_CLOCK_FREQ)) + 1);
  159. return rc;
  160. }
  161. static int qpnp_kp_read_data(struct qpnp_kp *kp, u16 *state,
  162. u16 data_reg, int read_rows)
  163. {
  164. int rc, row;
  165. u8 new_data[QPNP_MAX_ROWS];
  166. /*
  167. * Check if last row will be scanned. If not, scan to clear key event
  168. * counter
  169. */
  170. if (kp->num_rows < QPNP_MAX_ROWS) {
  171. rc = qpnp_kp_read_u8(kp, &new_data[QPNP_MAX_ROWS - 1],
  172. data_reg + (QPNP_MAX_ROWS - 1) * 2);
  173. if (rc)
  174. return rc;
  175. }
  176. for (row = 0; row < kp->num_rows; row++) {
  177. rc = qpnp_kp_read_u8(kp, &new_data[row], data_reg + row * 2);
  178. if (rc)
  179. return rc;
  180. dev_dbg(&kp->spmi->dev, "new_data[%d] = %d\n", row,
  181. new_data[row]);
  182. state[row] = qpnp_col_state(kp, new_data[row]);
  183. }
  184. return 0;
  185. }
  186. static int qpnp_kp_read_matrix(struct qpnp_kp *kp, u16 *new_state,
  187. u16 *old_state)
  188. {
  189. int rc, read_rows;
  190. read_rows = kp->num_rows;
  191. rc = qpnp_sync_read(kp, true);
  192. if (rc < 0) {
  193. dev_err(&kp->spmi->dev,
  194. "Error setting the FSM read enable bit rc=%d\n", rc);
  195. return rc;
  196. }
  197. if (old_state) {
  198. rc = qpnp_kp_read_data(kp, old_state, KEYP_OLD_DATA(kp->base),
  199. read_rows);
  200. if (rc < 0) {
  201. dev_err(&kp->spmi->dev,
  202. "Error reading KEYP_OLD_DATA, rc=%d\n", rc);
  203. return rc;
  204. }
  205. }
  206. rc = qpnp_kp_read_data(kp, new_state, KEYP_RECENT_DATA(kp->base),
  207. read_rows);
  208. if (rc < 0) {
  209. dev_err(&kp->spmi->dev,
  210. "Error reading KEYP_RECENT_DATA, rc=%d\n", rc);
  211. return rc;
  212. }
  213. /* 4 * 32KHz clocks */
  214. udelay((4 * DIV_ROUND_UP(USEC_PER_SEC, KEYP_CLOCK_FREQ)) + 1);
  215. rc = qpnp_sync_read(kp, false);
  216. if (rc < 0) {
  217. dev_err(&kp->spmi->dev,
  218. "Error resetting the FSM read enable bit rc=%d\n", rc);
  219. return rc;
  220. }
  221. return rc;
  222. }
  223. static void __qpnp_kp_scan_matrix(struct qpnp_kp *kp, u16 *new_state,
  224. u16 *old_state)
  225. {
  226. int row, col, code;
  227. for (row = 0; row < kp->num_rows; row++) {
  228. int bits_changed = new_state[row] ^ old_state[row];
  229. if (!bits_changed)
  230. continue;
  231. for (col = 0; col < kp->num_cols; col++) {
  232. if (!(bits_changed & (1 << col)))
  233. continue;
  234. dev_dbg(&kp->spmi->dev, "key [%d:%d] %s\n", row, col,
  235. !(new_state[row] & (1 << col)) ?
  236. "pressed" : "released");
  237. code = MATRIX_SCAN_CODE(row, col, QPNP_ROW_SHIFT);
  238. input_event(kp->input, EV_MSC, MSC_SCAN, code);
  239. input_report_key(kp->input,
  240. kp->keycodes[code],
  241. !(new_state[row] & (1 << col)));
  242. input_sync(kp->input);
  243. }
  244. }
  245. }
  246. static bool qpnp_detect_ghost_keys(struct qpnp_kp *kp, u16 *new_state)
  247. {
  248. int row, found_first = -1;
  249. u16 check, row_state;
  250. check = 0;
  251. for (row = 0; row < kp->num_rows; row++) {
  252. row_state = (~new_state[row]) &
  253. ((1 << kp->num_cols) - 1);
  254. if (hweight16(row_state) > 1) {
  255. if (found_first == -1)
  256. found_first = row;
  257. if (check & row_state) {
  258. dev_dbg(&kp->spmi->dev,
  259. "detected ghost key row[%d],row[%d]\n",
  260. found_first, row);
  261. return true;
  262. }
  263. }
  264. check |= row_state;
  265. }
  266. return false;
  267. }
  268. static int qpnp_kp_scan_matrix(struct qpnp_kp *kp, unsigned int events)
  269. {
  270. u16 new_state[QPNP_MAX_ROWS];
  271. u16 old_state[QPNP_MAX_ROWS];
  272. int rc;
  273. switch (events) {
  274. case 0x1:
  275. rc = qpnp_kp_read_matrix(kp, new_state, NULL);
  276. if (rc < 0)
  277. return rc;
  278. /* detecting ghost key is not an error */
  279. if (qpnp_detect_ghost_keys(kp, new_state))
  280. return 0;
  281. __qpnp_kp_scan_matrix(kp, new_state, kp->keystate);
  282. memcpy(kp->keystate, new_state, sizeof(new_state));
  283. break;
  284. case 0x3: /* two events - eventcounter is gray-coded */
  285. rc = qpnp_kp_read_matrix(kp, new_state, old_state);
  286. if (rc < 0)
  287. return rc;
  288. __qpnp_kp_scan_matrix(kp, old_state, kp->keystate);
  289. __qpnp_kp_scan_matrix(kp, new_state, old_state);
  290. memcpy(kp->keystate, new_state, sizeof(new_state));
  291. break;
  292. case 0x2:
  293. dev_dbg(&kp->spmi->dev, "Some key events were lost\n");
  294. rc = qpnp_kp_read_matrix(kp, new_state, old_state);
  295. if (rc < 0)
  296. return rc;
  297. __qpnp_kp_scan_matrix(kp, old_state, kp->keystate);
  298. __qpnp_kp_scan_matrix(kp, new_state, old_state);
  299. memcpy(kp->keystate, new_state, sizeof(new_state));
  300. break;
  301. default:
  302. rc = -EINVAL;
  303. }
  304. return rc;
  305. }
  306. /*
  307. * NOTE: We are reading recent and old data registers blindly
  308. * whenever key-stuck interrupt happens, because events counter doesn't
  309. * get updated when this interrupt happens due to key stuck doesn't get
  310. * considered as key state change.
  311. *
  312. * We are not using old data register contents after they are being read
  313. * because it might report the key which was pressed before the key being stuck
  314. * as stuck key because it's pressed status is stored in the old data
  315. * register.
  316. */
  317. static irqreturn_t qpnp_kp_stuck_irq(int irq, void *data)
  318. {
  319. u16 new_state[QPNP_MAX_ROWS];
  320. u16 old_state[QPNP_MAX_ROWS];
  321. int rc;
  322. struct qpnp_kp *kp = data;
  323. rc = qpnp_kp_read_matrix(kp, new_state, old_state);
  324. if (rc < 0) {
  325. dev_err(&kp->spmi->dev, "failed to read keypad matrix\n");
  326. return IRQ_HANDLED;
  327. }
  328. __qpnp_kp_scan_matrix(kp, new_state, kp->stuckstate);
  329. return IRQ_HANDLED;
  330. }
  331. static irqreturn_t qpnp_kp_irq(int irq, void *data)
  332. {
  333. struct qpnp_kp *kp = data;
  334. u8 ctrl_val, events;
  335. int rc;
  336. rc = qpnp_kp_read_u8(kp, &ctrl_val, KEYP_STATUS(kp->base));
  337. if (rc < 0) {
  338. dev_err(&kp->spmi->dev,
  339. "Error reading KEYP_STATUS register\n");
  340. return IRQ_HANDLED;
  341. }
  342. events = ctrl_val & KEYP_CTRL_EVNTS_MASK;
  343. rc = qpnp_kp_scan_matrix(kp, events);
  344. if (rc < 0)
  345. dev_err(&kp->spmi->dev, "failed to scan matrix\n");
  346. return IRQ_HANDLED;
  347. }
  348. static int __devinit qpnp_kpd_init(struct qpnp_kp *kp)
  349. {
  350. int bits, rc, cycles;
  351. u8 kpd_scan_cntl, kpd_size_cntl;
  352. /* Configure the SIZE register, #rows and #columns */
  353. rc = qpnp_kp_read_u8(kp, &kpd_size_cntl, KEYP_SIZE_CTRL(kp->base));
  354. if (rc < 0) {
  355. dev_err(&kp->spmi->dev,
  356. "Error reading KEYP_SIZE_CTRL reg, rc=%d\n", rc);
  357. return rc;
  358. }
  359. kpd_size_cntl &= (~KEYP_SIZE_COLS_MASK | ~KEYP_SIZE_ROWS_MASK);
  360. kpd_size_cntl |= (((kp->num_cols - 1) << KEYP_SIZE_COLS_SHIFT) &
  361. KEYP_SIZE_COLS_MASK);
  362. kpd_size_cntl |= ((kp->num_rows - 1) & KEYP_SIZE_ROWS_MASK);
  363. rc = qpnp_kp_write_u8(kp, kpd_size_cntl, KEYP_SIZE_CTRL(kp->base));
  364. if (rc < 0) {
  365. dev_err(&kp->spmi->dev,
  366. "Error writing to KEYP_SIZE_CTRL reg, rc=%d\n", rc);
  367. return rc;
  368. }
  369. /* Configure the SCAN CTL register, debounce, row pause, scan delay */
  370. rc = qpnp_kp_read_u8(kp, &kpd_scan_cntl, KEYP_SCAN_CTRL(kp->base));
  371. if (rc < 0) {
  372. dev_err(&kp->spmi->dev,
  373. "Error reading KEYP_SCAN_CTRL reg, rc=%d\n", rc);
  374. return rc;
  375. }
  376. kpd_scan_cntl &= (~KEYP_SCAN_DBC_MASK | ~KEYP_SCAN_SCNP_MASK |
  377. ~KEYP_SCAN_ROWP_MASK);
  378. kpd_scan_cntl |= (((kp->debounce_ms / 5) - 1) & KEYP_SCAN_DBC_MASK);
  379. bits = fls(kp->scan_delay_ms) - 1;
  380. kpd_scan_cntl |= ((bits << KEYP_SCAN_SCNP_SHIFT) & KEYP_SCAN_SCNP_MASK);
  381. /* Row hold time is a multiple of 32KHz cycles. */
  382. cycles = (kp->row_hold_ns * KEYP_CLOCK_FREQ) / NSEC_PER_SEC;
  383. if (cycles)
  384. cycles = ilog2(cycles);
  385. kpd_scan_cntl |= ((cycles << KEYP_SCAN_ROW_HOLD_SHIFT) &
  386. KEYP_SCAN_ROWP_MASK);
  387. rc = qpnp_kp_write_u8(kp, kpd_scan_cntl, KEYP_SCAN_CTRL(kp->base));
  388. if (rc)
  389. dev_err(&kp->spmi->dev,
  390. "Error writing KEYP_SCAN reg, rc=%d\n", rc);
  391. return rc;
  392. }
  393. static int qpnp_kp_enable(struct qpnp_kp *kp)
  394. {
  395. int rc;
  396. u8 kpd_cntl;
  397. rc = qpnp_kp_read_u8(kp, &kpd_cntl, KEYP_EN_CTRL(kp->base));
  398. if (rc < 0) {
  399. dev_err(&kp->spmi->dev,
  400. "Error reading KEYP_EN_CTRL reg, rc=%d\n", rc);
  401. return rc;
  402. }
  403. kpd_cntl |= KEYP_CTRL_KEYP_EN;
  404. rc = qpnp_kp_write_u8(kp, kpd_cntl, KEYP_EN_CTRL(kp->base));
  405. if (rc < 0)
  406. dev_err(&kp->spmi->dev,
  407. "Error writing KEYP_CTRL reg, rc=%d\n", rc);
  408. return rc;
  409. }
  410. static int qpnp_kp_disable(struct qpnp_kp *kp)
  411. {
  412. int rc;
  413. u8 kpd_cntl;
  414. rc = qpnp_kp_read_u8(kp, &kpd_cntl, KEYP_EN_CTRL(kp->base));
  415. if (rc < 0) {
  416. dev_err(&kp->spmi->dev,
  417. "Error reading KEYP_EN_CTRL reg, rc=%d\n", rc);
  418. return rc;
  419. }
  420. kpd_cntl &= ~KEYP_CTRL_KEYP_EN;
  421. rc = qpnp_kp_write_u8(kp, kpd_cntl, KEYP_EN_CTRL(kp->base));
  422. if (rc < 0)
  423. dev_err(&kp->spmi->dev,
  424. "Error writing KEYP_CTRL reg, rc=%d\n", rc);
  425. return rc;
  426. }
  427. static int qpnp_kp_open(struct input_dev *dev)
  428. {
  429. struct qpnp_kp *kp = input_get_drvdata(dev);
  430. return qpnp_kp_enable(kp);
  431. }
  432. static void qpnp_kp_close(struct input_dev *dev)
  433. {
  434. struct qpnp_kp *kp = input_get_drvdata(dev);
  435. qpnp_kp_disable(kp);
  436. }
  437. static int __devinit qpnp_keypad_parse_dt(struct qpnp_kp *kp)
  438. {
  439. struct matrix_keymap_data *keymap_data;
  440. int rc, keymap_len, i;
  441. u32 *keymap;
  442. const __be32 *map;
  443. rc = of_property_read_u32(kp->spmi->dev.of_node,
  444. "keypad,num-rows", &kp->num_rows);
  445. if (rc) {
  446. dev_err(&kp->spmi->dev, "Unable to parse 'num-rows'\n");
  447. return rc;
  448. }
  449. rc = of_property_read_u32(kp->spmi->dev.of_node,
  450. "keypad,num-cols", &kp->num_cols);
  451. if (rc) {
  452. dev_err(&kp->spmi->dev, "Unable to parse 'num-cols'\n");
  453. return rc;
  454. }
  455. rc = of_property_read_u32(kp->spmi->dev.of_node,
  456. "qcom,scan-delay-ms", &kp->scan_delay_ms);
  457. if (rc && rc != -EINVAL) {
  458. dev_err(&kp->spmi->dev, "Unable to parse 'scan-delay-ms'\n");
  459. return rc;
  460. }
  461. rc = of_property_read_u32(kp->spmi->dev.of_node,
  462. "qcom,row-hold-ns", &kp->row_hold_ns);
  463. if (rc && rc != -EINVAL) {
  464. dev_err(&kp->spmi->dev, "Unable to parse 'row-hold-ns'\n");
  465. return rc;
  466. }
  467. rc = of_property_read_u32(kp->spmi->dev.of_node,
  468. "qcom,debounce-ms", &kp->debounce_ms);
  469. if (rc && rc != -EINVAL) {
  470. dev_err(&kp->spmi->dev, "Unable to parse 'debounce-ms'\n");
  471. return rc;
  472. }
  473. kp->wakeup = of_property_read_bool(kp->spmi->dev.of_node,
  474. "qcom,wakeup");
  475. kp->rep = !of_property_read_bool(kp->spmi->dev.of_node,
  476. "linux,keypad-no-autorepeat");
  477. map = of_get_property(kp->spmi->dev.of_node,
  478. "linux,keymap", &keymap_len);
  479. if (!map) {
  480. dev_err(&kp->spmi->dev, "Keymap not specified\n");
  481. return -EINVAL;
  482. }
  483. keymap_data = devm_kzalloc(&kp->spmi->dev,
  484. sizeof(*keymap_data), GFP_KERNEL);
  485. if (!keymap_data) {
  486. dev_err(&kp->spmi->dev, "Unable to allocate memory\n");
  487. return -ENOMEM;
  488. }
  489. keymap_data->keymap_size = keymap_len / sizeof(u32);
  490. keymap = devm_kzalloc(&kp->spmi->dev,
  491. sizeof(uint32_t) * keymap_data->keymap_size, GFP_KERNEL);
  492. if (!keymap) {
  493. dev_err(&kp->spmi->dev, "could not allocate memory for keymap\n");
  494. return -ENOMEM;
  495. }
  496. for (i = 0; i < keymap_data->keymap_size; i++) {
  497. unsigned int key = be32_to_cpup(map + i);
  498. int keycode, row, col;
  499. row = (key >> 24) & 0xff;
  500. col = (key >> 16) & 0xff;
  501. keycode = key & 0xffff;
  502. keymap[i] = KEY(row, col, keycode);
  503. }
  504. keymap_data->keymap = keymap;
  505. kp->keymap_data = keymap_data;
  506. return 0;
  507. }
  508. static int __devinit qpnp_kp_probe(struct spmi_device *spmi)
  509. {
  510. struct qpnp_kp *kp;
  511. struct resource *keypad_base;
  512. int rc = 0;
  513. kp = devm_kzalloc(&spmi->dev, sizeof(struct qpnp_kp), GFP_KERNEL);
  514. if (!kp) {
  515. dev_err(&spmi->dev, "%s: Can't allocate qpnp_kp\n",
  516. __func__);
  517. return -ENOMEM;
  518. }
  519. kp->spmi = spmi;
  520. rc = qpnp_keypad_parse_dt(kp);
  521. if (rc < 0) {
  522. dev_err(&spmi->dev, "Error parsing device tree\n");
  523. return rc;
  524. }
  525. /* the #rows and #columns are compulsary */
  526. if (!kp->num_cols || !kp->num_rows ||
  527. kp->num_cols > QPNP_MAX_COLS ||
  528. kp->num_rows > QPNP_MAX_ROWS ||
  529. kp->num_cols < QPNP_MIN_COLS ||
  530. kp->num_rows < QPNP_MIN_ROWS) {
  531. dev_err(&spmi->dev, "invalid rows/cols input data\n");
  532. return -EINVAL;
  533. }
  534. if (!kp->keymap_data) {
  535. dev_err(&spmi->dev, "keymap not specified\n");
  536. return -EINVAL;
  537. }
  538. /* the below parameters are optional*/
  539. if (!kp->scan_delay_ms) {
  540. kp->scan_delay_ms = KEYP_DEFAULT_SCAN_DELAY;
  541. } else {
  542. if (kp->scan_delay_ms > MAX_SCAN_DELAY ||
  543. kp->scan_delay_ms < MIN_SCAN_DELAY) {
  544. dev_err(&spmi->dev,
  545. "invalid keypad scan time supplied\n");
  546. return -EINVAL;
  547. }
  548. }
  549. if (!kp->row_hold_ns) {
  550. kp->row_hold_ns = MIN_ROW_HOLD_DELAY;
  551. } else {
  552. if (kp->row_hold_ns > MAX_ROW_HOLD_DELAY ||
  553. kp->row_hold_ns < MIN_ROW_HOLD_DELAY) {
  554. dev_err(&spmi->dev,
  555. "invalid keypad row hold time supplied\n");
  556. return -EINVAL;
  557. }
  558. }
  559. if (!kp->debounce_ms) {
  560. kp->debounce_ms = KEYP_DEFAULT_DEBOUNCE;
  561. } else {
  562. if (kp->debounce_ms > MAX_DEBOUNCE_TIME ||
  563. kp->debounce_ms < MIN_DEBOUNCE_TIME ||
  564. (kp->debounce_ms % 5 != 0)) {
  565. dev_err(&spmi->dev,
  566. "invalid debounce time supplied\n");
  567. return -EINVAL;
  568. }
  569. }
  570. kp->input = input_allocate_device();
  571. if (!kp->input) {
  572. dev_err(&spmi->dev, "Can't allocate keypad input device\n");
  573. return -ENOMEM;
  574. }
  575. kp->key_sense_irq = spmi_get_irq_byname(spmi, NULL, "kp-sense");
  576. if (kp->key_sense_irq < 0) {
  577. dev_err(&spmi->dev, "Unable to get keypad sense irq\n");
  578. return kp->key_sense_irq;
  579. }
  580. kp->key_stuck_irq = spmi_get_irq_byname(spmi, NULL, "kp-stuck");
  581. if (kp->key_stuck_irq < 0) {
  582. dev_err(&spmi->dev, "Unable to get stuck irq\n");
  583. return kp->key_stuck_irq;
  584. }
  585. keypad_base = spmi_get_resource(spmi, NULL, IORESOURCE_MEM, 0);
  586. if (!keypad_base) {
  587. dev_err(&spmi->dev, "Unable to get keypad base address\n");
  588. return -ENXIO;
  589. }
  590. kp->base = keypad_base->start;
  591. kp->input->name = "qpnp_keypad";
  592. kp->input->phys = "qpnp_keypad/input0";
  593. kp->input->id.version = 0x0001;
  594. kp->input->id.product = 0x0001;
  595. kp->input->id.vendor = 0x0001;
  596. kp->input->evbit[0] = BIT_MASK(EV_KEY);
  597. if (kp->rep)
  598. set_bit(EV_REP, kp->input->evbit);
  599. kp->input->keycode = kp->keycodes;
  600. kp->input->keycodemax = QPNP_MATRIX_MAX_SIZE;
  601. kp->input->keycodesize = sizeof(kp->keycodes);
  602. kp->input->open = qpnp_kp_open;
  603. kp->input->close = qpnp_kp_close;
  604. matrix_keypad_build_keymap(kp->keymap_data, QPNP_ROW_SHIFT,
  605. kp->keycodes, kp->input->keybit);
  606. input_set_capability(kp->input, EV_MSC, MSC_SCAN);
  607. input_set_drvdata(kp->input, kp);
  608. /* initialize keypad state */
  609. memset(kp->keystate, 0xff, sizeof(kp->keystate));
  610. memset(kp->stuckstate, 0xff, sizeof(kp->stuckstate));
  611. rc = qpnp_kpd_init(kp);
  612. if (rc < 0) {
  613. dev_err(&spmi->dev, "unable to initialize keypad controller\n");
  614. return rc;
  615. }
  616. rc = input_register_device(kp->input);
  617. if (rc < 0) {
  618. dev_err(&spmi->dev, "unable to register keypad input device\n");
  619. return rc;
  620. }
  621. rc = devm_request_irq(&spmi->dev, kp->key_sense_irq, qpnp_kp_irq,
  622. IRQF_TRIGGER_RISING, "qpnp-keypad-sense", kp);
  623. if (rc < 0) {
  624. dev_err(&spmi->dev, "failed to request keypad sense irq\n");
  625. return rc;
  626. }
  627. rc = devm_request_irq(&spmi->dev, kp->key_stuck_irq, qpnp_kp_stuck_irq,
  628. IRQF_TRIGGER_RISING, "qpnp-keypad-stuck", kp);
  629. if (rc < 0) {
  630. dev_err(&spmi->dev, "failed to request keypad stuck irq\n");
  631. return rc;
  632. }
  633. device_init_wakeup(&spmi->dev, kp->wakeup);
  634. return rc;
  635. }
  636. static int qpnp_kp_remove(struct spmi_device *spmi)
  637. {
  638. struct qpnp_kp *kp = dev_get_drvdata(&spmi->dev);
  639. device_init_wakeup(&spmi->dev, 0);
  640. input_unregister_device(kp->input);
  641. return 0;
  642. }
  643. #ifdef CONFIG_PM_SLEEP
  644. static int qpnp_kp_suspend(struct device *dev)
  645. {
  646. struct qpnp_kp *kp = dev_get_drvdata(dev);
  647. struct input_dev *input_dev = kp->input;
  648. if (device_may_wakeup(dev)) {
  649. enable_irq_wake(kp->key_sense_irq);
  650. } else {
  651. mutex_lock(&input_dev->mutex);
  652. if (input_dev->users)
  653. qpnp_kp_disable(kp);
  654. mutex_unlock(&input_dev->mutex);
  655. }
  656. return 0;
  657. }
  658. static int qpnp_kp_resume(struct device *dev)
  659. {
  660. struct qpnp_kp *kp = dev_get_drvdata(dev);
  661. struct input_dev *input_dev = kp->input;
  662. if (device_may_wakeup(dev)) {
  663. disable_irq_wake(kp->key_sense_irq);
  664. } else {
  665. mutex_lock(&input_dev->mutex);
  666. if (input_dev->users)
  667. qpnp_kp_enable(kp);
  668. mutex_unlock(&input_dev->mutex);
  669. }
  670. return 0;
  671. }
  672. #endif
  673. static SIMPLE_DEV_PM_OPS(qpnp_kp_pm_ops,
  674. qpnp_kp_suspend, qpnp_kp_resume);
  675. static struct of_device_id spmi_match_table[] = {
  676. { .compatible = "qcom,qpnp-keypad",
  677. },
  678. {}
  679. };
  680. static struct spmi_driver qpnp_kp_driver = {
  681. .probe = qpnp_kp_probe,
  682. .remove = __devexit_p(qpnp_kp_remove),
  683. .driver = {
  684. .name = "qcom,qpnp-keypad",
  685. .of_match_table = spmi_match_table,
  686. .owner = THIS_MODULE,
  687. .pm = &qpnp_kp_pm_ops,
  688. },
  689. };
  690. static int __init qpnp_kp_init(void)
  691. {
  692. return spmi_driver_register(&qpnp_kp_driver);
  693. }
  694. module_init(qpnp_kp_init);
  695. static void __exit qpnp_kp_exit(void)
  696. {
  697. spmi_driver_unregister(&qpnp_kp_driver);
  698. }
  699. module_exit(qpnp_kp_exit);
  700. MODULE_LICENSE("GPL v2");
  701. MODULE_DESCRIPTION("QPNP keypad driver");