usb: gadget: replace usb_gadget::is_dualspeed with max_speed
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / usb / renesas_usbhs / mod_gadget.c
index ef82274..43c67e5 100644 (file)
@@ -681,9 +681,7 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
         * - function
         * - usb module
         */
-       usbhs_sys_hispeed_ctrl(priv, 1);
        usbhs_sys_function_ctrl(priv, 1);
-       usbhs_sys_usb_ctrl(priv, 1);
 
        /*
         * enable irq callback
@@ -731,9 +729,7 @@ static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status)
        gpriv->gadget.speed = USB_SPEED_UNKNOWN;
 
        /* disable sys */
-       usbhs_sys_hispeed_ctrl(priv, 0);
        usbhs_sys_function_ctrl(priv, 0);
-       usbhs_sys_usb_ctrl(priv, 0);
 
        usbhsg_pipe_disable(dcp);
 
@@ -755,7 +751,7 @@ static int usbhsg_gadget_start(struct usb_gadget *gadget,
 
        if (!driver             ||
            !driver->setup      ||
-           driver->speed != USB_SPEED_HIGH)
+           driver->speed < USB_SPEED_FULL)
                return -EINVAL;
 
        /* first hook up the driver ... */
@@ -776,6 +772,7 @@ static int usbhsg_gadget_stop(struct usb_gadget *gadget,
                return -EINVAL;
 
        usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
+       gpriv->gadget.dev.driver = NULL;
        gpriv->driver = NULL;
 
        return 0;
@@ -805,6 +802,13 @@ static int usbhsg_start(struct usbhs_priv *priv)
 
 static int usbhsg_stop(struct usbhs_priv *priv)
 {
+       struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
+
+       /* cable disconnect */
+       if (gpriv->driver &&
+           gpriv->driver->disconnect)
+               gpriv->driver->disconnect(&gpriv->gadget);
+
        return usbhsg_try_stop(priv, USBHSG_STATUS_STARTED);
 }
 
@@ -858,7 +862,7 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
        gpriv->gadget.dev.parent        = dev;
        gpriv->gadget.name              = "renesas_usbhs_udc";
        gpriv->gadget.ops               = &usbhsg_gadget_ops;
-       gpriv->gadget.is_dualspeed      = 1;
+       gpriv->gadget.max_speed         = USB_SPEED_HIGH;
        ret = device_register(&gpriv->gadget.dev);
        if (ret < 0)
                goto err_add_udc;