Commit a488e033 authored by Arnaud Patard's avatar Arnaud Patard Committed by Jaroslav Kysela

[ALSA] cs4281 - fix DLLRDY not seen problem

CS4281 driver
Reset the FPDN bit of the EPPMC register if needed.
Signed-off-by: default avatarArnaud Patard <arnaud.patard@rtp-net.org>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent 22bc30c8
...@@ -206,7 +206,10 @@ MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled)."); ...@@ -206,7 +206,10 @@ MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled).");
#define BA0_PMCS 0x0344 /* Power Management Control/Status */ #define BA0_PMCS 0x0344 /* Power Management Control/Status */
#define BA0_CWPR 0x03e0 /* Configuration Write Protect */ #define BA0_CWPR 0x03e0 /* Configuration Write Protect */
#define BA0_EPPMC 0x03e4 /* Extended PCI Power Management Control */ #define BA0_EPPMC 0x03e4 /* Extended PCI Power Management Control */
#define BA0_EPPMC_FPDN (1<<14) /* Full Power DowN */
#define BA0_GPIOR 0x03e8 /* GPIO Pin Interface Register */ #define BA0_GPIOR 0x03e8 /* GPIO Pin Interface Register */
#define BA0_SPMC 0x03ec /* Serial Port Power Management Control (& ASDIN2 enable) */ #define BA0_SPMC 0x03ec /* Serial Port Power Management Control (& ASDIN2 enable) */
...@@ -1461,6 +1464,11 @@ static int snd_cs4281_chip_init(cs4281_t *chip) ...@@ -1461,6 +1464,11 @@ static int snd_cs4281_chip_init(cs4281_t *chip)
int timeout; int timeout;
int retry_count = 2; int retry_count = 2;
/* Having EPPMC.FPDN=1 prevent proper chip initialisation */
tmp = snd_cs4281_peekBA0(chip, BA0_EPPMC);
if (tmp & BA0_EPPMC_FPDN)
snd_cs4281_pokeBA0(chip, BA0_EPPMC, tmp & ~BA0_EPPMC_FPDN);
__retry: __retry:
tmp = snd_cs4281_peekBA0(chip, BA0_CFLR); tmp = snd_cs4281_peekBA0(chip, BA0_CFLR);
if (tmp != BA0_CFLR_DEFAULT) { if (tmp != BA0_CFLR_DEFAULT) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment