Re: [PATCH 1/2] usb: gadget dbgp: Fix endpoint config after USB disconnect

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

 



Hi,

On Sun, Oct 26, 2014 at 08:01:29PM +0200, Kyösti Mälkki wrote:
> SET_FEATURE request for DEBUG_MODE only worked the first time after module
> initialisation. On USB host reset or cable disconnect gserial_disconnect()
> clears the associations dbgp.serial->in->desc and dbgp_serial->out->desc.
> 
> Per the USB 2.0 debug device specification, SET_FEATURE with DEBUG_MODE
> is to be treated as if it were a SET_CONFIGURATION request. Redo endpoint
> configuration on this request.
> 
> Code has assumption that endpoint mapping remains unchanged from what was
> previously returned as a GET_DESCRIPTOR DT_DEBUG response.
> 
> Signed-off-by: Kyösti Mälkki <kyosti.malkki@xxxxxxxxx>

you're doing many things in one patch and I can't accept this.

> ---
>  drivers/usb/gadget/legacy/dbgp.c | 39 ++++++++++++++++++++++++++-------------
>  1 file changed, 26 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/usb/gadget/legacy/dbgp.c b/drivers/usb/gadget/legacy/dbgp.c
> index 1b07513..afb49ef 100644
> --- a/drivers/usb/gadget/legacy/dbgp.c
> +++ b/drivers/usb/gadget/legacy/dbgp.c
> @@ -214,6 +214,7 @@ static void dbgp_disconnect(struct usb_gadget *gadget)
>  #ifdef CONFIG_USB_G_DBGP_PRINTK
>  	dbgp_disable_ep();
>  #else
> +	dev_dbg(&dbgp.gadget->dev, "disconnected\n");

first you add this debugging message which can definitely wait for
v3.19, not a fix.

>  	gserial_disconnect(dbgp.serial);
>  #endif
>  }
> @@ -237,7 +238,7 @@ static void dbgp_unbind(struct usb_gadget *gadget)
>  static unsigned char tty_line;
>  #endif
>  
> -static int __init dbgp_configure_endpoints(struct usb_gadget *gadget)
> +static int dbgp_configure_endpoints(struct usb_gadget *gadget)

then you remove __init here without ever mentioning why. Separate patch.

> @@ -273,19 +274,10 @@ static int __init dbgp_configure_endpoints(struct usb_gadget *gadget)
>  
>  	dbgp.serial->in->desc = &i_desc;
>  	dbgp.serial->out->desc = &o_desc;
> -
> -	if (gserial_alloc_line(&tty_line)) {
> -		stp = 3;
> -		goto fail_3;
> -	}

why are you removing this ?

> +#endif
>  
>  	return 0;
>  
> -fail_3:
> -	dbgp.o_ep->driver_data = NULL;
> -#else
> -	return 0;
> -#endif
>  fail_2:
>  	dbgp.i_ep->driver_data = NULL;
>  fail_1:
> @@ -324,10 +316,17 @@ static int __init dbgp_bind(struct usb_gadget *gadget,
>  		err = -ENOMEM;
>  		goto fail;
>  	}
> +
> +	if (gserial_alloc_line(&tty_line)) {
> +		stp = 4;
> +		err = -ENODEV;
> +		goto fail;
> +	}

why do you need this here ?

>  #endif
> +
>  	err = dbgp_configure_endpoints(gadget);
>  	if (err < 0) {
> -		stp = 4;
> +		stp = 5;
>  		goto fail;
>  	}
>  
> @@ -379,12 +378,26 @@ static int dbgp_setup(struct usb_gadget *gadget,
>  		err = 0;
>  	} else if (request == USB_REQ_SET_FEATURE &&
>  		   value == USB_DEVICE_DEBUG_MODE) {
> -		dev_dbg(&dbgp.gadget->dev, "setup: feat debug\n");
>  #ifdef CONFIG_USB_G_DBGP_PRINTK
>  		err = dbgp_enable_ep();
>  #else
> +		if (!(dbgp.serial->in && dbgp.serial->in->desc &&
> +			dbgp.serial->out && dbgp.serial->out->desc)) {
> +			dev_dbg(&dbgp.gadget->dev, "needs reconfiguration\n");
> +			err = dbgp_configure_endpoints(gadget);
> +			if (err < 0) {
> +				goto fail;
> +			}
> +		}

now this is the only thing mentioned in your commit log and this is only
thing that should be in $subject.

> +		if (dbgp.serial->in && dbgp.serial->in->desc &&
> +			dbgp.serial->out && dbgp.serial->out->desc) {
> +			dev_dbg(&dbgp.gadget->dev, "epIn %02x, epOut %02x\n",
> +				dbgp.serial->in->desc->bEndpointAddress,
> +				dbgp.serial->out->desc->bEndpointAddress);
> +		}

why do you need this entire branch here just for a debugging message ?
Why didn't you add this debugging message right after
dbgp_configure_endpoints() above ?

>  		err = gserial_connect(dbgp.serial, tty_line);
>  #endif
> +		dev_dbg(&dbgp.gadget->dev, "setup: feat debug (%d)\n", err);

another debugging message which an wait until v3.19.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


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

  Powered by Linux