aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/imx_udc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/imx_udc.c')
-rw-r--r--drivers/usb/gadget/imx_udc.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/usb/gadget/imx_udc.c b/drivers/usb/gadget/imx_udc.c
index 8efd7555fa21..5bd930d779b9 100644
--- a/drivers/usb/gadget/imx_udc.c
+++ b/drivers/usb/gadget/imx_udc.c
@@ -1334,27 +1334,18 @@ static int imx_udc_start(struct usb_gadget *gadget,
1334 struct usb_gadget_driver *driver) 1334 struct usb_gadget_driver *driver)
1335{ 1335{
1336 struct imx_udc_struct *imx_usb; 1336 struct imx_udc_struct *imx_usb;
1337 int retval;
1338 1337
1339 imx_usb = container_of(gadget, struct imx_udc_struct, gadget); 1338 imx_usb = container_of(gadget, struct imx_udc_struct, gadget);
1340 /* first hook up the driver ... */ 1339 /* first hook up the driver ... */
1341 imx_usb->driver = driver; 1340 imx_usb->driver = driver;
1342 imx_usb->gadget.dev.driver = &driver->driver; 1341 imx_usb->gadget.dev.driver = &driver->driver;
1343 1342
1344 retval = device_add(&imx_usb->gadget.dev);
1345 if (retval)
1346 goto fail;
1347
1348 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n", 1343 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1349 __func__, driver->driver.name); 1344 __func__, driver->driver.name);
1350 1345
1351 imx_udc_enable(imx_usb); 1346 imx_udc_enable(imx_usb);
1352 1347
1353 return 0; 1348 return 0;
1354fail:
1355 imx_usb->driver = NULL;
1356 imx_usb->gadget.dev.driver = NULL;
1357 return retval;
1358} 1349}
1359 1350
1360static int imx_udc_stop(struct usb_gadget *gadget, 1351static int imx_udc_stop(struct usb_gadget *gadget,
@@ -1370,8 +1361,6 @@ static int imx_udc_stop(struct usb_gadget *gadget,
1370 imx_usb->gadget.dev.driver = NULL; 1361 imx_usb->gadget.dev.driver = NULL;
1371 imx_usb->driver = NULL; 1362 imx_usb->driver = NULL;
1372 1363
1373 device_del(&imx_usb->gadget.dev);
1374
1375 D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n", 1364 D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n",
1376 __func__, driver->driver.name); 1365 __func__, driver->driver.name);
1377 1366
@@ -1477,6 +1466,10 @@ static int __init imx_udc_probe(struct platform_device *pdev)
1477 imx_usb->gadget.dev.parent = &pdev->dev; 1466 imx_usb->gadget.dev.parent = &pdev->dev;
1478 imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask; 1467 imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask;
1479 1468
1469 ret = device_add(&imx_usb->gadget.dev);
1470 if (retval)
1471 goto fail4;
1472
1480 platform_set_drvdata(pdev, imx_usb); 1473 platform_set_drvdata(pdev, imx_usb);
1481 1474
1482 usb_init_data(imx_usb); 1475 usb_init_data(imx_usb);
@@ -1488,9 +1481,11 @@ static int __init imx_udc_probe(struct platform_device *pdev)
1488 1481
1489 ret = usb_add_gadget_udc(&pdev->dev, &imx_usb->gadget); 1482 ret = usb_add_gadget_udc(&pdev->dev, &imx_usb->gadget);
1490 if (ret) 1483 if (ret)
1491 goto fail4; 1484 goto fail5;
1492 1485
1493 return 0; 1486 return 0;
1487fail5:
1488 device_unregister(&imx_usb->gadget.dev);
1494fail4: 1489fail4:
1495 for (i = 0; i < IMX_USB_NB_EP + 1; i++) 1490 for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1496 free_irq(imx_usb->usbd_int[i], imx_usb); 1491 free_irq(imx_usb->usbd_int[i], imx_usb);
@@ -1514,6 +1509,7 @@ static int __exit imx_udc_remove(struct platform_device *pdev)
1514 int i; 1509 int i;
1515 1510
1516 usb_del_gadget_udc(&imx_usb->gadget); 1511 usb_del_gadget_udc(&imx_usb->gadget);
1512 device_unregister(&imx_usb->gadget.dev);
1517 imx_udc_disable(imx_usb); 1513 imx_udc_disable(imx_usb);
1518 del_timer(&imx_usb->timer); 1514 del_timer(&imx_usb->timer);
1519 1515