mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
ALSA: hda/cs35l56: Do not mark cache dirty after REINIT
Only call regcache_mark_dirty() in cs35l56_hda_fw_load() if the CS35L56 was SYSTEM_RESET. recache_mark_dirty() changes the behaviour of regcache_sync() to write out cache values that are not the default value, and skip cache values that are the default. AUDIO_REINIT does not reset the registers. regcache_mark_dirty() after AUDIO_REINIT could cause the regcache_sync() to sync registers incorrectly because it will assume that all registers have reset to default. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230731165726.7940-3-rf@opensource.cirrus.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7b6466ad1d
commit
c36570970a
1 changed files with 1 additions and 1 deletions
|
@ -569,6 +569,7 @@ static int cs35l56_hda_fw_load(struct cs35l56_hda *cs35l56)
|
||||||
} else {
|
} else {
|
||||||
/* Reset the device and wait for it to boot */
|
/* Reset the device and wait for it to boot */
|
||||||
cs35l56_system_reset(&cs35l56->base, false);
|
cs35l56_system_reset(&cs35l56->base, false);
|
||||||
|
regcache_mark_dirty(cs35l56->base.regmap);
|
||||||
ret = cs35l56_wait_for_firmware_boot(&cs35l56->base);
|
ret = cs35l56_wait_for_firmware_boot(&cs35l56->base);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -579,7 +580,6 @@ static int cs35l56_hda_fw_load(struct cs35l56_hda *cs35l56)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
regcache_mark_dirty(cs35l56->base.regmap);
|
|
||||||
regcache_sync(cs35l56->base.regmap);
|
regcache_sync(cs35l56->base.regmap);
|
||||||
|
|
||||||
regmap_clear_bits(cs35l56->base.regmap, CS35L56_PROTECTION_STATUS,
|
regmap_clear_bits(cs35l56->base.regmap, CS35L56_PROTECTION_STATUS,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue