aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2011-10-08 06:17:34 -0400
committerFelipe Balbi <balbi@ti.com>2011-10-13 13:39:55 -0400
commit2c7f098916e3eb5473724d0653eca9f446997915 (patch)
tree159aa03ea84483a2065ad15f257f907929dc82bc /drivers/usb/gadget
parent5bc639fc55b51f828b20747eb1c48a669053b1e5 (diff)
usb: gadget: langwell: convert to new style
with this patch we can finally remove the global "the_controller" pointer. Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/langwell_udc.c67
-rw-r--r--drivers/usb/gadget/langwell_udc.h2
2 files changed, 21 insertions, 48 deletions
diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c
index 444bd11d3f4b..7a133631bc2b 100644
--- a/drivers/usb/gadget/langwell_udc.c
+++ b/drivers/usb/gadget/langwell_udc.c
@@ -50,9 +50,6 @@ static const char driver_name[] = "langwell_udc";
50static const char driver_desc[] = DRIVER_DESC; 50static const char driver_desc[] = DRIVER_DESC;
51 51
52 52
53/* controller device global variable */
54static struct langwell_udc *the_controller;
55
56/* for endpoint 0 operations */ 53/* for endpoint 0 operations */
57static const struct usb_endpoint_descriptor 54static const struct usb_endpoint_descriptor
58langwell_ep0_desc = { 55langwell_ep0_desc = {
@@ -1311,9 +1308,12 @@ static int langwell_pullup(struct usb_gadget *_gadget, int is_on)
1311 return 0; 1308 return 0;
1312} 1309}
1313 1310
1314static int langwell_start(struct usb_gadget_driver *driver, 1311static int langwell_start(struct usb_gadget *g,
1315 int (*bind)(struct usb_gadget *)); 1312 struct usb_gadget_driver *driver);
1316static int langwell_stop(struct usb_gadget_driver *driver); 1313
1314static int langwell_stop(struct usb_gadget *g,
1315 struct usb_gadget_driver *driver);
1316
1317/* device controller usb_gadget_ops structure */ 1317/* device controller usb_gadget_ops structure */
1318static const struct usb_gadget_ops langwell_ops = { 1318static const struct usb_gadget_ops langwell_ops = {
1319 1319
@@ -1335,8 +1335,8 @@ static const struct usb_gadget_ops langwell_ops = {
1335 /* D+ pullup, software-controlled connect/disconnect to USB host */ 1335 /* D+ pullup, software-controlled connect/disconnect to USB host */
1336 .pullup = langwell_pullup, 1336 .pullup = langwell_pullup,
1337 1337
1338 .start = langwell_start, 1338 .udc_start = langwell_start,
1339 .stop = langwell_stop, 1339 .udc_stop = langwell_stop,
1340}; 1340};
1341 1341
1342 1342
@@ -1848,21 +1848,15 @@ static DEVICE_ATTR(remote_wakeup, S_IWUSR, NULL, store_remote_wakeup);
1848 * the driver might get unbound. 1848 * the driver might get unbound.
1849 */ 1849 */
1850 1850
1851static int langwell_start(struct usb_gadget_driver *driver, 1851static int langwell_start(struct usb_gadget *g,
1852 int (*bind)(struct usb_gadget *)) 1852 struct usb_gadget_driver *driver)
1853{ 1853{
1854 struct langwell_udc *dev = the_controller; 1854 struct langwell_udc *dev = gadget_to_langwell(g);
1855 unsigned long flags; 1855 unsigned long flags;
1856 int retval; 1856 int retval;
1857 1857
1858 if (!dev)
1859 return -ENODEV;
1860
1861 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__); 1858 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1862 1859
1863 if (dev->driver)
1864 return -EBUSY;
1865
1866 spin_lock_irqsave(&dev->lock, flags); 1860 spin_lock_irqsave(&dev->lock, flags);
1867 1861
1868 /* hook up the driver ... */ 1862 /* hook up the driver ... */
@@ -1872,18 +1866,9 @@ static int langwell_start(struct usb_gadget_driver *driver,
1872 1866
1873 spin_unlock_irqrestore(&dev->lock, flags); 1867 spin_unlock_irqrestore(&dev->lock, flags);
1874 1868
1875 retval = bind(&dev->gadget);
1876 if (retval) {
1877 dev_dbg(&dev->pdev->dev, "bind to driver %s --> %d\n",
1878 driver->driver.name, retval);
1879 dev->driver = NULL;
1880 dev->gadget.dev.driver = NULL;
1881 return retval;
1882 }
1883
1884 retval = device_create_file(&dev->pdev->dev, &dev_attr_function); 1869 retval = device_create_file(&dev->pdev->dev, &dev_attr_function);
1885 if (retval) 1870 if (retval)
1886 goto err_unbind; 1871 goto err;
1887 1872
1888 dev->usb_state = USB_STATE_ATTACHED; 1873 dev->usb_state = USB_STATE_ATTACHED;
1889 dev->ep0_state = WAIT_FOR_SETUP; 1874 dev->ep0_state = WAIT_FOR_SETUP;
@@ -1900,31 +1885,27 @@ static int langwell_start(struct usb_gadget_driver *driver,
1900 dev_info(&dev->pdev->dev, "register driver: %s\n", 1885 dev_info(&dev->pdev->dev, "register driver: %s\n",
1901 driver->driver.name); 1886 driver->driver.name);
1902 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__); 1887 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1888
1903 return 0; 1889 return 0;
1904 1890
1905err_unbind: 1891err:
1906 driver->unbind(&dev->gadget);
1907 dev->gadget.dev.driver = NULL; 1892 dev->gadget.dev.driver = NULL;
1908 dev->driver = NULL; 1893 dev->driver = NULL;
1909 1894
1910 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__); 1895 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1896
1911 return retval; 1897 return retval;
1912} 1898}
1913 1899
1914/* unregister gadget driver */ 1900/* unregister gadget driver */
1915static int langwell_stop(struct usb_gadget_driver *driver) 1901static int langwell_stop(struct usb_gadget *g,
1902 struct usb_gadget_driver *driver)
1916{ 1903{
1917 struct langwell_udc *dev = the_controller; 1904 struct langwell_udc *dev = gadget_to_langwell(g);
1918 unsigned long flags; 1905 unsigned long flags;
1919 1906
1920 if (!dev)
1921 return -ENODEV;
1922
1923 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__); 1907 dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
1924 1908
1925 if (unlikely(!driver || !driver->unbind))
1926 return -EINVAL;
1927
1928 /* exit PHY low power suspend */ 1909 /* exit PHY low power suspend */
1929 if (dev->pdev->device != 0x0829) 1910 if (dev->pdev->device != 0x0829)
1930 langwell_phy_low_power(dev, 0); 1911 langwell_phy_low_power(dev, 0);
@@ -1947,8 +1928,6 @@ static int langwell_stop(struct usb_gadget_driver *driver)
1947 stop_activity(dev, driver); 1928 stop_activity(dev, driver);
1948 spin_unlock_irqrestore(&dev->lock, flags); 1929 spin_unlock_irqrestore(&dev->lock, flags);
1949 1930
1950 /* unbind gadget driver */
1951 driver->unbind(&dev->gadget);
1952 dev->gadget.dev.driver = NULL; 1931 dev->gadget.dev.driver = NULL;
1953 dev->driver = NULL; 1932 dev->driver = NULL;
1954 1933
@@ -1957,6 +1936,7 @@ static int langwell_stop(struct usb_gadget_driver *driver)
1957 dev_info(&dev->pdev->dev, "unregistered driver '%s'\n", 1936 dev_info(&dev->pdev->dev, "unregistered driver '%s'\n",
1958 driver->driver.name); 1937 driver->driver.name);
1959 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__); 1938 dev_dbg(&dev->pdev->dev, "<--- %s()\n", __func__);
1939
1960 return 0; 1940 return 0;
1961} 1941}
1962 1942
@@ -3098,8 +3078,6 @@ static void langwell_udc_remove(struct pci_dev *pdev)
3098 3078
3099 /* free dev, wait for the release() finished */ 3079 /* free dev, wait for the release() finished */
3100 wait_for_completion(&done); 3080 wait_for_completion(&done);
3101
3102 the_controller = NULL;
3103} 3081}
3104 3082
3105 3083
@@ -3118,11 +3096,6 @@ static int langwell_udc_probe(struct pci_dev *pdev,
3118 size_t size; 3096 size_t size;
3119 int retval; 3097 int retval;
3120 3098
3121 if (the_controller) {
3122 dev_warn(&pdev->dev, "ignoring\n");
3123 return -EBUSY;
3124 }
3125
3126 /* alloc, and start init */ 3099 /* alloc, and start init */
3127 dev = kzalloc(sizeof *dev, GFP_KERNEL); 3100 dev = kzalloc(sizeof *dev, GFP_KERNEL);
3128 if (dev == NULL) { 3101 if (dev == NULL) {
@@ -3342,8 +3315,6 @@ static int langwell_udc_probe(struct pci_dev *pdev,
3342 "After langwell_udc_probe(), print all registers:\n"); 3315 "After langwell_udc_probe(), print all registers:\n");
3343 print_all_registers(dev); 3316 print_all_registers(dev);
3344 3317
3345 the_controller = dev;
3346
3347 retval = device_register(&dev->gadget.dev); 3318 retval = device_register(&dev->gadget.dev);
3348 if (retval) 3319 if (retval)
3349 goto error; 3320 goto error;
diff --git a/drivers/usb/gadget/langwell_udc.h b/drivers/usb/gadget/langwell_udc.h
index 1bec66f95c36..ef79e242b7b0 100644
--- a/drivers/usb/gadget/langwell_udc.h
+++ b/drivers/usb/gadget/langwell_udc.h
@@ -221,3 +221,5 @@ struct langwell_udc {
221 u16 dev_status; 221 u16 dev_status;
222}; 222};
223 223
224#define gadget_to_langwell(g) container_of((g), struct langwell_udc, gadget)
225