fan5405.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. #include <platform/mt_typedefs.h>
  2. #include <platform/mt_reg_base.h>
  3. #include <platform/mt_i2c.h>
  4. #include <fan5405.h>
  5. #include <platform/mt_gpio.h>
  6. #include <platform/mt_pmic.h>
  7. #include <printf.h>
  8. #include "mtk_charger_intf.h"
  9. int g_fan5405_log_en=0;
  10. #if 1
  11. //#include <cust_gpio_usage.h>
  12. int gpio_number = GPIO154 | 0x80000000; // GPIO64 | 0x80000000
  13. int gpio_off_mode = GPIO_MODE_00;
  14. int gpio_on_mode = GPIO_MODE_00;
  15. #else
  16. int gpio_number = (154 | 0x80000000);
  17. int gpio_off_mode = 0;
  18. int gpio_on_mode = 0;
  19. #endif
  20. int gpio_off_dir = GPIO_DIR_OUT;
  21. int gpio_off_out = GPIO_OUT_ONE;
  22. int gpio_on_dir = GPIO_DIR_OUT;
  23. int gpio_on_out = GPIO_OUT_ZERO;
  24. /**********************************************************
  25. *
  26. * [I2C Slave Setting]
  27. *
  28. *********************************************************/
  29. #define fan5405_SLAVE_ADDR_WRITE 0xd4 //0xD4
  30. #define fan5405_SLAVE_ADDR_Read 0xd5 //0xD5
  31. #define fan5405_SLAVE_ADDR 0x6a //0xD5
  32. //***********************************
  33. struct fan5405_info {
  34. struct mtk_charger_info mchr_info;
  35. struct mt_i2c_t i2c;
  36. int i2c_log_level;
  37. };
  38. int fan5405_dump_register(struct mtk_charger_info *mchr_info);
  39. int fan5405_charging_enable(struct mtk_charger_info *mchr_info, bool enable);
  40. //BSP:add XLEWHLES-25 by ronghe.cheng 20181108 start
  41. //int fan5405_reset_watch_dog_timer(struct mtk_charger_info *mchr_info, bool enable);
  42. static struct mtk_charger_ops fan5405_mchr_ops = {
  43. .dump_register = fan5405_dump_register,
  44. .enable_charging = fan5405_charging_enable,
  45. };
  46. //BSP:add XLEWHLES-25 by ronghe.cheng 20181108 end
  47. static struct fan5405_info g_fan5405_info = {
  48. .mchr_info = {
  49. .name = "primary_charger",
  50. .alias_name = "fan5405",
  51. .device_id = -1,
  52. .mchr_ops = &fan5405_mchr_ops,
  53. },
  54. .i2c = {
  55. .id = I2C6,
  56. .addr = fan5405_SLAVE_ADDR,
  57. .mode = ST_MODE,
  58. .speed = 100,
  59. },
  60. .i2c_log_level = INFO,
  61. };
  62. /**********************************************************
  63. *
  64. * [Global Variable]
  65. *
  66. *********************************************************/
  67. #define fan5405_REG_NUM 7
  68. kal_uint8 fan5405_reg[fan5405_REG_NUM] = {0};
  69. #define FAN5405_I2C_ID I2C6
  70. static struct mt_i2c_t fan5405_i2c;
  71. /**********************************************************
  72. *
  73. * [I2C Function For Read/Write fan5405]
  74. *
  75. *********************************************************/
  76. kal_uint32 fan5405_write_byte(kal_uint8 addr, kal_uint8 value)
  77. {
  78. kal_uint32 ret_code = I2C_OK;
  79. kal_uint8 write_data[2];
  80. kal_uint16 len;
  81. write_data[0]= addr;
  82. write_data[1] = value;
  83. fan5405_i2c.id = FAN5405_I2C_ID;
  84. /* Since i2c will left shift 1 bit, we need to set FAN5405 I2C address to >>1 */
  85. fan5405_i2c.addr = (fan5405_SLAVE_ADDR_WRITE >> 1);
  86. fan5405_i2c.mode = ST_MODE;
  87. fan5405_i2c.speed = 100;
  88. len = 2;
  89. ret_code = i2c_write(&fan5405_i2c, write_data, len);
  90. //printf("%s: i2c_write: ret_code: %d\n", __func__, ret_code);
  91. return ret_code;
  92. }
  93. kal_uint32 fan5405_read_byte (kal_uint8 addr, kal_uint8 *dataBuffer)
  94. {
  95. kal_uint32 ret_code = I2C_OK;
  96. kal_uint16 len;
  97. *dataBuffer = addr;
  98. fan5405_i2c.id = FAN5405_I2C_ID;
  99. /* Since i2c will left shift 1 bit, we need to set FAN5405 I2C address to >>1 */
  100. fan5405_i2c.addr = (fan5405_SLAVE_ADDR_WRITE >> 1);
  101. fan5405_i2c.mode = ST_MODE;
  102. fan5405_i2c.speed = 100;
  103. len = 1;
  104. ret_code = i2c_write_read(&fan5405_i2c, dataBuffer, len, len);
  105. //printf("%s: i2c_read: ret_code: %d\n", __func__, ret_code);
  106. return ret_code;
  107. }
  108. /**********************************************************
  109. *
  110. * [Read / Write Function]
  111. *
  112. *********************************************************/
  113. kal_uint32 fan5405_read_interface (kal_uint8 RegNum, kal_uint8 *val, kal_uint8 MASK, kal_uint8 SHIFT)
  114. {
  115. kal_uint8 fan5405_reg = 0;
  116. int ret = 0;
  117. printf("--------------------------------------------------LK\n");
  118. ret = fan5405_read_byte(RegNum, &fan5405_reg);
  119. printf("[fan5405_read_interface] Reg[%x]=0x%x\n", RegNum, fan5405_reg);
  120. fan5405_reg &= (MASK << SHIFT);
  121. *val = (fan5405_reg >> SHIFT);
  122. printf("[fan5405_read_interface] val=0x%x\n", *val);
  123. return ret;
  124. }
  125. kal_uint32 fan5405_config_interface (kal_uint8 RegNum, kal_uint8 val, kal_uint8 MASK, kal_uint8 SHIFT)
  126. {
  127. kal_uint8 fan5405_reg = 0;
  128. int ret = 0;
  129. printf("--------------------------------------------------LK\n");
  130. ret = fan5405_read_byte(RegNum, &fan5405_reg);
  131. printf("[fan5405_config_interface] Reg[%x]=0x%x\n", RegNum, fan5405_reg);
  132. fan5405_reg &= ~(MASK << SHIFT);
  133. fan5405_reg |= (val << SHIFT);
  134. ret = fan5405_write_byte(RegNum, fan5405_reg);
  135. printf("[fan5405_config_interface] write Reg[%x]=0x%x\n", RegNum, fan5405_reg);
  136. // Check
  137. //fan5405_read_byte(RegNum, &fan5405_reg);
  138. //printf("[fan5405_config_interface] Check Reg[%x]=0x%x\n", RegNum, fan5405_reg);
  139. return ret;
  140. }
  141. /**********************************************************
  142. *
  143. * [fan5405 Function]
  144. *
  145. *********************************************************/
  146. //CON0----------------------------------------------------
  147. void fan5405_set_tmr_rst(kal_uint32 val)
  148. {
  149. kal_uint32 ret=0;
  150. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON0),
  151. (kal_uint8)(val),
  152. (kal_uint8)(CON0_TMR_RST_MASK),
  153. (kal_uint8)(CON0_TMR_RST_SHIFT)
  154. );
  155. if(g_fan5405_log_en>1)
  156. printf("%d\n", ret);
  157. }
  158. kal_uint32 fan5405_get_otg_status(void)
  159. {
  160. kal_uint32 ret=0;
  161. kal_uint8 val=0;
  162. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
  163. (&val),
  164. (kal_uint8)(CON0_OTG_MASK),
  165. (kal_uint8)(CON0_OTG_SHIFT)
  166. );
  167. if(g_fan5405_log_en>1)
  168. printf("%d\n", ret);
  169. return val;
  170. }
  171. void fan5405_set_en_stat(kal_uint32 val)
  172. {
  173. kal_uint32 ret=0;
  174. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON0),
  175. (kal_uint8)(val),
  176. (kal_uint8)(CON0_EN_STAT_MASK),
  177. (kal_uint8)(CON0_EN_STAT_SHIFT)
  178. );
  179. if(g_fan5405_log_en>1)
  180. printf("%d\n", ret);
  181. }
  182. kal_uint32 fan5405_get_chip_status(void)
  183. {
  184. kal_uint32 ret=0;
  185. kal_uint8 val=0;
  186. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
  187. (&val),
  188. (kal_uint8)(CON0_STAT_MASK),
  189. (kal_uint8)(CON0_STAT_SHIFT)
  190. );
  191. if(g_fan5405_log_en>1)
  192. printf("%d\n", ret);
  193. return val;
  194. }
  195. kal_uint32 fan5405_get_boost_status(void)
  196. {
  197. kal_uint32 ret=0;
  198. kal_uint8 val=0;
  199. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
  200. (&val),
  201. (kal_uint8)(CON0_BOOST_MASK),
  202. (kal_uint8)(CON0_BOOST_SHIFT)
  203. );
  204. if(g_fan5405_log_en>1)
  205. printf("%d\n", ret);
  206. return val;
  207. }
  208. kal_uint32 fan5405_get_fault_status(void)
  209. {
  210. kal_uint32 ret=0;
  211. kal_uint8 val=0;
  212. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
  213. (&val),
  214. (kal_uint8)(CON0_FAULT_MASK),
  215. (kal_uint8)(CON0_FAULT_SHIFT)
  216. );
  217. if(g_fan5405_log_en>1)
  218. printf("%d\n", ret);
  219. return val;
  220. }
  221. //CON1----------------------------------------------------
  222. void fan5405_set_input_charging_current(kal_uint32 val)
  223. {
  224. kal_uint32 ret=0;
  225. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  226. (kal_uint8)(val),
  227. (kal_uint8)(CON1_LIN_LIMIT_MASK),
  228. (kal_uint8)(CON1_LIN_LIMIT_SHIFT)
  229. );
  230. if(g_fan5405_log_en>1)
  231. printf("%d\n", ret);
  232. }
  233. void fan5405_set_v_low(kal_uint32 val)
  234. {
  235. kal_uint32 ret=0;
  236. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  237. (kal_uint8)(val),
  238. (kal_uint8)(CON1_LOW_V_MASK),
  239. (kal_uint8)(CON1_LOW_V_SHIFT)
  240. );
  241. if(g_fan5405_log_en>1)
  242. printf("%d\n", ret);
  243. }
  244. void fan5405_set_te(kal_uint32 val)
  245. {
  246. kal_uint32 ret=0;
  247. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  248. (kal_uint8)(val),
  249. (kal_uint8)(CON1_TE_MASK),
  250. (kal_uint8)(CON1_TE_SHIFT)
  251. );
  252. if(g_fan5405_log_en>1)
  253. printf("%d\n", ret);
  254. }
  255. void fan5405_set_ce(kal_uint32 val)
  256. {
  257. kal_uint32 ret=0;
  258. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  259. (kal_uint8)(val),
  260. (kal_uint8)(CON1_CE_MASK),
  261. (kal_uint8)(CON1_CE_SHIFT)
  262. );
  263. if(g_fan5405_log_en>1)
  264. printf("%d\n", ret);
  265. }
  266. void fan5405_set_hz_mode(kal_uint32 val)
  267. {
  268. kal_uint32 ret=0;
  269. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  270. (kal_uint8)(val),
  271. (kal_uint8)(CON1_HZ_MODE_MASK),
  272. (kal_uint8)(CON1_HZ_MODE_SHIFT)
  273. );
  274. if(g_fan5405_log_en>1)
  275. printf("%d\n", ret);
  276. }
  277. void fan5405_set_opa_mode(kal_uint32 val)
  278. {
  279. kal_uint32 ret=0;
  280. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
  281. (kal_uint8)(val),
  282. (kal_uint8)(CON1_OPA_MODE_MASK),
  283. (kal_uint8)(CON1_OPA_MODE_SHIFT)
  284. );
  285. if(g_fan5405_log_en>1)
  286. printf("%d\n", ret);
  287. }
  288. //CON2----------------------------------------------------
  289. void fan5405_set_oreg(kal_uint32 val)
  290. {
  291. kal_uint32 ret=0;
  292. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
  293. (kal_uint8)(val),
  294. (kal_uint8)(CON2_OREG_MASK),
  295. (kal_uint8)(CON2_OREG_SHIFT)
  296. );
  297. if(g_fan5405_log_en>1)
  298. printf("%d\n", ret);
  299. }
  300. void fan5405_set_otg_pl(kal_uint32 val)
  301. {
  302. kal_uint32 ret=0;
  303. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
  304. (kal_uint8)(val),
  305. (kal_uint8)(CON2_OTG_PL_MASK),
  306. (kal_uint8)(CON2_OTG_PL_SHIFT)
  307. );
  308. if(g_fan5405_log_en>1)
  309. printf("%d\n", ret);
  310. }
  311. void fan5405_set_otg_en(kal_uint32 val)
  312. {
  313. kal_uint32 ret=0;
  314. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
  315. (kal_uint8)(val),
  316. (kal_uint8)(CON2_OTG_EN_MASK),
  317. (kal_uint8)(CON2_OTG_EN_SHIFT)
  318. );
  319. if(g_fan5405_log_en>1)
  320. printf("%d\n", ret);
  321. }
  322. //CON3----------------------------------------------------
  323. kal_uint32 fan5405_get_vender_code(void)
  324. {
  325. kal_uint32 ret=0;
  326. kal_uint8 val=0;
  327. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
  328. (&val),
  329. (kal_uint8)(CON3_VENDER_CODE_MASK),
  330. (kal_uint8)(CON3_VENDER_CODE_SHIFT)
  331. );
  332. if(g_fan5405_log_en>1)
  333. printf("%d\n", ret);
  334. return val;
  335. }
  336. kal_uint32 fan5405_get_pn(void)
  337. {
  338. kal_uint32 ret=0;
  339. kal_uint8 val=0;
  340. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
  341. (&val),
  342. (kal_uint8)(CON3_PIN_MASK),
  343. (kal_uint8)(CON3_PIN_SHIFT)
  344. );
  345. if(g_fan5405_log_en>1)
  346. printf("%d\n", ret);
  347. return val;
  348. }
  349. kal_uint32 fan5405_get_revision(void)
  350. {
  351. kal_uint32 ret=0;
  352. kal_uint8 val=0;
  353. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
  354. (&val),
  355. (kal_uint8)(CON3_REVISION_MASK),
  356. (kal_uint8)(CON3_REVISION_SHIFT)
  357. );
  358. if(g_fan5405_log_en>1)
  359. printf("%d\n", ret);
  360. return val;
  361. }
  362. //CON4----------------------------------------------------
  363. void fan5405_set_reset(kal_uint32 val)
  364. {
  365. kal_uint32 ret=0;
  366. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
  367. (kal_uint8)(val),
  368. (kal_uint8)(CON4_RESET_MASK),
  369. (kal_uint8)(CON4_RESET_SHIFT)
  370. );
  371. if(g_fan5405_log_en>1)
  372. printf("%d\n", ret);
  373. }
  374. void fan5405_set_iocharge(kal_uint32 val)
  375. {
  376. kal_uint32 ret=0;
  377. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
  378. (kal_uint8)(val),
  379. (kal_uint8)(CON4_I_CHR_MASK),
  380. (kal_uint8)(CON4_I_CHR_SHIFT)
  381. );
  382. if(g_fan5405_log_en>1)
  383. printf("%d\n", ret);
  384. }
  385. void fan5405_set_iterm(kal_uint32 val)
  386. {
  387. kal_uint32 ret=0;
  388. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
  389. (kal_uint8)(val),
  390. (kal_uint8)(CON4_I_TERM_MASK),
  391. (kal_uint8)(CON4_I_TERM_SHIFT)
  392. );
  393. if(g_fan5405_log_en>1)
  394. printf("%d\n", ret);
  395. }
  396. //CON5----------------------------------------------------
  397. void fan5405_set_dis_vreg(kal_uint32 val)
  398. {
  399. kal_uint32 ret=0;
  400. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
  401. (kal_uint8)(val),
  402. (kal_uint8)(CON5_DIS_VREG_MASK),
  403. (kal_uint8)(CON5_DIS_VREG_SHIFT)
  404. );
  405. if(g_fan5405_log_en>1)
  406. printf("%d\n", ret);
  407. }
  408. void fan5405_set_io_level(kal_uint32 val)
  409. {
  410. kal_uint32 ret=0;
  411. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
  412. (kal_uint8)(val),
  413. (kal_uint8)(CON5_IO_LEVEL_MASK),
  414. (kal_uint8)(CON5_IO_LEVEL_SHIFT)
  415. );
  416. if(g_fan5405_log_en>1)
  417. printf("%d\n", ret);
  418. }
  419. kal_uint32 fan5405_get_sp_status(void)
  420. {
  421. kal_uint32 ret=0;
  422. kal_uint8 val=0;
  423. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON5),
  424. (&val),
  425. (kal_uint8)(CON5_SP_STATUS_MASK),
  426. (kal_uint8)(CON5_SP_STATUS_SHIFT)
  427. );
  428. if(g_fan5405_log_en>1)
  429. printf("%d\n", ret);
  430. return val;
  431. }
  432. kal_uint32 fan5405_get_en_level(void)
  433. {
  434. kal_uint32 ret=0;
  435. kal_uint8 val=0;
  436. ret=fan5405_read_interface( (kal_uint8)(fan5405_CON5),
  437. (&val),
  438. (kal_uint8)(CON5_EN_LEVEL_MASK),
  439. (kal_uint8)(CON5_EN_LEVEL_SHIFT)
  440. );
  441. if(g_fan5405_log_en>1)
  442. printf("%d\n", ret);
  443. return val;
  444. }
  445. void fan5405_set_vsp(kal_uint32 val)
  446. {
  447. kal_uint32 ret=0;
  448. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
  449. (kal_uint8)(val),
  450. (kal_uint8)(CON5_VSP_MASK),
  451. (kal_uint8)(CON5_VSP_SHIFT)
  452. );
  453. if(g_fan5405_log_en>1)
  454. printf("%d\n", ret);
  455. }
  456. //CON6----------------------------------------------------
  457. void fan5405_set_i_safe(kal_uint32 val)
  458. {
  459. kal_uint32 ret=0;
  460. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON6),
  461. (kal_uint8)(val),
  462. (kal_uint8)(CON6_ISAFE_MASK),
  463. (kal_uint8)(CON6_ISAFE_SHIFT)
  464. );
  465. if(g_fan5405_log_en>1)
  466. printf("%d\n", ret);
  467. }
  468. void fan5405_set_v_safe(kal_uint32 val)
  469. {
  470. kal_uint32 ret=0;
  471. ret=fan5405_config_interface( (kal_uint8)(fan5405_CON6),
  472. (kal_uint8)(val),
  473. (kal_uint8)(CON6_VSAFE_MASK),
  474. (kal_uint8)(CON6_VSAFE_SHIFT)
  475. );
  476. if(g_fan5405_log_en>1)
  477. printf("%d\n", ret);
  478. }
  479. /**********************************************************
  480. *
  481. * [Internal Function]
  482. *
  483. *********************************************************/
  484. unsigned int fan5405_reg_config_interface (unsigned char RegNum, unsigned char val)
  485. {
  486. int ret = 0;
  487. ret = fan5405_write_byte(RegNum, val);
  488. if(g_fan5405_log_en>1)
  489. printf("%d\n", ret);
  490. return ret;
  491. }
  492. int fan5405_dump_register(struct mtk_charger_info *mchr_info)
  493. {
  494. int i=0;
  495. printf("lk lk lk [fan5405] ");
  496. for (i=0;i<fan5405_REG_NUM;i++)
  497. {
  498. fan5405_read_byte(i, &fan5405_reg[i]);
  499. printf("fan5405[0x%x]=0x%x ", i, fan5405_reg[i]);
  500. }
  501. printf("\n");
  502. return 0;
  503. }
  504. int fan5405_charging_enable(struct mtk_charger_info *mchr_info, bool enable)
  505. {
  506. if(enable){
  507. //hw_charging_get_charger_type();
  508. fan5405_reg_config_interface(0x00,0xC0);
  509. fan5405_reg_config_interface(0x01,0xf8); //pj debug
  510. //fan5405_reg_config_interface(0x02,0x8e);
  511. fan5405_reg_config_interface(0x05,0x04);
  512. fan5405_reg_config_interface(0x04,0x5A); // 5A 1.46A
  513. }
  514. if (KAL_TRUE == enable){
  515. mt_set_gpio_mode(gpio_number,gpio_on_mode);
  516. mt_set_gpio_dir(gpio_number,gpio_on_dir);
  517. mt_set_gpio_out(gpio_number,GPIO_OUT_ZERO);
  518. }else
  519. {
  520. mt_set_gpio_mode(gpio_number,gpio_on_mode);
  521. mt_set_gpio_dir(gpio_number,gpio_on_dir);
  522. mt_set_gpio_out(gpio_number,GPIO_OUT_ONE);
  523. }
  524. return 0;
  525. }
  526. void fan5405_read_register(int i)
  527. {
  528. fan5405_read_byte(i, &fan5405_reg[i]);
  529. printf("lk lk lk fan5405[0x%x]=0x%x\n", i, fan5405_reg[i]);
  530. }
  531. void fan5405_turn_on_charging(void)
  532. {
  533. #if 1
  534. mt_set_gpio_mode(gpio_number,gpio_on_mode);
  535. mt_set_gpio_dir(gpio_number,gpio_on_dir);
  536. mt_set_gpio_out(gpio_number,gpio_on_out);
  537. #endif
  538. fan5405_reg_config_interface(0x00,0xC0);
  539. fan5405_reg_config_interface(0x01,0xf8); //pj debug
  540. //fan5405_reg_config_interface(0x02,0x8e);
  541. fan5405_reg_config_interface(0x05,0x04);
  542. fan5405_reg_config_interface(0x04,0x5A); // 5A 1.46A
  543. printf("lk lk lk fan5405_turn_on_charging\n");
  544. }
  545. void fan5405_hw_init(void)
  546. {
  547. #if defined(HIGH_BATTERY_VOLTAGE_SUPPORT)
  548. printf("lk lk lk fan5405_hw_init (0x06,0x49)\n");
  549. fan5405_reg_config_interface(0x06,0x49); // set ISAFE and HW CV point (4.34)
  550. fan5405_reg_config_interface(0x02,0x94); // 4.34
  551. #else
  552. printf("lk lk lk fan5405_hw_init (0x06,0x40)\n");
  553. fan5405_reg_config_interface(0x06,0x40); // set ISAFE
  554. fan5405_reg_config_interface(0x02,0x8e); // 4.2
  555. #endif
  556. }
  557. int fan5405_chg_probe(void)
  558. {
  559. int ret = 0;
  560. fan5405_hw_init();
  561. mtk_charger_set_info(&(g_fan5405_info.mchr_info));
  562. return ret;
  563. }