diff options
author | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | 2020-08-17 18:29:12 +0300 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2020-08-18 09:31:04 +0300 |
commit | ebf878eddbb449091078d2ed282aed42a4fcef34 (patch) | |
tree | 46c185125c07260a5258394b0fd9008f766b1737 /drivers/soundwire/intel_init.c | |
parent | 9b3b4b3f2f2af863d2f6dd65afd295a5a673afa2 (diff) | |
download | linux-ebf878eddbb449091078d2ed282aed42a4fcef34.tar.xz |
soundwire: intel: add pm_runtime support
Add basic hooks in DAI .startup and .shutdown callbacks.
The SoundWire IP should be powered between those two calls. The power
dependencies between SoundWire and DSP are handled with the
parent/child relationship, before the SoundWire master device becomes
active the parent device will become active and power-up the shared
rails.
For now the strategy is to rely on complete enumeration when the
device becomes active, so the code is a copy/paste of the sequence for
system suspend/resume. In future patches, the strategy will optionally
be to rely on clock stop if the enumeration time is prohibitive or
when the devices connected to a link can signal a wake.
A module parameter is added to make integration of new Slave devices
easier, to e.g. keep the device active or prevent clock-stop.
Note that we need to we have to disable runtime pm before device
unregister, otherwise we will see "Failed to power up link: -11" error
on module remove test.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20200817152923.3259-2-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/soundwire/intel_init.c')
-rw-r--r-- | drivers/soundwire/intel_init.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/soundwire/intel_init.c b/drivers/soundwire/intel_init.c index 047252a91c9e..a1f210853545 100644 --- a/drivers/soundwire/intel_init.c +++ b/drivers/soundwire/intel_init.c @@ -13,6 +13,7 @@ #include <linux/io.h> #include <linux/module.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/soundwire/sdw_intel.h> #include "cadence_master.h" #include "intel.h" @@ -68,8 +69,10 @@ static int sdw_intel_cleanup(struct sdw_intel_ctx *ctx) if (!(link_mask & BIT(i))) continue; - if (link->pdev) + if (link->pdev) { + pm_runtime_disable(&link->pdev->dev); platform_device_unregister(link->pdev); + } } return 0; |