diff --git a/drivers/power/mp2661-charger.c b/drivers/power/mp2661-charger.c index 6aba81a2230aca9b43c1f1d27b24c29cdb56439a..6dee66fce025647575ee3f89ee95acdfc670b87f 100644 --- a/drivers/power/mp2661-charger.c +++ b/drivers/power/mp2661-charger.c @@ -1281,6 +1281,20 @@ static int mp2661_is_chg_plugged_in(struct mp2661_chg *chip) return (reg & CHAG_IN_VALID_IRQ) ? 1 : 0; } +bool mp2661_global_is_chg_plugged_in(void) +{ + int rc; + + if (!global_mp2661) + { + pr_err("mp2661 chip can not register\n"); + return false; + } + + rc = (bool)mp2661_is_chg_plugged_in(global_mp2661); + return rc; +} + static int mp2661_battery_set_property(struct power_supply *psy, enum power_supply_property prop, const union power_supply_propval *val) diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c index 6068abd949fdeea2b14ab5045cbf6e44f225ce0c..2e4ac8eabbc480a1a601d7593817f2ff80356cf0 100644 --- a/drivers/usb/phy/phy-msm-usb.c +++ b/drivers/usb/phy/phy-msm-usb.c @@ -2635,6 +2635,10 @@ do_wait: } } +#if CONFIG_HUAWEI_SAWSHARK +extern bool mp2661_global_is_chg_plugged_in(void); +#endif + static void msm_otg_sm_work(struct work_struct *w) { struct msm_otg *motg = container_of(w, struct msm_otg, sm_work); @@ -3383,6 +3387,17 @@ static int otg_power_get_property_usb(struct power_supply *psy, /* Reflect USB enumeration */ case POWER_SUPPLY_PROP_ONLINE: val->intval = motg->online; +#if CONFIG_HUAWEI_SAWSHARK + if(0 == val->intval) + { + /* fix online status acording to system charing status */ + val->intval = (int)mp2661_global_is_chg_plugged_in(); + if(val->intval != 0) + { + pr_info("fix usb status to online\n"); + } + } +#endif break; case POWER_SUPPLY_PROP_TYPE: val->intval = psy->type;