On Tue, Jan 26, 2016 at 03:19:02PM +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...@nxp.com>
> ---
>  drivers/usb/chipidea/otg_fsm.c | 12 ++++++++++--
>  drivers/usb/chipidea/otg_fsm.h |  2 ++
>  2 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index 9a963a7..de8e22e 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 */
> @@ -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;
>               }
> 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);
> -- 
> 1.9.1
> 

Acked-by: Peter Chen <peter.c...@nxp.com>

-- 

Best Regards,
Peter Chen
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to