| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 |
- #include <platform/mt_typedefs.h>
- #include <platform/mt_reg_base.h>
- #include <platform/mt_i2c.h>
- #include <platform/fan5405.h>
- #include <platform/mt_gpio.h>
- #include <printf.h>
- int g_fan5405_log_en=0;
- /**********************************************************
- *
- * [I2C Slave Setting]
- *
- *********************************************************/
- #define fan5405_SLAVE_ADDR_WRITE 0xd4 //0xD4
- #define fan5405_SLAVE_ADDR_Read 0xd5 //0xD5
- /**********************************************************
- *
- * [Global Variable]
- *
- *********************************************************/
- #define fan5405_REG_NUM 7
- kal_uint8 fan5405_reg[fan5405_REG_NUM] = {0};
- #define FAN5405_I2C_ID I2C3
- static struct mt_i2c_t fan5405_i2c;
- /**********************************************************
- *
- * [I2C Function For Read/Write fan5405]
- *
- *********************************************************/
- kal_uint32 fan5405_write_byte(kal_uint8 addr, kal_uint8 value)
- {
- kal_uint32 ret_code = I2C_OK;
- kal_uint8 write_data[2];
- kal_uint16 len;
- write_data[0]= addr;
- write_data[1] = value;
- fan5405_i2c.id = FAN5405_I2C_ID;
- /* Since i2c will left shift 1 bit, we need to set FAN5405 I2C address to >>1 */
- fan5405_i2c.addr = (fan5405_SLAVE_ADDR_WRITE >> 1);
- fan5405_i2c.mode = ST_MODE;
- fan5405_i2c.speed = 100;
- len = 2;
- ret_code = i2c_write(&fan5405_i2c, write_data, len);
- //printf("%s: i2c_write: ret_code: %d\n", __func__, ret_code);
- return ret_code;
- }
- kal_uint32 fan5405_read_byte (kal_uint8 addr, kal_uint8 *dataBuffer)
- {
- kal_uint32 ret_code = I2C_OK;
- kal_uint16 len;
- *dataBuffer = addr;
- fan5405_i2c.id = FAN5405_I2C_ID;
- /* Since i2c will left shift 1 bit, we need to set FAN5405 I2C address to >>1 */
- fan5405_i2c.addr = (fan5405_SLAVE_ADDR_WRITE >> 1);
- fan5405_i2c.mode = ST_MODE;
- fan5405_i2c.speed = 100;
- len = 1;
- ret_code = i2c_write_read(&fan5405_i2c, dataBuffer, len, len);
- //printf("%s: i2c_read: ret_code: %d\n", __func__, ret_code);
- return ret_code;
- }
- /**********************************************************
- *
- * [Read / Write Function]
- *
- *********************************************************/
- kal_uint32 fan5405_read_interface (kal_uint8 RegNum, kal_uint8 *val, kal_uint8 MASK, kal_uint8 SHIFT)
- {
- kal_uint8 fan5405_reg = 0;
- int ret = 0;
-
- printf("--------------------------------------------------LK\n");
- ret = fan5405_read_byte(RegNum, &fan5405_reg);
- printf("[fan5405_read_interface] Reg[%x]=0x%x\n", RegNum, fan5405_reg);
-
- fan5405_reg &= (MASK << SHIFT);
- *val = (fan5405_reg >> SHIFT);
- printf("[fan5405_read_interface] val=0x%x\n", *val);
- return ret;
- }
- kal_uint32 fan5405_config_interface (kal_uint8 RegNum, kal_uint8 val, kal_uint8 MASK, kal_uint8 SHIFT)
- {
- kal_uint8 fan5405_reg = 0;
- int ret = 0;
- printf("--------------------------------------------------LK\n");
- ret = fan5405_read_byte(RegNum, &fan5405_reg);
- printf("[fan5405_config_interface] Reg[%x]=0x%x\n", RegNum, fan5405_reg);
-
- fan5405_reg &= ~(MASK << SHIFT);
- fan5405_reg |= (val << SHIFT);
- ret = fan5405_write_byte(RegNum, fan5405_reg);
- printf("[fan5405_config_interface] write Reg[%x]=0x%x\n", RegNum, fan5405_reg);
- // Check
- //fan5405_read_byte(RegNum, &fan5405_reg);
- //printf("[fan5405_config_interface] Check Reg[%x]=0x%x\n", RegNum, fan5405_reg);
- return ret;
- }
- /**********************************************************
- *
- * [fan5405 Function]
- *
- *********************************************************/
- //CON0----------------------------------------------------
- void fan5405_set_tmr_rst(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON0),
- (kal_uint8)(val),
- (kal_uint8)(CON0_TMR_RST_MASK),
- (kal_uint8)(CON0_TMR_RST_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- kal_uint32 fan5405_get_otg_status(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
- (&val),
- (kal_uint8)(CON0_OTG_MASK),
- (kal_uint8)(CON0_OTG_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- void fan5405_set_en_stat(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON0),
- (kal_uint8)(val),
- (kal_uint8)(CON0_EN_STAT_MASK),
- (kal_uint8)(CON0_EN_STAT_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- kal_uint32 fan5405_get_chip_status(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
- (&val),
- (kal_uint8)(CON0_STAT_MASK),
- (kal_uint8)(CON0_STAT_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- kal_uint32 fan5405_get_boost_status(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
- (&val),
- (kal_uint8)(CON0_BOOST_MASK),
- (kal_uint8)(CON0_BOOST_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- kal_uint32 fan5405_get_fault_status(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON0),
- (&val),
- (kal_uint8)(CON0_FAULT_MASK),
- (kal_uint8)(CON0_FAULT_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- //CON1----------------------------------------------------
- void fan5405_set_input_charging_current(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_LIN_LIMIT_MASK),
- (kal_uint8)(CON1_LIN_LIMIT_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_v_low(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_LOW_V_MASK),
- (kal_uint8)(CON1_LOW_V_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_te(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_TE_MASK),
- (kal_uint8)(CON1_TE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_ce(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_CE_MASK),
- (kal_uint8)(CON1_CE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_hz_mode(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_HZ_MODE_MASK),
- (kal_uint8)(CON1_HZ_MODE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_opa_mode(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON1),
- (kal_uint8)(val),
- (kal_uint8)(CON1_OPA_MODE_MASK),
- (kal_uint8)(CON1_OPA_MODE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- //CON2----------------------------------------------------
- void fan5405_set_oreg(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
- (kal_uint8)(val),
- (kal_uint8)(CON2_OREG_MASK),
- (kal_uint8)(CON2_OREG_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_otg_pl(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
- (kal_uint8)(val),
- (kal_uint8)(CON2_OTG_PL_MASK),
- (kal_uint8)(CON2_OTG_PL_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_otg_en(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON2),
- (kal_uint8)(val),
- (kal_uint8)(CON2_OTG_EN_MASK),
- (kal_uint8)(CON2_OTG_EN_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- //CON3----------------------------------------------------
- kal_uint32 fan5405_get_vender_code(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
- (&val),
- (kal_uint8)(CON3_VENDER_CODE_MASK),
- (kal_uint8)(CON3_VENDER_CODE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- kal_uint32 fan5405_get_pn(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
- (&val),
- (kal_uint8)(CON3_PIN_MASK),
- (kal_uint8)(CON3_PIN_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- kal_uint32 fan5405_get_revision(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON3),
- (&val),
- (kal_uint8)(CON3_REVISION_MASK),
- (kal_uint8)(CON3_REVISION_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- //CON4----------------------------------------------------
- void fan5405_set_reset(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
- (kal_uint8)(val),
- (kal_uint8)(CON4_RESET_MASK),
- (kal_uint8)(CON4_RESET_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_iocharge(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
- (kal_uint8)(val),
- (kal_uint8)(CON4_I_CHR_MASK),
- (kal_uint8)(CON4_I_CHR_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_iterm(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON4),
- (kal_uint8)(val),
- (kal_uint8)(CON4_I_TERM_MASK),
- (kal_uint8)(CON4_I_TERM_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- //CON5----------------------------------------------------
- void fan5405_set_dis_vreg(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
- (kal_uint8)(val),
- (kal_uint8)(CON5_DIS_VREG_MASK),
- (kal_uint8)(CON5_DIS_VREG_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_io_level(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
- (kal_uint8)(val),
- (kal_uint8)(CON5_IO_LEVEL_MASK),
- (kal_uint8)(CON5_IO_LEVEL_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- kal_uint32 fan5405_get_sp_status(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON5),
- (&val),
- (kal_uint8)(CON5_SP_STATUS_MASK),
- (kal_uint8)(CON5_SP_STATUS_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- kal_uint32 fan5405_get_en_level(void)
- {
- kal_uint32 ret=0;
- kal_uint8 val=0;
- ret=fan5405_read_interface( (kal_uint8)(fan5405_CON5),
- (&val),
- (kal_uint8)(CON5_EN_LEVEL_MASK),
- (kal_uint8)(CON5_EN_LEVEL_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
-
- return val;
- }
- void fan5405_set_vsp(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON5),
- (kal_uint8)(val),
- (kal_uint8)(CON5_VSP_MASK),
- (kal_uint8)(CON5_VSP_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- //CON6----------------------------------------------------
- void fan5405_set_i_safe(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON6),
- (kal_uint8)(val),
- (kal_uint8)(CON6_ISAFE_MASK),
- (kal_uint8)(CON6_ISAFE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- void fan5405_set_v_safe(kal_uint32 val)
- {
- kal_uint32 ret=0;
- ret=fan5405_config_interface( (kal_uint8)(fan5405_CON6),
- (kal_uint8)(val),
- (kal_uint8)(CON6_VSAFE_MASK),
- (kal_uint8)(CON6_VSAFE_SHIFT)
- );
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- }
- /**********************************************************
- *
- * [Internal Function]
- *
- *********************************************************/
- unsigned int fan5405_reg_config_interface (unsigned char RegNum, unsigned char val)
- {
- int ret = 0;
-
- ret = fan5405_write_byte(RegNum, val);
- if(g_fan5405_log_en>1)
- printf("%d\n", ret);
- return ret;
- }
- void fan5405_dump_register(void)
- {
- int i=0;
- printf("lk lk lk [fan5405] ");
- for (i=0;i<fan5405_REG_NUM;i++)
- {
- fan5405_read_byte(i, &fan5405_reg[i]);
- printf("fan5405[0x%x]=0x%x ", i, fan5405_reg[i]);
- }
- printf("\n");
- }
- void fan5405_read_register(int i)
- {
- fan5405_read_byte(i, &fan5405_reg[i]);
- printf("lk lk lk fan5405[0x%x]=0x%x\n", i, fan5405_reg[i]);
- }
- #if 1
- #include <cust_gpio_usage.h>
- int gpio_number = GPIO25 | 0x80000000; // GPIO64 | 0x80000000
- int gpio_off_mode = GPIO_MODE_00;
- int gpio_on_mode = GPIO_MODE_00;
- #else
- int gpio_number = (19 | 0x80000000);
- int gpio_off_mode = 0;
- int gpio_on_mode = 0;
- #endif
- int gpio_off_dir = GPIO_DIR_OUT;
- int gpio_off_out = GPIO_OUT_ONE;
- int gpio_on_dir = GPIO_DIR_OUT;
- int gpio_on_out = GPIO_OUT_ZERO;
- void fan5405_turn_on_charging(void)
- {
- #if 1
- mt_set_gpio_mode(gpio_number,gpio_on_mode);
- mt_set_gpio_dir(gpio_number,gpio_on_dir);
- mt_set_gpio_out(gpio_number,gpio_on_out);
- #endif
- fan5405_reg_config_interface(0x00,0xC0);
- fan5405_reg_config_interface(0x01,0xf8); //pj debug
- //fan5405_reg_config_interface(0x02,0x8e);
- fan5405_reg_config_interface(0x05,0x04);
- fan5405_reg_config_interface(0x04,0x5A); // 5A 1.46A
- printf("lk lk lk fan5405_turn_on_charging\n");
- }
- void fan5405_hw_init(void)
- {
- #if defined(HIGH_BATTERY_VOLTAGE_SUPPORT)
- printf("lk lk lk fan5405_hw_init (0x06,0x49)\n");
- fan5405_reg_config_interface(0x06,0x49); // set ISAFE and HW CV point (4.34)
- fan5405_reg_config_interface(0x02,0x94); // 4.34
- #else
- printf("lk lk lk fan5405_hw_init (0x06,0x40)\n");
- fan5405_reg_config_interface(0x06,0x40); // set ISAFE
- fan5405_reg_config_interface(0x02,0x8e); // 4.2
- #endif
- }
|