mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 12:25:31 +00:00
usb: chipidea: otg: add A idle to B disconnect timer
B-device detects that bus is idle for more than TB_AIDL_BDIS min and begins HNP by turning off pullup on DP, this allows the bus to discharge to the SE0 state. This timer was missed and failed with PET test: 6.8.5 B-UUT HNP of USB OTG and EH automated compliance plan v1.2, this patch is to fix this timing issue. Acked-by: Peter Chen <peter.chen@nxp.com> Signed-off-by: Li Jun <jun.li@nxp.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
9c527f49a7
commit
4a75754751
@ -209,6 +209,7 @@ static unsigned otg_timer_ms[] = {
|
||||
TA_AIDL_BDIS,
|
||||
TB_ASE0_BRST,
|
||||
TA_BIDL_ADIS,
|
||||
TB_AIDL_BDIS,
|
||||
TB_SE0_SRP,
|
||||
TB_SRP_FAIL,
|
||||
0,
|
||||
@ -320,6 +321,12 @@ static int a_bidl_adis_tmout(struct ci_hdrc *ci)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int b_aidl_bdis_tmout(struct ci_hdrc *ci)
|
||||
{
|
||||
ci->fsm.a_bus_suspend = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int b_se0_srp_tmout(struct ci_hdrc *ci)
|
||||
{
|
||||
ci->fsm.b_se0_srp = 1;
|
||||
@ -364,6 +371,7 @@ static int (*otg_timer_handlers[])(struct ci_hdrc *) = {
|
||||
a_aidl_bdis_tmout, /* A_AIDL_BDIS */
|
||||
b_ase0_brst_tmout, /* B_ASE0_BRST */
|
||||
a_bidl_adis_tmout, /* A_BIDL_ADIS */
|
||||
b_aidl_bdis_tmout, /* B_AIDL_BDIS */
|
||||
b_se0_srp_tmout, /* B_SE0_SRP */
|
||||
b_srp_fail_tmout, /* B_SRP_FAIL */
|
||||
NULL, /* A_WAIT_ENUM */
|
||||
@ -655,9 +663,9 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
|
||||
break;
|
||||
case OTG_STATE_B_PERIPHERAL:
|
||||
if ((intr_sts & USBi_SLI) && port_conn && otg_bsess_vld) {
|
||||
fsm->a_bus_suspend = 1;
|
||||
ci_otg_queue_work(ci);
|
||||
ci_otg_add_timer(ci, B_AIDL_BDIS);
|
||||
} else if (intr_sts & USBi_PCI) {
|
||||
ci_otg_del_timer(ci, B_AIDL_BDIS);
|
||||
if (fsm->a_bus_suspend == 1)
|
||||
fsm->a_bus_suspend = 0;
|
||||
}
|
||||
|
@ -62,6 +62,8 @@
|
||||
/* SSEND time before SRP */
|
||||
#define TB_SSEND_SRP (1500) /* minimum 1.5 sec, section:5.1.2 */
|
||||
|
||||
#define TB_AIDL_BDIS (20) /* 4ms ~ 150ms, section 5.2.1 */
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_OTG_FSM)
|
||||
|
||||
int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci);
|
||||
|
Loading…
Reference in New Issue
Block a user