axp20x.h 15 KB

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