axp20x.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. /*
  2. * Functions and registers to access AXP20X power management chip.
  3. *
  4. * Copyright (C) 2013, Carlo Caione <carlo@caione.org>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #ifndef __LINUX_MFD_AXP20X_H
  11. #define __LINUX_MFD_AXP20X_H
  12. enum {
  13. AXP202_ID = 0,
  14. AXP209_ID,
  15. AXP288_ID,
  16. NR_AXP20X_VARIANTS,
  17. };
  18. #define AXP20X_DATACACHE(m) (0x04 + (m))
  19. /* Power supply */
  20. #define AXP20X_PWR_INPUT_STATUS 0x00
  21. #define AXP20X_PWR_OP_MODE 0x01
  22. #define AXP20X_USB_OTG_STATUS 0x02
  23. #define AXP20X_PWR_OUT_CTRL 0x12
  24. #define AXP20X_DCDC2_V_OUT 0x23
  25. #define AXP20X_DCDC2_LDO3_V_SCAL 0x25
  26. #define AXP20X_DCDC3_V_OUT 0x27
  27. #define AXP20X_LDO24_V_OUT 0x28
  28. #define AXP20X_LDO3_V_OUT 0x29
  29. #define AXP20X_VBUS_IPSOUT_MGMT 0x30
  30. #define AXP20X_V_OFF 0x31
  31. #define AXP20X_OFF_CTRL 0x32
  32. #define AXP20X_CHRG_CTRL1 0x33
  33. #define AXP20X_CHRG_CTRL2 0x34
  34. #define AXP20X_CHRG_BAK_CTRL 0x35
  35. #define AXP20X_PEK_KEY 0x36
  36. #define AXP20X_DCDC_FREQ 0x37
  37. #define AXP20X_V_LTF_CHRG 0x38
  38. #define AXP20X_V_HTF_CHRG 0x39
  39. #define AXP20X_APS_WARN_L1 0x3a
  40. #define AXP20X_APS_WARN_L2 0x3b
  41. #define AXP20X_V_LTF_DISCHRG 0x3c
  42. #define AXP20X_V_HTF_DISCHRG 0x3d
  43. /* Interrupt */
  44. #define AXP20X_IRQ1_EN 0x40
  45. #define AXP20X_IRQ2_EN 0x41
  46. #define AXP20X_IRQ3_EN 0x42
  47. #define AXP20X_IRQ4_EN 0x43
  48. #define AXP20X_IRQ5_EN 0x44
  49. #define AXP20X_IRQ6_EN 0x45
  50. #define AXP20X_IRQ1_STATE 0x48
  51. #define AXP20X_IRQ2_STATE 0x49
  52. #define AXP20X_IRQ3_STATE 0x4a
  53. #define AXP20X_IRQ4_STATE 0x4b
  54. #define AXP20X_IRQ5_STATE 0x4c
  55. #define AXP20X_IRQ6_STATE 0x4d
  56. /* ADC */
  57. #define AXP20X_ACIN_V_ADC_H 0x56
  58. #define AXP20X_ACIN_V_ADC_L 0x57
  59. #define AXP20X_ACIN_I_ADC_H 0x58
  60. #define AXP20X_ACIN_I_ADC_L 0x59
  61. #define AXP20X_VBUS_V_ADC_H 0x5a
  62. #define AXP20X_VBUS_V_ADC_L 0x5b
  63. #define AXP20X_VBUS_I_ADC_H 0x5c
  64. #define AXP20X_VBUS_I_ADC_L 0x5d
  65. #define AXP20X_TEMP_ADC_H 0x5e
  66. #define AXP20X_TEMP_ADC_L 0x5f
  67. #define AXP20X_TS_IN_H 0x62
  68. #define AXP20X_TS_IN_L 0x63
  69. #define AXP20X_GPIO0_V_ADC_H 0x64
  70. #define AXP20X_GPIO0_V_ADC_L 0x65
  71. #define AXP20X_GPIO1_V_ADC_H 0x66
  72. #define AXP20X_GPIO1_V_ADC_L 0x67
  73. #define AXP20X_PWR_BATT_H 0x70
  74. #define AXP20X_PWR_BATT_M 0x71
  75. #define AXP20X_PWR_BATT_L 0x72
  76. #define AXP20X_BATT_V_H 0x78
  77. #define AXP20X_BATT_V_L 0x79
  78. #define AXP20X_BATT_CHRG_I_H 0x7a
  79. #define AXP20X_BATT_CHRG_I_L 0x7b
  80. #define AXP20X_BATT_DISCHRG_I_H 0x7c
  81. #define AXP20X_BATT_DISCHRG_I_L 0x7d
  82. #define AXP20X_IPSOUT_V_HIGH_H 0x7e
  83. #define AXP20X_IPSOUT_V_HIGH_L 0x7f
  84. /* Power supply */
  85. #define AXP20X_DCDC_MODE 0x80
  86. #define AXP20X_ADC_EN1 0x82
  87. #define AXP20X_ADC_EN2 0x83
  88. #define AXP20X_ADC_RATE 0x84
  89. #define AXP20X_GPIO10_IN_RANGE 0x85
  90. #define AXP20X_GPIO1_ADC_IRQ_RIS 0x86
  91. #define AXP20X_GPIO1_ADC_IRQ_FAL 0x87
  92. #define AXP20X_TIMER_CTRL 0x8a
  93. #define AXP20X_VBUS_MON 0x8b
  94. #define AXP20X_OVER_TMP 0x8f
  95. /* GPIO */
  96. #define AXP20X_GPIO0_CTRL 0x90
  97. #define AXP20X_LDO5_V_OUT 0x91
  98. #define AXP20X_GPIO1_CTRL 0x92
  99. #define AXP20X_GPIO2_CTRL 0x93
  100. #define AXP20X_GPIO20_SS 0x94
  101. #define AXP20X_GPIO3_CTRL 0x95
  102. /* Battery */
  103. #define AXP20X_CHRG_CC_31_24 0xb0
  104. #define AXP20X_CHRG_CC_23_16 0xb1
  105. #define AXP20X_CHRG_CC_15_8 0xb2
  106. #define AXP20X_CHRG_CC_7_0 0xb3
  107. #define AXP20X_DISCHRG_CC_31_24 0xb4
  108. #define AXP20X_DISCHRG_CC_23_16 0xb5
  109. #define AXP20X_DISCHRG_CC_15_8 0xb6
  110. #define AXP20X_DISCHRG_CC_7_0 0xb7
  111. #define AXP20X_CC_CTRL 0xb8
  112. #define AXP20X_FG_RES 0xb9
  113. /* AXP288 specific registers */
  114. #define AXP288_PMIC_ADC_H 0x56
  115. #define AXP288_PMIC_ADC_L 0x57
  116. #define AXP288_ADC_TS_PIN_CTRL 0x84
  117. #define AXP288_PMIC_ADC_EN 0x84
  118. /* Fuel Gauge */
  119. #define AXP288_FG_RDC1_REG 0xba
  120. #define AXP288_FG_RDC0_REG 0xbb
  121. #define AXP288_FG_OCVH_REG 0xbc
  122. #define AXP288_FG_OCVL_REG 0xbd
  123. #define AXP288_FG_OCV_CURVE_REG 0xc0
  124. #define AXP288_FG_DES_CAP1_REG 0xe0
  125. #define AXP288_FG_DES_CAP0_REG 0xe1
  126. #define AXP288_FG_CC_MTR1_REG 0xe2
  127. #define AXP288_FG_CC_MTR0_REG 0xe3
  128. #define AXP288_FG_OCV_CAP_REG 0xe4
  129. #define AXP288_FG_CC_CAP_REG 0xe5
  130. #define AXP288_FG_LOW_CAP_REG 0xe6
  131. #define AXP288_FG_TUNE0 0xe8
  132. #define AXP288_FG_TUNE1 0xe9
  133. #define AXP288_FG_TUNE2 0xea
  134. #define AXP288_FG_TUNE3 0xeb
  135. #define AXP288_FG_TUNE4 0xec
  136. #define AXP288_FG_TUNE5 0xed
  137. /* Regulators IDs */
  138. enum {
  139. AXP20X_LDO1 = 0,
  140. AXP20X_LDO2,
  141. AXP20X_LDO3,
  142. AXP20X_LDO4,
  143. AXP20X_LDO5,
  144. AXP20X_DCDC2,
  145. AXP20X_DCDC3,
  146. AXP20X_REG_ID_MAX,
  147. };
  148. /* IRQs */
  149. enum {
  150. AXP20X_IRQ_ACIN_OVER_V = 1,
  151. AXP20X_IRQ_ACIN_PLUGIN,
  152. AXP20X_IRQ_ACIN_REMOVAL,
  153. AXP20X_IRQ_VBUS_OVER_V,
  154. AXP20X_IRQ_VBUS_PLUGIN,
  155. AXP20X_IRQ_VBUS_REMOVAL,
  156. AXP20X_IRQ_VBUS_V_LOW,
  157. AXP20X_IRQ_BATT_PLUGIN,
  158. AXP20X_IRQ_BATT_REMOVAL,
  159. AXP20X_IRQ_BATT_ENT_ACT_MODE,
  160. AXP20X_IRQ_BATT_EXIT_ACT_MODE,
  161. AXP20X_IRQ_CHARG,
  162. AXP20X_IRQ_CHARG_DONE,
  163. AXP20X_IRQ_BATT_TEMP_HIGH,
  164. AXP20X_IRQ_BATT_TEMP_LOW,
  165. AXP20X_IRQ_DIE_TEMP_HIGH,
  166. AXP20X_IRQ_CHARG_I_LOW,
  167. AXP20X_IRQ_DCDC1_V_LONG,
  168. AXP20X_IRQ_DCDC2_V_LONG,
  169. AXP20X_IRQ_DCDC3_V_LONG,
  170. AXP20X_IRQ_PEK_SHORT = 22,
  171. AXP20X_IRQ_PEK_LONG,
  172. AXP20X_IRQ_N_OE_PWR_ON,
  173. AXP20X_IRQ_N_OE_PWR_OFF,
  174. AXP20X_IRQ_VBUS_VALID,
  175. AXP20X_IRQ_VBUS_NOT_VALID,
  176. AXP20X_IRQ_VBUS_SESS_VALID,
  177. AXP20X_IRQ_VBUS_SESS_END,
  178. AXP20X_IRQ_LOW_PWR_LVL1,
  179. AXP20X_IRQ_LOW_PWR_LVL2,
  180. AXP20X_IRQ_TIMER,
  181. AXP20X_IRQ_PEK_RIS_EDGE,
  182. AXP20X_IRQ_PEK_FAL_EDGE,
  183. AXP20X_IRQ_GPIO3_INPUT,
  184. AXP20X_IRQ_GPIO2_INPUT,
  185. AXP20X_IRQ_GPIO1_INPUT,
  186. AXP20X_IRQ_GPIO0_INPUT,
  187. };
  188. enum axp288_irqs {
  189. AXP288_IRQ_VBUS_FALL = 2,
  190. AXP288_IRQ_VBUS_RISE,
  191. AXP288_IRQ_OV,
  192. AXP288_IRQ_FALLING_ALT,
  193. AXP288_IRQ_RISING_ALT,
  194. AXP288_IRQ_OV_ALT,
  195. AXP288_IRQ_DONE = 10,
  196. AXP288_IRQ_CHARGING,
  197. AXP288_IRQ_SAFE_QUIT,
  198. AXP288_IRQ_SAFE_ENTER,
  199. AXP288_IRQ_ABSENT,
  200. AXP288_IRQ_APPEND,
  201. AXP288_IRQ_QWBTU,
  202. AXP288_IRQ_WBTU,
  203. AXP288_IRQ_QWBTO,
  204. AXP288_IRQ_WBTO,
  205. AXP288_IRQ_QCBTU,
  206. AXP288_IRQ_CBTU,
  207. AXP288_IRQ_QCBTO,
  208. AXP288_IRQ_CBTO,
  209. AXP288_IRQ_WL2,
  210. AXP288_IRQ_WL1,
  211. AXP288_IRQ_GPADC,
  212. AXP288_IRQ_OT = 31,
  213. AXP288_IRQ_GPIO0,
  214. AXP288_IRQ_GPIO1,
  215. AXP288_IRQ_POKO,
  216. AXP288_IRQ_POKL,
  217. AXP288_IRQ_POKS,
  218. AXP288_IRQ_POKN,
  219. AXP288_IRQ_POKP,
  220. AXP288_IRQ_TIMER,
  221. AXP288_IRQ_MV_CHNG,
  222. AXP288_IRQ_BC_USB_CHNG,
  223. };
  224. #define AXP288_TS_ADC_H 0x58
  225. #define AXP288_TS_ADC_L 0x59
  226. #define AXP288_GP_ADC_H 0x5a
  227. #define AXP288_GP_ADC_L 0x5b
  228. struct axp20x_dev {
  229. struct device *dev;
  230. struct i2c_client *i2c_client;
  231. struct regmap *regmap;
  232. struct regmap_irq_chip_data *regmap_irqc;
  233. long variant;
  234. int nr_cells;
  235. struct mfd_cell *cells;
  236. const struct regmap_config *regmap_cfg;
  237. const struct regmap_irq_chip *regmap_irq_chip;
  238. };
  239. #define BATTID_LEN 64
  240. #define OCV_CURVE_SIZE 32
  241. #define MAX_THERM_CURVE_SIZE 25
  242. #define PD_DEF_MIN_TEMP 0
  243. #define PD_DEF_MAX_TEMP 55
  244. struct axp20x_fg_pdata {
  245. char battid[BATTID_LEN + 1];
  246. int design_cap;
  247. int min_volt;
  248. int max_volt;
  249. int max_temp;
  250. int min_temp;
  251. int cap1;
  252. int cap0;
  253. int rdc1;
  254. int rdc0;
  255. int ocv_curve[OCV_CURVE_SIZE];
  256. int tcsz;
  257. int thermistor_curve[MAX_THERM_CURVE_SIZE][2];
  258. };
  259. struct axp20x_chrg_pdata {
  260. int max_cc;
  261. int max_cv;
  262. int def_cc;
  263. int def_cv;
  264. };
  265. #endif /* __LINUX_MFD_AXP20X_H */