[lkml]   [2010]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[129/205] USB: obey the sysfs power/wakeup setting
    2.6.34-stable review patch.  If anyone has any objections, please let us know.


    From: Alan Stern <>

    commit 48826626263d4a61d06fd8c5805da31f925aefa0 upstream.

    This patch (as1403) is a partial reversion of an earlier change
    (commit 5f677f1d45b2bf08085bbba7394392dfa586fa8e "USB: fix remote
    wakeup settings during system sleep"). After hearing from a user, I
    realized that remote wakeup should be enabled during system sleep
    whenever userspace allows it, and not only if a driver requests it

    Indeed, there could be a device with no driver, that does nothing but
    generate a wakeup request when the user presses a button. Such a
    device should be allowed to do its job.

    The problem fixed by the earlier patch -- device generating a wakeup
    request for no reason, causing system suspend to abort -- was also
    addressed by a later patch ("USB: don't enable remote wakeup by
    default", accepted but not yet merged into mainline). The device
    won't be able to generate the bogus wakeup requests because it will be
    disabled for remote wakeup by default. Hence this reversion will not
    re-introduce any old problems.

    Signed-off-by: Alan Stern <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/usb/core/driver.c | 13 +++----------
    1 file changed, 3 insertions(+), 10 deletions(-)

    --- a/drivers/usb/core/driver.c
    +++ b/drivers/usb/core/driver.c
    @@ -1266,8 +1266,7 @@ static int usb_resume_both(struct usb_de

    static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
    - int w, i;
    - struct usb_interface *intf;
    + int w;

    /* Remote wakeup is needed only when we actually go to sleep.
    * For things like FREEZE and QUIESCE, if the device is already
    @@ -1279,16 +1278,10 @@ static void choose_wakeup(struct usb_dev

    - /* If remote wakeup is permitted, see whether any interface drivers
    + /* Enable remote wakeup if it is allowed, even if no interface drivers
    * actually want it.
    - w = 0;
    - if (device_may_wakeup(&udev->dev) && udev->actconfig) {
    - for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
    - intf = udev->actconfig->interface[i];
    - w |= intf->needs_remote_wakeup;
    - }
    - }
    + w = device_may_wakeup(&udev->dev);

    /* If the device is autosuspended with the wrong wakeup setting,
    * autoresume now so the setting can be changed.

     \ /
      Last update: 2010-07-30 20:21    [W:0.023 / U:84.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site