diff options
author | Joseph Chen <chenjh@rock-chips.com> | 2018-09-06 11:31:18 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-09-07 10:40:40 +0800 |
commit | 849dfb0d856615117993861e94f451a449e4cbed (patch) | |
tree | 50545bd6910b3337bc070281abe8c0c3886a2e01 /drivers/power | |
parent | 161968cdf684dd9ab79701304e97998818c96ad1 (diff) |
power: rk816-battery: fix charge current value fixed issue
Without this patch, when sample resistor is 20mR, battery charge
current is fixed in 1000mA which is lower than user configure at
the most time.
Change-Id: Idc93f5becfefd55992ea791a65c565feb313b779
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/rk816_battery.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/power/rk816_battery.c b/drivers/power/rk816_battery.c index 86784def26ed..7e609dadf9e2 100644 --- a/drivers/power/rk816_battery.c +++ b/drivers/power/rk816_battery.c @@ -2057,12 +2057,12 @@ static void rk816_bat_select_chrg_cv(struct rk816_battery *di) chrg_cur_input = di->pdata->max_input_current; chrg_cur_lp_input = di->pdata->lp_input_current; - if (!di->over_20mR) { + if (di->pdata->sample_res < 20) { if (chrg_cur_sel > 2000) chrg_cur_sel = RES_FAC_DIV(chrg_cur_sel, di->res_fac); else chrg_cur_sel = 1000; - } else { + } else if (di->pdata->sample_res > 20) { chrg_cur_sel = RES_FAC_MUX(chrg_cur_sel, di->res_fac); if (chrg_cur_sel > 2400) chrg_cur_sel = 2400; @@ -2611,6 +2611,7 @@ static void rk816_bat_debug_info(struct rk816_battery *di) u8 int_sts1, int_sts2, int_sts3; u8 int_msk1, int_msk2, int_msk3; u8 chrg_ctrl2, chrg_ctrl3, rtc, misc, dcdc_en2; + u32 chrg_sel; const char *work_mode[] = {"ZERO", "FINISH", "UN", "UN", "SMOOTH"}; const char *bat_mode[] = {"BAT", "VIRTUAL"}; @@ -2644,6 +2645,11 @@ static void rk816_bat_debug_info(struct rk816_battery *di) int_msk2 = rk816_bat_read(di, RK816_INT_STS_MSK_REG2); int_msk3 = rk816_bat_read(di, RK816_INT_STS_MSK_REG3); dcdc_en2 = rk816_bat_read(di, RK816_DCDC_EN_REG2); + chrg_sel = CHRG_CUR_SEL[chrg_ctrl1 & 0x0f]; + if (!di->over_20mR) + chrg_sel = RES_FAC_MUX(chrg_sel, di->res_fac); + else + chrg_sel = RES_FAC_DIV(chrg_sel, di->res_fac); DBG("\n------- DEBUG REGS, [Ver: %s] -------------------\n" "GGCON=0x%2x, GGSTS=0x%2x, RTC=0x%2x, DCDC_EN2=0x%2x\n" @@ -2674,7 +2680,7 @@ static void rk816_bat_debug_info(struct rk816_battery *di) di->dsoc, di->rsoc, di->voltage_avg, di->current_avg, di->remain_cap, di->fcc, di->dsoc - di->rsoc, di->sm_linek, work_mode[di->work_mode], di->sm_remain_cap, - CHRG_CUR_SEL[chrg_ctrl1 & 0x0f], + chrg_sel, CHRG_CUR_INPUT[usb_ctrl & 0x0f], CHRG_VOL_SEL[(chrg_ctrl1 & 0x70) >> 4], rk816_bat_get_usb_voltage(di), |