USB: OTG: msm: Avoid resetting PHY 2 times during initialization
The PHY is reset in B_IDLE state before entering into low power mode.
When B_IDLE is reached via B_PERIPHERAL or A_HOST states, it is fine.
But this is redundant if B_IDLE is reached via UNDEFINED state, which
happens only once during initialization as PHY is already reset in
UNDEFINED state. Hence enter B_IDLE state only when cable is connected
during initialization. Otherwise enter low power mode directly from
UNDEFINED state.
Change-Id: I0692dd52ad69093f1a10cb5c87ec713d46d9c7dd
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 2466246..550bdb0 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -1653,6 +1653,12 @@
msm_otg_reset(otg);
msm_otg_init_sm(motg);
otg->state = OTG_STATE_B_IDLE;
+ if (!test_bit(B_SESS_VLD, &motg->inputs) &&
+ test_bit(ID, &motg->inputs)) {
+ pm_runtime_put_noidle(otg->dev);
+ pm_runtime_suspend(otg->dev);
+ break;
+ }
/* FALL THROUGH */
case OTG_STATE_B_IDLE:
dev_dbg(otg->dev, "OTG_STATE_B_IDLE state\n");