aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLi Jun <B47624@freescale.com>2014-02-26 18:38:19 -0500
committerFelipe Balbi <balbi@ti.com>2014-03-07 11:03:25 -0500
commit8bebbe8dc6145303db05964fb09657aac2a7e909 (patch)
tree9c47b026a82c8a2a01900ef38c81009f9f77d7de
parent716fb91dfe1777bd6d5e598f3d3572214b3ed296 (diff)
usb: phy: fsm: update OTG HNP state transition conditions according to OTG and EH 2.0 spec.
According to:"On-The-Go and Embedded Host Supplement to the USB Revision 2.0 Specification July 27, 2012 Revision 2.0 version 1.1a" - From a_host to a_wait_bcon if !b_conn - Add transition from a_host to a_wait_vfall if id state is high or a_bus_drop - From a_wait_vfall to a_idle if a_wait_vfall_tmout Signed-off-by: Li Jun <b47624@freescale.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/phy/phy-fsm-usb.c9
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: