On Tue, Jan 19, 2016 at 01:45:38PM +0800, Li Jun wrote: > 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. > > Signed-off-by: Li Jun <jun.li@xxxxxxx> > --- > drivers/usb/chipidea/otg_fsm.c | 12 ++++++++++-- > drivers/usb/chipidea/otg_fsm.h | 2 ++ > include/linux/usb/otg-fsm.h | 1 + > 3 files changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c > index c71e5fa..71381d2 100644 > --- a/drivers/usb/chipidea/otg_fsm.c > +++ b/drivers/usb/chipidea/otg_fsm.c > @@ -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 */ > @@ -657,9 +665,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; > } > diff --git a/drivers/usb/chipidea/otg_fsm.h b/drivers/usb/chipidea/otg_fsm.h > index 2689375..9f71910 100644 > --- a/drivers/usb/chipidea/otg_fsm.h > +++ b/drivers/usb/chipidea/otg_fsm.h > @@ -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 */ > + > #ifdef CONFIG_USB_OTG_FSM > > int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci); > diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h > index 3059a95..24198e1 100644 > --- a/include/linux/usb/otg-fsm.h > +++ b/include/linux/usb/otg-fsm.h > @@ -60,6 +60,7 @@ enum otg_fsm_timer { > A_AIDL_BDIS, > B_ASE0_BRST, > A_BIDL_ADIS, > + B_AIDL_BDIS, > > /* Auxiliary timers */ > B_SE0_SRP, > -- > 1.9.1 > Would you split this as two patches since one is for common changes, but the others are for specific drivers? -- 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