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

Steve Rae
2016-04-13T01:43:58Z

Hi Roger,

On Tue, Apr 12, 2016 at 6:47 AM, Lukasz Majewski <l.majewski@samsung.com> wrote:
> 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@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@samsung.com>
>
> --
> Best regards,
>
> Lukasz Majewski
>
> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

Tested-by: Steve Rae <srae@broadcom.com>
[Test HW: bcm235xx board]

Thanks, Steve