Re: [PATCH v5 10/10] usb: chipidea: otg: add A idle to B disconnect timer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux