diff options
Diffstat (limited to 'drivers/usb/gadget/imx_udc.c')
-rw-r--r-- | drivers/usb/gadget/imx_udc.c | 20 |
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; |
1354 | fail: | ||
1355 | imx_usb->driver = NULL; | ||
1356 | imx_usb->gadget.dev.driver = NULL; | ||
1357 | return retval; | ||
1358 | } | 1349 | } |
1359 | 1350 | ||
1360 | static int imx_udc_stop(struct usb_gadget *gadget, | 1351 | static 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; |
1487 | fail5: | ||
1488 | device_unregister(&imx_usb->gadget.dev); | ||
1494 | fail4: | 1489 | fail4: |
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 | ||