30 May, 2015

1 commit

  • Looks like I only built test the dev_pm_set_wake_irq and not the
    dev_pm_set_dedicated_wake_irq case on x86.

    Turns out there's a typo for the dev_pm_set_dedicated_wake_irq
    prototype that causes a build error if CONFIG_COMPILE_TEST
    and CONFIG_MMC_OMAP_HS are selected.

    Reported-by: Jim Davis
    Signed-off-by: Tony Lindgren
    Reviewed-by: Felipe Balbi
    Signed-off-by: Rafael J. Wysocki

    Tony Lindgren
     

20 May, 2015

1 commit

  • Turns out we can automate the handling for the device_may_wakeup()
    quite a bit by using the kernel wakeup source list as suggested
    by Rafael J. Wysocki .

    And as some hardware has separate dedicated wake-up interrupt
    in addition to the IO interrupt, we can automate the handling by
    adding a generic threaded interrupt handler that just calls the
    device PM runtime to wake up the device.

    This allows dropping code from device drivers as we currently
    are doing it in multiple ways, and often wrong.

    For most drivers, we should be able to drop the following
    boilerplate code from runtime_suspend and runtime_resume
    functions:

    ...
    device_init_wakeup(dev, true);
    ...
    if (device_may_wakeup(dev))
    enable_irq_wake(irq);
    ...
    if (device_may_wakeup(dev))
    disable_irq_wake(irq);
    ...
    device_init_wakeup(dev, false);
    ...

    We can replace it with just the following init and exit
    time code:

    ...
    device_init_wakeup(dev, true);
    dev_pm_set_wake_irq(dev, irq);
    ...
    dev_pm_clear_wake_irq(dev);
    device_init_wakeup(dev, false);
    ...

    And for hardware with dedicated wake-up interrupts:

    ...
    device_init_wakeup(dev, true);
    dev_pm_set_dedicated_wake_irq(dev, irq);
    ...
    dev_pm_clear_wake_irq(dev);
    device_init_wakeup(dev, false);
    ...

    Signed-off-by: Tony Lindgren
    Signed-off-by: Rafael J. Wysocki

    Tony Lindgren