| From f3e1252049d7ea03dab0595bfde68d3db4daee5a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 7 Jun 2021 17:22:26 -0500 |
| Subject: ASoC: max98373-sdw: use first_hw_init flag on resume |
| |
| From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| |
| [ Upstream commit bf881170311ea74ff30c3be0be8fb097132ce696 ] |
| |
| The intent of the status check on resume was to verify if a SoundWire |
| peripheral reported ATTACHED before waiting for the initialization to |
| complete. This is required to avoid timeouts that will happen with |
| 'ghost' devices that are exposed in the platform firmware but are not |
| populated in hardware. |
| |
| Unfortunately we used 'hw_init' instead of 'first_hw_init'. Due to |
| another error, the resume operation never timed out, but the volume |
| settings were not properly restored. |
| |
| This patch renames the status flag to 'first_hw_init' for consistency |
| with other drivers. |
| |
| BugLink: https://github.com/thesofproject/linux/issues/2637 |
| Fixes: 56a5b7910e96 ('ASoC: codecs: max98373: add SoundWire support') |
| Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> |
| Reviewed-by: Bard Liao <bard.liao@intel.com> |
| Link: https://lore.kernel.org/r/20210607222239.582139-3-pierre-louis.bossart@linux.intel.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/codecs/max98373-sdw.c | 12 ++++++------ |
| sound/soc/codecs/max98373.h | 2 +- |
| 2 files changed, 7 insertions(+), 7 deletions(-) |
| |
| diff --git a/sound/soc/codecs/max98373-sdw.c b/sound/soc/codecs/max98373-sdw.c |
| index 14fd2f9a0bf3..39afa011f0e2 100644 |
| --- a/sound/soc/codecs/max98373-sdw.c |
| +++ b/sound/soc/codecs/max98373-sdw.c |
| @@ -258,7 +258,7 @@ static __maybe_unused int max98373_resume(struct device *dev) |
| struct max98373_priv *max98373 = dev_get_drvdata(dev); |
| unsigned long time; |
| |
| - if (!max98373->hw_init) |
| + if (!max98373->first_hw_init) |
| return 0; |
| |
| if (!slave->unattach_request) |
| @@ -349,7 +349,7 @@ static int max98373_io_init(struct sdw_slave *slave) |
| struct device *dev = &slave->dev; |
| struct max98373_priv *max98373 = dev_get_drvdata(dev); |
| |
| - if (max98373->pm_init_once) { |
| + if (max98373->first_hw_init) { |
| regcache_cache_only(max98373->regmap, false); |
| regcache_cache_bypass(max98373->regmap, true); |
| } |
| @@ -357,7 +357,7 @@ static int max98373_io_init(struct sdw_slave *slave) |
| /* |
| * PM runtime is only enabled when a Slave reports as Attached |
| */ |
| - if (!max98373->pm_init_once) { |
| + if (!max98373->first_hw_init) { |
| /* set autosuspend parameters */ |
| pm_runtime_set_autosuspend_delay(dev, 3000); |
| pm_runtime_use_autosuspend(dev); |
| @@ -449,12 +449,12 @@ static int max98373_io_init(struct sdw_slave *slave) |
| regmap_write(max98373->regmap, MAX98373_R20B5_BDE_EN, 1); |
| regmap_write(max98373->regmap, MAX98373_R20E2_LIMITER_EN, 1); |
| |
| - if (max98373->pm_init_once) { |
| + if (max98373->first_hw_init) { |
| regcache_cache_bypass(max98373->regmap, false); |
| regcache_mark_dirty(max98373->regmap); |
| } |
| |
| - max98373->pm_init_once = true; |
| + max98373->first_hw_init = true; |
| max98373->hw_init = true; |
| |
| pm_runtime_mark_last_busy(dev); |
| @@ -773,7 +773,7 @@ static int max98373_init(struct sdw_slave *slave, struct regmap *regmap) |
| max98373_slot_config(dev, max98373); |
| |
| max98373->hw_init = false; |
| - max98373->pm_init_once = false; |
| + max98373->first_hw_init = false; |
| |
| /* codec registration */ |
| ret = devm_snd_soc_register_component(dev, &soc_codec_dev_max98373_sdw, |
| diff --git a/sound/soc/codecs/max98373.h b/sound/soc/codecs/max98373.h |
| index 4ab29b9d51c7..010f6bb21e9a 100644 |
| --- a/sound/soc/codecs/max98373.h |
| +++ b/sound/soc/codecs/max98373.h |
| @@ -215,7 +215,7 @@ struct max98373_priv { |
| /* variables to support soundwire */ |
| struct sdw_slave *slave; |
| bool hw_init; |
| - bool pm_init_once; |
| + bool first_hw_init; |
| int slot; |
| unsigned int rx_mask; |
| }; |
| -- |
| 2.30.2 |
| |