Hey guys !
Below is my emailing with Alan Stern, who commited the problematic kernel change. He introduced a patch for newer kernels already, but for older kernels (for eg. Lucid 2.6.32-23) the patch needs testing. Anyone has the possibility to check the patch ?
if it is working he will commit the patch to the stable versions. So here it is:
Quote:> Dear Alan !
>
> I read your name on a kernel commit
>
> commit 2b454d9a5f0507c1bc3f01c06a2e6c464d2a2641
> Author: Alan Stern <stern@ROWLAND.harvard.edu>
> Date: Fri Apr 30 12:09:23 2010 -0400
>
> USB: fix remote wakeup settings during system sleep
That is a back-port of commit 5f677f1d45b2bf08085bbba7394392dfa586fa8e,
which is included in 2.6.34 and 2.6.35-rc.
Quote:> After this commit users have serious problems waking up their machines with
> a remote receiver eg. mce remote.
> This is a big problem for all htpc users out there. Can you help us finding
> a workaround or a solution that lirc devices can wake the computer up ?
The problem is fixed in 2.6.35 by commit
48826626263d4a61d06fd8c5805da31f925aefa0n (USB: obey the sysfs
power/wakeup setting). However that commit applies to 2.6.35 and has
not yet been released in 2.6.34.2. Below is a back-ported version
which applies to 2.6.33.5, so it will probably work with 2.6.32.23 too.
If this fixes your problem, I can submit it for inclusion in the
earlier -stable kernels.
Alan Stern
Code:
Index: 2.6.33.5/drivers/usb/core/driver.c
===================================================================
--- 2.6.33.5.orig/drivers/usb/core/driver.c
+++ 2.6.33.5/drivers/usb/core/driver.c
@@ -1790,9 +1790,6 @@ int usb_external_resume_device(struct us
static void choose_wakeup(struct usb_device *udev, pm_message_t msg)
{
- int w, i;
- struct usb_interface *intf;
-
/* Remote wakeup is needed only when we actually go to sleep.
* For things like FREEZE and QUIESCE, if the device is already
* autosuspended then its current wakeup setting is okay.
@@ -1802,18 +1799,10 @@ static void choose_wakeup(struct usb_dev
return;
}
- /* If remote wakeup is permitted, see whether any interface drivers
+ /* Allow remote wakeup if it is enabled, 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;
- }
- }
-
- udev->do_remote_wakeup = w;
+ udev->do_remote_wakeup = device_may_wakeup(&udev->dev);
}
int usb_suspend(struct device *dev, pm_message_t msg)