]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/usb/dwc2/platform.c
Merge tag 'pinctrl-v4.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[mirror_ubuntu-zesty-kernel.git] / drivers / usb / dwc2 / platform.c
index ae095f009b4f792b508ee2e713f3268359a27b42..185663e0b5f439af16065989a27ae74cc31a59b6 100644 (file)
@@ -121,8 +121,10 @@ static int dwc2_driver_remove(struct platform_device *dev)
 {
        struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);
 
-       dwc2_hcd_remove(hsotg);
-       s3c_hsotg_remove(hsotg);
+       if (hsotg->hcd_enabled)
+               dwc2_hcd_remove(hsotg);
+       if (hsotg->gadget_enabled)
+               s3c_hsotg_remove(hsotg);
 
        return 0;
 }
@@ -234,12 +236,23 @@ static int dwc2_driver_probe(struct platform_device *dev)
 
        spin_lock_init(&hsotg->lock);
        mutex_init(&hsotg->init_mutex);
-       retval = dwc2_gadget_init(hsotg, irq);
-       if (retval)
-               return retval;
-       retval = dwc2_hcd_init(hsotg, irq, params);
-       if (retval)
-               return retval;
+
+       if (hsotg->dr_mode != USB_DR_MODE_HOST) {
+               retval = dwc2_gadget_init(hsotg, irq);
+               if (retval)
+                       return retval;
+               hsotg->gadget_enabled = 1;
+       }
+
+       if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) {
+               retval = dwc2_hcd_init(hsotg, irq, params);
+               if (retval) {
+                       if (hsotg->gadget_enabled)
+                               s3c_hsotg_remove(hsotg);
+                       return retval;
+               }
+               hsotg->hcd_enabled = 1;
+       }
 
        platform_set_drvdata(dev, hsotg);