int ioffset;
u8 pcb_offset = 0;
u8 retry = 0;
- bool ret;
+ bool ret = true;
if ((di->chrg_status == CHARGE_FINISH) &&
(BASE_TO_MIN(di->power_on_base) >= 3) &&
return ma;
}
-
+#if 0
/*
* there is a timer inside rk81x to calc how long the battery is in charging
* state. rk81x will close PowerPath inside IC when timer reach, which will
rk81x_bat_write(di, CHRG_CTRL_REG3, &buf, 1);
dev_info(di->dev, "reset cccv charge timer\n");
}
+#endif
static void rk81x_bat_charger_init(struct rk81x_battery *di)
{
rk81x_bat_match_param(di, chrg_vol, chrg_ilim, chrg_cur);
finish_ma = rk81x_bat_select_finish_ma(di->fcc);
- rk81x_bat_init_chrg_timer(di);
+ /*rk81x_bat_init_chrg_timer(di);*/
rk81x_bat_read(di, THERMAL_REG, &thremal_reg, 1);
rk81x_bat_read(di, USB_CTRL_REG, &usb_ctrl_reg, 1);
chrg_ctrl_reg1 |= (CHRG_EN) | (di->chrg_v_lmt | di->chrg_i_cur);
chrg_ctrl_reg3 |= CHRG_TERM_DIG_SIGNAL;/* digital finish mode*/
+ chrg_ctrl_reg3 &= ~CHRG_TIMER_CCCV_EN;/*disable*/
+
chrg_ctrl_reg2 &= ~(0xc7);
chrg_ctrl_reg2 |= finish_ma | CHG_CCCV_6HOUR;
val = 0x30;
rk81x_bat_write(di, ADC_CTRL_REG, &val, 1);
- rk81x_bat_read(di, RK818_VB_MON_REG, &val, 1);
- if (val & PLUG_IN_STS)
- rk81x_bat_set_power_supply_state(di, USB_CHARGER);
rk81x_bat_gauge_enable(di);
/* get the volatege offset */
int voltage, voltage_old, voltage_now;
int i, rsoc;
int q_ocv, q_dead;
- int count_num, currentnow;
+ int count_num = 0;
+ int currentnow;
int ocv_soc, dead_soc;
int power_off_thresd = di->pdata->power_off_thresd;
static void rk81x_bat_emulator_dischrg(struct rk81x_battery *di)
{
- u32 temp, soc_time;
+ u32 temp, soc_time = 0;
unsigned long sec_unit;
if (!di->dischrg_emu_base)
*/
static void rk81x_bat_emulator_chrg(struct rk81x_battery *di)
{
- u32 soc_time, temp;
+ u32 soc_time = 0, temp;
int plus_soc;
unsigned long chrg_emu_sec;
static void rk81x_bat_finish_chrg(struct rk81x_battery *di)
{
unsigned long sec_finish;
- int soc_time, plus_soc;
+ int soc_time = 0, plus_soc;
int temp;
if (di->dsoc < 100) {
{
u32 *ocv_table = di->pdata->battery_ocv;
int delta_soc = di->rsoc - di->dsoc;
- int chrg_finish_vol = di->pdata->max_charger_voltagemV;
- if ((di->chrg_status == CHARGE_FINISH ||
- di->slp_chrg_status == CHARGE_FINISH) &&
- (di->voltage > chrg_finish_vol - 150)) {
+ if (di->chrg_status == CHARGE_FINISH ||
+ di->slp_chrg_status == CHARGE_FINISH) {
/*clear sleep charge status*/
di->slp_chrg_status = rk81x_bat_get_chrg_status(di);
di->chrg_emu_base = 0;
rk81x_bat_capacity_init(di, di->fcc);
rk81x_bat_capacity_init_post(di);
} else if ((di->ac_online == ONLINE && di->dsoc >= 90) &&
- ((di->current_avg > DSOC_CHRG_TERM_CURR) ||
- (di->voltage < ocv_table[18] + 20))) {
+ ((di->current_avg > DSOC_CHRG_TERM_CURR) ||
+ (di->voltage < ocv_table[18] + 20))) {
di->chrg_emu_base = 0;
di->chrg_normal_base = 0;
di->chrg_finish_base = 0;
static int rk81x_bat_sleep_dischrg(struct rk81x_battery *di)
{
- int delta_soc, temp_dsoc;
+ int delta_soc = 0;
+ int temp_dsoc;
unsigned long sleep_sec = di->suspend_time_sum;
int power_off_thresd = di->pdata->power_off_thresd;
else if (old_charge_status != di->psy_status)
state_changed = true;
- if (di->dsoc >= 100 && rk81x_chrg_online(di))
- di->psy_status = POWER_SUPPLY_STATUS_FULL;
+ if (rk81x_chrg_online(di)) {
+ if (di->dsoc == 100)
+ di->psy_status = POWER_SUPPLY_STATUS_FULL;
+ else
+ di->psy_status = POWER_SUPPLY_STATUS_CHARGING;
+ }
if (state_changed) {
power_supply_changed(&di->bat);
}
}
+#if 0
static u8 rk81x_bat_get_cvcc_chrg_hour(struct rk81x_battery *di)
{
u8 hour, buf;
di->current_avg);
if (SEC_TO_MIN(di->chrg_time2full) > 60) {
- rk81x_bat_init_chrg_timer(di);
+ /*rk81x_bat_init_chrg_timer(di);*/
di->plug_in_base = get_runtime_sec();
DBG("%s: reset charge timer\n", __func__);
}
}
}
+#endif
/*
* in case that we will do reboot stress test, we need a special way
__func__, cnt, unit_time, smooth_time,
BASE_TO_SEC(di->power_on_base), dsoc, rsoc);
- if (((status == POWER_SUPPLY_STATUS_CHARGING) ||
- (status == POWER_SUPPLY_STATUS_FULL)) &&
- (abs(di->current_avg) < 5)) {
+ if ((status == POWER_SUPPLY_STATUS_CHARGING) ||
+ (status == POWER_SUPPLY_STATUS_FULL && abs(di->current_avg) < 5)) {
DBG("chrg, sm:%d, aim:%d\n", smooth_time, unit_time * 3 / 5);
if ((dsoc < rsoc - 1) && (smooth_time > unit_time * 3 / 5)) {
cnt = 0;
di->relax_voltage = rk81x_bat_get_relax_vol(di);
di->est_ocv_vol = rk81x_bat_est_ocv_vol(di);
di->est_ocv_soc = rk81x_bat_est_ocv_soc(di);
- rk81x_bat_chrg_over_time_check(di);
+ /*rk81x_bat_chrg_over_time_check(di);*/
rk81x_bat_update_calib_param(di);
if (di->chrg_status == CC_OR_CV)
di->enter_finish = true;
if (gpio_is_valid(di->dc_det_pin))
di->dc_det_level = (flags & OF_GPIO_ACTIVE_LOW) ?
RK818_DC_IN : RK818_DC_OUT;
-
di->dc_det_irq = gpio_to_irq(di->dc_det_pin);
ret = request_irq(di->dc_det_irq, rk81x_vbat_dc_det,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
di->dischrg_normal_base = 0;
di->dischrg_emu_base = 0;
do_gettimeofday(&di->suspend_rtc_base);
+
if (!rk81x_chrg_online(di)) {
di->chrg_save_sec += rk81x_bat_save_chrg_sec(di);
di->chrg_normal_base = 0;
delta_time = rk81x_bat_get_suspend_sec(di);
di->suspend_time_sum += delta_time;
#if defined(CONFIG_ARCH_ROCKCHIP)
- di->remain_capacity= rk81x_bat_get_realtime_capacity(di);
+ di->remain_capacity = rk81x_bat_get_realtime_capacity(di);
#endif
if (di->slp_psy_status) {