adp5589-keys.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  1. /*
  2. * Description: keypad driver for ADP5589, ADP5585
  3. * I2C QWERTY Keypad and IO Expander
  4. * Bugs: Enter bugs at http://blackfin.uclinux.org/
  5. *
  6. * Copyright (C) 2010-2011 Analog Devices Inc.
  7. * Licensed under the GPL-2.
  8. */
  9. #include <linux/module.h>
  10. #include <linux/init.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/platform_device.h>
  17. #include <linux/input.h>
  18. #include <linux/i2c.h>
  19. #include <linux/gpio.h>
  20. #include <linux/slab.h>
  21. #include <linux/input/adp5589.h>
  22. /* ADP5589/ADP5585 Common Registers */
  23. #define ADP5589_5_ID 0x00
  24. #define ADP5589_5_INT_STATUS 0x01
  25. #define ADP5589_5_STATUS 0x02
  26. #define ADP5589_5_FIFO_1 0x03
  27. #define ADP5589_5_FIFO_2 0x04
  28. #define ADP5589_5_FIFO_3 0x05
  29. #define ADP5589_5_FIFO_4 0x06
  30. #define ADP5589_5_FIFO_5 0x07
  31. #define ADP5589_5_FIFO_6 0x08
  32. #define ADP5589_5_FIFO_7 0x09
  33. #define ADP5589_5_FIFO_8 0x0A
  34. #define ADP5589_5_FIFO_9 0x0B
  35. #define ADP5589_5_FIFO_10 0x0C
  36. #define ADP5589_5_FIFO_11 0x0D
  37. #define ADP5589_5_FIFO_12 0x0E
  38. #define ADP5589_5_FIFO_13 0x0F
  39. #define ADP5589_5_FIFO_14 0x10
  40. #define ADP5589_5_FIFO_15 0x11
  41. #define ADP5589_5_FIFO_16 0x12
  42. #define ADP5589_5_GPI_INT_STAT_A 0x13
  43. #define ADP5589_5_GPI_INT_STAT_B 0x14
  44. /* ADP5589 Registers */
  45. #define ADP5589_GPI_INT_STAT_C 0x15
  46. #define ADP5589_GPI_STATUS_A 0x16
  47. #define ADP5589_GPI_STATUS_B 0x17
  48. #define ADP5589_GPI_STATUS_C 0x18
  49. #define ADP5589_RPULL_CONFIG_A 0x19
  50. #define ADP5589_RPULL_CONFIG_B 0x1A
  51. #define ADP5589_RPULL_CONFIG_C 0x1B
  52. #define ADP5589_RPULL_CONFIG_D 0x1C
  53. #define ADP5589_RPULL_CONFIG_E 0x1D
  54. #define ADP5589_GPI_INT_LEVEL_A 0x1E
  55. #define ADP5589_GPI_INT_LEVEL_B 0x1F
  56. #define ADP5589_GPI_INT_LEVEL_C 0x20
  57. #define ADP5589_GPI_EVENT_EN_A 0x21
  58. #define ADP5589_GPI_EVENT_EN_B 0x22
  59. #define ADP5589_GPI_EVENT_EN_C 0x23
  60. #define ADP5589_GPI_INTERRUPT_EN_A 0x24
  61. #define ADP5589_GPI_INTERRUPT_EN_B 0x25
  62. #define ADP5589_GPI_INTERRUPT_EN_C 0x26
  63. #define ADP5589_DEBOUNCE_DIS_A 0x27
  64. #define ADP5589_DEBOUNCE_DIS_B 0x28
  65. #define ADP5589_DEBOUNCE_DIS_C 0x29
  66. #define ADP5589_GPO_DATA_OUT_A 0x2A
  67. #define ADP5589_GPO_DATA_OUT_B 0x2B
  68. #define ADP5589_GPO_DATA_OUT_C 0x2C
  69. #define ADP5589_GPO_OUT_MODE_A 0x2D
  70. #define ADP5589_GPO_OUT_MODE_B 0x2E
  71. #define ADP5589_GPO_OUT_MODE_C 0x2F
  72. #define ADP5589_GPIO_DIRECTION_A 0x30
  73. #define ADP5589_GPIO_DIRECTION_B 0x31
  74. #define ADP5589_GPIO_DIRECTION_C 0x32
  75. #define ADP5589_UNLOCK1 0x33
  76. #define ADP5589_UNLOCK2 0x34
  77. #define ADP5589_EXT_LOCK_EVENT 0x35
  78. #define ADP5589_UNLOCK_TIMERS 0x36
  79. #define ADP5589_LOCK_CFG 0x37
  80. #define ADP5589_RESET1_EVENT_A 0x38
  81. #define ADP5589_RESET1_EVENT_B 0x39
  82. #define ADP5589_RESET1_EVENT_C 0x3A
  83. #define ADP5589_RESET2_EVENT_A 0x3B
  84. #define ADP5589_RESET2_EVENT_B 0x3C
  85. #define ADP5589_RESET_CFG 0x3D
  86. #define ADP5589_PWM_OFFT_LOW 0x3E
  87. #define ADP5589_PWM_OFFT_HIGH 0x3F
  88. #define ADP5589_PWM_ONT_LOW 0x40
  89. #define ADP5589_PWM_ONT_HIGH 0x41
  90. #define ADP5589_PWM_CFG 0x42
  91. #define ADP5589_CLOCK_DIV_CFG 0x43
  92. #define ADP5589_LOGIC_1_CFG 0x44
  93. #define ADP5589_LOGIC_2_CFG 0x45
  94. #define ADP5589_LOGIC_FF_CFG 0x46
  95. #define ADP5589_LOGIC_INT_EVENT_EN 0x47
  96. #define ADP5589_POLL_PTIME_CFG 0x48
  97. #define ADP5589_PIN_CONFIG_A 0x49
  98. #define ADP5589_PIN_CONFIG_B 0x4A
  99. #define ADP5589_PIN_CONFIG_C 0x4B
  100. #define ADP5589_PIN_CONFIG_D 0x4C
  101. #define ADP5589_GENERAL_CFG 0x4D
  102. #define ADP5589_INT_EN 0x4E
  103. /* ADP5585 Registers */
  104. #define ADP5585_GPI_STATUS_A 0x15
  105. #define ADP5585_GPI_STATUS_B 0x16
  106. #define ADP5585_RPULL_CONFIG_A 0x17
  107. #define ADP5585_RPULL_CONFIG_B 0x18
  108. #define ADP5585_RPULL_CONFIG_C 0x19
  109. #define ADP5585_RPULL_CONFIG_D 0x1A
  110. #define ADP5585_GPI_INT_LEVEL_A 0x1B
  111. #define ADP5585_GPI_INT_LEVEL_B 0x1C
  112. #define ADP5585_GPI_EVENT_EN_A 0x1D
  113. #define ADP5585_GPI_EVENT_EN_B 0x1E
  114. #define ADP5585_GPI_INTERRUPT_EN_A 0x1F
  115. #define ADP5585_GPI_INTERRUPT_EN_B 0x20
  116. #define ADP5585_DEBOUNCE_DIS_A 0x21
  117. #define ADP5585_DEBOUNCE_DIS_B 0x22
  118. #define ADP5585_GPO_DATA_OUT_A 0x23
  119. #define ADP5585_GPO_DATA_OUT_B 0x24
  120. #define ADP5585_GPO_OUT_MODE_A 0x25
  121. #define ADP5585_GPO_OUT_MODE_B 0x26
  122. #define ADP5585_GPIO_DIRECTION_A 0x27
  123. #define ADP5585_GPIO_DIRECTION_B 0x28
  124. #define ADP5585_RESET1_EVENT_A 0x29
  125. #define ADP5585_RESET1_EVENT_B 0x2A
  126. #define ADP5585_RESET1_EVENT_C 0x2B
  127. #define ADP5585_RESET2_EVENT_A 0x2C
  128. #define ADP5585_RESET2_EVENT_B 0x2D
  129. #define ADP5585_RESET_CFG 0x2E
  130. #define ADP5585_PWM_OFFT_LOW 0x2F
  131. #define ADP5585_PWM_OFFT_HIGH 0x30
  132. #define ADP5585_PWM_ONT_LOW 0x31
  133. #define ADP5585_PWM_ONT_HIGH 0x32
  134. #define ADP5585_PWM_CFG 0x33
  135. #define ADP5585_LOGIC_CFG 0x34
  136. #define ADP5585_LOGIC_FF_CFG 0x35
  137. #define ADP5585_LOGIC_INT_EVENT_EN 0x36
  138. #define ADP5585_POLL_PTIME_CFG 0x37
  139. #define ADP5585_PIN_CONFIG_A 0x38
  140. #define ADP5585_PIN_CONFIG_B 0x39
  141. #define ADP5585_PIN_CONFIG_D 0x3A
  142. #define ADP5585_GENERAL_CFG 0x3B
  143. #define ADP5585_INT_EN 0x3C
  144. /* ID Register */
  145. #define ADP5589_5_DEVICE_ID_MASK 0xF
  146. #define ADP5589_5_MAN_ID_MASK 0xF
  147. #define ADP5589_5_MAN_ID_SHIFT 4
  148. #define ADP5589_5_MAN_ID 0x02
  149. /* GENERAL_CFG Register */
  150. #define OSC_EN (1 << 7)
  151. #define CORE_CLK(x) (((x) & 0x3) << 5)
  152. #define LCK_TRK_LOGIC (1 << 4) /* ADP5589 only */
  153. #define LCK_TRK_GPI (1 << 3) /* ADP5589 only */
  154. #define INT_CFG (1 << 1)
  155. #define RST_CFG (1 << 0)
  156. /* INT_EN Register */
  157. #define LOGIC2_IEN (1 << 5) /* ADP5589 only */
  158. #define LOGIC1_IEN (1 << 4)
  159. #define LOCK_IEN (1 << 3) /* ADP5589 only */
  160. #define OVRFLOW_IEN (1 << 2)
  161. #define GPI_IEN (1 << 1)
  162. #define EVENT_IEN (1 << 0)
  163. /* Interrupt Status Register */
  164. #define LOGIC2_INT (1 << 5) /* ADP5589 only */
  165. #define LOGIC1_INT (1 << 4)
  166. #define LOCK_INT (1 << 3) /* ADP5589 only */
  167. #define OVRFLOW_INT (1 << 2)
  168. #define GPI_INT (1 << 1)
  169. #define EVENT_INT (1 << 0)
  170. /* STATUS Register */
  171. #define LOGIC2_STAT (1 << 7) /* ADP5589 only */
  172. #define LOGIC1_STAT (1 << 6)
  173. #define LOCK_STAT (1 << 5) /* ADP5589 only */
  174. #define KEC 0xF
  175. /* PIN_CONFIG_D Register */
  176. #define C4_EXTEND_CFG (1 << 6) /* RESET2 */
  177. #define R4_EXTEND_CFG (1 << 5) /* RESET1 */
  178. /* LOCK_CFG */
  179. #define LOCK_EN (1 << 0)
  180. #define PTIME_MASK 0x3
  181. #define LTIME_MASK 0x3 /* ADP5589 only */
  182. /* Key Event Register xy */
  183. #define KEY_EV_PRESSED (1 << 7)
  184. #define KEY_EV_MASK (0x7F)
  185. #define KEYP_MAX_EVENT 16
  186. #define ADP5589_MAXGPIO 19
  187. #define ADP5585_MAXGPIO 11 /* 10 on the ADP5585-01, 11 on ADP5585-02 */
  188. enum {
  189. ADP5589,
  190. ADP5585_01,
  191. ADP5585_02
  192. };
  193. struct adp_constants {
  194. u8 maxgpio;
  195. u8 keymapsize;
  196. u8 gpi_pin_row_base;
  197. u8 gpi_pin_row_end;
  198. u8 gpi_pin_col_base;
  199. u8 gpi_pin_base;
  200. u8 gpi_pin_end;
  201. u8 gpimapsize_max;
  202. u8 max_row_num;
  203. u8 max_col_num;
  204. u8 row_mask;
  205. u8 col_mask;
  206. u8 col_shift;
  207. u8 c4_extend_cfg;
  208. u8 (*bank) (u8 offset);
  209. u8 (*bit) (u8 offset);
  210. u8 (*reg) (u8 reg);
  211. };
  212. struct adp5589_kpad {
  213. struct i2c_client *client;
  214. struct input_dev *input;
  215. const struct adp_constants *var;
  216. unsigned short keycode[ADP5589_KEYMAPSIZE];
  217. const struct adp5589_gpi_map *gpimap;
  218. unsigned short gpimapsize;
  219. unsigned extend_cfg;
  220. bool is_adp5585;
  221. bool adp5585_support_row5;
  222. #ifdef CONFIG_GPIOLIB
  223. unsigned char gpiomap[ADP5589_MAXGPIO];
  224. bool export_gpio;
  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 = container_of(chip, struct adp5589_kpad, gc);
  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 = container_of(chip, struct adp5589_kpad, gc);
  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 = container_of(chip, struct adp5589_kpad, gc);
  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 = container_of(chip, struct adp5589_kpad, gc);
  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 __devinit 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 & (1 << 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->adp5585_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 __devinit adp5589_gpio_add(struct adp5589_kpad *kpad)
  436. {
  437. struct device *dev = &kpad->client->dev;
  438. const struct adp5589_kpad_platform_data *pdata = dev->platform_data;
  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.ngpio = adp5589_build_gpiomap(kpad, pdata);
  444. if (kpad->gc.ngpio == 0) {
  445. dev_info(dev, "No unused gpios left to export\n");
  446. return 0;
  447. }
  448. kpad->export_gpio = true;
  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 = gpiochip_add(&kpad->gc);
  459. if (error) {
  460. dev_err(dev, "gpiochip_add failed, err: %d\n", error);
  461. return error;
  462. }
  463. for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
  464. kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
  465. ADP5589_GPO_DATA_OUT_A) + i);
  466. kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
  467. ADP5589_GPIO_DIRECTION_A) + i);
  468. }
  469. if (gpio_data->setup) {
  470. error = gpio_data->setup(kpad->client,
  471. kpad->gc.base, kpad->gc.ngpio,
  472. gpio_data->context);
  473. if (error)
  474. dev_warn(dev, "setup failed, %d\n", error);
  475. }
  476. return 0;
  477. }
  478. static void __devexit adp5589_gpio_remove(struct adp5589_kpad *kpad)
  479. {
  480. struct device *dev = &kpad->client->dev;
  481. const struct adp5589_kpad_platform_data *pdata = dev->platform_data;
  482. const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
  483. int error;
  484. if (!kpad->export_gpio)
  485. return;
  486. if (gpio_data->teardown) {
  487. error = gpio_data->teardown(kpad->client,
  488. kpad->gc.base, kpad->gc.ngpio,
  489. gpio_data->context);
  490. if (error)
  491. dev_warn(dev, "teardown failed %d\n", error);
  492. }
  493. error = gpiochip_remove(&kpad->gc);
  494. if (error)
  495. dev_warn(dev, "gpiochip_remove failed %d\n", error);
  496. }
  497. #else
  498. static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
  499. {
  500. return 0;
  501. }
  502. static inline void adp5589_gpio_remove(struct adp5589_kpad *kpad)
  503. {
  504. }
  505. #endif
  506. static void adp5589_report_switches(struct adp5589_kpad *kpad,
  507. int key, int key_val)
  508. {
  509. int i;
  510. for (i = 0; i < kpad->gpimapsize; i++) {
  511. if (key_val == kpad->gpimap[i].pin) {
  512. input_report_switch(kpad->input,
  513. kpad->gpimap[i].sw_evt,
  514. key & KEY_EV_PRESSED);
  515. break;
  516. }
  517. }
  518. }
  519. static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
  520. {
  521. int i;
  522. for (i = 0; i < ev_cnt; i++) {
  523. int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
  524. int key_val = key & KEY_EV_MASK;
  525. if (key_val >= kpad->var->gpi_pin_base &&
  526. key_val <= kpad->var->gpi_pin_end) {
  527. adp5589_report_switches(kpad, key, key_val);
  528. } else {
  529. input_report_key(kpad->input,
  530. kpad->keycode[key_val - 1],
  531. key & KEY_EV_PRESSED);
  532. }
  533. }
  534. }
  535. static irqreturn_t adp5589_irq(int irq, void *handle)
  536. {
  537. struct adp5589_kpad *kpad = handle;
  538. struct i2c_client *client = kpad->client;
  539. int status, ev_cnt;
  540. status = adp5589_read(client, ADP5589_5_INT_STATUS);
  541. if (status & OVRFLOW_INT) /* Unlikely and should never happen */
  542. dev_err(&client->dev, "Event Overflow Error\n");
  543. if (status & EVENT_INT) {
  544. ev_cnt = adp5589_read(client, ADP5589_5_STATUS) & KEC;
  545. if (ev_cnt) {
  546. adp5589_report_events(kpad, ev_cnt);
  547. input_sync(kpad->input);
  548. }
  549. }
  550. adp5589_write(client, ADP5589_5_INT_STATUS, status); /* Status is W1C */
  551. return IRQ_HANDLED;
  552. }
  553. static int __devinit adp5589_get_evcode(struct adp5589_kpad *kpad,
  554. unsigned short key)
  555. {
  556. int i;
  557. for (i = 0; i < kpad->var->keymapsize; i++)
  558. if (key == kpad->keycode[i])
  559. return (i + 1) | KEY_EV_PRESSED;
  560. dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
  561. return -EINVAL;
  562. }
  563. static int __devinit adp5589_setup(struct adp5589_kpad *kpad)
  564. {
  565. struct i2c_client *client = kpad->client;
  566. const struct adp5589_kpad_platform_data *pdata =
  567. client->dev.platform_data;
  568. u8 (*reg) (u8) = kpad->var->reg;
  569. unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
  570. unsigned char pull_mask = 0;
  571. int i, ret;
  572. ret = adp5589_write(client, reg(ADP5589_PIN_CONFIG_A),
  573. pdata->keypad_en_mask & kpad->var->row_mask);
  574. ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_B),
  575. (pdata->keypad_en_mask >> kpad->var->col_shift) &
  576. kpad->var->col_mask);
  577. if (!kpad->is_adp5585)
  578. ret |= adp5589_write(client, ADP5589_PIN_CONFIG_C,
  579. (pdata->keypad_en_mask >> 16) & 0xFF);
  580. if (!kpad->is_adp5585 && pdata->en_keylock) {
  581. ret |= adp5589_write(client, ADP5589_UNLOCK1,
  582. pdata->unlock_key1);
  583. ret |= adp5589_write(client, ADP5589_UNLOCK2,
  584. pdata->unlock_key2);
  585. ret |= adp5589_write(client, ADP5589_UNLOCK_TIMERS,
  586. pdata->unlock_timer & LTIME_MASK);
  587. ret |= adp5589_write(client, ADP5589_LOCK_CFG, LOCK_EN);
  588. }
  589. for (i = 0; i < KEYP_MAX_EVENT; i++)
  590. ret |= adp5589_read(client, ADP5589_5_FIFO_1 + i);
  591. for (i = 0; i < pdata->gpimapsize; i++) {
  592. unsigned short pin = pdata->gpimap[i].pin;
  593. if (pin <= kpad->var->gpi_pin_row_end) {
  594. evt_mode1 |= (1 << (pin - kpad->var->gpi_pin_row_base));
  595. } else {
  596. evt_mode2 |=
  597. ((1 << (pin - kpad->var->gpi_pin_col_base)) & 0xFF);
  598. if (!kpad->is_adp5585)
  599. evt_mode3 |= ((1 << (pin -
  600. kpad->var->gpi_pin_col_base)) >> 8);
  601. }
  602. }
  603. if (pdata->gpimapsize) {
  604. ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_A),
  605. evt_mode1);
  606. ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_B),
  607. evt_mode2);
  608. if (!kpad->is_adp5585)
  609. ret |= adp5589_write(client,
  610. reg(ADP5589_GPI_EVENT_EN_C),
  611. evt_mode3);
  612. }
  613. if (pdata->pull_dis_mask & pdata->pullup_en_100k &
  614. pdata->pullup_en_300k & pdata->pulldown_en_300k)
  615. dev_warn(&client->dev, "Conflicting pull resistor config\n");
  616. for (i = 0; i <= kpad->var->max_row_num; i++) {
  617. unsigned val = 0, bit = (1 << i);
  618. if (pdata->pullup_en_300k & bit)
  619. val = 0;
  620. else if (pdata->pulldown_en_300k & bit)
  621. val = 1;
  622. else if (pdata->pullup_en_100k & bit)
  623. val = 2;
  624. else if (pdata->pull_dis_mask & bit)
  625. val = 3;
  626. pull_mask |= val << (2 * (i & 0x3));
  627. if (i == 3 || i == kpad->var->max_row_num) {
  628. ret |= adp5589_write(client, reg(ADP5585_RPULL_CONFIG_A)
  629. + (i >> 2), pull_mask);
  630. pull_mask = 0;
  631. }
  632. }
  633. for (i = 0; i <= kpad->var->max_col_num; i++) {
  634. unsigned val = 0, bit = 1 << (i + kpad->var->col_shift);
  635. if (pdata->pullup_en_300k & bit)
  636. val = 0;
  637. else if (pdata->pulldown_en_300k & bit)
  638. val = 1;
  639. else if (pdata->pullup_en_100k & bit)
  640. val = 2;
  641. else if (pdata->pull_dis_mask & bit)
  642. val = 3;
  643. pull_mask |= val << (2 * (i & 0x3));
  644. if (i == 3 || i == kpad->var->max_col_num) {
  645. ret |= adp5589_write(client,
  646. reg(ADP5585_RPULL_CONFIG_C) +
  647. (i >> 2), pull_mask);
  648. pull_mask = 0;
  649. }
  650. }
  651. if (pdata->reset1_key_1 && pdata->reset1_key_2 && pdata->reset1_key_3) {
  652. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_A),
  653. adp5589_get_evcode(kpad,
  654. pdata->reset1_key_1));
  655. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_B),
  656. adp5589_get_evcode(kpad,
  657. pdata->reset1_key_2));
  658. ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_C),
  659. adp5589_get_evcode(kpad,
  660. pdata->reset1_key_3));
  661. kpad->extend_cfg |= R4_EXTEND_CFG;
  662. }
  663. if (pdata->reset2_key_1 && pdata->reset2_key_2) {
  664. ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_A),
  665. adp5589_get_evcode(kpad,
  666. pdata->reset2_key_1));
  667. ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_B),
  668. adp5589_get_evcode(kpad,
  669. pdata->reset2_key_2));
  670. kpad->extend_cfg |= C4_EXTEND_CFG;
  671. }
  672. if (kpad->extend_cfg) {
  673. ret |= adp5589_write(client, reg(ADP5589_RESET_CFG),
  674. pdata->reset_cfg);
  675. ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_D),
  676. kpad->extend_cfg);
  677. }
  678. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_A),
  679. pdata->debounce_dis_mask & kpad->var->row_mask);
  680. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_B),
  681. (pdata->debounce_dis_mask >> kpad->var->col_shift)
  682. & kpad->var->col_mask);
  683. if (!kpad->is_adp5585)
  684. ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_C),
  685. (pdata->debounce_dis_mask >> 16) & 0xFF);
  686. ret |= adp5589_write(client, reg(ADP5589_POLL_PTIME_CFG),
  687. pdata->scan_cycle_time & PTIME_MASK);
  688. ret |= adp5589_write(client, ADP5589_5_INT_STATUS,
  689. (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
  690. LOGIC1_INT | OVRFLOW_INT |
  691. (kpad->is_adp5585 ? 0 : LOCK_INT) |
  692. GPI_INT | EVENT_INT); /* Status is W1C */
  693. ret |= adp5589_write(client, reg(ADP5589_GENERAL_CFG),
  694. INT_CFG | OSC_EN | CORE_CLK(3));
  695. ret |= adp5589_write(client, reg(ADP5589_INT_EN),
  696. OVRFLOW_IEN | GPI_IEN | EVENT_IEN);
  697. if (ret < 0) {
  698. dev_err(&client->dev, "Write Error\n");
  699. return ret;
  700. }
  701. return 0;
  702. }
  703. static void __devinit adp5589_report_switch_state(struct adp5589_kpad *kpad)
  704. {
  705. int gpi_stat_tmp, pin_loc;
  706. int i;
  707. int gpi_stat1 = adp5589_read(kpad->client,
  708. kpad->var->reg(ADP5589_GPI_STATUS_A));
  709. int gpi_stat2 = adp5589_read(kpad->client,
  710. kpad->var->reg(ADP5589_GPI_STATUS_B));
  711. int gpi_stat3 = !kpad->is_adp5585 ?
  712. adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
  713. for (i = 0; i < kpad->gpimapsize; i++) {
  714. unsigned short pin = kpad->gpimap[i].pin;
  715. if (pin <= kpad->var->gpi_pin_row_end) {
  716. gpi_stat_tmp = gpi_stat1;
  717. pin_loc = pin - kpad->var->gpi_pin_row_base;
  718. } else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
  719. gpi_stat_tmp = gpi_stat2;
  720. pin_loc = pin - kpad->var->gpi_pin_col_base;
  721. } else {
  722. gpi_stat_tmp = gpi_stat3;
  723. pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
  724. }
  725. if (gpi_stat_tmp < 0) {
  726. dev_err(&kpad->client->dev,
  727. "Can't read GPIO_DAT_STAT switch %d, default to OFF\n",
  728. pin);
  729. gpi_stat_tmp = 0;
  730. }
  731. input_report_switch(kpad->input,
  732. kpad->gpimap[i].sw_evt,
  733. !(gpi_stat_tmp & (1 << pin_loc)));
  734. }
  735. input_sync(kpad->input);
  736. }
  737. static int __devinit adp5589_probe(struct i2c_client *client,
  738. const struct i2c_device_id *id)
  739. {
  740. struct adp5589_kpad *kpad;
  741. const struct adp5589_kpad_platform_data *pdata =
  742. client->dev.platform_data;
  743. struct input_dev *input;
  744. unsigned int revid;
  745. int ret, i;
  746. int error;
  747. if (!i2c_check_functionality(client->adapter,
  748. I2C_FUNC_SMBUS_BYTE_DATA)) {
  749. dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
  750. return -EIO;
  751. }
  752. if (!pdata) {
  753. dev_err(&client->dev, "no platform data?\n");
  754. return -EINVAL;
  755. }
  756. kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
  757. if (!kpad)
  758. return -ENOMEM;
  759. switch (id->driver_data) {
  760. case ADP5585_02:
  761. kpad->adp5585_support_row5 = true;
  762. case ADP5585_01:
  763. kpad->is_adp5585 = true;
  764. kpad->var = &const_adp5585;
  765. break;
  766. case ADP5589:
  767. kpad->var = &const_adp5589;
  768. break;
  769. }
  770. if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
  771. (pdata->keypad_en_mask >> kpad->var->col_shift)) ||
  772. !pdata->keymap) {
  773. dev_err(&client->dev, "no rows, cols or keymap from pdata\n");
  774. error = -EINVAL;
  775. goto err_free_mem;
  776. }
  777. if (pdata->keymapsize != kpad->var->keymapsize) {
  778. dev_err(&client->dev, "invalid keymapsize\n");
  779. error = -EINVAL;
  780. goto err_free_mem;
  781. }
  782. if (!pdata->gpimap && pdata->gpimapsize) {
  783. dev_err(&client->dev, "invalid gpimap from pdata\n");
  784. error = -EINVAL;
  785. goto err_free_mem;
  786. }
  787. if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
  788. dev_err(&client->dev, "invalid gpimapsize\n");
  789. error = -EINVAL;
  790. goto err_free_mem;
  791. }
  792. for (i = 0; i < pdata->gpimapsize; i++) {
  793. unsigned short pin = pdata->gpimap[i].pin;
  794. if (pin < kpad->var->gpi_pin_base ||
  795. pin > kpad->var->gpi_pin_end) {
  796. dev_err(&client->dev, "invalid gpi pin data\n");
  797. error = -EINVAL;
  798. goto err_free_mem;
  799. }
  800. if ((1 << (pin - kpad->var->gpi_pin_row_base)) &
  801. pdata->keypad_en_mask) {
  802. dev_err(&client->dev, "invalid gpi row/col data\n");
  803. error = -EINVAL;
  804. goto err_free_mem;
  805. }
  806. }
  807. if (!client->irq) {
  808. dev_err(&client->dev, "no IRQ?\n");
  809. error = -EINVAL;
  810. goto err_free_mem;
  811. }
  812. input = input_allocate_device();
  813. if (!input) {
  814. error = -ENOMEM;
  815. goto err_free_mem;
  816. }
  817. kpad->client = client;
  818. kpad->input = input;
  819. ret = adp5589_read(client, ADP5589_5_ID);
  820. if (ret < 0) {
  821. error = ret;
  822. goto err_free_input;
  823. }
  824. revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
  825. input->name = client->name;
  826. input->phys = "adp5589-keys/input0";
  827. input->dev.parent = &client->dev;
  828. input_set_drvdata(input, kpad);
  829. input->id.bustype = BUS_I2C;
  830. input->id.vendor = 0x0001;
  831. input->id.product = 0x0001;
  832. input->id.version = revid;
  833. input->keycodesize = sizeof(kpad->keycode[0]);
  834. input->keycodemax = pdata->keymapsize;
  835. input->keycode = kpad->keycode;
  836. memcpy(kpad->keycode, pdata->keymap,
  837. pdata->keymapsize * input->keycodesize);
  838. kpad->gpimap = pdata->gpimap;
  839. kpad->gpimapsize = pdata->gpimapsize;
  840. /* setup input device */
  841. __set_bit(EV_KEY, input->evbit);
  842. if (pdata->repeat)
  843. __set_bit(EV_REP, input->evbit);
  844. for (i = 0; i < input->keycodemax; i++)
  845. __set_bit(kpad->keycode[i] & KEY_MAX, input->keybit);
  846. __clear_bit(KEY_RESERVED, input->keybit);
  847. if (kpad->gpimapsize)
  848. __set_bit(EV_SW, input->evbit);
  849. for (i = 0; i < kpad->gpimapsize; i++)
  850. __set_bit(kpad->gpimap[i].sw_evt, input->swbit);
  851. error = input_register_device(input);
  852. if (error) {
  853. dev_err(&client->dev, "unable to register input device\n");
  854. goto err_free_input;
  855. }
  856. error = request_threaded_irq(client->irq, NULL, adp5589_irq,
  857. IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
  858. client->dev.driver->name, kpad);
  859. if (error) {
  860. dev_err(&client->dev, "irq %d busy?\n", client->irq);
  861. goto err_unreg_dev;
  862. }
  863. error = adp5589_setup(kpad);
  864. if (error)
  865. goto err_free_irq;
  866. if (kpad->gpimapsize)
  867. adp5589_report_switch_state(kpad);
  868. error = adp5589_gpio_add(kpad);
  869. if (error)
  870. goto err_free_irq;
  871. device_init_wakeup(&client->dev, 1);
  872. i2c_set_clientdata(client, kpad);
  873. dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
  874. return 0;
  875. err_free_irq:
  876. free_irq(client->irq, kpad);
  877. err_unreg_dev:
  878. input_unregister_device(input);
  879. input = NULL;
  880. err_free_input:
  881. input_free_device(input);
  882. err_free_mem:
  883. kfree(kpad);
  884. return error;
  885. }
  886. static int __devexit adp5589_remove(struct i2c_client *client)
  887. {
  888. struct adp5589_kpad *kpad = i2c_get_clientdata(client);
  889. adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
  890. free_irq(client->irq, kpad);
  891. input_unregister_device(kpad->input);
  892. adp5589_gpio_remove(kpad);
  893. kfree(kpad);
  894. return 0;
  895. }
  896. #ifdef CONFIG_PM_SLEEP
  897. static int adp5589_suspend(struct device *dev)
  898. {
  899. struct adp5589_kpad *kpad = dev_get_drvdata(dev);
  900. struct i2c_client *client = kpad->client;
  901. disable_irq(client->irq);
  902. if (device_may_wakeup(&client->dev))
  903. enable_irq_wake(client->irq);
  904. return 0;
  905. }
  906. static int adp5589_resume(struct device *dev)
  907. {
  908. struct adp5589_kpad *kpad = dev_get_drvdata(dev);
  909. struct i2c_client *client = kpad->client;
  910. if (device_may_wakeup(&client->dev))
  911. disable_irq_wake(client->irq);
  912. enable_irq(client->irq);
  913. return 0;
  914. }
  915. #endif
  916. static SIMPLE_DEV_PM_OPS(adp5589_dev_pm_ops, adp5589_suspend, adp5589_resume);
  917. static const struct i2c_device_id adp5589_id[] = {
  918. {"adp5589-keys", ADP5589},
  919. {"adp5585-keys", ADP5585_01},
  920. {"adp5585-02-keys", ADP5585_02}, /* Adds ROW5 to ADP5585 */
  921. {}
  922. };
  923. MODULE_DEVICE_TABLE(i2c, adp5589_id);
  924. static struct i2c_driver adp5589_driver = {
  925. .driver = {
  926. .name = KBUILD_MODNAME,
  927. .owner = THIS_MODULE,
  928. .pm = &adp5589_dev_pm_ops,
  929. },
  930. .probe = adp5589_probe,
  931. .remove = __devexit_p(adp5589_remove),
  932. .id_table = adp5589_id,
  933. };
  934. module_i2c_driver(adp5589_driver);
  935. MODULE_LICENSE("GPL");
  936. MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
  937. MODULE_DESCRIPTION("ADP5589/ADP5585 Keypad driver");