Message ID | 1459943153-2553-1-git-send-email-grygorii.strashko@ti.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Rafael Wysocki |
Headers | show |
* Grygorii Strashko <grygorii.strashko@ti.com> [160406 04:47]: > Now wakeirq stops working for device if wakeup option for > this device will be reconfigured through sysfs, like: > > echo disabled > /sys/devices/platform/extcon_usb1/power/wakeup > echo enabled > /sys/devices/platform/extcon_usb1/power/wakeup > > Once above set of commands is executed the device's wakeup_source > opject will be recreated and dev->power.wakeup->wakeirq field will > contain NULL. As result, device_wakeup_arm_wake_irqs() will not arm > wakeirq for the affected device. > > Hece, lets try to fix it in the following way: > check for dev->wakeirq field when device_wakeup_attach() is called > and if !NULL re-attach wakeirq to the device Yeah I think that's all there is to it, thanks for fixing it: Acked-by: Tony Lindgren <tony@atomide.com> -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thursday, April 07, 2016 10:56:01 AM Tony Lindgren wrote: > * Grygorii Strashko <grygorii.strashko@ti.com> [160406 04:47]: > > Now wakeirq stops working for device if wakeup option for > > this device will be reconfigured through sysfs, like: > > > > echo disabled > /sys/devices/platform/extcon_usb1/power/wakeup > > echo enabled > /sys/devices/platform/extcon_usb1/power/wakeup > > > > Once above set of commands is executed the device's wakeup_source > > opject will be recreated and dev->power.wakeup->wakeirq field will > > contain NULL. As result, device_wakeup_arm_wake_irqs() will not arm > > wakeirq for the affected device. > > > > Hece, lets try to fix it in the following way: > > check for dev->wakeirq field when device_wakeup_attach() is called > > and if !NULL re-attach wakeirq to the device > > Yeah I think that's all there is to it, thanks for fixing it: > > Acked-by: Tony Lindgren <tony@atomide.com> Applied, thanks! -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index a2657f1..52a0c25 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -246,6 +246,8 @@ static int device_wakeup_attach(struct device *dev, struct wakeup_source *ws) return -EEXIST; } dev->power.wakeup = ws; + if (dev->power.wakeirq) + device_wakeup_attach_irq(dev, dev->power.wakeirq); spin_unlock_irq(&dev->power.lock); return 0; }
Now wakeirq stops working for device if wakeup option for this device will be reconfigured through sysfs, like: echo disabled > /sys/devices/platform/extcon_usb1/power/wakeup echo enabled > /sys/devices/platform/extcon_usb1/power/wakeup Once above set of commands is executed the device's wakeup_source opject will be recreated and dev->power.wakeup->wakeirq field will contain NULL. As result, device_wakeup_arm_wake_irqs() will not arm wakeirq for the affected device. Hece, lets try to fix it in the following way: check for dev->wakeirq field when device_wakeup_attach() is called and if !NULL re-attach wakeirq to the device Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> --- drivers/base/power/wakeup.c | 2 ++ 1 file changed, 2 insertions(+)