lkml.org 
[lkml]   [2012]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[57/89] usb: gadget: langwell: dont call gadgets disconnect()
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alexander Shishkin <alexander.shishkin@linux.intel.com>

    commit 37fd37108449d574da11aa9055c5c8afb39ff226 upstream.

    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 2c7f0989
    (usb: gadget: langwell: convert to new style).

    Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Cc: linux-usb@vger.kernel.org
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/gadget/langwell_udc.c | 18 ++++++++----------
    1 file changed, 8 insertions(+), 10 deletions(-)

    --- a/drivers/usb/gadget/langwell_udc.c
    +++ b/drivers/usb/gadget/langwell_udc.c
    @@ -1522,8 +1522,7 @@ static void langwell_udc_stop(struct lan


    /* 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__);
    @@ -1535,9 +1534,9 @@ static void stop_activity(struct langwel
    }

    /* 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);
    }

    @@ -1925,11 +1924,10 @@ static int langwell_stop(struct usb_gadg

    /* 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);

    @@ -2733,7 +2731,7 @@ static void handle_usb_reset(struct lang
    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");
    @@ -2741,7 +2739,7 @@ static void handle_usb_reset(struct lang
    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);
    @@ -3367,7 +3365,7 @@ static int langwell_udc_suspend(struct p

    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 */



    \
     
     \ /
      Last update: 2012-02-01 22:17    [W:0.024 / U:2.488 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site