Signed-off-by: Matthieu CASTET <matthieu.castet@xxxxxxxxxx> --- drivers/usb/gadget/Kconfig | 44 +++++++++++++++++++++--------------------- drivers/usb/gadget/net2280.c | 36 ++++++++++++--------------------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 7ca7f5d..c3fda37 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -427,28 +427,6 @@ config USB_FSL_QE default USB_GADGET select USB_GADGET_SELECTED -config USB_GADGET_NET2280 - boolean "NetChip 228x" - depends on PCI - select USB_GADGET_DUALSPEED - help - NetChip 2280 / 2282 is a PCI based USB peripheral controller which - supports both full and high speed USB 2.0 data transfers. - - It has six configurable endpoints, as well as endpoint zero - (for control transfers) and several endpoints with dedicated - functions. - - Say "y" to link the driver statically, or "m" to build a - dynamically linked module called "net2280" and force all - gadget drivers to also be dynamically linked. - -config USB_NET2280 - tristate - depends on USB_GADGET_NET2280 - default USB_GADGET - select USB_GADGET_SELECTED - config USB_GADGET_GOKU boolean "Toshiba TC86C001 'Goku-S'" depends on PCI @@ -605,6 +583,28 @@ config USB_CI13XXX_MSM depends on USB_GADGET_CI13XXX_MSM default USB_GADGET select USB_GADGET_SELECTED + +config USB_GADGET_NET2280 + boolean "NetChip 228x" + depends on PCI + select USB_GADGET_DUALSPEED + help + NetChip 2280 / 2282 is a PCI based USB peripheral controller which + supports both full and high speed USB 2.0 data transfers. + + It has six configurable endpoints, as well as endpoint zero + (for control transfers) and several endpoints with dedicated + functions. + + Say "y" to link the driver statically, or "m" to build a + dynamically linked module called "net2280" and force all + gadget drivers to also be dynamically linked. + +config USB_NET2280 + tristate + depends on USB_GADGET_NET2280 + default USB_GADGET + select USB_GADGET_SELECTED endmenu config USB_GADGET_DUALSPEED diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index d09155b..b45e8bf 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c @@ -1802,8 +1802,6 @@ EXPORT_SYMBOL (net2280_set_fifo_mode); * perhaps to bind specific drivers to specific devices. */ -static struct net2280 *the_controller; - static void usb_reset (struct net2280 *dev) { u32 tmp; @@ -1929,10 +1927,10 @@ static void ep0_start (struct net2280 *dev) * disconnect is reported. then a host may connect again, or * the driver might get unbound. */ -int usb_gadget_probe_driver(struct usb_gadget_driver *driver, - int (*bind)(struct usb_gadget *)) +static int net2280_usb_gadget_probe_driver (struct usb_gadget_driver *driver, + int (*bind)(struct usb_gadget *), struct usb_gadget *gadget) { - struct net2280 *dev = the_controller; + struct net2280 *dev = container_of (gadget, struct net2280, gadget); int retval; unsigned i; @@ -1993,7 +1991,6 @@ err_unbind: dev->driver = NULL; return retval; } -EXPORT_SYMBOL(usb_gadget_probe_driver); static void stop_activity (struct net2280 *dev, struct usb_gadget_driver *driver) @@ -2021,9 +2018,9 @@ stop_activity (struct net2280 *dev, struct usb_gadget_driver *driver) usb_reinit (dev); } -int usb_gadget_unregister_driver (struct usb_gadget_driver *driver) +static int net2280_usb_gadget_unregister_driver (struct usb_gadget_driver *driver, struct usb_gadget *gadget) { - struct net2280 *dev = the_controller; + struct net2280 *dev = container_of (gadget, struct net2280, gadget); unsigned long flags; if (!dev) @@ -2048,7 +2045,11 @@ int usb_gadget_unregister_driver (struct usb_gadget_driver *driver) DEBUG (dev, "unregistered driver '%s'\n", driver->driver.name); return 0; } -EXPORT_SYMBOL (usb_gadget_unregister_driver); + +struct usb_gadget_udc net2280_driver = { + .probe_driver = net2280_usb_gadget_probe_driver, + .unregister_driver = net2280_usb_gadget_unregister_driver, +}; /*-------------------------------------------------------------------------*/ @@ -2754,13 +2755,11 @@ static void net2280_remove (struct pci_dev *pdev) pci_resource_len (pdev, 0)); if (dev->enabled) pci_disable_device (pdev); - device_unregister (&dev->gadget.dev); + usb_gadget_unregister(&dev->gadget); device_remove_file (&pdev->dev, &dev_attr_registers); pci_set_drvdata (pdev, NULL); INFO (dev, "unbind\n"); - - the_controller = NULL; } /* wrap this driver around the specified device, but @@ -2774,14 +2773,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id) void __iomem *base = NULL; int retval, i; - /* if you want to support more than one controller in a system, - * usb_gadget_driver_{register,unregister}() must change. - */ - if (the_controller) { - dev_warn (&pdev->dev, "ignoring\n"); - return -EBUSY; - } - /* alloc, and start init */ dev = kzalloc (sizeof *dev, GFP_KERNEL); if (dev == NULL){ @@ -2908,9 +2899,8 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id) use_dma ? (use_dma_chaining ? "chaining" : "enabled") : "disabled"); - the_controller = dev; - - retval = device_register (&dev->gadget.dev); + dev->gadget.udc = &net2280_driver; + retval = usb_gadget_register(&dev->gadget); if (retval) goto done; retval = device_create_file (&pdev->dev, &dev_attr_registers); if (retval) goto done; -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html