diff options
author | Stefan Binding <sbinding@opensource.cirrus.com> | 2023-10-26 18:05:55 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2023-10-26 18:55:20 +0300 |
commit | 2ee06ff5d7cf5f68bab2bf65a946bb2ffe9982dd (patch) | |
tree | 528777a7b889a8484ce5fff9dfad7f2d77d2b9b2 /sound/pci/hda | |
parent | 881b7bce0c250386680b49b637455d31238a4b30 (diff) | |
download | linux-2ee06ff5d7cf5f68bab2bf65a946bb2ffe9982dd.tar.xz |
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/pci/hda')
-rw-r--r-- | sound/pci/hda/cs35l41_hda.c | 5 |
1 files changed, 5 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) |