Commit 3b7685da authored by Peng Fan's avatar Peng Fan Committed by Ulf Hansson
Browse files

pmdomain: core: Allow power-off for out-of-band wakeup-capable devices



Currently, if a device is configured as a system wakeup source, the PM
domain core avoids powering off its power domain during system-wide
suspend. However, this can lead to unnecessary power consumption,
especially for devices whose wakeup logic resides in an always-on domain,
i.e., devices with out-of-band wakeup capability.

To address this, add a check for device_out_band_wakeup() in
genpd_finish_suspend(). If the device supports out-of-band wakeup, its
power domain can be safely powered off, just like regular devices without
wakeup enabled. And same check in genpd_finish_resume().

This change improves power efficiency without compromising wakeup
functionality.

Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Reviewed-by: default avatarDhruva Gole <d-gole@ti.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 4acbfb6c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1545,7 +1545,8 @@ static int genpd_finish_suspend(struct device *dev,
	if (ret)
		return ret;

	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd))
	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd) &&
	    !device_out_band_wakeup(dev))
		return 0;

	if (genpd->dev_ops.stop && genpd->dev_ops.start &&
@@ -1600,7 +1601,8 @@ static int genpd_finish_resume(struct device *dev,
	if (IS_ERR(genpd))
		return -EINVAL;

	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd))
	if (device_awake_path(dev) && genpd_is_active_wakeup(genpd) &&
	    !device_out_band_wakeup(dev))
		return resume_noirq(dev);

	genpd_lock(genpd);