axp20x.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Functions and registers to access AXP20X power management chip.
  4. *
  5. * Copyright (C) 2013, Carlo Caione <[email protected]>
  6. */
  7. #ifndef __LINUX_MFD_AXP20X_H
  8. #define __LINUX_MFD_AXP20X_H
  9. #include <linux/regmap.h>
  10. enum axp20x_variants {
  11. AXP152_ID = 0,
  12. AXP202_ID,
  13. AXP209_ID,
  14. AXP221_ID,
  15. AXP223_ID,
  16. AXP288_ID,
  17. AXP803_ID,
  18. AXP806_ID,
  19. AXP809_ID,
  20. AXP813_ID,
  21. NR_AXP20X_VARIANTS,
  22. };
  23. #define AXP20X_DATACACHE(m) (0x04 + (m))
  24. /* Power supply */
  25. #define AXP152_PWR_OP_MODE 0x01
  26. #define AXP152_LDO3456_DC1234_CTRL 0x12
  27. #define AXP152_ALDO_OP_MODE 0x13
  28. #define AXP152_LDO0_CTRL 0x15
  29. #define AXP152_DCDC2_V_OUT 0x23
  30. #define AXP152_DCDC2_V_RAMP 0x25
  31. #define AXP152_DCDC1_V_OUT 0x26
  32. #define AXP152_DCDC3_V_OUT 0x27
  33. #define AXP152_ALDO12_V_OUT 0x28
  34. #define AXP152_DLDO1_V_OUT 0x29
  35. #define AXP152_DLDO2_V_OUT 0x2a
  36. #define AXP152_DCDC4_V_OUT 0x2b
  37. #define AXP152_V_OFF 0x31
  38. #define AXP152_OFF_CTRL 0x32
  39. #define AXP152_PEK_KEY 0x36
  40. #define AXP152_DCDC_FREQ 0x37
  41. #define AXP152_DCDC_MODE 0x80
  42. #define AXP20X_PWR_INPUT_STATUS 0x00
  43. #define AXP20X_PWR_OP_MODE 0x01
  44. #define AXP20X_USB_OTG_STATUS 0x02
  45. #define AXP20X_PWR_OUT_CTRL 0x12
  46. #define AXP20X_DCDC2_V_OUT 0x23
  47. #define AXP20X_DCDC2_LDO3_V_RAMP 0x25
  48. #define AXP20X_DCDC3_V_OUT 0x27
  49. #define AXP20X_LDO24_V_OUT 0x28
  50. #define AXP20X_LDO3_V_OUT 0x29
  51. #define AXP20X_VBUS_IPSOUT_MGMT 0x30
  52. #define AXP20X_V_OFF 0x31
  53. #define AXP20X_OFF_CTRL 0x32
  54. #define AXP20X_CHRG_CTRL1 0x33
  55. #define AXP20X_CHRG_CTRL2 0x34
  56. #define AXP20X_CHRG_BAK_CTRL 0x35
  57. #define AXP20X_PEK_KEY 0x36
  58. #define AXP20X_DCDC_FREQ 0x37
  59. #define AXP20X_V_LTF_CHRG 0x38
  60. #define AXP20X_V_HTF_CHRG 0x39
  61. #define AXP20X_APS_WARN_L1 0x3a
  62. #define AXP20X_APS_WARN_L2 0x3b
  63. #define AXP20X_V_LTF_DISCHRG 0x3c
  64. #define AXP20X_V_HTF_DISCHRG 0x3d
  65. #define AXP22X_PWR_OUT_CTRL1 0x10
  66. #define AXP22X_PWR_OUT_CTRL2 0x12
  67. #define AXP22X_PWR_OUT_CTRL3 0x13
  68. #define AXP22X_DLDO1_V_OUT 0x15
  69. #define AXP22X_DLDO2_V_OUT 0x16
  70. #define AXP22X_DLDO3_V_OUT 0x17
  71. #define AXP22X_DLDO4_V_OUT 0x18
  72. #define AXP22X_ELDO1_V_OUT 0x19
  73. #define AXP22X_ELDO2_V_OUT 0x1a
  74. #define AXP22X_ELDO3_V_OUT 0x1b
  75. #define AXP22X_DC5LDO_V_OUT 0x1c
  76. #define AXP22X_DCDC1_V_OUT 0x21
  77. #define AXP22X_DCDC2_V_OUT 0x22
  78. #define AXP22X_DCDC3_V_OUT 0x23
  79. #define AXP22X_DCDC4_V_OUT 0x24
  80. #define AXP22X_DCDC5_V_OUT 0x25
  81. #define AXP22X_DCDC23_V_RAMP_CTRL 0x27
  82. #define AXP22X_ALDO1_V_OUT 0x28
  83. #define AXP22X_ALDO2_V_OUT 0x29
  84. #define AXP22X_ALDO3_V_OUT 0x2a
  85. #define AXP22X_CHRG_CTRL3 0x35
  86. #define AXP806_STARTUP_SRC 0x00
  87. #define AXP806_CHIP_ID 0x03
  88. #define AXP806_PWR_OUT_CTRL1 0x10
  89. #define AXP806_PWR_OUT_CTRL2 0x11
  90. #define AXP806_DCDCA_V_CTRL 0x12
  91. #define AXP806_DCDCB_V_CTRL 0x13
  92. #define AXP806_DCDCC_V_CTRL 0x14
  93. #define AXP806_DCDCD_V_CTRL 0x15
  94. #define AXP806_DCDCE_V_CTRL 0x16
  95. #define AXP806_ALDO1_V_CTRL 0x17
  96. #define AXP806_ALDO2_V_CTRL 0x18
  97. #define AXP806_ALDO3_V_CTRL 0x19
  98. #define AXP806_DCDC_MODE_CTRL1 0x1a
  99. #define AXP806_DCDC_MODE_CTRL2 0x1b
  100. #define AXP806_DCDC_FREQ_CTRL 0x1c
  101. #define AXP806_BLDO1_V_CTRL 0x20
  102. #define AXP806_BLDO2_V_CTRL 0x21
  103. #define AXP806_BLDO3_V_CTRL 0x22
  104. #define AXP806_BLDO4_V_CTRL 0x23
  105. #define AXP806_CLDO1_V_CTRL 0x24
  106. #define AXP806_CLDO2_V_CTRL 0x25
  107. #define AXP806_CLDO3_V_CTRL 0x26
  108. #define AXP806_VREF_TEMP_WARN_L 0xf3
  109. #define AXP806_BUS_ADDR_EXT 0xfe
  110. #define AXP806_REG_ADDR_EXT 0xff
  111. #define AXP803_POLYPHASE_CTRL 0x14
  112. #define AXP803_FLDO1_V_OUT 0x1c
  113. #define AXP803_FLDO2_V_OUT 0x1d
  114. #define AXP803_DCDC1_V_OUT 0x20
  115. #define AXP803_DCDC2_V_OUT 0x21
  116. #define AXP803_DCDC3_V_OUT 0x22
  117. #define AXP803_DCDC4_V_OUT 0x23
  118. #define AXP803_DCDC5_V_OUT 0x24
  119. #define AXP803_DCDC6_V_OUT 0x25
  120. #define AXP803_DCDC_FREQ_CTRL 0x3b
  121. /* Other DCDC regulator control registers are the same as AXP803 */
  122. #define AXP813_DCDC7_V_OUT 0x26
  123. /* Interrupt */
  124. #define AXP152_IRQ1_EN 0x40
  125. #define AXP152_IRQ2_EN 0x41
  126. #define AXP152_IRQ3_EN 0x42
  127. #define AXP152_IRQ1_STATE 0x48
  128. #define AXP152_IRQ2_STATE 0x49
  129. #define AXP152_IRQ3_STATE 0x4a
  130. #define AXP20X_IRQ1_EN 0x40
  131. #define AXP20X_IRQ2_EN 0x41
  132. #define AXP20X_IRQ3_EN 0x42
  133. #define AXP20X_IRQ4_EN 0x43
  134. #define AXP20X_IRQ5_EN 0x44
  135. #define AXP20X_IRQ6_EN 0x45
  136. #define AXP20X_IRQ1_STATE 0x48
  137. #define AXP20X_IRQ2_STATE 0x49
  138. #define AXP20X_IRQ3_STATE 0x4a
  139. #define AXP20X_IRQ4_STATE 0x4b
  140. #define AXP20X_IRQ5_STATE 0x4c
  141. #define AXP20X_IRQ6_STATE 0x4d
  142. /* ADC */
  143. #define AXP20X_ACIN_V_ADC_H 0x56
  144. #define AXP20X_ACIN_V_ADC_L 0x57
  145. #define AXP20X_ACIN_I_ADC_H 0x58
  146. #define AXP20X_ACIN_I_ADC_L 0x59
  147. #define AXP20X_VBUS_V_ADC_H 0x5a
  148. #define AXP20X_VBUS_V_ADC_L 0x5b
  149. #define AXP20X_VBUS_I_ADC_H 0x5c
  150. #define AXP20X_VBUS_I_ADC_L 0x5d
  151. #define AXP20X_TEMP_ADC_H 0x5e
  152. #define AXP20X_TEMP_ADC_L 0x5f
  153. #define AXP20X_TS_IN_H 0x62
  154. #define AXP20X_TS_IN_L 0x63
  155. #define AXP20X_GPIO0_V_ADC_H 0x64
  156. #define AXP20X_GPIO0_V_ADC_L 0x65
  157. #define AXP20X_GPIO1_V_ADC_H 0x66
  158. #define AXP20X_GPIO1_V_ADC_L 0x67
  159. #define AXP20X_PWR_BATT_H 0x70
  160. #define AXP20X_PWR_BATT_M 0x71
  161. #define AXP20X_PWR_BATT_L 0x72
  162. #define AXP20X_BATT_V_H 0x78
  163. #define AXP20X_BATT_V_L 0x79
  164. #define AXP20X_BATT_CHRG_I_H 0x7a
  165. #define AXP20X_BATT_CHRG_I_L 0x7b
  166. #define AXP20X_BATT_DISCHRG_I_H 0x7c
  167. #define AXP20X_BATT_DISCHRG_I_L 0x7d
  168. #define AXP20X_IPSOUT_V_HIGH_H 0x7e
  169. #define AXP20X_IPSOUT_V_HIGH_L 0x7f
  170. /* Power supply */
  171. #define AXP20X_DCDC_MODE 0x80
  172. #define AXP20X_ADC_EN1 0x82
  173. #define AXP20X_ADC_EN2 0x83
  174. #define AXP20X_ADC_RATE 0x84
  175. #define AXP20X_GPIO10_IN_RANGE 0x85
  176. #define AXP20X_GPIO1_ADC_IRQ_RIS 0x86
  177. #define AXP20X_GPIO1_ADC_IRQ_FAL 0x87
  178. #define AXP20X_TIMER_CTRL 0x8a
  179. #define AXP20X_VBUS_MON 0x8b
  180. #define AXP20X_OVER_TMP 0x8f
  181. #define AXP22X_PWREN_CTRL1 0x8c
  182. #define AXP22X_PWREN_CTRL2 0x8d
  183. /* GPIO */
  184. #define AXP152_GPIO0_CTRL 0x90
  185. #define AXP152_GPIO1_CTRL 0x91
  186. #define AXP152_GPIO2_CTRL 0x92
  187. #define AXP152_GPIO3_CTRL 0x93
  188. #define AXP152_LDOGPIO2_V_OUT 0x96
  189. #define AXP152_GPIO_INPUT 0x97
  190. #define AXP152_PWM0_FREQ_X 0x98
  191. #define AXP152_PWM0_FREQ_Y 0x99
  192. #define AXP152_PWM0_DUTY_CYCLE 0x9a
  193. #define AXP152_PWM1_FREQ_X 0x9b
  194. #define AXP152_PWM1_FREQ_Y 0x9c
  195. #define AXP152_PWM1_DUTY_CYCLE 0x9d
  196. #define AXP20X_GPIO0_CTRL 0x90
  197. #define AXP20X_LDO5_V_OUT 0x91
  198. #define AXP20X_GPIO1_CTRL 0x92
  199. #define AXP20X_GPIO2_CTRL 0x93
  200. #define AXP20X_GPIO20_SS 0x94
  201. #define AXP20X_GPIO3_CTRL 0x95
  202. #define AXP22X_LDO_IO0_V_OUT 0x91
  203. #define AXP22X_LDO_IO1_V_OUT 0x93
  204. #define AXP22X_GPIO_STATE 0x94
  205. #define AXP22X_GPIO_PULL_DOWN 0x95
  206. /* Battery */
  207. #define AXP20X_CHRG_CC_31_24 0xb0
  208. #define AXP20X_CHRG_CC_23_16 0xb1
  209. #define AXP20X_CHRG_CC_15_8 0xb2
  210. #define AXP20X_CHRG_CC_7_0 0xb3
  211. #define AXP20X_DISCHRG_CC_31_24 0xb4
  212. #define AXP20X_DISCHRG_CC_23_16 0xb5
  213. #define AXP20X_DISCHRG_CC_15_8 0xb6
  214. #define AXP20X_DISCHRG_CC_7_0 0xb7
  215. #define AXP20X_CC_CTRL 0xb8
  216. #define AXP20X_FG_RES 0xb9
  217. /* OCV */
  218. #define AXP20X_RDC_H 0xba
  219. #define AXP20X_RDC_L 0xbb
  220. #define AXP20X_OCV(m) (0xc0 + (m))
  221. #define AXP20X_OCV_MAX 0xf
  222. /* AXP22X specific registers */
  223. #define AXP22X_PMIC_TEMP_H 0x56
  224. #define AXP22X_PMIC_TEMP_L 0x57
  225. #define AXP22X_TS_ADC_H 0x58
  226. #define AXP22X_TS_ADC_L 0x59
  227. #define AXP22X_BATLOW_THRES1 0xe6
  228. /* AXP288/AXP803 specific registers */
  229. #define AXP288_POWER_REASON 0x02
  230. #define AXP288_BC_GLOBAL 0x2c
  231. #define AXP288_BC_VBUS_CNTL 0x2d
  232. #define AXP288_BC_USB_STAT 0x2e
  233. #define AXP288_BC_DET_STAT 0x2f
  234. #define AXP288_PMIC_ADC_H 0x56
  235. #define AXP288_PMIC_ADC_L 0x57
  236. #define AXP288_TS_ADC_H 0x58
  237. #define AXP288_TS_ADC_L 0x59
  238. #define AXP288_GP_ADC_H 0x5a
  239. #define AXP288_GP_ADC_L 0x5b
  240. #define AXP288_ADC_TS_PIN_CTRL 0x84
  241. #define AXP288_RT_BATT_V_H 0xa0
  242. #define AXP288_RT_BATT_V_L 0xa1
  243. #define AXP813_ACIN_PATH_CTRL 0x3a
  244. #define AXP813_ADC_RATE 0x85
  245. /* Fuel Gauge */
  246. #define AXP288_FG_RDC1_REG 0xba
  247. #define AXP288_FG_RDC0_REG 0xbb
  248. #define AXP288_FG_OCVH_REG 0xbc
  249. #define AXP288_FG_OCVL_REG 0xbd
  250. #define AXP288_FG_OCV_CURVE_REG 0xc0
  251. #define AXP288_FG_DES_CAP1_REG 0xe0
  252. #define AXP288_FG_DES_CAP0_REG 0xe1
  253. #define AXP288_FG_CC_MTR1_REG 0xe2
  254. #define AXP288_FG_CC_MTR0_REG 0xe3
  255. #define AXP288_FG_OCV_CAP_REG 0xe4
  256. #define AXP288_FG_CC_CAP_REG 0xe5
  257. #define AXP288_FG_LOW_CAP_REG 0xe6
  258. #define AXP288_FG_TUNE0 0xe8
  259. #define AXP288_FG_TUNE1 0xe9
  260. #define AXP288_FG_TUNE2 0xea
  261. #define AXP288_FG_TUNE3 0xeb
  262. #define AXP288_FG_TUNE4 0xec
  263. #define AXP288_FG_TUNE5 0xed
  264. /* Regulators IDs */
  265. enum {
  266. AXP20X_LDO1 = 0,
  267. AXP20X_LDO2,
  268. AXP20X_LDO3,
  269. AXP20X_LDO4,
  270. AXP20X_LDO5,
  271. AXP20X_DCDC2,
  272. AXP20X_DCDC3,
  273. AXP20X_REG_ID_MAX,
  274. };
  275. enum {
  276. AXP22X_DCDC1 = 0,
  277. AXP22X_DCDC2,
  278. AXP22X_DCDC3,
  279. AXP22X_DCDC4,
  280. AXP22X_DCDC5,
  281. AXP22X_DC1SW,
  282. AXP22X_DC5LDO,
  283. AXP22X_ALDO1,
  284. AXP22X_ALDO2,
  285. AXP22X_ALDO3,
  286. AXP22X_ELDO1,
  287. AXP22X_ELDO2,
  288. AXP22X_ELDO3,
  289. AXP22X_DLDO1,
  290. AXP22X_DLDO2,
  291. AXP22X_DLDO3,
  292. AXP22X_DLDO4,
  293. AXP22X_RTC_LDO,
  294. AXP22X_LDO_IO0,
  295. AXP22X_LDO_IO1,
  296. AXP22X_REG_ID_MAX,
  297. };
  298. enum {
  299. AXP806_DCDCA = 0,
  300. AXP806_DCDCB,
  301. AXP806_DCDCC,
  302. AXP806_DCDCD,
  303. AXP806_DCDCE,
  304. AXP806_ALDO1,
  305. AXP806_ALDO2,
  306. AXP806_ALDO3,
  307. AXP806_BLDO1,
  308. AXP806_BLDO2,
  309. AXP806_BLDO3,
  310. AXP806_BLDO4,
  311. AXP806_CLDO1,
  312. AXP806_CLDO2,
  313. AXP806_CLDO3,
  314. AXP806_SW,
  315. AXP806_REG_ID_MAX,
  316. };
  317. enum {
  318. AXP809_DCDC1 = 0,
  319. AXP809_DCDC2,
  320. AXP809_DCDC3,
  321. AXP809_DCDC4,
  322. AXP809_DCDC5,
  323. AXP809_DC1SW,
  324. AXP809_DC5LDO,
  325. AXP809_ALDO1,
  326. AXP809_ALDO2,
  327. AXP809_ALDO3,
  328. AXP809_ELDO1,
  329. AXP809_ELDO2,
  330. AXP809_ELDO3,
  331. AXP809_DLDO1,
  332. AXP809_DLDO2,
  333. AXP809_RTC_LDO,
  334. AXP809_LDO_IO0,
  335. AXP809_LDO_IO1,
  336. AXP809_SW,
  337. AXP809_REG_ID_MAX,
  338. };
  339. enum {
  340. AXP803_DCDC1 = 0,
  341. AXP803_DCDC2,
  342. AXP803_DCDC3,
  343. AXP803_DCDC4,
  344. AXP803_DCDC5,
  345. AXP803_DCDC6,
  346. AXP803_DC1SW,
  347. AXP803_ALDO1,
  348. AXP803_ALDO2,
  349. AXP803_ALDO3,
  350. AXP803_DLDO1,
  351. AXP803_DLDO2,
  352. AXP803_DLDO3,
  353. AXP803_DLDO4,
  354. AXP803_ELDO1,
  355. AXP803_ELDO2,
  356. AXP803_ELDO3,
  357. AXP803_FLDO1,
  358. AXP803_FLDO2,
  359. AXP803_RTC_LDO,
  360. AXP803_LDO_IO0,
  361. AXP803_LDO_IO1,
  362. AXP803_REG_ID_MAX,
  363. };
  364. enum {
  365. AXP813_DCDC1 = 0,
  366. AXP813_DCDC2,
  367. AXP813_DCDC3,
  368. AXP813_DCDC4,
  369. AXP813_DCDC5,
  370. AXP813_DCDC6,
  371. AXP813_DCDC7,
  372. AXP813_ALDO1,
  373. AXP813_ALDO2,
  374. AXP813_ALDO3,
  375. AXP813_DLDO1,
  376. AXP813_DLDO2,
  377. AXP813_DLDO3,
  378. AXP813_DLDO4,
  379. AXP813_ELDO1,
  380. AXP813_ELDO2,
  381. AXP813_ELDO3,
  382. AXP813_FLDO1,
  383. AXP813_FLDO2,
  384. AXP813_FLDO3,
  385. AXP813_RTC_LDO,
  386. AXP813_LDO_IO0,
  387. AXP813_LDO_IO1,
  388. AXP813_SW,
  389. AXP813_REG_ID_MAX,
  390. };
  391. /* IRQs */
  392. enum {
  393. AXP152_IRQ_LDO0IN_CONNECT = 1,
  394. AXP152_IRQ_LDO0IN_REMOVAL,
  395. AXP152_IRQ_ALDO0IN_CONNECT,
  396. AXP152_IRQ_ALDO0IN_REMOVAL,
  397. AXP152_IRQ_DCDC1_V_LOW,
  398. AXP152_IRQ_DCDC2_V_LOW,
  399. AXP152_IRQ_DCDC3_V_LOW,
  400. AXP152_IRQ_DCDC4_V_LOW,
  401. AXP152_IRQ_PEK_SHORT,
  402. AXP152_IRQ_PEK_LONG,
  403. AXP152_IRQ_TIMER,
  404. AXP152_IRQ_PEK_RIS_EDGE,
  405. AXP152_IRQ_PEK_FAL_EDGE,
  406. AXP152_IRQ_GPIO3_INPUT,
  407. AXP152_IRQ_GPIO2_INPUT,
  408. AXP152_IRQ_GPIO1_INPUT,
  409. AXP152_IRQ_GPIO0_INPUT,
  410. };
  411. enum {
  412. AXP20X_IRQ_ACIN_OVER_V = 1,
  413. AXP20X_IRQ_ACIN_PLUGIN,
  414. AXP20X_IRQ_ACIN_REMOVAL,
  415. AXP20X_IRQ_VBUS_OVER_V,
  416. AXP20X_IRQ_VBUS_PLUGIN,
  417. AXP20X_IRQ_VBUS_REMOVAL,
  418. AXP20X_IRQ_VBUS_V_LOW,
  419. AXP20X_IRQ_BATT_PLUGIN,
  420. AXP20X_IRQ_BATT_REMOVAL,
  421. AXP20X_IRQ_BATT_ENT_ACT_MODE,
  422. AXP20X_IRQ_BATT_EXIT_ACT_MODE,
  423. AXP20X_IRQ_CHARG,
  424. AXP20X_IRQ_CHARG_DONE,
  425. AXP20X_IRQ_BATT_TEMP_HIGH,
  426. AXP20X_IRQ_BATT_TEMP_LOW,
  427. AXP20X_IRQ_DIE_TEMP_HIGH,
  428. AXP20X_IRQ_CHARG_I_LOW,
  429. AXP20X_IRQ_DCDC1_V_LONG,
  430. AXP20X_IRQ_DCDC2_V_LONG,
  431. AXP20X_IRQ_DCDC3_V_LONG,
  432. AXP20X_IRQ_PEK_SHORT = 22,
  433. AXP20X_IRQ_PEK_LONG,
  434. AXP20X_IRQ_N_OE_PWR_ON,
  435. AXP20X_IRQ_N_OE_PWR_OFF,
  436. AXP20X_IRQ_VBUS_VALID,
  437. AXP20X_IRQ_VBUS_NOT_VALID,
  438. AXP20X_IRQ_VBUS_SESS_VALID,
  439. AXP20X_IRQ_VBUS_SESS_END,
  440. AXP20X_IRQ_LOW_PWR_LVL1,
  441. AXP20X_IRQ_LOW_PWR_LVL2,
  442. AXP20X_IRQ_TIMER,
  443. AXP20X_IRQ_PEK_RIS_EDGE,
  444. AXP20X_IRQ_PEK_FAL_EDGE,
  445. AXP20X_IRQ_GPIO3_INPUT,
  446. AXP20X_IRQ_GPIO2_INPUT,
  447. AXP20X_IRQ_GPIO1_INPUT,
  448. AXP20X_IRQ_GPIO0_INPUT,
  449. };
  450. enum axp22x_irqs {
  451. AXP22X_IRQ_ACIN_OVER_V = 1,
  452. AXP22X_IRQ_ACIN_PLUGIN,
  453. AXP22X_IRQ_ACIN_REMOVAL,
  454. AXP22X_IRQ_VBUS_OVER_V,
  455. AXP22X_IRQ_VBUS_PLUGIN,
  456. AXP22X_IRQ_VBUS_REMOVAL,
  457. AXP22X_IRQ_VBUS_V_LOW,
  458. AXP22X_IRQ_BATT_PLUGIN,
  459. AXP22X_IRQ_BATT_REMOVAL,
  460. AXP22X_IRQ_BATT_ENT_ACT_MODE,
  461. AXP22X_IRQ_BATT_EXIT_ACT_MODE,
  462. AXP22X_IRQ_CHARG,
  463. AXP22X_IRQ_CHARG_DONE,
  464. AXP22X_IRQ_BATT_TEMP_HIGH,
  465. AXP22X_IRQ_BATT_TEMP_LOW,
  466. AXP22X_IRQ_DIE_TEMP_HIGH,
  467. AXP22X_IRQ_PEK_SHORT,
  468. AXP22X_IRQ_PEK_LONG,
  469. AXP22X_IRQ_LOW_PWR_LVL1,
  470. AXP22X_IRQ_LOW_PWR_LVL2,
  471. AXP22X_IRQ_TIMER,
  472. AXP22X_IRQ_PEK_RIS_EDGE,
  473. AXP22X_IRQ_PEK_FAL_EDGE,
  474. AXP22X_IRQ_GPIO1_INPUT,
  475. AXP22X_IRQ_GPIO0_INPUT,
  476. };
  477. enum axp288_irqs {
  478. AXP288_IRQ_VBUS_FALL = 2,
  479. AXP288_IRQ_VBUS_RISE,
  480. AXP288_IRQ_OV,
  481. AXP288_IRQ_FALLING_ALT,
  482. AXP288_IRQ_RISING_ALT,
  483. AXP288_IRQ_OV_ALT,
  484. AXP288_IRQ_DONE = 10,
  485. AXP288_IRQ_CHARGING,
  486. AXP288_IRQ_SAFE_QUIT,
  487. AXP288_IRQ_SAFE_ENTER,
  488. AXP288_IRQ_ABSENT,
  489. AXP288_IRQ_APPEND,
  490. AXP288_IRQ_QWBTU,
  491. AXP288_IRQ_WBTU,
  492. AXP288_IRQ_QWBTO,
  493. AXP288_IRQ_WBTO,
  494. AXP288_IRQ_QCBTU,
  495. AXP288_IRQ_CBTU,
  496. AXP288_IRQ_QCBTO,
  497. AXP288_IRQ_CBTO,
  498. AXP288_IRQ_WL2,
  499. AXP288_IRQ_WL1,
  500. AXP288_IRQ_GPADC,
  501. AXP288_IRQ_OT = 31,
  502. AXP288_IRQ_GPIO0,
  503. AXP288_IRQ_GPIO1,
  504. AXP288_IRQ_POKO,
  505. AXP288_IRQ_POKL,
  506. AXP288_IRQ_POKS,
  507. AXP288_IRQ_POKN,
  508. AXP288_IRQ_POKP,
  509. AXP288_IRQ_TIMER,
  510. AXP288_IRQ_MV_CHNG,
  511. AXP288_IRQ_BC_USB_CHNG,
  512. };
  513. enum axp803_irqs {
  514. AXP803_IRQ_ACIN_OVER_V = 1,
  515. AXP803_IRQ_ACIN_PLUGIN,
  516. AXP803_IRQ_ACIN_REMOVAL,
  517. AXP803_IRQ_VBUS_OVER_V,
  518. AXP803_IRQ_VBUS_PLUGIN,
  519. AXP803_IRQ_VBUS_REMOVAL,
  520. AXP803_IRQ_BATT_PLUGIN,
  521. AXP803_IRQ_BATT_REMOVAL,
  522. AXP803_IRQ_BATT_ENT_ACT_MODE,
  523. AXP803_IRQ_BATT_EXIT_ACT_MODE,
  524. AXP803_IRQ_CHARG,
  525. AXP803_IRQ_CHARG_DONE,
  526. AXP803_IRQ_BATT_CHG_TEMP_HIGH,
  527. AXP803_IRQ_BATT_CHG_TEMP_HIGH_END,
  528. AXP803_IRQ_BATT_CHG_TEMP_LOW,
  529. AXP803_IRQ_BATT_CHG_TEMP_LOW_END,
  530. AXP803_IRQ_BATT_ACT_TEMP_HIGH,
  531. AXP803_IRQ_BATT_ACT_TEMP_HIGH_END,
  532. AXP803_IRQ_BATT_ACT_TEMP_LOW,
  533. AXP803_IRQ_BATT_ACT_TEMP_LOW_END,
  534. AXP803_IRQ_DIE_TEMP_HIGH,
  535. AXP803_IRQ_GPADC,
  536. AXP803_IRQ_LOW_PWR_LVL1,
  537. AXP803_IRQ_LOW_PWR_LVL2,
  538. AXP803_IRQ_TIMER,
  539. AXP803_IRQ_PEK_RIS_EDGE,
  540. AXP803_IRQ_PEK_FAL_EDGE,
  541. AXP803_IRQ_PEK_SHORT,
  542. AXP803_IRQ_PEK_LONG,
  543. AXP803_IRQ_PEK_OVER_OFF,
  544. AXP803_IRQ_GPIO1_INPUT,
  545. AXP803_IRQ_GPIO0_INPUT,
  546. AXP803_IRQ_BC_USB_CHNG,
  547. AXP803_IRQ_MV_CHNG,
  548. };
  549. enum axp806_irqs {
  550. AXP806_IRQ_DIE_TEMP_HIGH_LV1,
  551. AXP806_IRQ_DIE_TEMP_HIGH_LV2,
  552. AXP806_IRQ_DCDCA_V_LOW,
  553. AXP806_IRQ_DCDCB_V_LOW,
  554. AXP806_IRQ_DCDCC_V_LOW,
  555. AXP806_IRQ_DCDCD_V_LOW,
  556. AXP806_IRQ_DCDCE_V_LOW,
  557. AXP806_IRQ_POK_LONG,
  558. AXP806_IRQ_POK_SHORT,
  559. AXP806_IRQ_WAKEUP,
  560. AXP806_IRQ_POK_FALL,
  561. AXP806_IRQ_POK_RISE,
  562. };
  563. enum axp809_irqs {
  564. AXP809_IRQ_ACIN_OVER_V = 1,
  565. AXP809_IRQ_ACIN_PLUGIN,
  566. AXP809_IRQ_ACIN_REMOVAL,
  567. AXP809_IRQ_VBUS_OVER_V,
  568. AXP809_IRQ_VBUS_PLUGIN,
  569. AXP809_IRQ_VBUS_REMOVAL,
  570. AXP809_IRQ_VBUS_V_LOW,
  571. AXP809_IRQ_BATT_PLUGIN,
  572. AXP809_IRQ_BATT_REMOVAL,
  573. AXP809_IRQ_BATT_ENT_ACT_MODE,
  574. AXP809_IRQ_BATT_EXIT_ACT_MODE,
  575. AXP809_IRQ_CHARG,
  576. AXP809_IRQ_CHARG_DONE,
  577. AXP809_IRQ_BATT_CHG_TEMP_HIGH,
  578. AXP809_IRQ_BATT_CHG_TEMP_HIGH_END,
  579. AXP809_IRQ_BATT_CHG_TEMP_LOW,
  580. AXP809_IRQ_BATT_CHG_TEMP_LOW_END,
  581. AXP809_IRQ_BATT_ACT_TEMP_HIGH,
  582. AXP809_IRQ_BATT_ACT_TEMP_HIGH_END,
  583. AXP809_IRQ_BATT_ACT_TEMP_LOW,
  584. AXP809_IRQ_BATT_ACT_TEMP_LOW_END,
  585. AXP809_IRQ_DIE_TEMP_HIGH,
  586. AXP809_IRQ_LOW_PWR_LVL1,
  587. AXP809_IRQ_LOW_PWR_LVL2,
  588. AXP809_IRQ_TIMER,
  589. AXP809_IRQ_PEK_RIS_EDGE,
  590. AXP809_IRQ_PEK_FAL_EDGE,
  591. AXP809_IRQ_PEK_SHORT,
  592. AXP809_IRQ_PEK_LONG,
  593. AXP809_IRQ_PEK_OVER_OFF,
  594. AXP809_IRQ_GPIO1_INPUT,
  595. AXP809_IRQ_GPIO0_INPUT,
  596. };
  597. struct axp20x_dev {
  598. struct device *dev;
  599. int irq;
  600. unsigned long irq_flags;
  601. struct regmap *regmap;
  602. struct regmap_irq_chip_data *regmap_irqc;
  603. long variant;
  604. int nr_cells;
  605. const struct mfd_cell *cells;
  606. const struct regmap_config *regmap_cfg;
  607. const struct regmap_irq_chip *regmap_irq_chip;
  608. };
  609. /* generic helper function for reading 9-16 bit wide regs */
  610. static inline int axp20x_read_variable_width(struct regmap *regmap,
  611. unsigned int reg, unsigned int width)
  612. {
  613. unsigned int reg_val, result;
  614. int err;
  615. err = regmap_read(regmap, reg, &reg_val);
  616. if (err)
  617. return err;
  618. result = reg_val << (width - 8);
  619. err = regmap_read(regmap, reg + 1, &reg_val);
  620. if (err)
  621. return err;
  622. result |= reg_val;
  623. return result;
  624. }
  625. /**
  626. * axp20x_match_device(): Setup axp20x variant related fields
  627. *
  628. * @axp20x: axp20x device to setup (.dev field must be set)
  629. * @dev: device associated with this axp20x device
  630. *
  631. * This lets the axp20x core configure the mfd cells and register maps
  632. * for later use.
  633. */
  634. int axp20x_match_device(struct axp20x_dev *axp20x);
  635. /**
  636. * axp20x_device_probe(): Probe a configured axp20x device
  637. *
  638. * @axp20x: axp20x device to probe (must be configured)
  639. *
  640. * This function lets the axp20x core register the axp20x mfd devices
  641. * and irqchip. The axp20x device passed in must be fully configured
  642. * with axp20x_match_device, its irq set, and regmap created.
  643. */
  644. int axp20x_device_probe(struct axp20x_dev *axp20x);
  645. /**
  646. * axp20x_device_remove(): Remove a axp20x device
  647. *
  648. * @axp20x: axp20x device to remove
  649. *
  650. * This tells the axp20x core to remove the associated mfd devices
  651. */
  652. void axp20x_device_remove(struct axp20x_dev *axp20x);
  653. #endif /* __LINUX_MFD_AXP20X_H */