[ALSA] Revolution 5.1 - register the AK5365 ADC with ALSA
authorJochen Voss <voss@seehuhn.de>
Tue, 8 Aug 2006 19:13:42 +0000 (21:13 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sat, 23 Sep 2006 08:40:23 +0000 (10:40 +0200)
Enable capture support for the M-Audio Revolution 5.1 card,
by registering the ADC with ALSA.

Signed-off-by: Jochen Voss <voss@seehuhn.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/ice1712/revo.c
sound/pci/ice1712/revo.h

index fec9440cb310485e8c6cb55c275172e60220ba82..ef64be49a898ef24a0be1a04979d5e733de696cb 100644 (file)
@@ -98,6 +98,9 @@ static unsigned int revo51_num_stereo[] = {2, 1, 1, 2};
 static char *revo51_channel_names[] = {"PCM Playback Volume", "PCM Center Playback Volume",
                                        "PCM LFE Playback Volume", "PCM Rear Playback Volume"};
 
 static char *revo51_channel_names[] = {"PCM Playback Volume", "PCM Center Playback Volume",
                                        "PCM LFE Playback Volume", "PCM Rear Playback Volume"};
 
+static unsigned int revo51_adc_num_stereo[] = {2};
+static char *revo51_adc_channel_names[] = {"PCM Capture Volume"};
+
 static struct snd_akm4xxx akm_revo_front __devinitdata = {
        .type = SND_AK4381,
        .num_dacs = 2,
 static struct snd_akm4xxx akm_revo_front __devinitdata = {
        .type = SND_AK4381,
        .num_dacs = 2,
@@ -159,7 +162,26 @@ static struct snd_ak4xxx_private akm_revo51_priv __devinitdata = {
        .data_mask = VT1724_REVO_CDOUT,
        .clk_mask = VT1724_REVO_CCLK,
        .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
        .data_mask = VT1724_REVO_CDOUT,
        .clk_mask = VT1724_REVO_CCLK,
        .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
-       .cs_addr = 0,
+       .cs_addr = VT1724_REVO_CS1 | VT1724_REVO_CS2,
+       .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
+       .add_flags = VT1724_REVO_CCLK, /* high at init */
+       .mask_flags = 0,
+};
+
+static struct snd_akm4xxx akm_revo51_adc __devinitdata = {
+       .type = SND_AK5365,
+       .num_adcs = 2,
+       .num_stereo = revo51_adc_num_stereo,
+       .channel_names = revo51_adc_channel_names
+};
+
+static struct snd_ak4xxx_private akm_revo51_adc_priv __devinitdata = {
+       .caddr = 2,
+       .cif = 0,
+       .data_mask = VT1724_REVO_CDOUT,
+       .clk_mask = VT1724_REVO_CCLK,
+       .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
+       .cs_addr = VT1724_REVO_CS0 | VT1724_REVO_CS2,
        .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
        .add_flags = VT1724_REVO_CCLK, /* high at init */
        .mask_flags = 0,
        .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
        .add_flags = VT1724_REVO_CCLK, /* high at init */
        .mask_flags = 0,
@@ -202,9 +224,13 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
                snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
                break;
        case VT1724_SUBDEVICE_REVOLUTION51:
                snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
                break;
        case VT1724_SUBDEVICE_REVOLUTION51:
-               ice->akm_codecs = 1;
+               ice->akm_codecs = 2;
                if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo51, &akm_revo51_priv, ice)) < 0)
                        return err;
                if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo51, &akm_revo51_priv, ice)) < 0)
                        return err;
+               err = snd_ice1712_akm4xxx_init(ak + 1, &akm_revo51_adc,
+                                              &akm_revo51_adc_priv, ice);
+               if (err < 0)
+                       return err;
                /* unmute all codecs - needed! */
                snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
                break;
                /* unmute all codecs - needed! */
                snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
                break;
index dea52ea219dffe825219a17349ef4e03b9bc6d63..efbb86ec3289ed0286549316635ecd9cc79b225b 100644 (file)
@@ -42,7 +42,7 @@ extern struct snd_ice1712_card_info snd_vt1724_revo_cards[];
 #define VT1724_REVO_CCLK       0x02
 #define VT1724_REVO_CDIN       0x04    /* not used */
 #define VT1724_REVO_CDOUT      0x08
 #define VT1724_REVO_CCLK       0x02
 #define VT1724_REVO_CDIN       0x04    /* not used */
 #define VT1724_REVO_CDOUT      0x08
-#define VT1724_REVO_CS0                0x10    /* not used */
+#define VT1724_REVO_CS0                0x10    /* AK5365 chipselect for Rev. 5.1 */
 #define VT1724_REVO_CS1                0x20    /* front AKM4381 chipselect */
 #define VT1724_REVO_CS2                0x40    /* surround AKM4355 chipselect */
 #define VT1724_REVO_MUTE       (1<<22) /* 0 = all mute, 1 = normal operation */
 #define VT1724_REVO_CS1                0x20    /* front AKM4381 chipselect */
 #define VT1724_REVO_CS2                0x40    /* surround AKM4355 chipselect */
 #define VT1724_REVO_MUTE       (1<<22) /* 0 = all mute, 1 = normal operation */