diff options
Diffstat (limited to 'drivers/usb/dwc2/platform.c')
-rw-r--r-- | drivers/usb/dwc2/platform.c | 29 |
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 | ||