Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfe0658b authored by Michal Nazarewicz's avatar Michal Nazarewicz Committed by Greg Kroah-Hartman
Browse files

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: default avatarMichal Nazarewicz <mina86@mina86.com>
Reported-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fef69644
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −2
Original line number Diff line number Diff line
@@ -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;

+1 −2
Original line number Diff line number Diff line
@@ -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;

+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;

Loading