[PATCH 2/4] soundwire: intel: skip suspend/resume/wake when link was not started
Vinod Koul
vkoul at kernel.org
Mon Aug 2 06:02:24 CEST 2021
On 27-07-21, 13:56, Bard Liao wrote:
> From: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
>
> On some HDaudio platforms, SoundWire devices are described in the
> DSDT but never used. This patch adds a boolean status flag to skip all
> suspend/resume/wake sequences for this configuration.
Why are the sdw devices created in this case then? I would assume you
are detecting this configuration and should skip device creation?
>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> Signed-off-by: Bard Liao <yung-chuan.liao at linux.intel.com>
> ---
> drivers/soundwire/intel.c | 22 ++++++++++++----------
> drivers/soundwire/intel.h | 1 +
> 2 files changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
> index 3af922e20e64..46d1645cb7fe 100644
> --- a/drivers/soundwire/intel.c
> +++ b/drivers/soundwire/intel.c
> @@ -1456,6 +1456,7 @@ int intel_link_startup(struct auxiliary_device *auxdev)
> if (!(link_flags & SDW_INTEL_MASTER_DISABLE_PM_RUNTIME_IDLE))
> pm_runtime_idle(dev);
>
> + sdw->startup_done = true;
> return 0;
>
> err_interrupt:
> @@ -1495,8 +1496,9 @@ int intel_link_process_wakeen_event(struct auxiliary_device *auxdev)
> sdw = dev_get_drvdata(dev);
> bus = &sdw->cdns.bus;
>
> - if (bus->prop.hw_disabled) {
> - dev_dbg(dev, "SoundWire master %d is disabled, ignoring\n", bus->link_id);
> + if (bus->prop.hw_disabled || !sdw->startup_done) {
> + dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n",
> + bus->link_id);
> return 0;
> }
>
> @@ -1533,8 +1535,8 @@ static int __maybe_unused intel_suspend(struct device *dev)
> u32 clock_stop_quirks;
> int ret;
>
> - if (bus->prop.hw_disabled) {
> - dev_dbg(dev, "SoundWire master %d is disabled, ignoring\n",
> + if (bus->prop.hw_disabled || !sdw->startup_done) {
> + dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n",
> bus->link_id);
> return 0;
> }
> @@ -1587,8 +1589,8 @@ static int __maybe_unused intel_suspend_runtime(struct device *dev)
> u32 clock_stop_quirks;
> int ret;
>
> - if (bus->prop.hw_disabled) {
> - dev_dbg(dev, "SoundWire master %d is disabled, ignoring\n",
> + if (bus->prop.hw_disabled || !sdw->startup_done) {
> + dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n",
> bus->link_id);
> return 0;
> }
> @@ -1652,8 +1654,8 @@ static int __maybe_unused intel_resume(struct device *dev)
> bool multi_link;
> int ret;
>
> - if (bus->prop.hw_disabled) {
> - dev_dbg(dev, "SoundWire master %d is disabled, ignoring\n",
> + if (bus->prop.hw_disabled || !sdw->startup_done) {
> + dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n",
> bus->link_id);
> return 0;
> }
> @@ -1750,8 +1752,8 @@ static int __maybe_unused intel_resume_runtime(struct device *dev)
> int status;
> int ret;
>
> - if (bus->prop.hw_disabled) {
> - dev_dbg(dev, "SoundWire master %d is disabled, ignoring\n",
> + if (bus->prop.hw_disabled || !sdw->startup_done) {
> + dev_dbg(dev, "SoundWire master %d is disabled or not-started, ignoring\n",
> bus->link_id);
> return 0;
> }
> diff --git a/drivers/soundwire/intel.h b/drivers/soundwire/intel.h
> index 0b47b148da3f..cd93a44dba9a 100644
> --- a/drivers/soundwire/intel.h
> +++ b/drivers/soundwire/intel.h
> @@ -41,6 +41,7 @@ struct sdw_intel {
> struct sdw_cdns cdns;
> int instance;
> struct sdw_intel_link_res *link_res;
> + bool startup_done;
> #ifdef CONFIG_DEBUG_FS
> struct dentry *debugfs;
> #endif
> --
> 2.17.1
--
~Vinod
More information about the Alsa-devel
mailing list