diff options
| author | Li Jun <B47624@freescale.com> | 2014-02-26 18:38:19 -0500 |
|---|---|---|
| committer | Nitin Garg <nitin.garg@freescale.com> | 2014-04-16 12:02:29 -0400 |
| commit | 78f7723037dbef2a134510188ebafb8c5e94a484 (patch) | |
| tree | b4e91392e02db515c523f58bc50e1be484f31380 /drivers/usb/phy | |
| parent | e9e2b335eb1d24d953575b3c2245a57e34ae3780 (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>
(cherry-picked from commit 8bebbe8dc6145303db05964fb09657aac2a7e909)
Diffstat (limited to 'drivers/usb/phy')
| -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 65c3a728ef4f..c23c474cb772 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: |
