On 27-07-21, 13:56, Bard Liao wrote: > From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > Signed-off-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx> > --- > 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