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;