aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc2/platform.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/dwc2/platform.c')
-rw-r--r--drivers/usb/dwc2/platform.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index ae095f009b4f..185663e0b5f4 100644
--- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c
@@ -121,8 +121,10 @@ static int dwc2_driver_remove(struct platform_device *dev)
121{ 121{
122 struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); 122 struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);
123 123
124 dwc2_hcd_remove(hsotg); 124 if (hsotg->hcd_enabled)
125 s3c_hsotg_remove(hsotg); 125 dwc2_hcd_remove(hsotg);
126 if (hsotg->gadget_enabled)
127 s3c_hsotg_remove(hsotg);
126 128
127 return 0; 129 return 0;
128} 130}
@@ -234,12 +236,23 @@ static int dwc2_driver_probe(struct platform_device *dev)
234 236
235 spin_lock_init(&hsotg->lock); 237 spin_lock_init(&hsotg->lock);
236 mutex_init(&hsotg->init_mutex); 238 mutex_init(&hsotg->init_mutex);
237 retval = dwc2_gadget_init(hsotg, irq); 239
238 if (retval) 240 if (hsotg->dr_mode != USB_DR_MODE_HOST) {
239 return retval; 241 retval = dwc2_gadget_init(hsotg, irq);
240 retval = dwc2_hcd_init(hsotg, irq, params); 242 if (retval)
241 if (retval) 243 return retval;
242 return retval; 244 hsotg->gadget_enabled = 1;
245 }
246
247 if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) {
248 retval = dwc2_hcd_init(hsotg, irq, params);
249 if (retval) {
250 if (hsotg->gadget_enabled)
251 s3c_hsotg_remove(hsotg);
252 return retval;
253 }
254 hsotg->hcd_enabled = 1;
255 }
243 256
244 platform_set_drvdata(dev, hsotg); 257 platform_set_drvdata(dev, hsotg);
245 258