rt9471.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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) 2018. 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 __RT9471_CHARGER_H
  32. #define __RT9471_CHARGER_H
  33. #include <bits.h>
  34. #define U32_MAX ((u32)~0U)
  35. #define RT9471_SLAVE_ADDR 0x53
  36. #define RT9470_DEVID 0x09
  37. #define RT9470D_DEVID 0x0A
  38. #define RT9471_DEVID 0x0D
  39. #define RT9471D_DEVID 0x0E
  40. #ifdef MTK_RT9471_SUPPORT
  41. int rt9471_probe(void);
  42. #else
  43. static inline int rt9471_probe(void)
  44. {
  45. return 0;
  46. }
  47. #endif /* MTK_RT9471_SUPPORT */
  48. enum rt9471_reg_addr {
  49. RT9471_REG_OTGCFG = 0x00,
  50. RT9471_REG_TOP,
  51. RT9471_REG_FUNCTION,
  52. RT9471_REG_IBUS,
  53. RT9471_REG_VBUS,
  54. RT9471_REG_PRECHG,
  55. RT9471_REG_REGU,
  56. RT9471_REG_VCHG,
  57. RT9471_REG_ICHG,
  58. RT9471_REG_CHGTIMER,
  59. RT9471_REG_EOC,
  60. RT9471_REG_INFO,
  61. RT9471_REG_JEITA,
  62. RT9471_REG_PUMPEXP,
  63. RT9471_REG_DPDMDET,
  64. RT9471_REG_STATUS,
  65. RT9471_REG_STAT0,
  66. RT9471_REG_STAT1,
  67. RT9471_REG_STAT2,
  68. RT9471_REG_STAT3,
  69. RT9471_REG_IRQ0 = 0x20,
  70. RT9471_REG_IRQ1,
  71. RT9471_REG_IRQ2,
  72. RT9471_REG_IRQ3,
  73. RT9471_REG_MASK0 = 0x30,
  74. RT9471_REG_MASK1,
  75. RT9471_REG_MASK2,
  76. RT9471_REG_MASK3,
  77. RT9471_REG_HIDDEN_0 = 0x40,
  78. RT9471_REG_HIDDEN_2 = 0x42,
  79. RT9471_REG_TOP_HDEN,
  80. RT9471_REG_BUCK_HDEN1 = 0x45,
  81. RT9471_REG_BUCK_HDEN2 = 0x46,
  82. RT9471_REG_BUCK_HDEN3 = 0x54,
  83. RT9471_REG_BUCK_HDEN4,
  84. RT9471_REG_OTG_HDEN2 = 0x58,
  85. RT9471_REG_BUCK_HDEN5,
  86. RT9471_REG_PASSCODE1 = 0xA0,
  87. };
  88. /* ========== OTGCFG 0x00 ============ */
  89. #define RT9471_OTGCC_MASK BIT(0)
  90. /* ========== TOP 0x01 ============ */
  91. #define RT9471_QONRST_MASK BIT(7)
  92. #define RT9471_DISI2CTO_MASK BIT(3)
  93. #define RT9471_WDTCNTRST_MASK BIT(2)
  94. #define RT9471_WDT_SHIFT 0
  95. #define RT9471_WDT_MASK 0x03
  96. /* ========== FUNCTION 0x02 ============ */
  97. #define RT9471_BATFETDIS_SHIFT 7
  98. #define RT9471_BATFETDIS_MASK BIT(7)
  99. #define RT9471_OTG_EN_SHIFT 1
  100. #define RT9471_OTG_EN_MASK BIT(1)
  101. #define RT9471_CHG_EN_SHIFT 0
  102. #define RT9471_CHG_EN_MASK BIT(0)
  103. /* ========== IBUS 0x03 ============ */
  104. #define RT9471_AICC_EN_SHIFT 7
  105. #define RT9471_AICC_EN_MASK BIT(7)
  106. #define RT9471_AUTOAICR_MASK BIT(6)
  107. #define RT9471_AICR_SHIFT 0
  108. #define RT9471_AICR_MASK 0x3F
  109. #define RT9471_AICR_MIN 50000
  110. #define RT9471_AICR_MAX 3200000
  111. #define RT9471_AICR_STEP 50000
  112. /* ========== VBUS 0x04 ============ */
  113. #define RT9471_VAC_OVP_SHIFT 6
  114. #define RT9471_VAC_OVP_MASK 0xC0
  115. #define RT9471_MIVR_SHIFT 0
  116. #define RT9471_MIVR_MASK 0x0F
  117. #define RT9471_MIVR_MIN 3900000
  118. #define RT9471_MIVR_MAX 5400000
  119. #define RT9471_MIVR_STEP 100000
  120. #define RT9471_MIVRTRACK_SHIFT 4
  121. #define RT9471_MIVRTRACK_MASK 0x30
  122. /* ========== VCHG 0x07 ============ */
  123. #define RT9471_VRECHG_MASK BIT(7)
  124. #define RT9471_CV_SHIFT 0
  125. #define RT9471_CV_MASK 0x7F
  126. #define RT9471_CV_MIN 3900000
  127. #define RT9471_CV_MAX 4700000
  128. #define RT9471_CV_STEP 10000
  129. /* ========== ICHG 0x08 ============ */
  130. #define RT9471_ICHG_SHIFT 0
  131. #define RT9471_ICHG_MASK 0x3F
  132. #define RT9471_ICHG_MIN 0
  133. #define RT9471_ICHG_MAX 3150000
  134. #define RT9471_ICHG_STEP 50000
  135. /* ========== CHGTIMER 0x09 ============ */
  136. #define RT9471_SAFETMR_EN_SHIFT 7
  137. #define RT9471_SAFETMR_EN_MASK BIT(7)
  138. #define RT9471_SAFETMR_SHIFT 4
  139. #define RT9471_SAFETMR_MASK 0x30
  140. #define RT9471_SAFETMR_MIN 5
  141. #define RT9471_SAFETMR_MAX 20
  142. #define RT9471_SAFETMR_STEP 5
  143. /* ========== EOC 0x0A ============ */
  144. #define RT9471_IEOC_SHIFT 4
  145. #define RT9471_IEOC_MASK 0xF0
  146. #define RT9471_IEOC_MIN 50000
  147. #define RT9471_IEOC_MAX 800000
  148. #define RT9471_IEOC_STEP 50000
  149. #define RT9471_TE_MASK BIT(1)
  150. #define RT9471_EOC_RST_SHIFT 0
  151. #define RT9471_EOC_RST_MASK BIT(0)
  152. /* ========== INFO 0x0B ============ */
  153. #define RT9471_REGRST_MASK BIT(7)
  154. #define RT9471_DEVID_SHIFT 3
  155. #define RT9471_DEVID_MASK 0x78
  156. #define RT9471_DEVREV_SHIFT 0
  157. #define RT9471_DEVREV_MASK 0x03
  158. /* ========== JEITA 0x0C ============ */
  159. #define RT9471_JEITA_EN_MASK BIT(7)
  160. /* ========== PUMPEXP 0x0D ============ */
  161. #define RT9471_PE_EN_MASK BIT(7)
  162. #define RT9471_PE_SEL_MASK BIT(6)
  163. #define RT9471_PE10_INC_MASK BIT(5)
  164. #define RT9471_PE20_CODE_SHIFT 0
  165. #define RT9471_PE20_CODE_MASK 0x1F
  166. #define RT9471_PE20_CODE_MIN 5500000
  167. #define RT9471_PE20_CODE_MAX 20000000
  168. #define RT9471_PE20_CODE_STEP 500000
  169. /* ========== DPDMDET 0x0E ============ */
  170. #define RT9471_BC12_EN_MASK BIT(7)
  171. /* ========== STATUS 0x0F ============ */
  172. #define RT9471_ICSTAT_SHIFT 0
  173. #define RT9471_ICSTAT_MASK 0x0F
  174. #define RT9471_PORTSTAT_SHIFT 4
  175. #define RT9471_PORTSTAT_MASK 0xF0
  176. /* ========== STAT0 0x10 ============ */
  177. #define RT9471_ST_VBUSGD_SHIFT 7
  178. #define RT9471_ST_VBUSGD_MASK BIT(7)
  179. #define RT9471_ST_CHGRDY_SHIFT 6
  180. #define RT9471_ST_CHGRDY_MASK BIT(6)
  181. #define RT9471_ST_CHGDONE_SHIFT 3
  182. #define RT9471_ST_CHGDONE_MASK BIT(3)
  183. #define RT9471_ST_BC12_DONE_SHIFT 0
  184. #define RT9471_ST_BC12_DONE_MASK BIT(0)
  185. /* ========== STAT1 0x11 ============ */
  186. #define RT9471_ST_MIVR_SHIFT 7
  187. #define RT9471_ST_MIVR_MASK BIT(7)
  188. #define RT9471_ST_AICR_MASK BIT(6)
  189. #define RT9471_ST_TOUT_SHIFT 3
  190. #define RT9471_ST_BATOV_SHIFT 1
  191. #define RT9471_ST_BATOV_MASK BIT(1)
  192. /* ========== STAT3 0x13 ============ */
  193. #define RT9471_ST_VACOV_SHIFT 6
  194. #define RT9471_ST_VACOV_MASK BIT(6)
  195. /* ========== HIDDEN_0 0x40 ============ */
  196. #define RT9471_CHIP_REV_SHIFT 5
  197. #define RT9471_CHIP_REV_MASK 0xE0
  198. /* ========== HIDDEN_2 0x42 ============ */
  199. #define RT9471_FORCE_HZ_SHIFT 2
  200. #define RT9471_FORCE_HZ_MASK BIT(2)
  201. /* ========== TOP_HDEN 0x43 ============ */
  202. #define RT9471_FORCE_EN_VBUS_SINK_SHIFT 4
  203. #define RT9471_FORCE_EN_VBUS_SINK_MASK BIT(4)
  204. /* ========== OTG_HDEN2 0x58 ============ */
  205. #define RT9471_REG_OTG_RES_COMP_SHIFT 4
  206. #define RT9471_REG_OTG_RES_COMP_MASK 0x30
  207. #endif /* __RT9471_CHARGER_H */