@@ -189,7 +189,8 @@ struct rk816_battery {
189189 bool bat_first_power_on ;
190190 u8 ac_in ;
191191 u8 usb_in ;
192- u8 otg_in ;
192+ u8 otg_in ; /* OTG device attached status */
193+ u8 otg_pmic5v ; /* OTG device power supply from PMIC */
193194 u8 dc_in ;
194195 u8 prop_status ;
195196 int cvtlmt_irq ;
@@ -1511,6 +1512,11 @@ static void rk816_bat_set_chrg_param(struct rk816_battery *di,
15111512 rk816_bat_update_leds (di , di -> prop_status );
15121513}
15131514
1515+ static void rk816_bat_set_otg_in (struct rk816_battery * di , int online )
1516+ {
1517+ di -> otg_in = online ;
1518+ }
1519+
15141520/*
15151521 * -----: VBUS-5V
15161522 * #####: PMIC_INT
@@ -1553,13 +1559,13 @@ static void rk816_bat_set_chrg_param(struct rk816_battery *di,
15531559 * again at spot-F, if PLUG_IN_STS=1, means it's charging mode now, we abandont
15541560 * enable boost and disable otg. Otherwise, we can turn on boost safely.
15551561 */
1556- static void rk816_bat_set_otg_state (struct rk816_battery * di , int state )
1562+ static void rk816_bat_set_otg_power (struct rk816_battery * di , int power )
15571563{
15581564 u8 buf ;
15591565
1560- switch (state ) {
1566+ switch (power ) {
15611567 case USB_OTG_POWER_ON :
1562- if (di -> otg_in ) {
1568+ if (di -> otg_pmic5v ) {
15631569 BAT_INFO ("otg5v is on yet, ignore..\n" );
15641570 break ;
15651571 }
@@ -1597,16 +1603,16 @@ static void rk816_bat_set_otg_state(struct rk816_battery *di, int state)
15971603 */
15981604 rk816_bat_set_bits (di , RK816_DCDC_EN_REG2 ,
15991605 BOOST_OTG_MASK , BOOST_OTG_ON );
1600- di -> otg_in = 1 ;
1606+ di -> otg_pmic5v = 1 ;
16011607 break ;
16021608
16031609 case USB_OTG_POWER_OFF :
1604- if (!di -> otg_in ) {
1610+ if (!di -> otg_pmic5v ) {
16051611 BAT_INFO ("otg5v is off yet, ignore..\n" );
16061612 } else {
16071613 rk816_bat_set_bits (di , RK816_DCDC_EN_REG2 ,
16081614 BOOST_OTG_MASK , BOOST_OTG_OFF );
1609- di -> otg_in = 0 ;
1615+ di -> otg_pmic5v = 0 ;
16101616 }
16111617 break ;
16121618
@@ -1679,7 +1685,7 @@ static void rk816_bat_dc_delay_work(struct work_struct *work)
16791685 /* check otg supply */
16801686 if (di -> otg_in && di -> pdata -> power_dc2otg ) {
16811687 BAT_INFO ("otg power from dc adapter\n" );
1682- rk816_bat_set_otg_state (di , USB_OTG_POWER_OFF );
1688+ rk816_bat_set_otg_power (di , USB_OTG_POWER_OFF );
16831689 }
16841690 } else {
16851691 BAT_INFO ("detect dc charger out..\n" );
@@ -1692,7 +1698,7 @@ static void rk816_bat_dc_delay_work(struct work_struct *work)
16921698 * enable boost
16931699 */
16941700 msleep (200 );
1695- rk816_bat_set_otg_state (di , USB_OTG_POWER_ON );
1701+ rk816_bat_set_otg_power (di , USB_OTG_POWER_ON );
16961702 }
16971703 }
16981704out :
@@ -2657,7 +2663,7 @@ static void rk816_bat_debug_info(struct rk816_battery *di)
26572663 DBG ("###############################################################\n"
26582664 "Dsoc=%d, Rsoc=%d, Vavg=%d, Iavg=%d, Cap=%d, Fcc=%d, d=%d\n"
26592665 "K=%d, Mode=%s, Oldcap=%d, Is=%d, Ip=%d, Vs=%d, Vusb=%d\n"
2660- "AC=%d, USB=%d, DC=%d, OTG=%d, PROP=%d, Tfb=%d, Tbat=%d\n"
2666+ "AC=%d, USB=%d, DC=%d, OTG=%d, 5V=%d, PROP=%d, Tfb=%d, Tbat=%d\n"
26612667 "off:i=0x%x, c=0x%x, p=%d, Rbat=%d, age_ocv_cap=%d, fb=%d, hot=%d\n"
26622668 "adp:in=%lu, out=%lu, finish=%lu, LFcc=%d, boot_min=%lu, sleep_min=%lu, adc=%d, Rfac=%d\n"
26632669 "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)
26722678 CHRG_CUR_INPUT [usb_ctrl & 0x0f ],
26732679 CHRG_VOL_SEL [(chrg_ctrl1 & 0x70 ) >> 4 ],
26742680 rk816_bat_get_usb_voltage (di ),
2675- di -> ac_in , di -> usb_in , di -> dc_in , di -> otg_in , di -> prop_status ,
2681+ di -> ac_in , di -> usb_in , di -> dc_in , di -> otg_in , di -> otg_pmic5v ,
2682+ di -> prop_status ,
26762683 FEED_BACK_TEMP [(thermal & 0x0c ) >> 2 ], di -> temperature ,
26772684 rk816_bat_get_ioffset (di ), rk816_bat_get_coffset (di ),
26782685 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)
36793686
36803687 /* Determine cable/charger type */
36813688 if (extcon_get_cable_state_ (edev , EXTCON_USB_VBUS_EN ) > 0 ) {
3689+ rk816_bat_set_otg_in (di , ONLINE );
36823690 BAT_INFO ("receive extcon notifier event: OTG ON...\n" );
36833691 if (di -> dc_in && di -> pdata -> power_dc2otg )
36843692 BAT_INFO ("otg power from dc adapter\n" );
36853693 else
3686- rk816_bat_set_otg_state (di , USB_OTG_POWER_ON );
3694+ rk816_bat_set_otg_power (di , USB_OTG_POWER_ON );
36873695 } else if (extcon_get_cable_state_ (edev , EXTCON_USB_VBUS_EN ) == 0 ) {
36883696 BAT_INFO ("receive extcon notifier event: OTG OFF...\n" );
3689- rk816_bat_set_otg_state (di , USB_OTG_POWER_OFF );
3697+ rk816_bat_set_otg_in (di , OFFLINE );
3698+ rk816_bat_set_otg_power (di , USB_OTG_POWER_OFF );
36903699 }
36913700}
36923701
@@ -4819,16 +4828,17 @@ static void rk816_battery_shutdown(struct platform_device *dev)
48194828 destroy_workqueue (di -> usb_charger_wq );
48204829
48214830 del_timer (& di -> caltimer );
4822- rk816_bat_set_otg_state (di , USB_OTG_POWER_OFF );
4831+ rk816_bat_set_otg_power (di , USB_OTG_POWER_OFF );
48234832
48244833 if (base2sec (di -> boot_base ) < REBOOT_PERIOD_SEC )
48254834 cnt = rk816_bat_check_reboot (di );
48264835 else
48274836 rk816_bat_save_reboot_cnt (di , 0 );
48284837
4829- BAT_INFO ("shutdown: dl=%d rl=%d c=%d v=%d cap=%d f=%d ch=%d n=%d mode=%d rest=%d\n" ,
4838+ 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" ,
48304839 di -> dsoc , di -> rsoc , di -> current_avg , di -> voltage_avg ,
4831- di -> remain_cap , di -> fcc , rk816_bat_chrg_online (di ), cnt ,
4840+ di -> remain_cap , di -> fcc , rk816_bat_chrg_online (di ),
4841+ di -> otg_in , di -> otg_pmic5v , cnt ,
48324842 di -> algo_rest_mode , di -> algo_rest_val );
48334843}
48344844
0 commit comments