[ALSA] au88x0: codec access procs for multiple AC97 codecs
authorSasha Khapyorsky <sashak@smlink.com>
Fri, 16 Sep 2005 17:22:44 +0000 (19:22 +0200)
committerJaroslav Kysela <perex@suse.cz>
Fri, 4 Nov 2005 12:16:24 +0000 (13:16 +0100)
Modules: au88x0 driver

This patch extends au88x0 AC97 codec access procedures to handle multiple
codecs properly.

Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/au88x0/au8810.h
sound/pci/au88x0/au8820.h
sound/pci/au88x0/au8830.h
sound/pci/au88x0/au88x0.h
sound/pci/au88x0/au88x0_core.c

index 3837d2b..5d69c31 100644 (file)
 #define                EN_SPDIF        0x000c0000
 
 #define VORTEX_CODEC_CHN       0x29080
-#define VORTEX_CODEC_WRITE     0x00800000
-#define VORTEX_CODEC_ADDSHIFT  16
-#define VORTEX_CODEC_ADDMASK   0x7f0000        /* 0x000f0000 */
-#define VORTEX_CODEC_DATSHIFT  0
-#define VORTEX_CODEC_DATMASK   0xffff
 #define VORTEX_CODEC_IO                0x29188
 
 /* SPDIF */
index be8022e..abbe85e 100644 (file)
 #define                EN_SPORT        0x00030000
 #define                EN_SPDIF        0x000c0000
 #define VORTEX_CODEC_CHN 0x11880
-#define VORTEX_CODEC_WRITE 0x00800000
-#define VORTEX_CODEC_ADDSHIFT 16
-#define VORTEX_CODEC_ADDMASK 0x7f0000  /* 0x000f0000 */
-#define VORTEX_CODEC_DATSHIFT 0
-#define VORTEX_CODEC_DATMASK 0xffff
 #define VORTEX_CODEC_IO 0x11988
 
 #define VORTEX_SPDIF_FLAGS             0x1005c /* FIXME */
index aa77826..04ece1b 100644 (file)
 
 #define VORTEX_CODEC_CTRL 0x29184
 #define VORTEX_CODEC_IO 0x29188
-#define        VORTEX_CODEC_WRITE 0x00800000
-#define        VORTEX_CODEC_ADDSHIFT 16
-#define        VORTEX_CODEC_ADDMASK 0x7f0000   /* 0x000f0000 */
-#define        VORTEX_CODEC_DATSHIFT 0
-#define        VORTEX_CODEC_DATMASK 0xffff
 
 #define VORTEX_CODEC_SPORTCTRL 0x2918c
 
index ee1ede1..b1197cf 100644 (file)
 #define VORTEX_RESOURCE_A3D    0x00000004
 #define VORTEX_RESOURCE_LAST   0x00000005
 
+/* codec io: VORTEX_CODEC_IO bits */
+#define VORTEX_CODEC_ID_SHIFT  24
+#define VORTEX_CODEC_WRITE     0x00800000
+#define VORTEX_CODEC_ADDSHIFT  16
+#define VORTEX_CODEC_ADDMASK   0x7f0000
+#define VORTEX_CODEC_DATSHIFT  0
+#define VORTEX_CODEC_DATMASK   0xffff
+
 /* Check for SDAC bit in "Extended audio ID" AC97 register */
 //#define VORTEX_IS_QUAD(x) (((x)->codec == NULL) ?  0 : ((x)->codec->ext_id&0x80))
 #define VORTEX_IS_QUAD(x) ((x)->isquad)
index f0eda4b..91ac4f3 100644 (file)
@@ -2532,7 +2532,8 @@ vortex_codec_write(ac97_t * codec, unsigned short addr, unsigned short data)
        hwwrite(card->mmio, VORTEX_CODEC_IO,
                ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK) |
                ((data << VORTEX_CODEC_DATSHIFT) & VORTEX_CODEC_DATMASK) |
-               VORTEX_CODEC_WRITE);
+               VORTEX_CODEC_WRITE |
+               (codec->num << VORTEX_CODEC_ID_SHIFT) );
 
        /* Flush Caches. */
        hwread(card->mmio, VORTEX_CODEC_IO);
@@ -2554,7 +2555,8 @@ static unsigned short vortex_codec_read(ac97_t * codec, unsigned short addr)
                }
        }
        /* set up read address */
-       read_addr = ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK);
+       read_addr = ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK) |
+               (codec->num << VORTEX_CODEC_ID_SHIFT) ;
        hwwrite(card->mmio, VORTEX_CODEC_IO, read_addr);
 
        /* wait for address */