usb: udc: Fix gadget driver's speed check in various UDC drivers
Several UDC drivers had a gadget driver's speed sanity check of the form of: driver->speed != USB_SPEED_HIGH or: driver->speed != USB_SPEED_HIGH && driver->speed != USB_SPEED_FULL As more and more gadget drivers support USB SuperSpeed, driver->speed may be set to USB_SPEED_SUPER and UDC driver should handle such gadget correctly. The above checks however fail to recognise USB_SPEED_SUPER as a valid speed. This commit changes the two checks to: driver->speed < USB_SPEED_HIGH or: driver->speed < USB_SPEED_FULL respectively. Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Reported-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
fef6964452
commit
bfe0658b40
|
@ -1959,7 +1959,7 @@ static int amd5536_start(struct usb_gadget_driver *driver,
|
|||
u32 tmp;
|
||||
|
||||
if (!driver || !bind || !driver->setup
|
||||
|| driver->speed != USB_SPEED_HIGH)
|
||||
|| driver->speed < USB_SPEED_HIGH)
|
||||
return -EINVAL;
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
|
|
@ -2336,8 +2336,7 @@ static int fsl_qe_start(struct usb_gadget_driver *driver,
|
|||
if (!udc_controller)
|
||||
return -ENODEV;
|
||||
|
||||
if (!driver || (driver->speed != USB_SPEED_FULL
|
||||
&& driver->speed != USB_SPEED_HIGH)
|
||||
if (!driver || driver->speed < USB_SPEED_FULL
|
||||
|| !bind || !driver->disconnect || !driver->setup)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -1938,8 +1938,7 @@ static int fsl_start(struct usb_gadget_driver *driver,
|
|||
if (!udc_controller)
|
||||
return -ENODEV;
|
||||
|
||||
if (!driver || (driver->speed != USB_SPEED_FULL
|
||||
&& driver->speed != USB_SPEED_HIGH)
|
||||
if (!driver || driver->speed < USB_SPEED_FULL
|
||||
|| !bind || !driver->disconnect || !driver->setup)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -1472,7 +1472,7 @@ static int m66592_start(struct usb_gadget_driver *driver,
|
|||
int retval;
|
||||
|
||||
if (!driver
|
||||
|| driver->speed != USB_SPEED_HIGH
|
||||
|| driver->speed < USB_SPEED_HIGH
|
||||
|| !bind
|
||||
|| !driver->setup)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1881,7 +1881,7 @@ static int net2280_start(struct usb_gadget *_gadget,
|
|||
* (dev->usb->xcvrdiag & FORCE_FULL_SPEED_MODE)
|
||||
* "must not be used in normal operation"
|
||||
*/
|
||||
if (!driver || driver->speed != USB_SPEED_HIGH
|
||||
if (!driver || driver->speed < USB_SPEED_HIGH
|
||||
|| !driver->setup)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -1746,7 +1746,7 @@ static int r8a66597_start(struct usb_gadget *gadget,
|
|||
struct r8a66597 *r8a66597 = gadget_to_r8a66597(gadget);
|
||||
|
||||
if (!driver
|
||||
|| driver->speed != USB_SPEED_HIGH
|
||||
|| driver->speed < USB_SPEED_HIGH
|
||||
|| !driver->setup)
|
||||
return -EINVAL;
|
||||
if (!r8a66597)
|
||||
|
|
|
@ -2586,10 +2586,8 @@ static int s3c_hsotg_start(struct usb_gadget_driver *driver,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (driver->speed != USB_SPEED_HIGH &&
|
||||
driver->speed != USB_SPEED_FULL) {
|
||||
if (driver->speed < USB_SPEED_FULL)
|
||||
dev_err(hsotg->dev, "%s: bad speed\n", __func__);
|
||||
}
|
||||
|
||||
if (!bind || !driver->setup) {
|
||||
dev_err(hsotg->dev, "%s: missing entry points\n", __func__);
|
||||
|
|
|
@ -1142,8 +1142,7 @@ static int s3c_hsudc_start(struct usb_gadget_driver *driver,
|
|||
int ret;
|
||||
|
||||
if (!driver
|
||||
|| (driver->speed != USB_SPEED_FULL &&
|
||||
driver->speed != USB_SPEED_HIGH)
|
||||
|| driver->speed < USB_SPEED_FULL
|
||||
|| !bind
|
||||
|| !driver->unbind || !driver->disconnect || !driver->setup)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1903,7 +1903,7 @@ static int musb_gadget_start(struct usb_gadget *g,
|
|||
unsigned long flags;
|
||||
int retval = -EINVAL;
|
||||
|
||||
if (driver->speed != USB_SPEED_HIGH)
|
||||
if (driver->speed < USB_SPEED_HIGH)
|
||||
goto err0;
|
||||
|
||||
pm_runtime_get_sync(musb->controller);
|
||||
|
|
Loading…
Reference in New Issue