adp5589.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /*
  2. * Analog Devices ADP5589 I/O Expander and QWERTY Keypad Controller
  3. *
  4. * Copyright 2010-2011 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2.
  7. */
  8. #ifndef _ADP5589_H
  9. #define _ADP5589_H
  10. #define ADP5589_ID 0x00
  11. #define ADP5589_INT_STATUS 0x01
  12. #define ADP5589_STATUS 0x02
  13. #define ADP5589_FIFO_1 0x03
  14. #define ADP5589_FIFO_2 0x04
  15. #define ADP5589_FIFO_3 0x05
  16. #define ADP5589_FIFO_4 0x06
  17. #define ADP5589_FIFO_5 0x07
  18. #define ADP5589_FIFO_6 0x08
  19. #define ADP5589_FIFO_7 0x09
  20. #define ADP5589_FIFO_8 0x0A
  21. #define ADP5589_FIFO_9 0x0B
  22. #define ADP5589_FIFO_10 0x0C
  23. #define ADP5589_FIFO_11 0x0D
  24. #define ADP5589_FIFO_12 0x0E
  25. #define ADP5589_FIFO_13 0x0F
  26. #define ADP5589_FIFO_14 0x10
  27. #define ADP5589_FIFO_15 0x11
  28. #define ADP5589_FIFO_16 0x12
  29. #define ADP5589_GPI_INT_STAT_A 0x13
  30. #define ADP5589_GPI_INT_STAT_B 0x14
  31. #define ADP5589_GPI_INT_STAT_C 0x15
  32. #define ADP5589_GPI_STATUS_A 0x16
  33. #define ADP5589_GPI_STATUS_B 0x17
  34. #define ADP5589_GPI_STATUS_C 0x18
  35. #define ADP5589_RPULL_CONFIG_A 0x19
  36. #define ADP5589_RPULL_CONFIG_B 0x1A
  37. #define ADP5589_RPULL_CONFIG_C 0x1B
  38. #define ADP5589_RPULL_CONFIG_D 0x1C
  39. #define ADP5589_RPULL_CONFIG_E 0x1D
  40. #define ADP5589_GPI_INT_LEVEL_A 0x1E
  41. #define ADP5589_GPI_INT_LEVEL_B 0x1F
  42. #define ADP5589_GPI_INT_LEVEL_C 0x20
  43. #define ADP5589_GPI_EVENT_EN_A 0x21
  44. #define ADP5589_GPI_EVENT_EN_B 0x22
  45. #define ADP5589_GPI_EVENT_EN_C 0x23
  46. #define ADP5589_GPI_INTERRUPT_EN_A 0x24
  47. #define ADP5589_GPI_INTERRUPT_EN_B 0x25
  48. #define ADP5589_GPI_INTERRUPT_EN_C 0x26
  49. #define ADP5589_DEBOUNCE_DIS_A 0x27
  50. #define ADP5589_DEBOUNCE_DIS_B 0x28
  51. #define ADP5589_DEBOUNCE_DIS_C 0x29
  52. #define ADP5589_GPO_DATA_OUT_A 0x2A
  53. #define ADP5589_GPO_DATA_OUT_B 0x2B
  54. #define ADP5589_GPO_DATA_OUT_C 0x2C
  55. #define ADP5589_GPO_OUT_MODE_A 0x2D
  56. #define ADP5589_GPO_OUT_MODE_B 0x2E
  57. #define ADP5589_GPO_OUT_MODE_C 0x2F
  58. #define ADP5589_GPIO_DIRECTION_A 0x30
  59. #define ADP5589_GPIO_DIRECTION_B 0x31
  60. #define ADP5589_GPIO_DIRECTION_C 0x32
  61. #define ADP5589_UNLOCK1 0x33
  62. #define ADP5589_UNLOCK2 0x34
  63. #define ADP5589_EXT_LOCK_EVENT 0x35
  64. #define ADP5589_UNLOCK_TIMERS 0x36
  65. #define ADP5589_LOCK_CFG 0x37
  66. #define ADP5589_RESET1_EVENT_A 0x38
  67. #define ADP5589_RESET1_EVENT_B 0x39
  68. #define ADP5589_RESET1_EVENT_C 0x3A
  69. #define ADP5589_RESET2_EVENT_A 0x3B
  70. #define ADP5589_RESET2_EVENT_B 0x3C
  71. #define ADP5589_RESET_CFG 0x3D
  72. #define ADP5589_PWM_OFFT_LOW 0x3E
  73. #define ADP5589_PWM_OFFT_HIGH 0x3F
  74. #define ADP5589_PWM_ONT_LOW 0x40
  75. #define ADP5589_PWM_ONT_HIGH 0x41
  76. #define ADP5589_PWM_CFG 0x42
  77. #define ADP5589_CLOCK_DIV_CFG 0x43
  78. #define ADP5589_LOGIC_1_CFG 0x44
  79. #define ADP5589_LOGIC_2_CFG 0x45
  80. #define ADP5589_LOGIC_FF_CFG 0x46
  81. #define ADP5589_LOGIC_INT_EVENT_EN 0x47
  82. #define ADP5589_POLL_PTIME_CFG 0x48
  83. #define ADP5589_PIN_CONFIG_A 0x49
  84. #define ADP5589_PIN_CONFIG_B 0x4A
  85. #define ADP5589_PIN_CONFIG_C 0x4B
  86. #define ADP5589_PIN_CONFIG_D 0x4C
  87. #define ADP5589_GENERAL_CFG 0x4D
  88. #define ADP5589_INT_EN 0x4E
  89. #define ADP5589_DEVICE_ID_MASK 0xF
  90. /* Put one of these structures in i2c_board_info platform_data */
  91. #define ADP5589_KEYMAPSIZE 88
  92. #define ADP5589_GPI_PIN_ROW0 97
  93. #define ADP5589_GPI_PIN_ROW1 98
  94. #define ADP5589_GPI_PIN_ROW2 99
  95. #define ADP5589_GPI_PIN_ROW3 100
  96. #define ADP5589_GPI_PIN_ROW4 101
  97. #define ADP5589_GPI_PIN_ROW5 102
  98. #define ADP5589_GPI_PIN_ROW6 103
  99. #define ADP5589_GPI_PIN_ROW7 104
  100. #define ADP5589_GPI_PIN_COL0 105
  101. #define ADP5589_GPI_PIN_COL1 106
  102. #define ADP5589_GPI_PIN_COL2 107
  103. #define ADP5589_GPI_PIN_COL3 108
  104. #define ADP5589_GPI_PIN_COL4 109
  105. #define ADP5589_GPI_PIN_COL5 110
  106. #define ADP5589_GPI_PIN_COL6 111
  107. #define ADP5589_GPI_PIN_COL7 112
  108. #define ADP5589_GPI_PIN_COL8 113
  109. #define ADP5589_GPI_PIN_COL9 114
  110. #define ADP5589_GPI_PIN_COL10 115
  111. #define GPI_LOGIC1 116
  112. #define GPI_LOGIC2 117
  113. #define ADP5589_GPI_PIN_ROW_BASE ADP5589_GPI_PIN_ROW0
  114. #define ADP5589_GPI_PIN_ROW_END ADP5589_GPI_PIN_ROW7
  115. #define ADP5589_GPI_PIN_COL_BASE ADP5589_GPI_PIN_COL0
  116. #define ADP5589_GPI_PIN_COL_END ADP5589_GPI_PIN_COL10
  117. #define ADP5589_GPI_PIN_BASE ADP5589_GPI_PIN_ROW_BASE
  118. #define ADP5589_GPI_PIN_END ADP5589_GPI_PIN_COL_END
  119. #define ADP5589_GPIMAPSIZE_MAX (ADP5589_GPI_PIN_END - ADP5589_GPI_PIN_BASE + 1)
  120. struct adp5589_gpi_map {
  121. unsigned short pin;
  122. unsigned short sw_evt;
  123. };
  124. /* scan_cycle_time */
  125. #define ADP5589_SCAN_CYCLE_10ms 0
  126. #define ADP5589_SCAN_CYCLE_20ms 1
  127. #define ADP5589_SCAN_CYCLE_30ms 2
  128. #define ADP5589_SCAN_CYCLE_40ms 3
  129. /* RESET_CFG */
  130. #define RESET_PULSE_WIDTH_500us 0
  131. #define RESET_PULSE_WIDTH_1ms 1
  132. #define RESET_PULSE_WIDTH_2ms 2
  133. #define RESET_PULSE_WIDTH_10ms 3
  134. #define RESET_TRIG_TIME_0ms (0 << 2)
  135. #define RESET_TRIG_TIME_1000ms (1 << 2)
  136. #define RESET_TRIG_TIME_1500ms (2 << 2)
  137. #define RESET_TRIG_TIME_2000ms (3 << 2)
  138. #define RESET_TRIG_TIME_2500ms (4 << 2)
  139. #define RESET_TRIG_TIME_3000ms (5 << 2)
  140. #define RESET_TRIG_TIME_3500ms (6 << 2)
  141. #define RESET_TRIG_TIME_4000ms (7 << 2)
  142. #define RESET_PASSTHRU_EN (1 << 5)
  143. #define RESET1_POL_HIGH (1 << 6)
  144. #define RESET1_POL_LOW (0 << 6)
  145. #define RESET2_POL_HIGH (1 << 7)
  146. #define RESET2_POL_LOW (0 << 7)
  147. /* Mask Bits:
  148. * C C C C C C C C C C C | R R R R R R R R
  149. * 1 9 8 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
  150. * 0
  151. * ---------------- BIT ------------------
  152. * 1 1 1 1 1 1 1 1 1 0 0 | 0 0 0 0 0 0 0 0
  153. * 8 7 6 5 4 3 2 1 0 9 8 | 7 6 5 4 3 2 1 0
  154. */
  155. #define ADP_ROW(x) (1 << (x))
  156. #define ADP_COL(x) (1 << (x + 8))
  157. struct adp5589_kpad_platform_data {
  158. unsigned keypad_en_mask; /* Keypad (Rows/Columns) enable mask */
  159. const unsigned short *keymap; /* Pointer to keymap */
  160. unsigned short keymapsize; /* Keymap size */
  161. bool repeat; /* Enable key repeat */
  162. bool en_keylock; /* Enable key lock feature */
  163. unsigned char unlock_key1; /* Unlock Key 1 */
  164. unsigned char unlock_key2; /* Unlock Key 2 */
  165. unsigned char unlock_timer; /* Time in seconds [0..7] between the two unlock keys 0=disable */
  166. unsigned char scan_cycle_time; /* Time between consecutive scan cycles */
  167. unsigned char reset_cfg; /* Reset config */
  168. unsigned short reset1_key_1; /* Reset Key 1 */
  169. unsigned short reset1_key_2; /* Reset Key 2 */
  170. unsigned short reset1_key_3; /* Reset Key 3 */
  171. unsigned short reset2_key_1; /* Reset Key 1 */
  172. unsigned short reset2_key_2; /* Reset Key 2 */
  173. unsigned debounce_dis_mask; /* Disable debounce mask */
  174. unsigned pull_dis_mask; /* Disable all pull resistors mask */
  175. unsigned pullup_en_100k; /* Pull-Up 100k Enable Mask */
  176. unsigned pullup_en_300k; /* Pull-Up 300k Enable Mask */
  177. unsigned pulldown_en_300k; /* Pull-Down 300k Enable Mask */
  178. const struct adp5589_gpi_map *gpimap;
  179. unsigned short gpimapsize;
  180. const struct adp5589_gpio_platform_data *gpio_data;
  181. };
  182. struct i2c_client; /* forward declaration */
  183. struct adp5589_gpio_platform_data {
  184. int gpio_start; /* GPIO Chip base # */
  185. int (*setup)(struct i2c_client *client,
  186. int gpio, unsigned ngpio,
  187. void *context);
  188. int (*teardown)(struct i2c_client *client,
  189. int gpio, unsigned ngpio,
  190. void *context);
  191. void *context;
  192. };
  193. #endif