mt6360_pmu_charger.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #ifndef __MT6360_PMU_CHARGER_H
  32. #define __MT6360_PMU_CHARGER_H
  33. #include <bits.h>
  34. enum mt6360_adc_channel {
  35. MT6360_ADC_USBID,
  36. MT6360_ADC_VBUSDIV5,
  37. MT6360_ADC_VBUSDIV2,
  38. MT6360_ADC_VSYS,
  39. MT6360_ADC_VBAT,
  40. MT6360_ADC_IBUS,
  41. MT6360_ADC_IBAT,
  42. MT6360_ADC_CHG_VDDP,
  43. MT6360_ADC_TEMP_JC,
  44. MT6360_ADC_VREF_TS,
  45. MT6360_ADC_TS,
  46. MT6360_ADC_MAX,
  47. };
  48. #ifdef MTK_MT6360_PMU_CHARGER_SUPPORT
  49. extern int mt6360_chg_probe(void);
  50. #else
  51. static inline int mt6360_chg_probe(void)
  52. {
  53. return 0;
  54. }
  55. #endif
  56. #define MT6360_SLAVE_ADDR (0x34)
  57. #define MT6360_VENDOR_ID (0x50)
  58. /* core control */
  59. #define MT6360_PMU_DEV_INFO (0x00)
  60. #define MT6360_PMU_CORE_CTRL1 (0x01)
  61. #define MT6360_PMU_RST1 (0x02)
  62. #define MT6360_PMU_CRCEN (0x03)
  63. #define MT6360_PMU_RST_PAS_CODE1 (0x04)
  64. #define MT6360_PMU_RST_PAS_CODE2 (0x05)
  65. #define MT6360_PMU_CORE_CTRL2 (0x06)
  66. #define MT6360_PMU_TM_PAS_CODE1 (0x07)
  67. #define MT6360_PMU_TM_PAS_CODE2 (0x08)
  68. #define MT6360_PMU_TM_PAS_CODE3 (0x09)
  69. #define MT6360_PMU_TM_PAS_CODE4 (0x0A)
  70. /* charger control */
  71. #define MT6360_PMU_I2C_CTRL (0x10)
  72. #define MT6360_PMU_CHG_CTRL1 (0x11)
  73. #define MT6360_PMU_CHG_CTRL2 (0x12)
  74. #define MT6360_PMU_CHG_CTRL3 (0x13)
  75. #define MT6360_PMU_CHG_CTRL4 (0x14)
  76. #define MT6360_PMU_CHG_CTRL5 (0x15)
  77. #define MT6360_PMU_CHG_CTRL6 (0x16)
  78. #define MT6360_PMU_CHG_CTRL7 (0x17)
  79. #define MT6360_PMU_CHG_CTRL8 (0x18)
  80. #define MT6360_PMU_CHG_CTRL9 (0x19)
  81. #define MT6360_PMU_CHG_CTRL10 (0x1A)
  82. #define MT6360_PMU_CHG_CTRL11 (0x1B)
  83. #define MT6360_PMU_CHG_CTRL12 (0x1C)
  84. #define MT6360_PMU_CHG_CTRL13 (0x1D)
  85. #define MT6360_PMU_CHG_CTRL14 (0x1E)
  86. #define MT6360_PMU_CHG_CTRL15 (0x1F)
  87. #define MT6360_PMU_CHG_CTRL16 (0x20)
  88. #define MT6360_PMU_CHG_AICC_RESULT (0x21)
  89. #define MT6360_PMU_DEVICE_TYPE (0x22)
  90. #define MT6360_PMU_QC_CONTROL1 (0x23)
  91. #define MT6360_PMU_QC_CONTROL2 (0x24)
  92. #define MT6360_PMU_QC30_CONTROL1 (0x25)
  93. #define MT6360_PMU_QC30_CONTROL2 (0x26)
  94. #define MT6360_PMU_USB_STATUS1 (0x27)
  95. #define MT6360_PMU_QC_STATUS1 (0x28)
  96. #define MT6360_PMU_QC_STATUS2 (0x29)
  97. #define MT6360_PMU_CHG_PUMP (0x2A)
  98. #define MT6360_PMU_CHG_CTRL17 (0x2B)
  99. #define MT6360_PMU_CHG_CTRL18 (0x2C)
  100. #define MT6360_PMU_CHRDET_CTRL1 (0x2D)
  101. #define MT6360_PMU_CHRDET_CTRL2 (0x2E)
  102. #define MT6360_PMU_DPDN_CTRL (0x2F)
  103. #define MT6360_PMU_CHG_HIDDEN_CTRL1 (0x30)
  104. #define MT6360_PMU_CHG_HIDDEN_CTRL2 (0x31)
  105. #define MT6360_PMU_CHG_HIDDEN_CTRL3 (0x32)
  106. #define MT6360_PMU_CHG_HIDDEN_CTRL4 (0x33)
  107. #define MT6360_PMU_CHG_HIDDEN_CTRL5 (0x34)
  108. #define MT6360_PMU_CHG_HIDDEN_CTRL6 (0x35)
  109. #define MT6360_PMU_CHG_HIDDEN_CTRL7 (0x36)
  110. #define MT6360_PMU_CHG_HIDDEN_CTRL8 (0x37)
  111. #define MT6360_PMU_CHG_HIDDEN_CTRL9 (0x38)
  112. #define MT6360_PMU_CHG_HIDDEN_CTRL10 (0x39)
  113. #define MT6360_PMU_CHG_HIDDEN_CTRL11 (0x3A)
  114. #define MT6360_PMU_CHG_HIDDEN_CTRL12 (0x3B)
  115. #define MT6360_PMU_CHG_HIDDEN_CTRL13 (0x3C)
  116. #define MT6360_PMU_CHG_HIDDEN_CTRL14 (0x3D)
  117. #define MT6360_PMU_CHG_HIDDEN_CTRL15 (0x3E)
  118. #define MT6360_PMU_CHG_HIDDEN_CTRL16 (0x3F)
  119. #define MT6360_PMU_CHG_HIDDEN_CTRL17 (0x40)
  120. #define MT6360_PMU_CHG_HIDDEN_CTRL18 (0x41)
  121. #define MT6360_PMU_CHG_HIDDEN_CTRL19 (0x42)
  122. #define MT6360_PMU_CHG_HIDDEN_CTRL20 (0x43)
  123. #define MT6360_PMU_CHG_HIDDEN_CTRL21 (0x44)
  124. #define MT6360_PMU_CHG_HIDDEN_CTRL22 (0x45)
  125. #define MT6360_PMU_CHG_HIDDEN_CTRL23 (0x46)
  126. #define MT6360_PMU_CHG_HIDDEN_CTRL24 (0x47)
  127. #define MT6360_PMU_CHG_HIDDEN_CTRL25 (0x48)
  128. #define MT6360_PMU_BC12_CTRL (0x49)
  129. #define MT6360_PMU_CHG_STAT (0x4A)
  130. #define MT6360_PMU_RESV1 (0x4B)
  131. #define MT6360_PMU_TYPEC_OTP_TH_SEL_CODEH (0x4E)
  132. #define MT6360_PMU_TYPEC_OTP_TH_SEL_CODEL (0x4F)
  133. #define MT6360_PMU_TYPEC_OTP_HYST_TH (0x50)
  134. #define MT6360_PMU_TYPEC_OTP_CTRL (0x51)
  135. #define MT6360_PMU_ADC_BAT_DATA_H (0x52)
  136. #define MT6360_PMU_ADC_BAT_DATA_L (0x53)
  137. #define MT6360_PMU_IMID_BACKBST_ON (0x54)
  138. #define MT6360_PMU_IMID_BACKBST_OFF (0x55)
  139. #define MT6360_PMU_ADC_CONFIG (0x56)
  140. #define MT6360_PMU_ADC_EN2 (0x57)
  141. #define MT6360_PMU_ADC_IDLE_T (0x58)
  142. #define MT6360_PMU_ADC_RPT_1 (0x5A)
  143. #define MT6360_PMU_ADC_RPT_2 (0x5B)
  144. #define MT6360_PMU_ADC_RPT_3 (0x5C)
  145. #define MT6360_PMU_ADC_RPT_ORG1 (0x5D)
  146. #define MT6360_PMU_ADC_RPT_ORG2 (0x5E)
  147. #define MT6360_PMU_BAT_OVP_TH_SEL_CODEH (0x5F)
  148. #define MT6360_PMU_BAT_OVP_TH_SEL_CODEL (0x60)
  149. #define MT6360_PMU_CHG_CTRL19 (0x61)
  150. #define MT6360_PMU_VDDASUPPLY (0x62)
  151. #define MT6360_PMU_BC12_MANUAL (0x63)
  152. #define MT6360_PMU_CHGDET_FUNC (0x64)
  153. #define MT6360_PMU_FOD_CTRL (0x65)
  154. #define MT6360_PMU_CHG_CTRL20 (0x66)
  155. #define MT6360_PMU_CHG_HIDDEN_CTRL26 (0x67)
  156. #define MT6360_PMU_CHG_HIDDEN_CTRL27 (0x68)
  157. #define MT6360_PMU_RESV2 (0x69)
  158. #define MT6360_PMU_USBID_CTRL1 (0x6D)
  159. #define MT6360_PMU_USBID_CTRL2 (0x6E)
  160. #define MT6360_PMU_USBID_CTRL3 (0x6F)
  161. /* status event */
  162. #define MT6360_PMU_CHG_IRQ6 (0xD5)
  163. #define MT6360_PMU_CHG_STAT1 (0xE0)
  164. #define MT6360_PMU_CHG_STAT2 (0xE1)
  165. #define MT6360_PMU_CHG_STAT3 (0xE2)
  166. #define MT6360_PMU_CHG_STAT4 (0xE3)
  167. #define MT6360_PMU_CHG_STAT5 (0xE4)
  168. #define MT6360_PMU_CHG_STAT6 (0xE5)
  169. #define MT6360_PMU_DPDM_STAT (0xE6)
  170. #define MT6360_PMU_CHRDET_STAT (0xE7)
  171. #define MT6360_PMU_CHG_MASK6 (0xF5)
  172. /* MT6360_PMU_CORE_CTRL1 : 0x01 */
  173. #define MT6360_MASK_MREN BIT(4)
  174. /* MT6360_PMU_CHG_CTRL1 : 0x11 */
  175. #define MT6360_MASK_FORCE_SLEEP BIT(3)
  176. #define MT6360_SHFT_FORCE_SLEEP (3)
  177. #define MT6360_MASK_OPA_MODE BIT(0)
  178. #define MT6360_SHFT_OPA_MODE (0)
  179. /* MT6360_PMU_CHG_CTRL2 : 0x12 */
  180. #define MT6360_MASK_IINLMTSEL (0x0C)
  181. #define MT6360_SHFT_IINLMTSEL (2)
  182. #define MT6360_MASK_TE_EN BIT(4)
  183. #define MT6360_SHFT_TE_EN (4)
  184. #define MT6360_MASK_CFO_EN BIT(1)
  185. #define MT6360_SHFT_CFO_EN (1)
  186. #define MT6360_MASK_CHG_EN BIT(0)
  187. #define MT6360_SHFT_CHG_EN (0)
  188. /* MT6360_PMU_CHG_CTRL3 : 0x13 */
  189. #define MT6360_MASK_AICR (0xFC)
  190. #define MT6360_SHFT_AICR (2)
  191. #define MT6360_AICR_MAXVAL (0x3F)
  192. #define MT6360_MASK_AICR_EN BIT(1)
  193. #define MT6360_MASK_ILIM_EN BIT(0)
  194. /* MT6360_PMU_CHG_CTRL4 : 0x14 */
  195. #define MT6360_MASK_VOREG (0xFE)
  196. #define MT6360_SHFT_VOREG (1)
  197. #define MT6360_VOREG_MAXVAL (0x51)
  198. /* MT6360_PMU_CHG_CTRL6 : 0x16 */
  199. #define MT6360_MASK_MIVR (0xFE)
  200. #define MT6360_SHFT_MIVR (1)
  201. #define MT6360_MIVR_MAXVAL (0x5F)
  202. /* MT6360_PMU_CHG_CTRL7 : 0x17 */
  203. #define MT6360_MASK_ICHG (0xFC)
  204. #define MT6360_SHFT_ICHG (2)
  205. #define MT6360_ICHG_MAXVAL (0x31)
  206. /* MT6360_PMU_CHG_CTRL8 : 0x18 */
  207. #define MT6360_MASK_IPREC (0x0F)
  208. #define MT6360_SHFT_IPREC (0)
  209. #define MT6360_IPREC_MAXVAL (0x0F)
  210. /* MT6360_PMU_CHG_CTRL9 : 0x19 */
  211. #define MT6360_MASK_IEOC (0xF0)
  212. #define MT6360_SHFT_IEOC (4)
  213. #define MT6360_IEOC_MAXVAL (0x0F)
  214. /* MT6360_PMU_CHG_AICC_RESULT : 0x21 */
  215. #define MT6360_MASK_RG_AICC_RESULT (0xFC)
  216. #define MT6360_SHFT_RG_AICC_RESULT (2)
  217. /* MT6360_PMU_CHG_CTRL10 : 0x1A */
  218. #define MT6360_MASK_OTG_OC (0x07)
  219. #define MT6360_SHFT_OTG_OC (0)
  220. #define MT6360_OTG_OC_MAXVAL (0x07)
  221. /* MT6360_PMU_CHG_CTRL12 : 0x1C */
  222. #define MT6360_MASK_TMR_EN BIT(1)
  223. #define MT6360_SHFT_TMR_EN (1)
  224. /* MT6360_PMU_CHG_CTRL13 : 0x1D */
  225. #define MT6360_MASK_CHG_WDT_EN BIT(7)
  226. /* MT6360_PMU_CHG_CTRL14 : 0x1E */
  227. #define MT6360_MASK_RG_EN_AICC BIT(7)
  228. /* MT6360_PMU_DEVICE_TYPE : 0x22 */
  229. #define MT6360_MASK_USBCHGEN BIT(7)
  230. #define MT6360_SHFT_USBCHGEN (7)
  231. /* MT6360_PMU_USB_STATUS1 : 0x27 */
  232. #define MT6360_MASK_USB_STATUS (0x70)
  233. #define MT6360_SHFT_USB_STATUS (4)
  234. /* MT6360_PMU_CHG_CTRL16 : 0x2A */
  235. #define MT6360_MASK_AICC_VTH (0xFE)
  236. #define MT6360_SHFT_AICC_VTH (1)
  237. #define MT6360_AICC_VTH_MAXVAL (0x5F)
  238. /* MT6360_PMU_CHG_CTRL17 : 0x2B */
  239. #define MT6360_MASK_EN_PUMPX BIT(7)
  240. #define MT6360_SHFT_EN_PUMPX (7)
  241. #define MT6360_MASK_PUMPX_20_10 BIT(6)
  242. #define MT6360_SHFT_PUMPX_20_10 (6)
  243. #define MT6360_MASK_PUMPX_UP_DN BIT(5)
  244. #define MT6360_SHFT_PUMPX_UP_DN (5)
  245. #define MT6360_MASK_PUMPX_DEC (0x1F)
  246. #define MT6360_SHFT_PUMPX_DEC (0)
  247. #define MT6360_PUMPX_20_MAXVAL (0x1D)
  248. /* MT6360_PMU_CHG_CTRL18 : 0x2C */
  249. #define MT6360_MASK_BAT_COMP (0x38)
  250. #define MT6360_SHFT_BAT_COMP (3)
  251. #define MT6360_BAT_COMP_MAXVAL (0x07)
  252. #define MT6360_MASK_VCLAMP (0x7)
  253. #define MT6360_SHFT_VCLAMP (0)
  254. #define MT6360_VCLAMP_MAXVAL (0x07)
  255. /* MT6360_PMU_CHG_HIDDEN_CTRL2 : 0x31 */
  256. #define MT6360_MASK_EOC_RST BIT(7)
  257. #define MT6360_MASK_DISCHG BIT(2)
  258. #define MT6360_SHFT_DISCHG (2)
  259. /* MT6360_PMU_CHG_STAT : 0x4A */
  260. #define MT6360_MASK_CHG_STAT (0xC0)
  261. #define MT6360_SHFT_CHG_STAT (6)
  262. #define MT6360_MASK_VBAT_LVL BIT(5)
  263. #define MT6360_SHFT_VBAT_LVL (5)
  264. #define MT6360_MASK_VBAT_TRI BIT(4)
  265. #define MT6360_SHFT_VBAT_TRI (4)
  266. /* MT6360_PMU_ADC_CONFIG : 0x56 */
  267. #define MT6360_MASK_ZCV_EN BIT(6)
  268. #define MT6360_SHFT_ZCV_EN (6)
  269. /* MT6360_PMU_CHG_CTRL19 : 0x61 */
  270. #define MT6360_MASK_CHG_VIN_OVP_VTHSEL (0x60)
  271. #define MT6360_SHFT_CHG_VIN_OVP_VTHSEL (5)
  272. /* MT6360_PMU_FOD_CTRL : 0x65 */
  273. #define MT6360_MASK_FOD_SWEN BIT(7)
  274. /* MT6360_PMU_CHG_CTRL20 : 0x66 */
  275. #define MT6360_MASK_EN_SDI BIT(1)
  276. /* MT6360_PMU_CHG_STAT5 : 0xE5 */
  277. #define MT6360_MASK_TYPEC_OTP BIT(2)
  278. /* MT6360_PMU_FOD_STAT : 0xE7 */
  279. #define MT6360_MASK_FOD_ALL_STAT (0xE3)
  280. #define MT6360_MASK_FOD_DISCHG_FAIL BIT(7)
  281. #define MT6360_MASK_FOD_HR BIT(6)
  282. #define MT6360_MASK_FOD_LR BIT(5)
  283. #define MT6360_MASK_FOD_OV BIT(1)
  284. #define MT6360_MASK_FOD_DONE BIT(0)
  285. /* MT6360_PMU_FLED_EN : 0x7E */
  286. #define MT6360_MASK_STROBE_EN BIT(2)
  287. /* MT6360_PMU_CHG_STAT1 : 0xE0 */
  288. #define MT6360_MASK_PWR_RDY_EVT BIT(7)
  289. #define MT6360_SHFT_PWR_RDY_EVT (7)
  290. #define MT6360_MASK_MIVR_EVT BIT(6)
  291. #define MT6360_SHFT_MIVR_EVT (6)
  292. #define MT6360_MASK_CHG_TREG BIT(4)
  293. #define MT6360_SHFT_CHG_TREG (4)
  294. /* MT6360_PMU_CHRDET_STAT : 0xE7 */
  295. #define MT6360_MASK_CHRDET_EXT_EVT BIT(4)
  296. /* MT6360_PMU_CHG_MASK6 : 0xF5 */
  297. #define MT6360_MASK_ADC_DONE BIT(4)
  298. #endif /* __MT6360_PMU_CHARGER_H */