-----Original Message----- From: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Sent: Monday, September 27, 2021 7:55 AM To: Ryan Lee RyanS.Lee@maximintegrated.com; lgirdwood@gmail.com; broonie@kernel.org; perex@perex.cz; tiwai@suse.com; yung- chuan.liao@linux.intel.com; guennadi.liakhovetski@linux.intel.com; alsa- devel@alsa-project.org; linux-kernel@vger.kernel.org Cc: sathya.prakash.m.r@intel.com; ryan.lee.maxim@gmail.com Subject: [EXTERNAL] Re: [PATCH] ASoC: max98373: Mark cache dirty before entering sleep
EXTERNAL EMAIL
On 9/24/21 5:13 PM, Ryan Lee wrote:
Amp lose its register values in case amp power loss or 'ForceReset' over Soundwire SCP_ctrl register(0x0044) or HW_RESET pin control during the audio suspend and resume. Mark cache dirty before audio suspension to restore existing values when audio resume.
Signed-off-by: Ryan Lee ryans.lee@maximintegrated.com
sound/soc/codecs/max98373-sdw.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/sound/soc/codecs/max98373-sdw.c b/sound/soc/codecs/max98373-sdw.c index dc520effc61c..a7e4a6e880b0 100644 --- a/sound/soc/codecs/max98373-sdw.c +++ b/sound/soc/codecs/max98373-sdw.c @@ -259,6 +259,7 @@ static __maybe_unused int
max98373_suspend(struct device *dev)
regmap_read(max98373->regmap, max98373->cache[i].reg,
&max98373->cache[i].val);
regcache_cache_only(max98373->regmap, true);
regcache_mark_dirty(max98373->regmap);
We already do the following sequence in max98373_io_init() when the amplifier re-attaches:
if (max98373->first_hw_init) { regcache_cache_bypass(max98373->regmap, false); regcache_mark_dirty(max98373->regmap); }
I don't see what marking the cache as dirty on suspend might do, we will do a sync only in the resume step.
IIRC this is a patch that we've seen before and removed since it wasn't aligned with any other codec driver.
Does this actually improve anything?
Yes, it does. There was an mute problem report due to amp register reset during suspend/resume. and we confirmed that the modification is effective. (https://partnerissuetracker.corp.google.com/issues/194472331) The added code helps to re-write valid values in cache to the amp hardware when audio resume. Same code was there on i2c driver, but not on Soundwire driver.