summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorJoseph Chen <chenjh@rock-chips.com>2018-06-05 10:36:06 +0800
committerTao Huang <huangtao@rock-chips.com>2018-06-06 15:00:42 +0800
commit72d2f699814a2d69a04e9eb18e9e617d87f9ddc1 (patch)
treefc1fbc88ec26e2c5e45646cad5a509afca5a409d /drivers/power
parent93c6099369fa40187d59079ba75961972d96b33f (diff)
power: rk816-battery: use otg_pmic5v to record otg power supply state
without this patch, we use otg_in to stands for otg attach and power supply state(from dc or pmic), there is something wrong with code logic, let's make it clear. Change-Id: I080e6b137811b2335e0985e786ddfc4eed52e8d6 Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/rk816_battery.c42
1 files changed, 26 insertions, 16 deletions
diff --git a/drivers/power/rk816_battery.c b/drivers/power/rk816_battery.c
index 62aa6fd13c19..31cd573f8cf4 100644
--- a/drivers/power/rk816_battery.c
+++ b/drivers/power/rk816_battery.c
@@ -189,7 +189,8 @@ struct rk816_battery {
bool bat_first_power_on;
u8 ac_in;
u8 usb_in;
- u8 otg_in;
+ u8 otg_in; /* OTG device attached status */
+ u8 otg_pmic5v; /* OTG device power supply from PMIC */
u8 dc_in;
u8 prop_status;
int cvtlmt_irq;
@@ -1511,6 +1512,11 @@ static void rk816_bat_set_chrg_param(struct rk816_battery *di,
rk816_bat_update_leds(di, di->prop_status);
}
+static void rk816_bat_set_otg_in(struct rk816_battery *di, int online)
+{
+ di->otg_in = online;
+}
+
/*
* -----: VBUS-5V
* #####: PMIC_INT
@@ -1553,13 +1559,13 @@ static void rk816_bat_set_chrg_param(struct rk816_battery *di,
* again at spot-F, if PLUG_IN_STS=1, means it's charging mode now, we abandont
* enable boost and disable otg. Otherwise, we can turn on boost safely.
*/
-static void rk816_bat_set_otg_state(struct rk816_battery *di, int state)
+static void rk816_bat_set_otg_power(struct rk816_battery *di, int power)
{
u8 buf;
- switch (state) {
+ switch (power) {
case USB_OTG_POWER_ON:
- if (di->otg_in) {
+ if (di->otg_pmic5v) {
BAT_INFO("otg5v is on yet, ignore..\n");
break;
}
@@ -1597,16 +1603,16 @@ static void rk816_bat_set_otg_state(struct rk816_battery *di, int state)
*/
rk816_bat_set_bits(di, RK816_DCDC_EN_REG2,
BOOST_OTG_MASK, BOOST_OTG_ON);
- di->otg_in = 1;
+ di->otg_pmic5v = 1;
break;
case USB_OTG_POWER_OFF:
- if (!di->otg_in) {
+ if (!di->otg_pmic5v) {
BAT_INFO("otg5v is off yet, ignore..\n");
} else {
rk816_bat_set_bits(di, RK816_DCDC_EN_REG2,
BOOST_OTG_MASK, BOOST_OTG_OFF);
- di->otg_in = 0;
+ di->otg_pmic5v = 0;
}
break;
@@ -1679,7 +1685,7 @@ static void rk816_bat_dc_delay_work(struct work_struct *work)
/* check otg supply */
if (di->otg_in && di->pdata->power_dc2otg) {
BAT_INFO("otg power from dc adapter\n");
- rk816_bat_set_otg_state(di, USB_OTG_POWER_OFF);
+ rk816_bat_set_otg_power(di, USB_OTG_POWER_OFF);
}
} else {
BAT_INFO("detect dc charger out..\n");
@@ -1692,7 +1698,7 @@ static void rk816_bat_dc_delay_work(struct work_struct *work)
* enable boost
*/
msleep(200);
- rk816_bat_set_otg_state(di, USB_OTG_POWER_ON);
+ rk816_bat_set_otg_power(di, USB_OTG_POWER_ON);
}
}
out:
@@ -2657,7 +2663,7 @@ static void rk816_bat_debug_info(struct rk816_battery *di)
DBG("###############################################################\n"
"Dsoc=%d, Rsoc=%d, Vavg=%d, Iavg=%d, Cap=%d, Fcc=%d, d=%d\n"
"K=%d, Mode=%s, Oldcap=%d, Is=%d, Ip=%d, Vs=%d, Vusb=%d\n"
- "AC=%d, USB=%d, DC=%d, OTG=%d, PROP=%d, Tfb=%d, Tbat=%d\n"
+ "AC=%d, USB=%d, DC=%d, OTG=%d, 5V=%d, PROP=%d, Tfb=%d, Tbat=%d\n"
"off:i=0x%x, c=0x%x, p=%d, Rbat=%d, age_ocv_cap=%d, fb=%d, hot=%d\n"
"adp:in=%lu, out=%lu, finish=%lu, LFcc=%d, boot_min=%lu, sleep_min=%lu, adc=%d, Rfac=%d\n"
"bat:%s, meet: soc=%d, calc: dsoc=%d, rsoc=%d, Vocv=%d, Rsam=%d\n"
@@ -2672,7 +2678,8 @@ static void rk816_bat_debug_info(struct rk816_battery *di)
CHRG_CUR_INPUT[usb_ctrl & 0x0f],
CHRG_VOL_SEL[(chrg_ctrl1 & 0x70) >> 4],
rk816_bat_get_usb_voltage(di),
- di->ac_in, di->usb_in, di->dc_in, di->otg_in, di->prop_status,
+ di->ac_in, di->usb_in, di->dc_in, di->otg_in, di->otg_pmic5v,
+ di->prop_status,
FEED_BACK_TEMP[(thermal & 0x0c) >> 2], di->temperature,
rk816_bat_get_ioffset(di), rk816_bat_get_coffset(di),
di->poffset, di->bat_res, di->age_adjust_cap, di->fb_blank,
@@ -3679,14 +3686,16 @@ static void rk816_bat_host_evt_worker(struct work_struct *work)
/* Determine cable/charger type */
if (extcon_get_cable_state_(edev, EXTCON_USB_VBUS_EN) > 0) {
+ rk816_bat_set_otg_in(di, ONLINE);
BAT_INFO("receive extcon notifier event: OTG ON...\n");
if (di->dc_in && di->pdata->power_dc2otg)
BAT_INFO("otg power from dc adapter\n");
else
- rk816_bat_set_otg_state(di, USB_OTG_POWER_ON);
+ rk816_bat_set_otg_power(di, USB_OTG_POWER_ON);
} else if (extcon_get_cable_state_(edev, EXTCON_USB_VBUS_EN) == 0) {
BAT_INFO("receive extcon notifier event: OTG OFF...\n");
- rk816_bat_set_otg_state(di, USB_OTG_POWER_OFF);
+ rk816_bat_set_otg_in(di, OFFLINE);
+ rk816_bat_set_otg_power(di, USB_OTG_POWER_OFF);
}
}
@@ -4819,16 +4828,17 @@ static void rk816_battery_shutdown(struct platform_device *dev)
destroy_workqueue(di->usb_charger_wq);
del_timer(&di->caltimer);
- rk816_bat_set_otg_state(di, USB_OTG_POWER_OFF);
+ rk816_bat_set_otg_power(di, USB_OTG_POWER_OFF);
if (base2sec(di->boot_base) < REBOOT_PERIOD_SEC)
cnt = rk816_bat_check_reboot(di);
else
rk816_bat_save_reboot_cnt(di, 0);
- BAT_INFO("shutdown: dl=%d rl=%d c=%d v=%d cap=%d f=%d ch=%d n=%d mode=%d rest=%d\n",
+ BAT_INFO("shutdown: dl=%d rl=%d c=%d v=%d cap=%d f=%d ch=%d otg=%d 5v=%d n=%d mode=%d rest=%d\n",
di->dsoc, di->rsoc, di->current_avg, di->voltage_avg,
- di->remain_cap, di->fcc, rk816_bat_chrg_online(di), cnt,
+ di->remain_cap, di->fcc, rk816_bat_chrg_online(di),
+ di->otg_in, di->otg_pmic5v, cnt,
di->algo_rest_mode, di->algo_rest_val);
}