[ALSA] cs4281 - fix DLLRDY not seen problem
authorArnaud Patard <arnaud.patard@rtp-net.org>
Sat, 7 May 2005 16:51:51 +0000 (18:51 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sun, 29 May 2005 08:06:22 +0000 (10:06 +0200)
CS4281 driver
Reset the FPDN bit of the EPPMC register if needed.

Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/cs4281.c

index 8b42e8631f2a0fb33bdec601c40e19bf7fb7d919..b6e1854e938980e4678cdb89da4da1d3cd2f9b48 100644 (file)
@@ -206,7 +206,10 @@ MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled).");
 
 #define BA0_PMCS               0x0344  /* Power Management Control/Status */
 #define BA0_CWPR               0x03e0  /* Configuration Write Protect */
+
 #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_SPMC               0x03ec  /* Serial Port Power Management Control (& ASDIN2 enable) */
@@ -1461,6 +1464,11 @@ static int snd_cs4281_chip_init(cs4281_t *chip)
        int timeout;
        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:
        tmp = snd_cs4281_peekBA0(chip, BA0_CFLR);
        if (tmp != BA0_CFLR_DEFAULT) {