diff options
Diffstat (limited to 'drivers/usb/phy/phy-fsm-usb.c')
-rw-r--r-- | drivers/usb/phy/phy-fsm-usb.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/usb/phy/phy-fsm-usb.c b/drivers/usb/phy/phy-fsm-usb.c index 7aa314ef4a8a..c47e5a6edde2 100644 --- a/drivers/usb/phy/phy-fsm-usb.c +++ b/drivers/usb/phy/phy-fsm-usb.c | |||
@@ -317,10 +317,12 @@ int otg_statemachine(struct otg_fsm *fsm) | |||
317 | otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); | 317 | otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); |
318 | break; | 318 | break; |
319 | case OTG_STATE_A_HOST: | 319 | case OTG_STATE_A_HOST: |
320 | if ((!fsm->a_bus_req || fsm->a_suspend_req_inf) && | 320 | if (fsm->id || fsm->a_bus_drop) |
321 | otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); | ||
322 | else if ((!fsm->a_bus_req || fsm->a_suspend_req_inf) && | ||
321 | fsm->otg->host->b_hnp_enable) | 323 | fsm->otg->host->b_hnp_enable) |
322 | otg_set_state(fsm, OTG_STATE_A_SUSPEND); | 324 | otg_set_state(fsm, OTG_STATE_A_SUSPEND); |
323 | else if (fsm->id || !fsm->b_conn || fsm->a_bus_drop) | 325 | else if (!fsm->b_conn) |
324 | otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); | 326 | otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); |
325 | else if (!fsm->a_vbus_vld) | 327 | else if (!fsm->a_vbus_vld) |
326 | otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); | 328 | otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); |
@@ -346,8 +348,7 @@ int otg_statemachine(struct otg_fsm *fsm) | |||
346 | otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); | 348 | otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); |
347 | break; | 349 | break; |
348 | case OTG_STATE_A_WAIT_VFALL: | 350 | case OTG_STATE_A_WAIT_VFALL: |
349 | if (fsm->a_wait_vfall_tmout || fsm->id || fsm->a_bus_req || | 351 | if (fsm->a_wait_vfall_tmout) |
350 | (!fsm->a_sess_vld && !fsm->b_conn)) | ||
351 | otg_set_state(fsm, OTG_STATE_A_IDLE); | 352 | otg_set_state(fsm, OTG_STATE_A_IDLE); |
352 | break; | 353 | break; |
353 | case OTG_STATE_A_VBUS_ERR: | 354 | case OTG_STATE_A_VBUS_ERR: |