summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorStefan Binding <sbinding@opensource.cirrus.com>2023-10-26 16:05:55 +0100
committerTakashi Iwai <tiwai@suse.de>2023-10-26 17:55:20 +0200
commit2ee06ff5d7cf5f68bab2bf65a946bb2ffe9982dd (patch)
tree528777a7b889a8484ce5fff9dfad7f2d77d2b9b2 /sound
parent881b7bce0c250386680b49b637455d31238a4b30 (diff)
ALSA: hda: cs35l41: Force a software reset after hardware reset
To ensure the chip has correctly reset during probe and system suspend, we need to force a software reset, in case of systems where the hardware reset is not available. The software reset register was labelled as volatile but not readable, however, it is readable, (just returns 0x0). Adding it to readable registers means it will be correctly treated as volatile, and thus will not be cached. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> Link: https://lore.kernel.org/r/20231026150558.2105827-6-sbinding@opensource.cirrus.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/cs35l41_hda.c5
-rw-r--r--sound/soc/codecs/cs35l41-lib.c1
2 files changed, 6 insertions, 0 deletions
diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c
index e787788c1be2..9746c64ff0dd 100644
--- a/sound/pci/hda/cs35l41_hda.c
+++ b/sound/pci/hda/cs35l41_hda.c
@@ -901,6 +901,9 @@ static int cs35l41_system_resume(struct device *dev)
regcache_cache_only(cs35l41->regmap, false);
+ regmap_write(cs35l41->regmap, CS35L41_SFT_RESET, CS35L41_SOFTWARE_RESET);
+ usleep_range(2000, 2100);
+
ret = cs35l41_wait_boot_done(cs35l41);
if (ret)
return ret;
@@ -1767,6 +1770,8 @@ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int i
}
usleep_range(2000, 2100);
+ regmap_write(cs35l41->regmap, CS35L41_SFT_RESET, CS35L41_SOFTWARE_RESET);
+ usleep_range(2000, 2100);
ret = cs35l41_wait_boot_done(cs35l41);
if (ret)
diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c
index 2ec5fdc875b1..ddedb7e63cb6 100644
--- a/sound/soc/codecs/cs35l41-lib.c
+++ b/sound/soc/codecs/cs35l41-lib.c
@@ -74,6 +74,7 @@ static bool cs35l41_readable_reg(struct device *dev, unsigned int reg)
case CS35L41_FABID:
case CS35L41_RELID:
case CS35L41_OTPID:
+ case CS35L41_SFT_RESET:
case CS35L41_TEST_KEY_CTL:
case CS35L41_USER_KEY_CTL:
case CS35L41_OTP_CTRL0: