Re: [PATCH v2][RESEND] usb: gadget: core: Fix ->udc_set_speed() speed handling

From: Alan Stern
Date: Wed Nov 01 2017 - 11:46:02 EST


On Wed, 1 Nov 2017, Roger Quadros wrote:

> > Roger, would you like to send in a follow-up patch that removes the now
> > unnecessary code from dummy_udc_set_speed() in dummy_hcd.c?
> >
>
> Sure. I have a question though.
>
> In dummy_udc_set_speed() we should just set gadget.speed to whatever is passed in speed.
> This will be the maximum supported speed by the gadget function driver.

Following your patch, it will be the maximum speed supported by the
gadget function driver or the maximum speed supported by the UDC
driver, whichever is lower. That's the whole point of your patch,
right?

> However, is it possible that the gadget will be connected at a lower speed than that?

Yes, it is possible to connect at a speed lower than the function
driver's maximum speed. The connection speed for dummy-hcd is
controlled by a pair of module parameters: is_super_speed and
is_high_speed.

> I see gadget.speed being updated in dummy_hub_control() GetPortStatus: case, but not
> in case of USB_SPEED_HIGH and USB_SPEED_LOW.

Here's what the code does, in outline form:

switch (dum_hcd->dum->gadget.speed) {
case USB_SPEED_HIGH:
...
break;
case USB_SPEED_LOW:
...
break;
default:
dum_hcd->dum->gadget.speed = USB_SPEED_FULL;
break;
}

In other words, if gadget.speed isn't USB_SPEED_HIGH or USB_SPEED_LOW,
set it to USB_SPEED_FULL. And this is all under the case where the
connection is USB-2, not USB-3 or higher.

How is this related to the requested change to dummy_udc_set_speed()?

Alan Stern