[U-Boot] [PATCH 2/2] fastboot: Enable the respective speed endpoints at runtime

Lukasz Majewski l.majewski at samsung.com
Tue Apr 12 15:47:30 CEST 2016


Hi Roger,

> In a dual speed configuration we need to check at runtime if
> we want to enable the Full-Speed or High-Speed endpoint.
> 
> Signed-off-by: Roger Quadros <rogerq at ti.com>
> ---
>  drivers/usb/gadget/f_fastboot.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/gadget/f_fastboot.c
> b/drivers/usb/gadget/f_fastboot.c index e1038ea..8ab187e 100644
> --- a/drivers/usb/gadget/f_fastboot.c
> +++ b/drivers/usb/gadget/f_fastboot.c
> @@ -115,6 +115,15 @@ static struct usb_descriptor_header
> *fb_hs_function[] = { NULL,
>  };
>  
> +static struct usb_endpoint_descriptor *
> +fb_ep_desc(struct usb_gadget *g, struct usb_endpoint_descriptor *fs,
> +	    struct usb_endpoint_descriptor *hs)
> +{
> +	if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
> +		return hs;
> +	return fs;
> +}
> +
>  /*
>   * static strings, in UTF-8
>   */
> @@ -255,18 +264,19 @@ static int fastboot_set_alt(struct usb_function
> *f, struct usb_composite_dev *cdev = f->config->cdev;
>  	struct usb_gadget *gadget = cdev->gadget;
>  	struct f_fastboot *f_fb = func_to_fastboot(f);
> +	const struct usb_endpoint_descriptor *d;
>  
>  	debug("%s: func: %s intf: %d alt: %d\n",
>  	      __func__, f->name, interface, alt);
>  
> -	/* make sure we don't enable the ep twice */
>  	if (gadget->speed == USB_SPEED_HIGH) {
> -		ret = usb_ep_enable(f_fb->out_ep, &hs_ep_out);
>  		is_high_speed = true;
>  	} else {
> -		ret = usb_ep_enable(f_fb->out_ep, &fs_ep_out);
>  		is_high_speed = false;
>  	}

Very minor remark - 
Those {} are not needed.


> +
> +	d = fb_ep_desc(gadget, &fs_ep_out, &hs_ep_out);
> +	ret = usb_ep_enable(f_fb->out_ep, d);
>  	if (ret) {
>  		puts("failed to enable out ep\n");
>  		return ret;
> @@ -280,7 +290,8 @@ static int fastboot_set_alt(struct usb_function
> *f, }
>  	f_fb->out_req->complete = rx_handler_command;
>  
> -	ret = usb_ep_enable(f_fb->in_ep, &fs_ep_in);
> +	d = fb_ep_desc(gadget, &fs_ep_in, &hs_ep_in);
> +	ret = usb_ep_enable(f_fb->in_ep, d);
>  	if (ret) {
>  		puts("failed to enable in ep\n");
>  		goto err;


Despite of that:

Acked-by: Lukasz Majewski <l.majewski at samsung.com>

-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list