diff options
Diffstat (limited to 'drivers/usb/gadget/s3c2410_udc.c')
| -rw-r--r-- | drivers/usb/gadget/s3c2410_udc.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index fc07b4381286..08f89652533b 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c | |||
| @@ -1668,8 +1668,7 @@ static void s3c2410_udc_enable(struct s3c2410_udc *dev) | |||
| 1668 | static int s3c2410_udc_start(struct usb_gadget *g, | 1668 | static int s3c2410_udc_start(struct usb_gadget *g, |
| 1669 | struct usb_gadget_driver *driver) | 1669 | struct usb_gadget_driver *driver) |
| 1670 | { | 1670 | { |
| 1671 | struct s3c2410_udc *udc = to_s3c2410(g) | 1671 | struct s3c2410_udc *udc = to_s3c2410(g); |
| 1672 | int retval; | ||
| 1673 | 1672 | ||
| 1674 | dprintk(DEBUG_NORMAL, "%s() '%s'\n", __func__, driver->driver.name); | 1673 | dprintk(DEBUG_NORMAL, "%s() '%s'\n", __func__, driver->driver.name); |
| 1675 | 1674 | ||
| @@ -1677,22 +1676,10 @@ static int s3c2410_udc_start(struct usb_gadget *g, | |||
| 1677 | udc->driver = driver; | 1676 | udc->driver = driver; |
| 1678 | udc->gadget.dev.driver = &driver->driver; | 1677 | udc->gadget.dev.driver = &driver->driver; |
| 1679 | 1678 | ||
| 1680 | /* Bind the driver */ | ||
| 1681 | retval = device_add(&udc->gadget.dev); | ||
| 1682 | if (retval) { | ||
| 1683 | dev_err(&udc->gadget.dev, "Error in device_add() : %d\n", retval); | ||
| 1684 | goto register_error; | ||
| 1685 | } | ||
| 1686 | |||
| 1687 | /* Enable udc */ | 1679 | /* Enable udc */ |
| 1688 | s3c2410_udc_enable(udc); | 1680 | s3c2410_udc_enable(udc); |
| 1689 | 1681 | ||
| 1690 | return 0; | 1682 | return 0; |
| 1691 | |||
| 1692 | register_error: | ||
| 1693 | udc->driver = NULL; | ||
| 1694 | udc->gadget.dev.driver = NULL; | ||
| 1695 | return retval; | ||
| 1696 | } | 1683 | } |
| 1697 | 1684 | ||
| 1698 | static int s3c2410_udc_stop(struct usb_gadget *g, | 1685 | static int s3c2410_udc_stop(struct usb_gadget *g, |
| @@ -1700,7 +1687,6 @@ static int s3c2410_udc_stop(struct usb_gadget *g, | |||
| 1700 | { | 1687 | { |
| 1701 | struct s3c2410_udc *udc = to_s3c2410(g); | 1688 | struct s3c2410_udc *udc = to_s3c2410(g); |
| 1702 | 1689 | ||
| 1703 | device_del(&udc->gadget.dev); | ||
| 1704 | udc->driver = NULL; | 1690 | udc->driver = NULL; |
| 1705 | 1691 | ||
| 1706 | /* Disable udc */ | 1692 | /* Disable udc */ |
| @@ -1842,6 +1828,13 @@ static int s3c2410_udc_probe(struct platform_device *pdev) | |||
| 1842 | udc->gadget.dev.parent = &pdev->dev; | 1828 | udc->gadget.dev.parent = &pdev->dev; |
| 1843 | udc->gadget.dev.dma_mask = pdev->dev.dma_mask; | 1829 | udc->gadget.dev.dma_mask = pdev->dev.dma_mask; |
| 1844 | 1830 | ||
| 1831 | /* Bind the driver */ | ||
| 1832 | retval = device_add(&udc->gadget.dev); | ||
| 1833 | if (retval) { | ||
| 1834 | dev_err(&udc->gadget.dev, "Error in device_add() : %d\n", retval); | ||
| 1835 | goto err_device_add; | ||
| 1836 | } | ||
| 1837 | |||
| 1845 | the_controller = udc; | 1838 | the_controller = udc; |
| 1846 | platform_set_drvdata(pdev, udc); | 1839 | platform_set_drvdata(pdev, udc); |
| 1847 | 1840 | ||
| @@ -1930,6 +1923,8 @@ err_gpio_claim: | |||
| 1930 | err_int: | 1923 | err_int: |
| 1931 | free_irq(IRQ_USBD, udc); | 1924 | free_irq(IRQ_USBD, udc); |
| 1932 | err_map: | 1925 | err_map: |
| 1926 | device_unregister(&udc->gadget.dev); | ||
| 1927 | err_device_add: | ||
| 1933 | iounmap(base_addr); | 1928 | iounmap(base_addr); |
| 1934 | err_mem: | 1929 | err_mem: |
| 1935 | release_mem_region(rsrc_start, rsrc_len); | 1930 | release_mem_region(rsrc_start, rsrc_len); |
| @@ -1947,10 +1942,11 @@ static int s3c2410_udc_remove(struct platform_device *pdev) | |||
| 1947 | 1942 | ||
| 1948 | dev_dbg(&pdev->dev, "%s()\n", __func__); | 1943 | dev_dbg(&pdev->dev, "%s()\n", __func__); |
| 1949 | 1944 | ||
| 1950 | usb_del_gadget_udc(&udc->gadget); | ||
| 1951 | if (udc->driver) | 1945 | if (udc->driver) |
| 1952 | return -EBUSY; | 1946 | return -EBUSY; |
| 1953 | 1947 | ||
| 1948 | usb_del_gadget_udc(&udc->gadget); | ||
| 1949 | device_unregister(&udc->gadget.dev); | ||
| 1954 | debugfs_remove(udc->regs_info); | 1950 | debugfs_remove(udc->regs_info); |
| 1955 | 1951 | ||
| 1956 | if (udc_info && !udc_info->udc_command && | 1952 | if (udc_info && !udc_info->udc_command && |
