adp5589-keys.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Description: keypad driver for ADP5589, ADP5585
  4. * I2C QWERTY Keypad and IO Expander
  5. * Bugs: Enter bugs at http://blackfin.uclinux.org/
  6. *
  7. * Copyright (C) 2010-2011 Analog Devices Inc.
  8. */
  9. #include <linux/bitops.h>
  10. #include <linux/module.h>
  11. #include <linux/interrupt.h>
  12. #include <linux/irq.h>
  13. #include <linux/workqueue.h>
  14. #include <linux/errno.h>
  15. #include <linux/pm.h>
  16. #include <linux/pm_wakeirq.h>
  17. #include <linux/platform_device.h>
  18. #include <linux/input.h>
  19. #include <linux/i2c.h>
  20. #include <linux/gpio/driver.h>
  21. #include <linux/slab.h>
  22. #include <linux/input/adp5589.h>
  23. /* ADP5589/ADP5585 Common Registers */
  24. #define ADP5589_5_ID 0x00
  25. #define ADP5589_5_INT_STATUS 0x01
  26. #define ADP5589_5_STATUS 0x02
  27. #define ADP5589_5_FIFO_1 0x03
  28. #define ADP5589_5_FIFO_2 0x04
  29. #define ADP5589_5_FIFO_3 0x05
  30. #define ADP5589_5_FIFO_4 0x06
  31. #define ADP5589_5_FIFO_5 0x07
  32. #define ADP5589_5_FIFO_6 0x08
  33. #define ADP5589_5_FIFO_7 0x09
  34. #define ADP5589_5_FIFO_8 0x0A
  35. #define ADP5589_5_FIFO_9 0x0B
  36. #define ADP5589_5_FIFO_10 0x0C
  37. #define ADP5589_5_FIFO_11 0x0D
  38. #define ADP5589_5_FIFO_12 0x0E
  39. #define ADP5589_5_FIFO_13 0x0F
  40. #define ADP5589_5_FIFO_14 0x10
  41. #define ADP5589_5_FIFO_15 0x11
  42. #define ADP5589_5_FIFO_16 0x12
  43. #define ADP5589_5_GPI_INT_STAT_A 0x13
  44. #define ADP5589_5_GPI_INT_STAT_B 0x14
  45. /* ADP5589 Registers */
  46. #define ADP5589_GPI_INT_STAT_C 0x15
  47. #define ADP5589_GPI_STATUS_A 0x16
  48. #define ADP5589_GPI_STATUS_B 0x17
  49. #define ADP5589_GPI_STATUS_C 0x18
  50. #define ADP5589_RPULL_CONFIG_A 0x19
  51. #define ADP5589_RPULL_CONFIG_B 0x1A
  52. #define ADP5589_RPULL_CONFIG_C 0x1B
  53. #define ADP5589_RPULL_CONFIG_D 0x1C
  54. #define ADP5589_RPULL_CONFIG_E 0x1D
  55. #define ADP5589_GPI_INT_LEVEL_A 0x1E
  56. #define ADP5589_GPI_INT_LEVEL_B 0x1F
  57. #define ADP5589_GPI_INT_LEVEL_C 0x20
  58. #define ADP5589_GPI_EVENT_EN_A 0x21
  59. #define ADP5589_GPI_EVENT_EN_B 0x22
  60. #define ADP5589_GPI_EVENT_EN_C 0x23
  61. #define ADP5589_GPI_INTERRUPT_EN_A 0x24
  62. #define ADP5589_GPI_INTERRUPT_EN_B 0x25
  63. #define ADP5589_GPI_INTERRUPT_EN_C 0x26
  64. #define ADP5589_DEBOUNCE_DIS_A 0x27
  65. #define ADP5589_DEBOUNCE_DIS_B 0x28
  66. #define ADP5589_DEBOUNCE_DIS_C 0x29
  67. #define ADP5589_GPO_DATA_OUT_A 0x2A
  68. #define ADP5589_GPO_DATA_OUT_B 0x2B
  69. #define ADP5589_GPO_DATA_OUT_C 0x2C
  70. #define ADP5589_GPO_OUT_MODE_A 0x2D
  71. #define ADP5589_GPO_OUT_MODE_B 0x2E
  72. #define ADP5589_GPO_OUT_MODE_C 0x2F
  73. #define ADP5589_GPIO_DIRECTION_A 0x30
  74. #define ADP5589_GPIO_DIRECTION_B 0x31
  75. #define ADP5589_GPIO_DIRECTION_C 0x32
  76. #define ADP5589_UNLOCK1 0x33
  77. #define ADP5589_UNLOCK2 0x34
  78. #define ADP5589_EXT_LOCK_EVENT 0x35
  79. #define ADP5589_UNLOCK_TIMERS 0x36
  80. #define ADP5589_LOCK_CFG 0x37
  81. #define ADP5589_RESET1_EVENT_A 0x38
  82. #define ADP5589_RESET1_EVENT_B 0x39
  83. #define ADP5589_RESET1_EVENT_C 0x3A
  84. #define ADP5589_RESET2_EVENT_A 0x3B
  85. #define ADP5589_RESET2_EVENT_B 0x3C
  86. #define ADP5589_RESET_CFG 0x3D
  87. #define ADP5589_PWM_OFFT_LOW 0x3E
  88. #define ADP5589_PWM_OFFT_HIGH 0x3F
  89. #define ADP5589_PWM_ONT_LOW 0x40
  90. #define ADP5589_PWM_ONT_HIGH 0x41
  91. #define ADP5589_PWM_CFG 0x42
  92. #define ADP5589_CLOCK_DIV_CFG 0x43
  93. #define ADP5589_LOGIC_1_CFG 0x44
  94. #define ADP5589_LOGIC_2_CFG 0x45
  95. #define ADP5589_LOGIC_FF_CFG 0x46
  96. #define ADP5589_LOGIC_INT_EVENT_EN 0x47
  97. #define ADP5589_POLL_PTIME_CFG 0x48
  98. #define ADP5589_PIN_CONFIG_A 0x49
  99. #define ADP5589_PIN_CONFIG_B 0x4A
  100. #define ADP5589_PIN_CONFIG_C 0x4B
  101. #define ADP5589_PIN_CONFIG_D 0x4C
  102. #define ADP5589_GENERAL_CFG 0x4D
  103. #define ADP5589_INT_EN 0x4E
  104. /* ADP5585 Registers */
  105. #define ADP5585_GPI_STATUS_A 0x15
  106. #define ADP5585_GPI_STATUS_B 0x16
  107. #define ADP5585_RPULL_CONFIG_A 0x17
  108. #define ADP5585_RPULL_CONFIG_B 0x18
  109. #define ADP5585_RPULL_CONFIG_C 0x19
  110. #define ADP5585_RPULL_CONFIG_D 0x1A
  111. #define ADP5585_GPI_INT_LEVEL_A 0x1B
  112. #define ADP5585_GPI_INT_LEVEL_B 0x1C
  113. #define ADP5585_GPI_EVENT_EN_A 0x1D
  114. #define ADP5585_GPI_EVENT_EN_B 0x1E
  115. #define ADP5585_GPI_INTERRUPT_EN_A 0x1F
  116. #define ADP5585_GPI_INTERRUPT_EN_B 0x20
  117. #define ADP5585_DEBOUNCE_DIS_A 0x21
  118. #define ADP5585_DEBOUNCE_DIS_B 0x22
  119. #define ADP5585_GPO_DATA_OUT_A 0x23
  120. #define ADP5585_GPO_DATA_OUT_B 0x24
  121. #define ADP5585_GPO_OUT_MODE_A 0x25
  122. #define ADP5585_GPO_OUT_MODE_B 0x26
  123. #define ADP5585_GPIO_DIRECTION_A 0x27
  124. #define ADP5585_GPIO_DIRECTION_B 0x28
  125. #define ADP5585_RESET1_EVENT_A 0x29
  126. #define ADP5585_RESET1_EVENT_B 0x2A
  127. #define ADP5585_RESET1_EVENT_C 0x2B
  128. #define ADP5585_RESET2_EVENT_A 0x2C
  129. #define ADP5585_RESET2_EVENT_B 0x2D
  130. #define ADP5585_RESET_CFG 0x2E
  131. #define ADP5585_PWM_OFFT_LOW 0x2F
  132. #define ADP5585_PWM_OFFT_HIGH 0x30
  133. #define ADP5585_PWM_ONT_LOW 0x31
  134. #define ADP5585_PWM_ONT_HIGH 0x32
  135. #define ADP5585_PWM_CFG 0x33
  136. #define ADP5585_LOGIC_CFG 0x34
  137. #define ADP5585_LOGIC_FF_CFG 0x35
  138. #define ADP5585_LOGIC_INT_EVENT_EN 0x36
  139. #define ADP5585_POLL_PTIME_CFG 0x37
  140. #define ADP5585_PIN_CONFIG_A 0x38
  141. #define ADP5585_PIN_CONFIG_B 0x39
  142. #define ADP5585_PIN_CONFIG_D 0x3A
  143. #define ADP5585_GENERAL_CFG 0x3B
  144. #define ADP5585_INT_EN 0x3C
  145. /* ID Register */
  146. #define ADP5589_5_DEVICE_ID_MASK 0xF
  147. #define ADP5589_5_MAN_ID_MASK 0xF
  148. #define ADP5589_5_MAN_ID_SHIFT 4
  149. #define ADP5589_5_MAN_ID 0x02
  150. /* GENERAL_CFG Register */
  151. #define OSC_EN BIT(7)
  152. #define CORE_CLK(x) (((x) & 0x3) << 5)
  153. #define LCK_TRK_LOGIC BIT(4) /* ADP5589 only */
  154. #define LCK_TRK_GPI BIT(3) /* ADP5589 only */
  155. #define INT_CFG BIT(1)
  156. #define RST_CFG BIT(0)
  157. /* INT_EN Register */
  158. #define LOGIC2_IEN BIT(5) /* ADP5589 only */
  159. #define LOGIC1_IEN BIT(4)
  160. #define LOCK_IEN BIT(3) /* ADP5589 only */
  161. #define OVRFLOW_IEN BIT(2)
  162. #define GPI_IEN BIT(1)
  163. #define EVENT_IEN BIT(0)
  164. /* Interrupt Status Register */
  165. #define LOGIC2_INT BIT(5) /* ADP5589 only */
  166. #define LOGIC1_INT BIT(4)
  167. #define LOCK_INT BIT(3) /* ADP5589 only */
  168. #define OVRFLOW_INT BIT(2)
  169. #define GPI_INT BIT(1)
  170. #define EVENT_INT BIT(0)
  171. /* STATUS Register */
  172. #define LOGIC2_STAT BIT(7) /* ADP5589 only */
  173. #define LOGIC1_STAT BIT(6)
  174. #define LOCK_STAT BIT(5) /* ADP5589 only */
  175. #define KEC 0x1F
  176. /* PIN_CONFIG_D Register */
  177. #define C4_EXTEND_CFG BIT(6) /* RESET2 */
  178. #define R4_EXTEND_CFG BIT(5) /* RESET1 */
  179. /* LOCK_CFG */
  180. #define LOCK_EN BIT(0)
  181. #define PTIME_MASK 0x3
  182. #define LTIME_MASK 0x3 /* ADP5589 only */
  183. /* Key Event Register xy */
  184. #define KEY_EV_PRESSED BIT(7)
  185. #define KEY_EV_MASK 0x7F
  186. #define KEYP_MAX_EVENT 16
  187. #define ADP5589_MAXGPIO 19
  188. #define ADP5585_MAXGPIO 11 /* 10 on the ADP5585-01, 11 on ADP5585-02 */
  189. enum {
  190. ADP5589,
  191. ADP5585_01,
  192. ADP5585_02
  193. };
  194. struct adp_constants {
  195. u8 maxgpio;
  196. u8 keymapsize;
  197. u8 gpi_pin_row_base;
  198. u8 gpi_pin_row_end;
  199. u8 gpi_pin_col_base;
  200. u8 gpi_pin_base;
  201. u8 gpi_pin_end;
  202. u8 gpimapsize_max;
  203. u8 max_row_num;
  204. u8 max_col_num;
  205. u8 row_mask;
  206. u8 col_mask;
  207. u8 col_shift;
  208. u8 c4_extend_cfg;
  209. u8 (*bank) (u8 offset);
  210. u8 (*bit) (u8 offset);
  211. u8 (*reg) (u8 reg);
  212. };
  213. struct adp5589_kpad {
  214. struct i2c_client *client;
  215. struct input_dev *input;
  216. const struct adp_constants *var;
  217. unsigned short keycode[ADP5589_KEYMAPSIZE];
  218. const struct adp5589_gpi_map *gpimap;
  219. unsigned short gpimapsize;
  220. unsigned extend_cfg;
  221. bool is_adp5585;
  222. bool support_row5;
  223. #ifdef CONFIG_GPIOLIB
  224. unsigned char gpiomap[ADP5589_MAXGPIO];
  225. struct gpio_chip gc;
  226. struct mutex gpio_lock; /* Protect cached dir, dat_out */
  227. u8 dat_out[3];
  228. u8 dir[3];
  229. #endif
  230. };
  231. /*
  232. * ADP5589 / ADP5585 derivative / variant handling
  233. */
  234. /* ADP5589 */
  235. static unsigned char adp5589_bank(unsigned char offset)
  236. {
  237. return offset >> 3;
  238. }
  239. static unsigned char adp5589_bit(unsigned char offset)
  240. {
  241. return 1u << (offset & 0x7);
  242. }
  243. static unsigned char adp5589_reg(unsigned char reg)
  244. {
  245. return reg;
  246. }
  247. static const struct adp_constants const_adp5589 = {
  248. .maxgpio = ADP5589_MAXGPIO,
  249. .keymapsize = ADP5589_KEYMAPSIZE,
  250. .gpi_pin_row_base = ADP5589_GPI_PIN_ROW_BASE,
  251. .gpi_pin_row_end = ADP5589_GPI_PIN_ROW_END,
  252. .gpi_pin_col_base = ADP5589_GPI_PIN_COL_BASE,
  253. .gpi_pin_base = ADP5589_GPI_PIN_BASE,
  254. .gpi_pin_end = ADP5589_GPI_PIN_END,
  255. .gpimapsize_max = ADP5589_GPIMAPSIZE_MAX,
  256. .c4_extend_cfg = 12,
  257. .max_row_num = ADP5589_MAX_ROW_NUM,
  258. .max_col_num = ADP5589_MAX_COL_NUM,
  259. .row_mask = ADP5589_ROW_MASK,
  260. .col_mask = ADP5589_COL_MASK,
  261. .col_shift = ADP5589_COL_SHIFT,
  262. .bank = adp5589_bank,
  263. .bit = adp5589_bit,
  264. .reg = adp5589_reg,
  265. };
  266. /* ADP5585 */
  267. static unsigned char adp5585_bank(unsigned char offset)
  268. {
  269. return offset > ADP5585_MAX_ROW_NUM;
  270. }
  271. static unsigned char adp5585_bit(unsigned char offset)
  272. {
  273. return (offset > ADP5585_MAX_ROW_NUM) ?
  274. 1u << (offset - ADP5585_COL_SHIFT) : 1u << offset;
  275. }
  276. static const unsigned char adp5585_reg_lut[] = {
  277. [ADP5589_GPI_STATUS_A] = ADP5585_GPI_STATUS_A,
  278. [ADP5589_GPI_STATUS_B] = ADP5585_GPI_STATUS_B,
  279. [ADP5589_RPULL_CONFIG_A] = ADP5585_RPULL_CONFIG_A,
  280. [ADP5589_RPULL_CONFIG_B] = ADP5585_RPULL_CONFIG_B,
  281. [ADP5589_RPULL_CONFIG_C] = ADP5585_RPULL_CONFIG_C,
  282. [ADP5589_RPULL_CONFIG_D] = ADP5585_RPULL_CONFIG_D,
  283. [ADP5589_GPI_INT_LEVEL_A] = ADP5585_GPI_INT_LEVEL_A,
  284. [ADP5589_GPI_INT_LEVEL_B] = ADP5585_GPI_INT_LEVEL_B,
  285. [ADP5589_GPI_EVENT_EN_A] = ADP5585_GPI_EVENT_EN_A,
  286. [ADP5589_GPI_EVENT_EN_B] = ADP5585_GPI_EVENT_EN_B,
  287. [ADP5589_GPI_INTERRUPT_EN_A] = ADP5585_GPI_INTERRUPT_EN_A,
  288. [ADP5589_GPI_INTERRUPT_EN_B] = ADP5585_GPI_INTERRUPT_EN_B,
  289. [ADP5589_DEBOUNCE_DIS_A] = ADP5585_DEBOUNCE_DIS_A,
  290. [ADP5589_DEBOUNCE_DIS_B] = ADP5585_DEBOUNCE_DIS_B,
  291. [ADP5589_GPO_DATA_OUT_A] = ADP5585_GPO_DATA_OUT_A,
  292. [ADP5589_GPO_DATA_OUT_B] = ADP5585_GPO_DATA_OUT_B,
  293. [ADP5589_GPO_OUT_MODE_A] = ADP5585_GPO_OUT_MODE_A,
  294. [ADP5589_GPO_OUT_MODE_B] = ADP5585_GPO_OUT_MODE_B,
  295. [ADP5589_GPIO_DIRECTION_A] = ADP5585_GPIO_DIRECTION_A,
  296. [ADP5589_GPIO_DIRECTION_B] = ADP5585_GPIO_DIRECTION_B,
  297. [ADP5589_RESET1_EVENT_A] = ADP5585_RESET1_EVENT_A,
  298. [ADP5589_RESET1_EVENT_B] = ADP5585_RESET1_EVENT_B,
  299. [ADP5589_RESET1_EVENT_C] = ADP5585_RESET1_EVENT_C,
  300. [ADP5589_RESET2_EVENT_A] = ADP5585_RESET2_EVENT_A,
  301. [ADP5589_RESET2_EVENT_B] = ADP5585_RESET2_EVENT_B,
  302. [ADP5589_RESET_CFG] = ADP5585_RESET_CFG,
  303. [ADP5589_PWM_OFFT_LOW] = ADP5585_PWM_OFFT_LOW,
  304. [ADP5589_PWM_OFFT_HIGH] = ADP5585_PWM_OFFT_HIGH,
  305. [ADP5589_PWM_ONT_LOW] = ADP5585_PWM_ONT_LOW,
  306. [ADP5589_PWM_ONT_HIGH] = ADP5585_PWM_ONT_HIGH,
  307. [ADP5589_PWM_CFG] = ADP5585_PWM_CFG,
  308. [ADP5589_LOGIC_1_CFG] = ADP5585_LOGIC_CFG,
  309. [ADP5589_LOGIC_FF_CFG] = ADP5585_LOGIC_FF_CFG,
  310. [ADP5589_LOGIC_INT_EVENT_EN] = ADP5585_LOGIC_INT_EVENT_EN,
  311. [ADP5589_POLL_PTIME_CFG] = ADP5585_POLL_PTIME_CFG,
  312. [ADP5589_PIN_CONFIG_A] = ADP5585_PIN_CONFIG_A,
  313. [ADP5589_PIN_CONFIG_B] = ADP5585_PIN_CONFIG_B,
  314. [ADP5589_PIN_CONFIG_D] = ADP5585_PIN_CONFIG_D,
  315. [ADP5589_GENERAL_CFG] = ADP5585_GENERAL_CFG,
  316. [ADP5589_INT_EN] = ADP5585_INT_EN,
  317. };
  318. static unsigned char adp5585_reg(unsigned char reg)
  319. {
  320. return adp5585_reg_lut[reg];
  321. }
  322. static const struct adp_constants const_adp5585 = {
  323. .maxgpio = ADP5585_MAXGPIO,
  324. .keymapsize = ADP5585_KEYMAPSIZE,
  325. .gpi_pin_row_base = ADP5585_GPI_PIN_ROW_BASE,
  326. .gpi_pin_row_end = ADP5585_GPI_PIN_ROW_END,
  327. .gpi_pin_col_base = ADP5585_GPI_PIN_COL_BASE,
  328. .gpi_pin_base = ADP5585_GPI_PIN_BASE,
  329. .gpi_pin_end = ADP5585_GPI_PIN_END,
  330. .gpimapsize_max = ADP5585_GPIMAPSIZE_MAX,
  331. .c4_extend_cfg = 10,
  332. .max_row_num = ADP5585_MAX_ROW_NUM,
  333. .max_col_num = ADP5585_MAX_COL_NUM,
  334. .row_mask = ADP5585_ROW_MASK,
  335. .col_mask = ADP5585_COL_MASK,
  336. .col_shift = ADP5585_COL_SHIFT,
  337. .bank = adp5585_bank,
  338. .bit = adp5585_bit,
  339. .reg = adp5585_reg,
  340. };
  341. static int adp5589_read(struct i2c_client *client, u8 reg)
  342. {
  343. int ret = i2c_smbus_read_byte_data(client, reg);
  344. if (ret < 0)
  345. dev_err(&client->dev, "Read Error\n");
  346. return ret;
  347. }
  348. static int adp5589_write(struct i2c_client *client, u8 reg, u8 val)
  349. {
  350. return i2c_smbus_write_byte_data(client, reg, val);
  351. }
  352. #ifdef CONFIG_GPIOLIB
  353. static int adp5589_gpio_get_value(struct gpio_chip *chip, unsigned off)
  354. {
  355. struct adp5589_kpad *kpad = gpiochip_get_data(chip);
  356. unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
  357. unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
  358. return !!(adp5589_read(kpad->client,
  359. kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
  360. bit);
  361. }
  362. static void adp5589_gpio_set_value(struct gpio_chip *chip,
  363. unsigned off, int val)
  364. {
  365. struct adp5589_kpad *kpad = gpiochip_get_data(chip);
  366. unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
  367. unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
  368. mutex_lock(&kpad->gpio_lock);
  369. if (val)
  370. kpad->dat_out[bank] |= bit;
  371. else
  372. kpad->dat_out[bank] &= ~bit;
  373. adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
  374. bank, kpad->dat_out[bank]);
  375. mutex_unlock(&kpad->gpio_lock);
  376. }
  377. static int adp5589_gpio_direction_input(struct gpio_chip *chip, unsigned off)
  378. {
  379. struct adp5589_kpad *kpad = gpiochip_get_data(chip);
  380. unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
  381. unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
  382. int ret;
  383. mutex_lock(&kpad->gpio_lock);
  384. kpad->dir[bank] &= ~bit;
  385. ret = adp5589_write(kpad->client,
  386. kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
  387. kpad->dir[bank]);
  388. mutex_unlock(&kpad->gpio_lock);
  389. return ret;
  390. }
  391. static int adp5589_gpio_direction_output(struct gpio_chip *chip,
  392. unsigned off, int val)
  393. {
  394. struct adp5589_kpad *kpad = gpiochip_get_data(chip);
  395. unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
  396. unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
  397. int ret;
  398. mutex_lock(&kpad->gpio_lock);
  399. kpad->dir[bank] |= bit;
  400. if (val)
  401. kpad->dat_out[bank] |= bit;
  402. else
  403. kpad->dat_out[bank] &= ~bit;
  404. ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
  405. + bank, kpad->dat_out[bank]);
  406. ret |= adp5589_write(kpad->client,
  407. kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
  408. kpad->dir[bank]);
  409. mutex_unlock(&kpad->gpio_lock);
  410. return ret;
  411. }
  412. static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
  413. const struct adp5589_kpad_platform_data *pdata)
  414. {
  415. bool pin_used[ADP5589_MAXGPIO];
  416. int n_unused = 0;
  417. int i;
  418. memset(pin_used, false, sizeof(pin_used));
  419. for (i = 0; i < kpad->var->maxgpio; i++)
  420. if (pdata->keypad_en_mask & BIT(i))
  421. pin_used[i] = true;
  422. for (i = 0; i < kpad->gpimapsize; i++)
  423. pin_used[kpad->gpimap[i].pin - kpad->var->gpi_pin_base] = true;
  424. if (kpad->extend_cfg & R4_EXTEND_CFG)
  425. pin_used[4] = true;
  426. if (kpad->extend_cfg & C4_EXTEND_CFG)
  427. pin_used[kpad->var->c4_extend_cfg] = true;
  428. if (!kpad->support_row5)
  429. pin_used[5] = true;
  430. for (i = 0; i < kpad->var->maxgpio; i++)
  431. if (!pin_used[i])
  432. kpad->gpiomap[n_unused++] = i;
  433. return n_unused;
  434. }
  435. static int adp5589_gpio_add(struct adp5589_kpad *kpad)
  436. {
  437. struct device *dev = &kpad->client->dev;
  438. const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
  439. const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
  440. int i, error;
  441. if (!gpio_data)
  442. return 0;
  443. kpad->gc.parent = dev;
  444. kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
  445. if (kpad->gc.ngpio == 0) {
  446. dev_info(dev, "No unused gpios left to export\n");
  447. return 0;
  448. }
  449. kpad->gc.direction_input = adp5589_gpio_direction_input;
  450. kpad->gc.direction_output = adp5589_gpio_direction_output;
  451. kpad->gc.get = adp5589_gpio_get_value;
  452. kpad->gc.set = adp5589_gpio_set_value;
  453. kpad->gc.can_sleep = 1;
  454. kpad->gc.base = gpio_data->gpio_start;
  455. kpad->gc.label = kpad->client->name;
  456. kpad->gc.owner = THIS_MODULE;
  457. mutex_init(&kpad->gpio_lock);
  458. error = devm_gpiochip_add_data(dev, &kpad->gc, kpad);
  459. if (error)
  460. return error;
  461. for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
  462. kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
  463. ADP5589_GPO_DATA_OUT_A) + i);
  464. kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
  465. ADP5589_GPIO_DIRECTION_A) + i);
  466. }
  467. return 0;
  468. }
  469. #else
  470. static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
  471. {
  472. return 0;
  473. }
  474. #endif
  475. static void adp5589_report_switches(struct adp5589_kpad *kpad,
  476. int key, int key_val)
  477. {
  478. int i;
  479. for (i = 0; i < kpad->gpimapsize; i++) {
  480. if (key_val == kpad->gpimap[i].pin) {
  481. input_report_switch(kpad->input,
  482. kpad->gpimap[i].sw_evt,
  483. key & KEY_EV_PRESSED);
  484. break;
  485. }
  486. }
  487. }
  488. static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
  489. {
  490. int i;
  491. for (i = 0; i < ev_cnt; i++) {
  492. int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
  493. int key_val = key & KEY_EV_MASK;
  494. if (key_val >= kpad->var->gpi_pin_base &&
  495. key_val <= kpad->var->gpi_pin_end) {
  496. adp5589_report_switches(kpad, key, key_val);
  497. } else {
  498. input_report_key(kpad->input,
  499. kpad->keycode[key_val - 1],
  500. key & KEY_EV_PRESSED);
  501. }
  502. }
  503. }
  504. static irqreturn_t adp5589_irq(int irq, void *handle)
  505. {
  506. struct adp5589_kpad *kpad = handle;
  507. struct i2c_client *client = kpad->client;
  508. int status, ev_cnt;
  509. status = adp5589_read(client, ADP5589_5_INT_STATUS);
  510. if (status & OVRFLOW_INT) /* Unlikely and should never happen */
  511. dev_err(&client->dev, "Event Overflow Error\n");
  512. if (status & EVENT_INT) {
  513. ev_cnt = adp5589_read(client, ADP5589_5_STATUS) & KEC;
  514. if (ev_cnt) {
  515. adp5589_report_events(kpad, ev_cnt);
  516. input_sync(kpad->input);
  517. }
  518. }
  519. adp5589_write(client, ADP5589_5_INT_STATUS, status); /* Status is W1C */
  520. return IRQ_HANDLED;
  521. }
  522. static int adp5589_get_evcode(struct adp5589_kpad *kpad, unsigned short key)
  523. {
  524. int i;
  525. for (i = 0; i < kpad->var->keymapsize; i++)
  526. if (key == kpad->keycode[i])
  527. return (i + 1) | KEY_EV_PRESSED;
  528. dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
  529. return -EINVAL;
  530. }
  531. static int adp5589_setup(struct adp5589_kpad *kpad)
  532. {
  533. struct i2c_client *client = kpad->client;
  534. const struct adp5589_kpad_platform_data *pdata =
  535. dev_get_platdata(&client->dev);
  536. u8 (*reg) (u8) = kpad->var->reg;
  537. unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
  538. unsigned char pull_mask = 0;
  539. int i, ret;
  540. ret = adp5589_write(client, reg(ADP5589_PIN_CONFIG_A),
  541. pdata->keypad_en_mask & kpad->var->row_mask);
  542. ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_B),
  543. (pdata->keypad_en_mask >> kpad->var->col_shift) &
  544. kpad->var->col_mask);
  545. if (!kpad->is_adp5585)
  546. ret |= adp5589_write(client, ADP5589_PIN_CONFIG_C,
  547. (pdata->keypad_en_mask >> 16) & 0xFF);
  548. if (!kpad->is_adp5585 && pdata->en_keylock) {
  549. ret |= adp5589_write(client, ADP5589_UNLOCK1,
  550. pdata->unlock_key1);
  551. ret |= adp5589_write(client, ADP5589_UNLOCK2,
  552. pdata->unlock_key2);
  553. ret |= adp5589_write(client, ADP5589_UNLOCK_TIMERS,
  554. pdata->unlock_timer & LTIME_MASK);
  555. ret |= adp5589_write(client, ADP5589_LOCK_CFG, LOCK_EN);
  556. }
  557. for (i = 0; i < KEYP_MAX_EVENT; i++)
  558. ret |= adp5589_read(client, ADP5589_5_FIFO_1 + i);
  559. for (i = 0; i < pdata->gpimapsize; i++) {
  560. unsigned short pin = pdata->gpimap[i].pin;
  561. if (pin <= kpad->var->gpi_pin_row_end) {
  562. evt_mode1 |= BIT(pin - kpad->var->gpi_pin_row_base);
  563. } else {
  564. evt_mode2 |=
  565. BIT(pin - kpad->var->gpi_pin_col_base) & 0xFF;
  566. if (!kpad->is_adp5585)
  567. evt_mode3 |=
  568. BIT(pin - kpad->var->gpi_pin_col_base) >> 8;
  569. }
  570. }
  571. if (pdata->gpimapsize) {
  572. ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_A),
  573. evt_mode1);
  574. ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_B),
  575. evt_mode2);
  576. if (!kpad->is_adp5585)
  577. ret |= adp5589_write(client,
  578. reg(ADP5589_GPI_EVENT_EN_C),
  579. evt_mode3);
  580. }
  581. if (pdata->pull_dis_mask & pdata->pullup_en_100k &
  582. pdata->pullup_en_300k & pdata->pulldown_en_300k)
  583. dev_warn(&client->dev, "Conflicting pull resistor config\n");
  584. for (i = 0; i <= kpad->var->max_row_num; i++) {
  585. unsigned int val = 0, bit = BIT(i);
  586. if (pdata->pullup_en_300k & bit)
  587. val = 0;
  588. else if (pdata->pulldown_en_300k & bit)
  589. val = 1;
  590. else if (pdata->pullup_en_100k & bit)
  591. val = 2;
  592. else if (pdata->pull_dis_mask & bit)
  593. val = 3;
  594. pull_mask |= val << (2 * (i & 0x3));
  595. if (i % 4 == 3 || i == kpad->var->max_row_num) {
  596. ret |= adp5589_write(client, reg(ADP5585_RPULL_CONFIG_A)
  597. + (i >> 2), pull_mask);
  598. pull_mask = 0;
  599. }
  600. }
  601. for (i = 0; i <= kpad->var->max_col_num; i++) {
  602. unsigned int val = 0, bit = BIT(i + kpad->var->col_shift);
  603. if (pdata->pullup_en_300k & bit)
  604. val = 0;
  605. else if (pdata->pulldown_en_300k & bit)
  606. val = 1;
  607. else if (pdata->pullup_en_100k & bit)
  608. val = 2;
  609. else if (pdata->pull_dis_mask & bit)
  610. val = 3;
  611. pull_mask |= val << (2 * (i & 0x3));
  612. if (i % 4 == 3 || i == kpad->var->max_col_num) {
  613. ret |= adp5589_write(client,
  614. reg(ADP5585_RPULL_CONFIG_C) +
  615. (i >> 2), pull_mask);
  616. pull_mask = 0;
  617. }
  618. }
  619. if (pdata->reset1_key_1 && pdata->reset1_key_2 && pdata->reset1_key_3) {
  620. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_A),
  621. adp5589_get_evcode(kpad,
  622. pdata->reset1_key_1));
  623. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_B),
  624. adp5589_get_evcode(kpad,
  625. pdata->reset1_key_2));
  626. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_C),
  627. adp5589_get_evcode(kpad,
  628. pdata->reset1_key_3));
  629. kpad->extend_cfg |= R4_EXTEND_CFG;
  630. }
  631. if (pdata->reset2_key_1 && pdata->reset2_key_2) {
  632. ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_A),
  633. adp5589_get_evcode(kpad,
  634. pdata->reset2_key_1));
  635. ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_B),
  636. adp5589_get_evcode(kpad,
  637. pdata->reset2_key_2));
  638. kpad->extend_cfg |= C4_EXTEND_CFG;
  639. }
  640. if (kpad->extend_cfg) {
  641. ret |= adp5589_write(client, reg(ADP5589_RESET_CFG),
  642. pdata->reset_cfg);
  643. ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_D),
  644. kpad->extend_cfg);
  645. }
  646. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_A),
  647. pdata->debounce_dis_mask & kpad->var->row_mask);
  648. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_B),
  649. (pdata->debounce_dis_mask >> kpad->var->col_shift)
  650. & kpad->var->col_mask);
  651. if (!kpad->is_adp5585)
  652. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_C),
  653. (pdata->debounce_dis_mask >> 16) & 0xFF);
  654. ret |= adp5589_write(client, reg(ADP5589_POLL_PTIME_CFG),
  655. pdata->scan_cycle_time & PTIME_MASK);
  656. ret |= adp5589_write(client, ADP5589_5_INT_STATUS,
  657. (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
  658. LOGIC1_INT | OVRFLOW_INT |
  659. (kpad->is_adp5585 ? 0 : LOCK_INT) |
  660. GPI_INT | EVENT_INT); /* Status is W1C */
  661. ret |= adp5589_write(client, reg(ADP5589_GENERAL_CFG),
  662. INT_CFG | OSC_EN | CORE_CLK(3));
  663. ret |= adp5589_write(client, reg(ADP5589_INT_EN),
  664. OVRFLOW_IEN | GPI_IEN | EVENT_IEN);
  665. if (ret < 0) {
  666. dev_err(&client->dev, "Write Error\n");
  667. return ret;
  668. }
  669. return 0;
  670. }
  671. static void adp5589_report_switch_state(struct adp5589_kpad *kpad)
  672. {
  673. int gpi_stat_tmp, pin_loc;
  674. int i;
  675. int gpi_stat1 = adp5589_read(kpad->client,
  676. kpad->var->reg(ADP5589_GPI_STATUS_A));
  677. int gpi_stat2 = adp5589_read(kpad->client,
  678. kpad->var->reg(ADP5589_GPI_STATUS_B));
  679. int gpi_stat3 = !kpad->is_adp5585 ?
  680. adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
  681. for (i = 0; i < kpad->gpimapsize; i++) {
  682. unsigned short pin = kpad->gpimap[i].pin;
  683. if (pin <= kpad->var->gpi_pin_row_end) {
  684. gpi_stat_tmp = gpi_stat1;
  685. pin_loc = pin - kpad->var->gpi_pin_row_base;
  686. } else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
  687. gpi_stat_tmp = gpi_stat2;
  688. pin_loc = pin - kpad->var->gpi_pin_col_base;
  689. } else {
  690. gpi_stat_tmp = gpi_stat3;
  691. pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
  692. }
  693. if (gpi_stat_tmp < 0) {
  694. dev_err(&kpad->client->dev,
  695. "Can't read GPIO_DAT_STAT switch %d, default to OFF\n",
  696. pin);
  697. gpi_stat_tmp = 0;
  698. }
  699. input_report_switch(kpad->input,
  700. kpad->gpimap[i].sw_evt,
  701. !(gpi_stat_tmp & BIT(pin_loc)));
  702. }
  703. input_sync(kpad->input);
  704. }
  705. static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
  706. {
  707. struct i2c_client *client = kpad->client;
  708. const struct adp5589_kpad_platform_data *pdata =
  709. dev_get_platdata(&client->dev);
  710. struct input_dev *input;
  711. unsigned int i;
  712. int error;
  713. if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
  714. (pdata->keypad_en_mask >> kpad->var->col_shift)) ||
  715. !pdata->keymap) {
  716. dev_err(&client->dev, "no rows, cols or keymap from pdata\n");
  717. return -EINVAL;
  718. }
  719. if (pdata->keymapsize != kpad->var->keymapsize) {
  720. dev_err(&client->dev, "invalid keymapsize\n");
  721. return -EINVAL;
  722. }
  723. if (!pdata->gpimap && pdata->gpimapsize) {
  724. dev_err(&client->dev, "invalid gpimap from pdata\n");
  725. return -EINVAL;
  726. }
  727. if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
  728. dev_err(&client->dev, "invalid gpimapsize\n");
  729. return -EINVAL;
  730. }
  731. for (i = 0; i < pdata->gpimapsize; i++) {
  732. unsigned short pin = pdata->gpimap[i].pin;
  733. if (pin < kpad->var->gpi_pin_base ||
  734. pin > kpad->var->gpi_pin_end) {
  735. dev_err(&client->dev, "invalid gpi pin data\n");
  736. return -EINVAL;
  737. }
  738. if (BIT(pin - kpad->var->gpi_pin_row_base) &
  739. pdata->keypad_en_mask) {
  740. dev_err(&client->dev, "invalid gpi row/col data\n");
  741. return -EINVAL;
  742. }
  743. }
  744. if (!client->irq) {
  745. dev_err(&client->dev, "no IRQ?\n");
  746. return -EINVAL;
  747. }
  748. input = devm_input_allocate_device(&client->dev);
  749. if (!input)
  750. return -ENOMEM;
  751. kpad->input = input;
  752. input->name = client->name;
  753. input->phys = "adp5589-keys/input0";
  754. input->dev.parent = &client->dev;
  755. input_set_drvdata(input, kpad);
  756. input->id.bustype = BUS_I2C;
  757. input->id.vendor = 0x0001;
  758. input->id.product = 0x0001;
  759. input->id.version = revid;
  760. input->keycodesize = sizeof(kpad->keycode[0]);
  761. input->keycodemax = pdata->keymapsize;
  762. input->keycode = kpad->keycode;
  763. memcpy(kpad->keycode, pdata->keymap,
  764. pdata->keymapsize * input->keycodesize);
  765. kpad->gpimap = pdata->gpimap;
  766. kpad->gpimapsize = pdata->gpimapsize;
  767. /* setup input device */
  768. __set_bit(EV_KEY, input->evbit);
  769. if (pdata->repeat)
  770. __set_bit(EV_REP, input->evbit);
  771. for (i = 0; i < input->keycodemax; i++)
  772. if (kpad->keycode[i] <= KEY_MAX)
  773. __set_bit(kpad->keycode[i], input->keybit);
  774. __clear_bit(KEY_RESERVED, input->keybit);
  775. if (kpad->gpimapsize)
  776. __set_bit(EV_SW, input->evbit);
  777. for (i = 0; i < kpad->gpimapsize; i++)
  778. __set_bit(kpad->gpimap[i].sw_evt, input->swbit);
  779. error = input_register_device(input);
  780. if (error) {
  781. dev_err(&client->dev, "unable to register input device\n");
  782. return error;
  783. }
  784. error = devm_request_threaded_irq(&client->dev, client->irq,
  785. NULL, adp5589_irq,
  786. IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
  787. client->dev.driver->name, kpad);
  788. if (error) {
  789. dev_err(&client->dev, "unable to request irq %d\n", client->irq);
  790. return error;
  791. }
  792. return 0;
  793. }
  794. static void adp5589_clear_config(void *data)
  795. {
  796. struct i2c_client *client = data;
  797. struct adp5589_kpad *kpad = i2c_get_clientdata(client);
  798. adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
  799. }
  800. static int adp5589_probe(struct i2c_client *client,
  801. const struct i2c_device_id *id)
  802. {
  803. struct adp5589_kpad *kpad;
  804. const struct adp5589_kpad_platform_data *pdata =
  805. dev_get_platdata(&client->dev);
  806. unsigned int revid;
  807. int error, ret;
  808. if (!i2c_check_functionality(client->adapter,
  809. I2C_FUNC_SMBUS_BYTE_DATA)) {
  810. dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
  811. return -EIO;
  812. }
  813. if (!pdata) {
  814. dev_err(&client->dev, "no platform data?\n");
  815. return -EINVAL;
  816. }
  817. kpad = devm_kzalloc(&client->dev, sizeof(*kpad), GFP_KERNEL);
  818. if (!kpad)
  819. return -ENOMEM;
  820. kpad->client = client;
  821. switch (id->driver_data) {
  822. case ADP5585_02:
  823. kpad->support_row5 = true;
  824. fallthrough;
  825. case ADP5585_01:
  826. kpad->is_adp5585 = true;
  827. kpad->var = &const_adp5585;
  828. break;
  829. case ADP5589:
  830. kpad->support_row5 = true;
  831. kpad->var = &const_adp5589;
  832. break;
  833. }
  834. error = devm_add_action_or_reset(&client->dev, adp5589_clear_config,
  835. client);
  836. if (error)
  837. return error;
  838. ret = adp5589_read(client, ADP5589_5_ID);
  839. if (ret < 0)
  840. return ret;
  841. revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
  842. if (pdata->keymapsize) {
  843. error = adp5589_keypad_add(kpad, revid);
  844. if (error)
  845. return error;
  846. }
  847. error = adp5589_setup(kpad);
  848. if (error)
  849. return error;
  850. if (kpad->gpimapsize)
  851. adp5589_report_switch_state(kpad);
  852. error = adp5589_gpio_add(kpad);
  853. if (error)
  854. return error;
  855. i2c_set_clientdata(client, kpad);
  856. dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
  857. return 0;
  858. }
  859. static int __maybe_unused adp5589_suspend(struct device *dev)
  860. {
  861. struct i2c_client *client = to_i2c_client(dev);
  862. struct adp5589_kpad *kpad = i2c_get_clientdata(client);
  863. if (kpad->input)
  864. disable_irq(client->irq);
  865. return 0;
  866. }
  867. static int __maybe_unused adp5589_resume(struct device *dev)
  868. {
  869. struct i2c_client *client = to_i2c_client(dev);
  870. struct adp5589_kpad *kpad = i2c_get_clientdata(client);
  871. if (kpad->input)
  872. enable_irq(client->irq);
  873. return 0;
  874. }
  875. static SIMPLE_DEV_PM_OPS(adp5589_dev_pm_ops, adp5589_suspend, adp5589_resume);
  876. static const struct i2c_device_id adp5589_id[] = {
  877. {"adp5589-keys", ADP5589},
  878. {"adp5585-keys", ADP5585_01},
  879. {"adp5585-02-keys", ADP5585_02}, /* Adds ROW5 to ADP5585 */
  880. {}
  881. };
  882. MODULE_DEVICE_TABLE(i2c, adp5589_id);
  883. static struct i2c_driver adp5589_driver = {
  884. .driver = {
  885. .name = KBUILD_MODNAME,
  886. .pm = &adp5589_dev_pm_ops,
  887. },
  888. .probe = adp5589_probe,
  889. .id_table = adp5589_id,
  890. };
  891. module_i2c_driver(adp5589_driver);
  892. MODULE_LICENSE("GPL");
  893. MODULE_AUTHOR("Michael Hennerich <[email protected]>");
  894. MODULE_DESCRIPTION("ADP5589/ADP5585 Keypad driver");