rt9471.c 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198
  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. #include <platform/mt_typedefs.h>
  32. #include <platform/errno.h>
  33. #include <platform/mt_i2c.h>
  34. #include <platform/mt_gpio.h>
  35. #include "rt9471.h"
  36. #include "mtk_charger_intf.h"
  37. #define RT9471_LK_DRV_VERSION "1.0.3_MTK"
  38. /* ================= */
  39. /* Internal variable */
  40. /* ================= */
  41. enum rt9471_stat_idx {
  42. RT9471_STATIDX_STAT0 = 0,
  43. RT9471_STATIDX_STAT1,
  44. RT9471_STATIDX_STAT2,
  45. RT9471_STATIDX_STAT3,
  46. RT9471_STATIDX_MAX,
  47. };
  48. enum rt9471_irq_idx {
  49. RT9471_IRQIDX_IRQ0 = 0,
  50. RT9471_IRQIDX_IRQ1,
  51. RT9471_IRQIDX_IRQ2,
  52. RT9471_IRQIDX_IRQ3,
  53. RT9471_IRQIDX_MAX,
  54. };
  55. enum rt9471_ic_stat {
  56. RT9471_ICSTAT_SLEEP = 0,
  57. RT9471_ICSTAT_VBUSRDY,
  58. RT9471_ICSTAT_TRICKLECHG,
  59. RT9471_ICSTAT_PRECHG,
  60. RT9471_ICSTAT_FASTCHG,
  61. RT9471_ICSTAT_IEOC,
  62. RT9471_ICSTAT_BGCHG,
  63. RT9471_ICSTAT_CHGDONE,
  64. RT9471_ICSTAT_CHGFAULT,
  65. RT9471_ICSTAT_OTG = 15,
  66. RT9471_ICSTAT_MAX,
  67. };
  68. static const char *rt9471_ic_stat_name[RT9471_ICSTAT_MAX] = {
  69. "hz/sleep", "ready", "trickle-charge", "pre-charge",
  70. "fast-charge", "ieoc-charge", "background-charge",
  71. "done", "fault", "RESERVED", "RESERVED", "RESERVED",
  72. "RESERVED", "RESERVED", "RESERVED", "OTG",
  73. };
  74. enum rt9471_mivr_track {
  75. RT9471_MIVRTRACK_REG = 0,
  76. RT9471_MIVRTRACK_VBAT_200MV,
  77. RT9471_MIVRTRACK_VBAT_250MV,
  78. RT9471_MIVRTRACK_VBAT_300MV,
  79. RT9471_MIVRTRACK_MAX,
  80. };
  81. struct rt9471_desc {
  82. u32 vac_ovp;
  83. u32 mivr;
  84. u32 aicr;
  85. u32 cv;
  86. u32 ichg;
  87. u32 ieoc;
  88. u32 safe_tmr;
  89. u32 wdt;
  90. u32 mivr_track;
  91. bool en_safe_tmr;
  92. bool en_te;
  93. bool en_jeita;
  94. bool ceb_invert;
  95. bool dis_i2c_tout;
  96. bool en_qon_rst;
  97. bool auto_aicr;
  98. };
  99. static struct rt9471_desc rt9471_default_desc = {
  100. .vac_ovp = 14000000,
  101. .mivr = 4400000,
  102. .aicr = 500000,
  103. .cv = 4350000,
  104. .ichg = 1000000,
  105. .ieoc = 200000,
  106. .safe_tmr = 10,
  107. .wdt = 40,
  108. .mivr_track = RT9471_MIVRTRACK_REG,
  109. .en_safe_tmr = true,
  110. .en_te = true,
  111. .en_jeita = false,
  112. .ceb_invert = false,
  113. .dis_i2c_tout = false,
  114. .en_qon_rst = true,
  115. .auto_aicr = false,
  116. };
  117. static const u8 rt9471_irq_maskall[RT9471_IRQIDX_MAX] = {
  118. 0xFF, 0xFF, 0xFF, 0xFF,
  119. };
  120. static const u32 rt9471_vac_ovp[] = {
  121. 5800000, 6500000, 10900000, 14000000,
  122. };
  123. static const u32 rt9471_wdt[] = {
  124. 0, 40, 80, 160,
  125. };
  126. static const u8 rt9471_val_en_hidden_mode[] = {
  127. 0x69, 0x96,
  128. };
  129. struct rt9471_chip {
  130. struct mtk_charger_info mchr_info;
  131. struct mt_i2c_t i2c;
  132. int i2c_log_level;
  133. int hidden_mode_cnt;
  134. u8 chip_rev;
  135. struct rt9471_desc *desc;
  136. u32 ceb_gpio;
  137. bool wkard_en;
  138. };
  139. static const u8 rt9471_reg_addr[] = {
  140. RT9471_REG_OTGCFG,
  141. RT9471_REG_TOP,
  142. RT9471_REG_FUNCTION,
  143. RT9471_REG_IBUS,
  144. RT9471_REG_VBUS,
  145. RT9471_REG_PRECHG,
  146. RT9471_REG_REGU,
  147. RT9471_REG_VCHG,
  148. RT9471_REG_ICHG,
  149. RT9471_REG_CHGTIMER,
  150. RT9471_REG_EOC,
  151. RT9471_REG_INFO,
  152. RT9471_REG_JEITA,
  153. RT9471_REG_PUMPEXP,
  154. RT9471_REG_DPDMDET,
  155. RT9471_REG_STATUS,
  156. RT9471_REG_STAT0,
  157. RT9471_REG_STAT1,
  158. RT9471_REG_STAT2,
  159. RT9471_REG_STAT3,
  160. /* Skip IRQs to prevent reading clear while dumping registers */
  161. RT9471_REG_MASK0,
  162. RT9471_REG_MASK1,
  163. RT9471_REG_MASK2,
  164. RT9471_REG_MASK3,
  165. };
  166. static int rt9471_i2c_read_byte(struct rt9471_chip *chip, u8 cmd, u8 *data)
  167. {
  168. int ret = 0;
  169. u8 regval = cmd;
  170. struct mt_i2c_t *i2c = &chip->i2c;
  171. ret = i2c_write_read(i2c, &regval, 1, 1);
  172. if (ret != I2C_OK)
  173. dprintf(CRITICAL, "%s reg0x%02X fail(%d)\n",
  174. __func__, cmd, ret);
  175. else {
  176. dprintf(SPEW, "%s reg0x%02X = 0x%02X\n", __func__, cmd, regval);
  177. *data = regval;
  178. }
  179. return ret;
  180. }
  181. static int rt9471_i2c_write_byte(struct rt9471_chip *chip, u8 cmd, u8 data)
  182. {
  183. int ret = 0;
  184. u8 write_buf[2] = {cmd, data};
  185. struct mt_i2c_t *i2c = &chip->i2c;
  186. ret = i2c_write(i2c, write_buf, 2);
  187. if (ret != I2C_OK)
  188. dprintf(CRITICAL, "%s reg0x%02X = 0x%02X fail(%d)\n",
  189. __func__, cmd, data, ret);
  190. else
  191. dprintf(SPEW, "%s reg0x%02X = 0x%02X\n", __func__, cmd, data);
  192. return ret;
  193. }
  194. static int rt9471_i2c_block_read(struct rt9471_chip *chip, u8 cmd, u32 len,
  195. u8 *data)
  196. {
  197. int ret = 0, i = 0;
  198. struct mt_i2c_t *i2c = &chip->i2c;
  199. data[0] = cmd;
  200. ret = i2c_write_read(i2c, data, 1, len);
  201. if (ret != I2C_OK)
  202. dprintf(CRITICAL, "%s reg0x%02X..reg0x%02X fail(%d)\n",
  203. __func__, cmd, cmd + len - 1, ret);
  204. else
  205. for (i = 0; i <= len - 1; i++)
  206. dprintf(SPEW, "%s reg0x%02X = 0x%02X\n",
  207. __func__, cmd + i, data[i]);
  208. return ret;
  209. }
  210. static int rt9471_i2c_block_write(struct rt9471_chip *chip, u8 cmd, u32 len,
  211. const u8 *data)
  212. {
  213. int ret = 0, i = 0;
  214. u8 write_buf[len + 1];
  215. struct mt_i2c_t *i2c = &chip->i2c;
  216. write_buf[0] = cmd;
  217. memcpy(&write_buf[1], data, len);
  218. ret = i2c_write(i2c, write_buf, len + 1);
  219. if (ret != I2C_OK) {
  220. dprintf(CRITICAL, "%s fail(%d)\n", __func__, ret);
  221. for (i = 0; i <= len - 1; i++)
  222. dprintf(CRITICAL, "%s reg0x%02X = 0x%02X\n",
  223. __func__, cmd + i, data[i]);
  224. } else
  225. for (i = 0; i <= len - 1; i++)
  226. dprintf(SPEW, "%s reg0x%02X = 0x%02X\n",
  227. __func__, cmd + i, data[i]);
  228. return ret;
  229. }
  230. static int rt9471_i2c_test_bit(struct rt9471_chip *chip, u8 cmd, u8 shift,
  231. bool *is_one)
  232. {
  233. int ret = 0;
  234. u8 regval = 0;
  235. ret = rt9471_i2c_read_byte(chip, cmd, &regval);
  236. if (ret != I2C_OK) {
  237. *is_one = false;
  238. return ret;
  239. }
  240. regval &= 1 << shift;
  241. *is_one = (regval ? true : false);
  242. return ret;
  243. }
  244. static int rt9471_i2c_update_bits(struct rt9471_chip *chip, u8 cmd, u8 data,
  245. u8 mask)
  246. {
  247. int ret = 0;
  248. u8 regval = 0;
  249. ret = rt9471_i2c_read_byte(chip, cmd, &regval);
  250. if (ret != I2C_OK)
  251. return ret;
  252. regval &= ~mask;
  253. regval |= (data & mask);
  254. return rt9471_i2c_write_byte(chip, cmd, regval);
  255. }
  256. static inline int rt9471_set_bit(struct rt9471_chip *chip, u8 cmd, u8 mask)
  257. {
  258. return rt9471_i2c_update_bits(chip, cmd, mask, mask);
  259. }
  260. static inline int rt9471_clr_bit(struct rt9471_chip *chip, u8 cmd, u8 mask)
  261. {
  262. return rt9471_i2c_update_bits(chip, cmd, 0x00, mask);
  263. }
  264. static inline u8 rt9471_closest_reg(u32 min, u32 max, u32 step, u32 target)
  265. {
  266. if (target < min)
  267. return 0;
  268. if (target >= max)
  269. target = max;
  270. return (target - min) / step;
  271. }
  272. static inline u8 rt9471_closest_reg_via_tbl(const u32 *tbl, u32 tbl_size,
  273. u32 target)
  274. {
  275. u32 i = 0;
  276. if (target < tbl[0])
  277. return 0;
  278. for (i = 0; i < tbl_size - 1; i++) {
  279. if (target >= tbl[i] && target < tbl[i + 1])
  280. return i;
  281. }
  282. return tbl_size - 1;
  283. }
  284. static inline u32 rt9471_closest_value(u32 min, u32 max, u32 step, u8 regval)
  285. {
  286. u32 val = 0;
  287. val = min + regval * step;
  288. if (val > max)
  289. val = max;
  290. return val;
  291. }
  292. static int rt9471_enable_hidden_mode(struct rt9471_chip *chip, bool en)
  293. {
  294. int ret = 0;
  295. if (en) {
  296. if (chip->hidden_mode_cnt == 0) {
  297. ret = rt9471_i2c_block_write(chip, RT9471_REG_PASSCODE1,
  298. ARRAY_SIZE(rt9471_val_en_hidden_mode),
  299. rt9471_val_en_hidden_mode);
  300. if (ret != I2C_OK)
  301. goto err;
  302. }
  303. chip->hidden_mode_cnt++;
  304. } else {
  305. if (chip->hidden_mode_cnt == 1) { /* last one */
  306. ret = rt9471_i2c_write_byte(chip, RT9471_REG_PASSCODE1,
  307. 0x00);
  308. if (ret != I2C_OK)
  309. goto err;
  310. }
  311. chip->hidden_mode_cnt--;
  312. }
  313. dprintf(chip->i2c_log_level, "%s en = %d, cnt = %d\n",
  314. __func__, en, chip->hidden_mode_cnt);
  315. goto out;
  316. err:
  317. dprintf(CRITICAL, "%s en = %d fail(%d)\n", __func__, en, ret);
  318. out:
  319. return ret;
  320. }
  321. static int __rt9471_get_ic_stat(struct rt9471_chip *chip,
  322. enum rt9471_ic_stat *stat)
  323. {
  324. int ret = 0;
  325. u8 regval = 0;
  326. ret = rt9471_i2c_read_byte(chip, RT9471_REG_STATUS, &regval);
  327. if (ret != I2C_OK)
  328. return ret;
  329. *stat = (regval & RT9471_ICSTAT_MASK) >> RT9471_ICSTAT_SHIFT;
  330. return ret;
  331. }
  332. static int __rt9471_get_mivr(struct rt9471_chip *chip, u32 *mivr)
  333. {
  334. int ret = 0;
  335. u8 regval = 0;
  336. ret = rt9471_i2c_read_byte(chip, RT9471_REG_VBUS, &regval);
  337. if (ret != I2C_OK)
  338. return ret;
  339. regval = (regval & RT9471_MIVR_MASK) >> RT9471_MIVR_SHIFT;
  340. *mivr = rt9471_closest_value(RT9471_MIVR_MIN, RT9471_MIVR_MAX,
  341. RT9471_MIVR_STEP, regval);
  342. return ret;
  343. }
  344. static int __rt9471_get_aicr(struct rt9471_chip *chip, u32 *aicr)
  345. {
  346. int ret = 0;
  347. u8 regval = 0;
  348. ret = rt9471_i2c_read_byte(chip, RT9471_REG_IBUS, &regval);
  349. if (ret != I2C_OK)
  350. return ret;
  351. regval = (regval & RT9471_AICR_MASK) >> RT9471_AICR_SHIFT;
  352. *aicr = rt9471_closest_value(RT9471_AICR_MIN, RT9471_AICR_MAX,
  353. RT9471_AICR_STEP, regval);
  354. if (*aicr > RT9471_AICR_MIN && *aicr < RT9471_AICR_MAX)
  355. *aicr -= RT9471_AICR_STEP;
  356. return ret;
  357. }
  358. static int __rt9471_get_cv(struct rt9471_chip *chip, u32 *cv)
  359. {
  360. int ret = 0;
  361. u8 regval = 0;
  362. ret = rt9471_i2c_read_byte(chip, RT9471_REG_VCHG, &regval);
  363. if (ret != I2C_OK)
  364. return ret;
  365. regval = (regval & RT9471_CV_MASK) >> RT9471_CV_SHIFT;
  366. *cv = rt9471_closest_value(RT9471_CV_MIN, RT9471_CV_MAX, RT9471_CV_STEP,
  367. regval);
  368. return ret;
  369. }
  370. static int __rt9471_get_ichg(struct rt9471_chip *chip, u32 *ichg)
  371. {
  372. int ret = 0;
  373. u8 regval = 0;
  374. ret = rt9471_i2c_read_byte(chip, RT9471_REG_ICHG, &regval);
  375. if (ret != I2C_OK)
  376. return ret;
  377. regval = (regval & RT9471_ICHG_MASK) >> RT9471_ICHG_SHIFT;
  378. *ichg = rt9471_closest_value(RT9471_ICHG_MIN, RT9471_ICHG_MAX,
  379. RT9471_ICHG_STEP, regval);
  380. return ret;
  381. }
  382. static int __rt9471_get_ieoc(struct rt9471_chip *chip, u32 *ieoc)
  383. {
  384. int ret = 0;
  385. u8 regval = 0;
  386. ret = rt9471_i2c_read_byte(chip, RT9471_REG_EOC, &regval);
  387. if (ret != I2C_OK)
  388. return ret;
  389. regval = (regval & RT9471_IEOC_MASK) >> RT9471_IEOC_SHIFT;
  390. *ieoc = rt9471_closest_value(RT9471_IEOC_MIN, RT9471_IEOC_MAX,
  391. RT9471_IEOC_STEP, regval);
  392. return ret;
  393. }
  394. static int __rt9471_is_chg_enabled(struct rt9471_chip *chip, bool *en)
  395. {
  396. return rt9471_i2c_test_bit(chip, RT9471_REG_FUNCTION,
  397. RT9471_CHG_EN_SHIFT, en);
  398. }
  399. static int __rt9471_enable_safe_tmr(struct rt9471_chip *chip, bool en)
  400. {
  401. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  402. return (en ? rt9471_set_bit : rt9471_clr_bit)
  403. (chip, RT9471_REG_CHGTIMER, RT9471_SAFETMR_EN_MASK);
  404. }
  405. static int __rt9471_enable_te(struct rt9471_chip *chip, bool en)
  406. {
  407. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  408. return (en ? rt9471_set_bit : rt9471_clr_bit)
  409. (chip, RT9471_REG_EOC, RT9471_TE_MASK);
  410. }
  411. static int __rt9471_enable_jeita(struct rt9471_chip *chip, bool en)
  412. {
  413. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  414. return (en ? rt9471_set_bit : rt9471_clr_bit)
  415. (chip, RT9471_REG_JEITA, RT9471_JEITA_EN_MASK);
  416. }
  417. static int __rt9471_disable_i2c_tout(struct rt9471_chip *chip, bool en)
  418. {
  419. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  420. return (en ? rt9471_set_bit : rt9471_clr_bit)
  421. (chip, RT9471_REG_TOP, RT9471_DISI2CTO_MASK);
  422. }
  423. static int __rt9471_enable_qon_rst(struct rt9471_chip *chip, bool en)
  424. {
  425. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  426. return (en ? rt9471_set_bit : rt9471_clr_bit)
  427. (chip, RT9471_REG_TOP, RT9471_QONRST_MASK);
  428. }
  429. static int __rt9471_enable_autoaicr(struct rt9471_chip *chip, bool en)
  430. {
  431. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  432. return (en ? rt9471_set_bit : rt9471_clr_bit)
  433. (chip, RT9471_REG_IBUS, RT9471_AUTOAICR_MASK);
  434. }
  435. static int __rt9471_enable_hz(struct rt9471_chip *chip, bool en)
  436. {
  437. int ret = 0;
  438. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  439. ret = rt9471_enable_hidden_mode(chip, true);
  440. if (ret != I2C_OK)
  441. return ret;
  442. /* Use force HZ */
  443. ret = (en ? rt9471_set_bit : rt9471_clr_bit)
  444. (chip, RT9471_REG_HIDDEN_2, RT9471_FORCE_HZ_MASK);
  445. rt9471_enable_hidden_mode(chip, false);
  446. return ret;
  447. }
  448. static int __rt9471_enable_chg(struct rt9471_chip *chip, bool en)
  449. {
  450. struct rt9471_desc *desc = chip->desc;
  451. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  452. if (chip->ceb_gpio != U32_MAX)
  453. mt_set_gpio_out(chip->ceb_gpio, desc->ceb_invert ? en : !en);
  454. return (en ? rt9471_set_bit : rt9471_clr_bit)
  455. (chip, RT9471_REG_FUNCTION, RT9471_CHG_EN_MASK);
  456. }
  457. static int __rt9471_set_vac_ovp(struct rt9471_chip *chip, u32 vac_ovp)
  458. {
  459. u8 regval = 0;
  460. regval = rt9471_closest_reg_via_tbl(rt9471_vac_ovp,
  461. ARRAY_SIZE(rt9471_vac_ovp),
  462. vac_ovp);
  463. dprintf(chip->i2c_log_level, "%s vac_ovp = %d(0x%02X)\n",
  464. __func__, vac_ovp, regval);
  465. return rt9471_i2c_update_bits(chip, RT9471_REG_VBUS,
  466. regval << RT9471_VAC_OVP_SHIFT,
  467. RT9471_VAC_OVP_MASK);
  468. }
  469. static int __rt9471_set_mivr(struct rt9471_chip *chip, u32 mivr)
  470. {
  471. u8 regval = 0;
  472. regval = rt9471_closest_reg(RT9471_MIVR_MIN, RT9471_MIVR_MAX,
  473. RT9471_MIVR_STEP, mivr);
  474. dprintf(chip->i2c_log_level, "%s mivr = %d(0x%02X)\n",
  475. __func__, mivr, regval);
  476. return rt9471_i2c_update_bits(chip, RT9471_REG_VBUS,
  477. regval << RT9471_MIVR_SHIFT,
  478. RT9471_MIVR_MASK);
  479. }
  480. static int __rt9471_set_aicr(struct rt9471_chip *chip, u32 aicr)
  481. {
  482. u8 regval = 0;
  483. regval = rt9471_closest_reg(RT9471_AICR_MIN, RT9471_AICR_MAX,
  484. RT9471_AICR_STEP, aicr);
  485. /* 0 & 1 are both 50mA */
  486. if (aicr < RT9471_AICR_MAX)
  487. regval += 1;
  488. dprintf(chip->i2c_log_level, "%s aicr = %d(0x%02X)\n",
  489. __func__, aicr, regval);
  490. return rt9471_i2c_update_bits(chip, RT9471_REG_IBUS,
  491. regval << RT9471_AICR_SHIFT,
  492. RT9471_AICR_MASK);
  493. }
  494. static int __rt9471_set_cv(struct rt9471_chip *chip, u32 cv)
  495. {
  496. u8 regval = 0;
  497. regval = rt9471_closest_reg(RT9471_CV_MIN, RT9471_CV_MAX,
  498. RT9471_CV_STEP, cv);
  499. dprintf(chip->i2c_log_level, "%s cv = %d(0x%02X)\n",
  500. __func__, cv, regval);
  501. return rt9471_i2c_update_bits(chip, RT9471_REG_VCHG,
  502. regval << RT9471_CV_SHIFT,
  503. RT9471_CV_MASK);
  504. }
  505. static int __rt9471_set_ichg(struct rt9471_chip *chip, u32 ichg)
  506. {
  507. u8 regval = 0;
  508. regval = rt9471_closest_reg(RT9471_ICHG_MIN, RT9471_ICHG_MAX,
  509. RT9471_ICHG_STEP, ichg);
  510. dprintf(chip->i2c_log_level, "%s ichg = %d(0x%02X)\n",
  511. __func__, ichg, regval);
  512. return rt9471_i2c_update_bits(chip, RT9471_REG_ICHG,
  513. regval << RT9471_ICHG_SHIFT,
  514. RT9471_ICHG_MASK);
  515. }
  516. static int __rt9471_set_ieoc(struct rt9471_chip *chip, u32 ieoc)
  517. {
  518. u8 regval = 0;
  519. regval = rt9471_closest_reg(RT9471_IEOC_MIN, RT9471_IEOC_MAX,
  520. RT9471_IEOC_STEP, ieoc);
  521. dprintf(chip->i2c_log_level, "%s ieoc = %d(0x%02X)\n",
  522. __func__, ieoc, regval);
  523. return rt9471_i2c_update_bits(chip, RT9471_REG_EOC,
  524. regval << RT9471_IEOC_SHIFT,
  525. RT9471_IEOC_MASK);
  526. }
  527. static int __rt9471_set_safe_tmr(struct rt9471_chip *chip, u32 hr)
  528. {
  529. u8 regval = 0;
  530. regval = rt9471_closest_reg(RT9471_SAFETMR_MIN, RT9471_SAFETMR_MAX,
  531. RT9471_SAFETMR_STEP, hr);
  532. dprintf(chip->i2c_log_level, "%s time = %d(0x%02X)\n",
  533. __func__, hr, regval);
  534. return rt9471_i2c_update_bits(chip, RT9471_REG_CHGTIMER,
  535. regval << RT9471_SAFETMR_SHIFT,
  536. RT9471_SAFETMR_MASK);
  537. }
  538. static int __rt9471_set_wdt(struct rt9471_chip *chip, u32 sec)
  539. {
  540. u8 regval = 0;
  541. /* 40s is the minimum, set to 40 except sec == 0 */
  542. if (sec <= 40 && sec > 0)
  543. sec = 40;
  544. regval = rt9471_closest_reg_via_tbl(rt9471_wdt, ARRAY_SIZE(rt9471_wdt),
  545. sec);
  546. dprintf(chip->i2c_log_level, "%s time = %d(0x%02X)\n",
  547. __func__, sec, regval);
  548. return rt9471_i2c_update_bits(chip, RT9471_REG_TOP,
  549. regval << RT9471_WDT_SHIFT,
  550. RT9471_WDT_MASK);
  551. }
  552. static int __rt9471_set_mivrtrack(struct rt9471_chip *chip, u32 mivr_track)
  553. {
  554. if (mivr_track >= RT9471_MIVRTRACK_MAX)
  555. mivr_track = RT9471_MIVRTRACK_VBAT_300MV;
  556. dprintf(chip->i2c_log_level, "%s mivrtrack = %d\n",
  557. __func__, mivr_track);
  558. return rt9471_i2c_update_bits(chip, RT9471_REG_VBUS,
  559. mivr_track << RT9471_MIVRTRACK_SHIFT,
  560. RT9471_MIVRTRACK_MASK);
  561. }
  562. static int __rt9471_kick_wdt(struct rt9471_chip *chip)
  563. {
  564. dprintf(chip->i2c_log_level, "%s\n", __func__);
  565. return rt9471_set_bit(chip, RT9471_REG_TOP, RT9471_WDTCNTRST_MASK);
  566. }
  567. static bool rt9471_is_hw_exist(struct rt9471_chip *chip)
  568. {
  569. int ret = 0;
  570. u8 info = 0, dev_id = 0, dev_rev = 0;
  571. ret = rt9471_i2c_read_byte(chip, RT9471_REG_INFO, &info);
  572. if (ret != I2C_OK) {
  573. dprintf(CRITICAL, "%s get devinfo fail(%d)\n", __func__, ret);
  574. return false;
  575. }
  576. dev_id = (info & RT9471_DEVID_MASK) >> RT9471_DEVID_SHIFT;
  577. switch (dev_id) {
  578. case RT9470_DEVID:
  579. case RT9470D_DEVID:
  580. case RT9471_DEVID:
  581. case RT9471D_DEVID:
  582. break;
  583. default:
  584. dprintf(CRITICAL, "%s incorrect devid 0x%02X\n",
  585. __func__, dev_id);
  586. return false;
  587. }
  588. dev_rev = (info & RT9471_DEVREV_MASK) >> RT9471_DEVREV_SHIFT;
  589. dprintf(chip->i2c_log_level, "%s id = 0x%02X, rev = 0x%02X\n",
  590. __func__, dev_id, dev_rev);
  591. chip->mchr_info.device_id = dev_rev;
  592. return true;
  593. }
  594. static int rt9471_reset_register(struct rt9471_chip *chip)
  595. {
  596. int ret = 0;
  597. dprintf(chip->i2c_log_level, "%s\n", __func__);
  598. ret = rt9471_set_bit(chip, RT9471_REG_INFO, RT9471_REGRST_MASK);
  599. if (ret != I2C_OK)
  600. return ret;
  601. ret = __rt9471_enable_autoaicr(chip, false);
  602. if (ret != I2C_OK)
  603. return ret;
  604. return __rt9471_set_wdt(chip, 0);
  605. }
  606. static int rt9471_sw_workaround(struct rt9471_chip *chip)
  607. {
  608. int ret = 0;
  609. u8 regval = 0;
  610. dprintf(chip->i2c_log_level, "%s\n", __func__);
  611. ret = rt9471_enable_hidden_mode(chip, true);
  612. if (ret != I2C_OK)
  613. return ret;
  614. ret = rt9471_i2c_read_byte(chip, RT9471_REG_HIDDEN_0, &regval);
  615. if (ret != I2C_OK)
  616. goto out;
  617. chip->chip_rev = (regval & RT9471_CHIP_REV_MASK) >>
  618. RT9471_CHIP_REV_SHIFT;
  619. dprintf(chip->i2c_log_level, "%s chip_rev = %d\n",
  620. __func__, chip->chip_rev);
  621. out:
  622. rt9471_enable_hidden_mode(chip, false);
  623. return ret;
  624. }
  625. static int rt9471_init_setting(struct rt9471_chip *chip)
  626. {
  627. int ret = 0;
  628. struct rt9471_desc *desc = chip->desc;
  629. u8 evt[RT9471_IRQIDX_MAX] = {0};
  630. dprintf(chip->i2c_log_level, "%s\n", __func__);
  631. /* Mask all IRQs */
  632. ret = rt9471_i2c_block_write(chip, RT9471_REG_MASK0,
  633. ARRAY_SIZE(rt9471_irq_maskall),
  634. rt9471_irq_maskall);
  635. if (ret != I2C_OK)
  636. dprintf(CRITICAL, "%s mask irq fail(%d)\n", __func__, ret);
  637. /* Clear all IRQs */
  638. ret = rt9471_i2c_block_read(chip, RT9471_REG_IRQ0, RT9471_IRQIDX_MAX,
  639. evt);
  640. if (ret != I2C_OK)
  641. dprintf(CRITICAL, "%s clear irq fail(%d)\n", __func__, ret);
  642. ret = __rt9471_set_vac_ovp(chip, desc->vac_ovp);
  643. if (ret != I2C_OK)
  644. dprintf(CRITICAL, "%s set vac ovp fail(%d)\n", __func__, ret);
  645. ret = __rt9471_set_mivr(chip, desc->mivr);
  646. if (ret != I2C_OK)
  647. dprintf(CRITICAL, "%s set mivr fail(%d)\n", __func__, ret);
  648. ret = __rt9471_set_aicr(chip, desc->aicr);
  649. if (ret != I2C_OK)
  650. dprintf(CRITICAL, "%s set aicr fail(%d)\n", __func__, ret);
  651. ret = __rt9471_set_cv(chip, desc->cv);
  652. if (ret != I2C_OK)
  653. dprintf(CRITICAL, "%s set cv fail(%d)\n", __func__, ret);
  654. ret = __rt9471_set_ichg(chip, desc->ichg);
  655. if (ret != I2C_OK)
  656. dprintf(CRITICAL, "%s set ichg fail(%d)\n", __func__, ret);
  657. ret = __rt9471_set_ieoc(chip, desc->ieoc);
  658. if (ret != I2C_OK)
  659. dprintf(CRITICAL, "%s set ieoc fail(%d)\n", __func__, ret);
  660. ret = __rt9471_set_safe_tmr(chip, desc->safe_tmr);
  661. if (ret != I2C_OK)
  662. dprintf(CRITICAL, "%s set safe tmr fail(%d)\n", __func__, ret);
  663. ret = __rt9471_set_mivrtrack(chip, desc->mivr_track);
  664. if (ret != I2C_OK)
  665. dprintf(CRITICAL, "%s set mivrtrack fail(%d)\n",
  666. __func__, ret);
  667. ret = __rt9471_enable_safe_tmr(chip, desc->en_safe_tmr);
  668. if (ret != I2C_OK)
  669. dprintf(CRITICAL, "%s en safe tmr fail(%d)\n", __func__, ret);
  670. ret = __rt9471_enable_te(chip, desc->en_te);
  671. if (ret != I2C_OK)
  672. dprintf(CRITICAL, "%s en te fail(%d)\n", __func__, ret);
  673. ret = __rt9471_enable_jeita(chip, desc->en_jeita);
  674. if (ret != I2C_OK)
  675. dprintf(CRITICAL, "%s en jeita fail(%d)\n", __func__, ret);
  676. ret = __rt9471_disable_i2c_tout(chip, desc->dis_i2c_tout);
  677. if (ret != I2C_OK)
  678. dprintf(CRITICAL, "%s dis i2c tout fail(%d)\n", __func__, ret);
  679. ret = __rt9471_enable_qon_rst(chip, desc->en_qon_rst);
  680. if (ret != I2C_OK)
  681. dprintf(CRITICAL, "%s en qon rst fail(%d)\n", __func__, ret);
  682. ret = __rt9471_enable_autoaicr(chip, desc->auto_aicr);
  683. if (ret != I2C_OK)
  684. dprintf(CRITICAL, "%s en autoaicr fail(%d)\n", __func__, ret);
  685. ret = rt9471_sw_workaround(chip);
  686. if (ret != I2C_OK)
  687. dprintf(CRITICAL, "%s sw workaround fail(%d)\n", __func__, ret);
  688. return 0;
  689. }
  690. /* =========================================================== */
  691. /* The following is implementation for interface of rt_charger */
  692. /* =========================================================== */
  693. static int rt9471_dump_register(struct mtk_charger_info *mchr_info)
  694. {
  695. int ret = 0, i = 0;
  696. u32 mivr = 0, aicr = 0, cv = 0, ichg = 0, ieoc = 0;
  697. bool chg_en = 0;
  698. enum rt9471_ic_stat ic_stat = RT9471_ICSTAT_SLEEP;
  699. u8 stats[RT9471_STATIDX_MAX] = {0}, regval = 0, hidden_2 = 0;
  700. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  701. ret = __rt9471_kick_wdt(chip);
  702. ret = __rt9471_get_mivr(chip, &mivr);
  703. ret = __rt9471_get_aicr(chip, &aicr);
  704. ret = __rt9471_get_cv(chip, &cv);
  705. ret = __rt9471_get_ichg(chip, &ichg);
  706. ret = __rt9471_get_ieoc(chip, &ieoc);
  707. ret = __rt9471_is_chg_enabled(chip, &chg_en);
  708. ret = __rt9471_get_ic_stat(chip, &ic_stat);
  709. ret = rt9471_i2c_block_read(chip, RT9471_REG_STAT0, RT9471_STATIDX_MAX,
  710. stats);
  711. ret = rt9471_i2c_read_byte(chip, RT9471_REG_HIDDEN_2, &hidden_2);
  712. if (ic_stat == RT9471_ICSTAT_CHGFAULT) {
  713. for (i = 0; i < ARRAY_SIZE(rt9471_reg_addr); i++) {
  714. ret = rt9471_i2c_read_byte(chip, rt9471_reg_addr[i],
  715. &regval);
  716. if (ret != I2C_OK)
  717. continue;
  718. dprintf(CRITICAL, "%s reg0x%02X = 0x%02X\n",
  719. __func__, rt9471_reg_addr[i], regval);
  720. }
  721. }
  722. dprintf(chip->i2c_log_level, "%s MIVR = %dmV, AICR = %dmA\n",
  723. __func__, mivr / 1000, aicr / 1000);
  724. dprintf(chip->i2c_log_level, "%s CV = %dmV, ICHG = %dmA, IEOC = %dmA\n",
  725. __func__, cv / 1000, ichg / 1000, ieoc / 1000);
  726. dprintf(chip->i2c_log_level, "%s CHG_EN = %d, IC_STAT = %s\n",
  727. __func__, chg_en, rt9471_ic_stat_name[ic_stat]);
  728. dprintf(chip->i2c_log_level,
  729. "%s STAT0 = 0x%02X, STAT1 = 0x%02X\n", __func__,
  730. stats[RT9471_STATIDX_STAT0], stats[RT9471_STATIDX_STAT1]);
  731. dprintf(chip->i2c_log_level,
  732. "%s STAT2 = 0x%02X, STAT3 = 0x%02X\n", __func__,
  733. stats[RT9471_STATIDX_STAT2], stats[RT9471_STATIDX_STAT3]);
  734. dprintf(chip->i2c_log_level, "%s HIDDEN_2 = 0x%02X\n",
  735. __func__, hidden_2);
  736. return 0;
  737. }
  738. static int rt9471_enable_charging(struct mtk_charger_info *mchr_info, bool en)
  739. {
  740. int ret = 0;
  741. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  742. return __rt9471_enable_chg(chip, en);
  743. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  744. if (en) {
  745. ret = __rt9471_set_wdt(chip, chip->desc->wdt);
  746. if (ret != I2C_OK) {
  747. dprintf(CRITICAL, "%s set wdt fail(%d)\n",
  748. __func__, ret);
  749. return ret;
  750. }
  751. }
  752. ret = __rt9471_enable_chg(chip, en);
  753. if (ret != I2C_OK) {
  754. dprintf(CRITICAL, "%s en chg fail(%d)\n", __func__, ret);
  755. return ret;
  756. }
  757. if (!en) {
  758. ret = __rt9471_set_wdt(chip, 0);
  759. if (ret != I2C_OK)
  760. dprintf(CRITICAL, "%s set wdt fail(%d)\n",
  761. __func__, ret);
  762. }
  763. return ret;
  764. }
  765. static int rt9471_set_mivr(struct mtk_charger_info *mchr_info, u32 mivr)
  766. {
  767. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  768. return __rt9471_set_mivr(chip, mivr * 1000);
  769. }
  770. static int rt9471_get_aicr(struct mtk_charger_info *mchr_info, u32 *aicr)
  771. {
  772. int ret = 0;
  773. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  774. ret = __rt9471_get_aicr(chip, aicr);
  775. *aicr /= 1000; /* uA --> mA */
  776. return ret;
  777. }
  778. static int rt9471_set_aicr(struct mtk_charger_info *mchr_info, u32 aicr)
  779. {
  780. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  781. return __rt9471_set_aicr(chip, aicr * 1000);
  782. }
  783. static int rt9471_get_ichg(struct mtk_charger_info *mchr_info, u32 *ichg)
  784. {
  785. int ret = 0;
  786. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  787. ret = __rt9471_get_ichg(chip, ichg);
  788. *ichg /= 1000; /* uA --> mA */
  789. return ret;
  790. }
  791. static int rt9471_set_ichg(struct mtk_charger_info *mchr_info, u32 ichg)
  792. {
  793. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  794. return __rt9471_set_ichg(chip, ichg * 1000);
  795. }
  796. static int rt9471_enable_power_path(struct mtk_charger_info *mchr_info, bool en)
  797. {
  798. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  799. dprintf(chip->i2c_log_level, "%s en = %d\n", __func__, en);
  800. return __rt9471_enable_hz(chip, !en);
  801. }
  802. static int rt9471_reset_pumpx(struct mtk_charger_info *mchr_info, bool en)
  803. {
  804. int ret = 0;
  805. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  806. struct rt9471_desc *desc = chip->desc;
  807. dprintf(chip->i2c_log_level, "%s en = %d, chip_rev = %d\n",
  808. __func__, en, chip->chip_rev);
  809. if (chip->chip_rev < 4)
  810. return -EOPNOTSUPP;
  811. if (en && desc->auto_aicr) {
  812. ret = __rt9471_enable_autoaicr(chip, false);
  813. if (ret != I2C_OK)
  814. return ret;
  815. }
  816. /* 50mA */
  817. ret = __rt9471_set_aicr(chip, en ? 50000 : desc->aicr);
  818. if (ret != I2C_OK)
  819. return ret;
  820. if (!en && desc->auto_aicr)
  821. ret = __rt9471_enable_autoaicr(chip, true);
  822. return ret;
  823. }
  824. static int rt9471_enable_wdt(struct mtk_charger_info *mchr_info, bool en)
  825. {
  826. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  827. return __rt9471_set_wdt(chip, en ? chip->desc->wdt : 0);
  828. }
  829. static int rt9471_reset_wdt(struct mtk_charger_info *mchr_info)
  830. {
  831. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  832. return __rt9471_kick_wdt(chip);
  833. }
  834. static int rt9471_sw_reset(struct mtk_charger_info *mchr_info)
  835. {
  836. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  837. return rt9471_reset_register(chip);
  838. }
  839. static inline int rt9471_fix_current_accuracy(struct rt9471_chip *chip, bool en)
  840. {
  841. int ret = 0;
  842. if (!(chip->wkard_en ^ en))
  843. return ret;
  844. ret = rt9471_enable_hidden_mode(chip, true);
  845. if (ret != I2C_OK)
  846. return ret;
  847. ret = rt9471_i2c_write_byte(chip, RT9471_REG_BUCK_HDEN4,
  848. en ? 0x77 : 0x71);
  849. if (ret != I2C_OK)
  850. goto out;
  851. ret = rt9471_i2c_write_byte(chip, RT9471_REG_BUCK_HDEN3,
  852. en ? 0xC0 : 0xF0);
  853. if (ret != I2C_OK)
  854. goto out;
  855. chip->wkard_en = en;
  856. out:
  857. rt9471_enable_hidden_mode(chip, false);
  858. return ret;
  859. }
  860. static int rt9471_check_charging_mode(struct mtk_charger_info *mchr_info)
  861. {
  862. int ret = 0;
  863. struct rt9471_chip *chip = (struct rt9471_chip *)mchr_info;
  864. static enum rt9471_ic_stat pre_stat = RT9471_ICSTAT_SLEEP;
  865. enum rt9471_ic_stat cur_stat = RT9471_ICSTAT_SLEEP;
  866. dprintf(chip->i2c_log_level, "%s\n", __func__);
  867. ret = __rt9471_get_ic_stat(chip, &cur_stat);
  868. if (ret != I2C_OK)
  869. goto out;
  870. dprintf(chip->i2c_log_level, "%s in %s stat, previously in %s stat\n",
  871. __func__, rt9471_ic_stat_name[cur_stat],
  872. rt9471_ic_stat_name[pre_stat]);
  873. if (cur_stat == pre_stat)
  874. goto out;
  875. switch (cur_stat) {
  876. case RT9471_ICSTAT_TRICKLECHG:
  877. case RT9471_ICSTAT_PRECHG:
  878. ret = rt9471_fix_current_accuracy(chip, true);
  879. if (ret != I2C_OK) {
  880. dprintf(CRITICAL, "%s fix current accuracy fail(%d)\n",
  881. __func__, ret);
  882. goto out;
  883. }
  884. break;
  885. default:
  886. ret = rt9471_fix_current_accuracy(chip, false);
  887. if (ret != I2C_OK) {
  888. dprintf(CRITICAL, "%s fix current accuracy fail(%d)\n",
  889. __func__, ret);
  890. goto out;
  891. }
  892. break;
  893. }
  894. pre_stat = cur_stat;
  895. out:
  896. rt9471_dump_register(mchr_info);
  897. return ret;
  898. }
  899. static struct mtk_charger_ops rt9471_mchr_ops = {
  900. .dump_register = rt9471_dump_register,
  901. .enable_charging = rt9471_enable_charging,
  902. .set_mivr = rt9471_set_mivr,
  903. .get_aicr = rt9471_get_aicr,
  904. .set_aicr = rt9471_set_aicr,
  905. .get_ichg = rt9471_get_ichg,
  906. .set_ichg = rt9471_set_ichg,
  907. .enable_power_path = rt9471_enable_power_path,
  908. .reset_pumpx = rt9471_reset_pumpx,
  909. .enable_wdt = rt9471_enable_wdt,
  910. .reset_wdt = rt9471_reset_wdt,
  911. .sw_reset = rt9471_sw_reset,
  912. .check_charging_mode = rt9471_check_charging_mode,
  913. };
  914. /* Info of primary charger */
  915. static struct rt9471_chip g_rt9471_chip = {
  916. .mchr_info = {
  917. .name = "primary_charger",
  918. .alias_name = "rt9471_charger",
  919. .device_id = -1,
  920. .mchr_ops = &rt9471_mchr_ops,
  921. },
  922. .i2c = {
  923. .id = I2C7,
  924. .addr = RT9471_SLAVE_ADDR,
  925. .mode = FS_MODE,
  926. .speed = 400,
  927. },
  928. .i2c_log_level = INFO,
  929. .hidden_mode_cnt = 0,
  930. .chip_rev = 0,
  931. .desc = &rt9471_default_desc,
  932. .ceb_gpio = U32_MAX,
  933. .wkard_en = false,
  934. };
  935. int rt9471_probe(void)
  936. {
  937. int ret = 0;
  938. dprintf(INFO, "%s (%s)\n", __func__, RT9471_LK_DRV_VERSION);
  939. if (!rt9471_is_hw_exist(&g_rt9471_chip))
  940. return -ENODEV;
  941. ret = rt9471_reset_register(&g_rt9471_chip);
  942. if (ret != I2C_OK)
  943. return ret;
  944. ret = rt9471_init_setting(&g_rt9471_chip);
  945. if (ret != I2C_OK)
  946. return ret;
  947. ret = mtk_charger_set_info(&g_rt9471_chip.mchr_info);
  948. if (ret < 0)
  949. return ret;
  950. rt9471_dump_register(&g_rt9471_chip.mchr_info);
  951. dprintf(INFO, "%s successfully\n", __func__);
  952. return 0;
  953. }
  954. /*
  955. * Release Note
  956. * 1.0.3
  957. * (1) Disable Auto AICR and WDT after register reset
  958. *
  959. * 1.0.2
  960. * (1) Sync with Kernel Driver
  961. * (2) Remove unnecessary #include
  962. * (3) Add rt9471_reset_pumpx()
  963. *
  964. * 1.0.1
  965. * (1) Kick WDT in rt9471_check_charging_mode()
  966. * (2) Add support for RT9470/RT9470D
  967. * (3) Sync with Kernel Driver
  968. *
  969. * 1.0.0
  970. * (1) Support E2 chip
  971. */