Skip to content

Commit

Permalink
usb: gadget: langwell: don't call gadget's disconnect()
Browse files Browse the repository at this point in the history
UDC core will call disconnect() and unbind() for us upon the gadget
removal, so we should not do it ourselves. Otherwise, a composite
gadget will explode, for example. Others might too.

This was introduced during conversion to new style gadget in 2c7f098
(usb: gadget: langwell: convert to new style).

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: stable@vger.kernel.org # v3.2
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: linux-usb@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Alexander Shishkin authored and Felipe Balbi committed Jan 24, 2012
1 parent 28bd622 commit 37fd371
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions drivers/usb/gadget/langwell_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1517,8 +1517,7 @@ static void langwell_udc_stop(struct langwell_udc *dev)


/* stop all USB activities */
static void stop_activity(struct langwell_udc *dev,
struct usb_gadget_driver *driver)
static void stop_activity(struct langwell_udc *dev)
{
struct langwell_ep *ep;
dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
Expand All @@ -1530,9 +1529,9 @@ static void stop_activity(struct langwell_udc *dev,
}

/* report disconnect; the driver is already quiesced */
if (driver) {
if (dev->driver) {
spin_unlock(&dev->lock);
driver->disconnect(&dev->gadget);
dev->driver->disconnect(&dev->gadget);
spin_lock(&dev->lock);
}

Expand Down Expand Up @@ -1920,11 +1919,10 @@ static int langwell_stop(struct usb_gadget *g,

/* stop all usb activities */
dev->gadget.speed = USB_SPEED_UNKNOWN;
stop_activity(dev, driver);
spin_unlock_irqrestore(&dev->lock, flags);

dev->gadget.dev.driver = NULL;
dev->driver = NULL;
stop_activity(dev);
spin_unlock_irqrestore(&dev->lock, flags);

device_remove_file(&dev->pdev->dev, &dev_attr_function);

Expand Down Expand Up @@ -2724,15 +2722,15 @@ static void handle_usb_reset(struct langwell_udc *dev)
dev->bus_reset = 1;

/* reset all the queues, stop all USB activities */
stop_activity(dev, dev->driver);
stop_activity(dev);
dev->usb_state = USB_STATE_DEFAULT;
} else {
dev_vdbg(&dev->pdev->dev, "device controller reset\n");
/* controller reset */
langwell_udc_reset(dev);

/* reset all the queues, stop all USB activities */
stop_activity(dev, dev->driver);
stop_activity(dev);

/* reset ep0 dQH and endptctrl */
ep0_reset(dev);
Expand Down Expand Up @@ -3290,7 +3288,7 @@ static int langwell_udc_suspend(struct pci_dev *pdev, pm_message_t state)

spin_lock_irq(&dev->lock);
/* stop all usb activities */
stop_activity(dev, dev->driver);
stop_activity(dev);
spin_unlock_irq(&dev->lock);

/* free dTD dma_pool and dQH */
Expand Down

0 comments on commit 37fd371

Please sign in to comment.