USB: msm_otg: Add 50 msec delay after changing scope from SYSTEM to DEVICE

When USB operate in host mode, it select SYSTEM scope.  PMIC charging
driver disable VBUS comparator upon SYSTEM scope request from USB.
scope is changed to DEVICE from SYSTEM for ID_GND-->ID_A transition.
USB request charging driver to draw current from VBUS.  Later when
charging driver receive VBUS valid interrupt, it tries to reset the
charging current as per AICL algorithm.

Add 50 msec delay after changing scope from SYSTEM to DEVICE.  This would
allow charger driver to observe VBUS valid interrupt before vbus_draw()
request from USB. Apply this delay only for ID_GND-->ID_A transition.

CRs-Fixed: 417564
Change-Id: Ic505468cddd650d9306568b377b324d523779040
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index d04c234..23a9499 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -1137,11 +1137,20 @@
 
 	if (legacy_power_supply) {
 		/* legacy support */
-		if (host_mode)
+		if (host_mode) {
 			power_supply_set_scope(psy, POWER_SUPPLY_SCOPE_SYSTEM);
-		else
+		} else {
 			power_supply_set_scope(psy, POWER_SUPPLY_SCOPE_DEVICE);
-		return;
+			/*
+			 * VBUS comparator is disabled by PMIC charging driver
+			 * when SYSTEM scope is selected.  For ID_GND->ID_A
+			 * transition, give 50 msec delay so that PMIC charger
+			 * driver detect the VBUS and ready for accepting
+			 * charging current value from USB.
+			 */
+			if (test_bit(ID_A, &motg->inputs))
+				msleep(50);
+		}
 	} else {
 		motg->host_mode = host_mode;
 		power_supply_changed(psy);