diff --git a/drivers/usb/gadget/mv_udc.c b/drivers/usb/gadget/mv_udc.c
index 6d69d6d568c5b28deb2d244f0cb442f3e17420f4..bed589820a049f238b139c9fcbd52313b90dcdda 100644
--- a/drivers/usb/gadget/mv_udc.c
+++ b/drivers/usb/gadget/mv_udc.c
@@ -471,13 +471,12 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 	struct mv_udc *udc;
 	int ret;
 
-	if (!driver
-			|| driver->speed < USB_SPEED_FULL
-			|| !driver->bind
-			|| !driver->setup) {
-		DBG("bad parameter.\n");
+	if (!driver)
+		return -EINVAL;
+	if (!driver->bind || !driver->setup || !driver->disconnect)
+		return -EINVAL;
+	if (driver->speed != USB_SPEED_FULL && driver->speed != USB_SPEED_HIGH)
 		return -EINVAL;
-	}
 
 	ret = usb_lowlevel_init(0, (void **)&controller.ctrl);
 	if (ret)