[ALSA] ice1724 - Add support of M-Audio Revolution 5.1
authorTakashi Iwai <tiwai@suse.de>
Mon, 5 Dec 2005 18:22:34 +0000 (19:22 +0100)
committerJaroslav Kysela <perex@suse.cz>
Tue, 3 Jan 2006 11:30:18 +0000 (12:30 +0100)
Modules: ICE1724 driver

Added the basic support of M-Audio Revolution 5.1.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/revo.c
sound/pci/ice1712/revo.h

index 664b738bb6474447d7d620d6b05e4676b2c31748..b5754b32b802cffa499226bfd85a5b6798f3e280 100644 (file)
@@ -61,7 +61,7 @@ static void revo_set_rate_val(struct snd_akm4xxx *ak, unsigned int rate)
        else
                dfs = 0;
 
-       if (ak->type == SND_AK4355) {
+       if (ak->type == SND_AK4355 || ak->type == SND_AK4358) {
                reg = 2;
                shift = 4;
        } else {
@@ -128,6 +128,26 @@ static struct snd_ak4xxx_private akm_revo_surround_priv __devinitdata = {
        .mask_flags = 0,
 };
 
+static struct snd_akm4xxx akm_revo51 __devinitdata = {
+       .type = SND_AK4358,
+       .num_dacs = 6,
+       .ops = {
+               .set_rate_val = revo_set_rate_val
+       }
+};
+
+static struct snd_ak4xxx_private akm_revo51_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 = 0,
+       .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2,
+       .add_flags = VT1724_REVO_CCLK, /* high at init */
+       .mask_flags = 0,
+};
+
 static int __devinit revo_init(struct snd_ice1712 *ice)
 {
        struct snd_akm4xxx *ak;
@@ -138,14 +158,17 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
        case VT1724_SUBDEVICE_REVOLUTION71:
                ice->num_total_dacs = 8;
                ice->num_total_adcs = 2;
+               ice->gpio.i2s_mclk_changed = revo_i2s_mclk_changed;
+               break;
+       case VT1724_SUBDEVICE_REVOLUTION51:
+               ice->num_total_dacs = 6;
+               ice->num_total_adcs = 2;
                break;
        default:
                snd_BUG();
                return -EINVAL;
        }
 
-       ice->gpio.i2s_mclk_changed = revo_i2s_mclk_changed;
-
        /* second stage of initialization, analog parts and others */
        ak = ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
        if (! ak)
@@ -153,6 +176,7 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
        ice->akm_codecs = 2;
        switch (ice->eeprom.subvendor) {
        case VT1724_SUBDEVICE_REVOLUTION71:
+               ice->akm_codecs = 2;
                if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo_front, &akm_revo_front_priv, ice)) < 0)
                        return err;
                if ((err = snd_ice1712_akm4xxx_init(ak + 1, &akm_revo_surround, &akm_revo_surround_priv, ice)) < 0)
@@ -160,6 +184,13 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
                /* unmute all codecs */
                snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
                break;
+       case VT1724_SUBDEVICE_REVOLUTION51:
+               ice->akm_codecs = 1;
+               if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo51, &akm_revo51_priv, ice)) < 0)
+                       return err;
+               /* unmute all codecs - needed! */
+               snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
+               break;
        }
 
        return 0;
@@ -172,6 +203,7 @@ static int __devinit revo_add_controls(struct snd_ice1712 *ice)
 
        switch (ice->eeprom.subvendor) {
        case VT1724_SUBDEVICE_REVOLUTION71:
+       case VT1724_SUBDEVICE_REVOLUTION51:
                err = snd_ice1712_akm4xxx_build_controls(ice);
                if (err < 0)
                        return err;
@@ -188,5 +220,12 @@ struct snd_ice1712_card_info snd_vt1724_revo_cards[] __devinitdata = {
                .chip_init = revo_init,
                .build_controls = revo_add_controls,
        },
+       {
+               .subvendor = VT1724_SUBDEVICE_REVOLUTION51,
+               .name = "M Audio Revolution-5.1",
+               .model = "revo51",
+               .chip_init = revo_init,
+               .build_controls = revo_add_controls,
+       },
        { } /* terminator */
 };
index ca4420b5e3ec2036a273d5971bbe39063626e5c3..dea52ea219dffe825219a17349ef4e03b9bc6d63 100644 (file)
  */      
 
 #define REVO_DEVICE_DESC \
-               "{MidiMan M Audio,Revolution 7.1},"
+               "{MidiMan M Audio,Revolution 7.1},"\
+               "{MidiMan M Audio,Revolution 5.1},"
 
 #define VT1724_SUBDEVICE_REVOLUTION71  0x12143036
+#define VT1724_SUBDEVICE_REVOLUTION51  0x12143136
 
 /* entry point */
 extern struct snd_ice1712_card_info snd_vt1724_revo_cards[];