On Mon, Jan 20, 2014 at 09:56:12AM +0800, Li Jun wrote: > 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@xxxxxxxxxxxxx> > --- > 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 7aa314e..c47e5a6 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) > otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); > break; > case OTG_STATE_A_HOST: > - if ((!fsm->a_bus_req || fsm->a_suspend_req_inf) && > + if (fsm->id || fsm->a_bus_drop) > + otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); > + else if ((!fsm->a_bus_req || fsm->a_suspend_req_inf) && > fsm->otg->host->b_hnp_enable) > otg_set_state(fsm, OTG_STATE_A_SUSPEND); > - else if (fsm->id || !fsm->b_conn || fsm->a_bus_drop) > + else if (!fsm->b_conn) > otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); > else if (!fsm->a_vbus_vld) > otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); > @@ -346,8 +348,7 @@ int otg_statemachine(struct otg_fsm *fsm) > otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); > break; > case OTG_STATE_A_WAIT_VFALL: > - if (fsm->a_wait_vfall_tmout || fsm->id || fsm->a_bus_req || > - (!fsm->a_sess_vld && !fsm->b_conn)) > + if (fsm->a_wait_vfall_tmout) > otg_set_state(fsm, OTG_STATE_A_IDLE); > break; > case OTG_STATE_A_VBUS_ERR: > -- > 1.7.8 > > Reviewed-by: Peter Chen <peter.chen@xxxxxxxxxxxxx> -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html