aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2013-01-24 10:20:46 -0500
committerFelipe Balbi <balbi@ti.com>2013-01-24 14:11:32 -0500
commit4991e102c11524aff42ce3a0e7caeb6e5577808c (patch)
treebbbed30a39ee243dba4195d5e852864a242d7e3e
parent70189a63d408d4ea0cddbf0ff0afe6020844e813 (diff)
usb: gadget: s3c2410: convert to udc_start/udc_stop
Mechanical change making use of the new (can we still call it new ?) interface for registering UDC drivers. Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/gadget/s3c2410_udc.c65
-rw-r--r--drivers/usb/gadget/s3c2410_udc.h1
2 files changed, 13 insertions, 53 deletions
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
index a2fa6e16d019..fc07b4381286 100644
--- a/drivers/usb/gadget/s3c2410_udc.c
+++ b/drivers/usb/gadget/s3c2410_udc.c
@@ -1538,9 +1538,10 @@ static int s3c2410_vbus_draw(struct usb_gadget *_gadget, unsigned ma)
1538 return -ENOTSUPP; 1538 return -ENOTSUPP;
1539} 1539}
1540 1540
1541static int s3c2410_udc_start(struct usb_gadget_driver *driver, 1541static int s3c2410_udc_start(struct usb_gadget *g,
1542 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *)); 1542 struct usb_gadget_driver *driver);
1543static int s3c2410_udc_stop(struct usb_gadget_driver *driver); 1543static int s3c2410_udc_stop(struct usb_gadget *g,
1544 struct usb_gadget_driver *driver);
1544 1545
1545static const struct usb_gadget_ops s3c2410_ops = { 1546static const struct usb_gadget_ops s3c2410_ops = {
1546 .get_frame = s3c2410_udc_get_frame, 1547 .get_frame = s3c2410_udc_get_frame,
@@ -1549,8 +1550,8 @@ static const struct usb_gadget_ops s3c2410_ops = {
1549 .pullup = s3c2410_udc_pullup, 1550 .pullup = s3c2410_udc_pullup,
1550 .vbus_session = s3c2410_udc_vbus_session, 1551 .vbus_session = s3c2410_udc_vbus_session,
1551 .vbus_draw = s3c2410_vbus_draw, 1552 .vbus_draw = s3c2410_vbus_draw,
1552 .start = s3c2410_udc_start, 1553 .udc_start = s3c2410_udc_start,
1553 .stop = s3c2410_udc_stop, 1554 .udc_stop = s3c2410_udc_stop,
1554}; 1555};
1555 1556
1556static void s3c2410_udc_command(enum s3c2410_udc_cmd_e cmd) 1557static void s3c2410_udc_command(enum s3c2410_udc_cmd_e cmd)
@@ -1664,33 +1665,14 @@ static void s3c2410_udc_enable(struct s3c2410_udc *dev)
1664 s3c2410_udc_command(S3C2410_UDC_P_ENABLE); 1665 s3c2410_udc_command(S3C2410_UDC_P_ENABLE);
1665} 1666}
1666 1667
1667static int s3c2410_udc_start(struct usb_gadget_driver *driver, 1668static int s3c2410_udc_start(struct usb_gadget *g,
1668 int (*bind)(struct usb_gadget *, struct usb_gadget_driver *)) 1669 struct usb_gadget_driver *driver)
1669{ 1670{
1670 struct s3c2410_udc *udc = the_controller; 1671 struct s3c2410_udc *udc = to_s3c2410(g)
1671 int retval; 1672 int retval;
1672 1673
1673 dprintk(DEBUG_NORMAL, "%s() '%s'\n", __func__, driver->driver.name); 1674 dprintk(DEBUG_NORMAL, "%s() '%s'\n", __func__, driver->driver.name);
1674 1675
1675 /* Sanity checks */
1676 if (!udc)
1677 return -ENODEV;
1678
1679 if (udc->driver)
1680 return -EBUSY;
1681
1682 if (!bind || !driver->setup || driver->max_speed < USB_SPEED_FULL) {
1683 dev_err(&udc->gadget.dev, "Invalid driver: bind %p setup %p speed %d\n",
1684 bind, driver->setup, driver->max_speed);
1685 return -EINVAL;
1686 }
1687#if defined(MODULE)
1688 if (!driver->unbind) {
1689 dev_err(&udc->gadget.dev, "Invalid driver: no unbind method\n");
1690 return -EINVAL;
1691 }
1692#endif
1693
1694 /* Hook the driver */ 1676 /* Hook the driver */
1695 udc->driver = driver; 1677 udc->driver = driver;
1696 udc->gadget.dev.driver = &driver->driver; 1678 udc->gadget.dev.driver = &driver->driver;
@@ -1702,15 +1684,6 @@ static int s3c2410_udc_start(struct usb_gadget_driver *driver,
1702 goto register_error; 1684 goto register_error;
1703 } 1685 }
1704 1686
1705 dprintk(DEBUG_NORMAL, "binding gadget driver '%s'\n",
1706 driver->driver.name);
1707
1708 retval = bind(&udc->gadget, driver);
1709 if (retval) {
1710 device_del(&udc->gadget.dev);
1711 goto register_error;
1712 }
1713
1714 /* Enable udc */ 1687 /* Enable udc */
1715 s3c2410_udc_enable(udc); 1688 s3c2410_udc_enable(udc);
1716 1689
@@ -1722,24 +1695,10 @@ register_error:
1722 return retval; 1695 return retval;
1723} 1696}
1724 1697
1725static int s3c2410_udc_stop(struct usb_gadget_driver *driver) 1698static int s3c2410_udc_stop(struct usb_gadget *g,
1699 struct usb_gadget_driver *driver)
1726{ 1700{
1727 struct s3c2410_udc *udc = the_controller; 1701 struct s3c2410_udc *udc = to_s3c2410(g);
1728
1729 if (!udc)
1730 return -ENODEV;
1731
1732 if (!driver || driver != udc->driver || !driver->unbind)
1733 return -EINVAL;
1734
1735 dprintk(DEBUG_NORMAL, "usb_gadget_unregister_driver() '%s'\n",
1736 driver->driver.name);
1737
1738 /* report disconnect */
1739 if (driver->disconnect)
1740 driver->disconnect(&udc->gadget);
1741
1742 driver->unbind(&udc->gadget);
1743 1702
1744 device_del(&udc->gadget.dev); 1703 device_del(&udc->gadget.dev);
1745 udc->driver = NULL; 1704 udc->driver = NULL;
diff --git a/drivers/usb/gadget/s3c2410_udc.h b/drivers/usb/gadget/s3c2410_udc.h
index 3e80fd5c820f..93bf225f1969 100644
--- a/drivers/usb/gadget/s3c2410_udc.h
+++ b/drivers/usb/gadget/s3c2410_udc.h
@@ -95,5 +95,6 @@ struct s3c2410_udc {
95 u8 vbus; 95 u8 vbus;
96 struct dentry *regs_info; 96 struct dentry *regs_info;
97}; 97};
98#define to_s3c2410(g) (container_of((g), struct s3c2410_udc, gadget))
98 99
99#endif 100#endif