[ALSA] ice1724 - Add support of M-Audio Revolution 5.1
Modules: ICE1724 driver Added the basic support of M-Audio Revolution 5.1. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
bd01e7bc9e
commit
59acf76e02
|
@ -61,7 +61,7 @@ static void revo_set_rate_val(struct snd_akm4xxx *ak, unsigned int rate)
|
||||||
else
|
else
|
||||||
dfs = 0;
|
dfs = 0;
|
||||||
|
|
||||||
if (ak->type == SND_AK4355) {
|
if (ak->type == SND_AK4355 || ak->type == SND_AK4358) {
|
||||||
reg = 2;
|
reg = 2;
|
||||||
shift = 4;
|
shift = 4;
|
||||||
} else {
|
} else {
|
||||||
|
@ -128,6 +128,26 @@ static struct snd_ak4xxx_private akm_revo_surround_priv __devinitdata = {
|
||||||
.mask_flags = 0,
|
.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)
|
static int __devinit revo_init(struct snd_ice1712 *ice)
|
||||||
{
|
{
|
||||||
struct snd_akm4xxx *ak;
|
struct snd_akm4xxx *ak;
|
||||||
|
@ -138,14 +158,17 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
|
||||||
case VT1724_SUBDEVICE_REVOLUTION71:
|
case VT1724_SUBDEVICE_REVOLUTION71:
|
||||||
ice->num_total_dacs = 8;
|
ice->num_total_dacs = 8;
|
||||||
ice->num_total_adcs = 2;
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
snd_BUG();
|
snd_BUG();
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ice->gpio.i2s_mclk_changed = revo_i2s_mclk_changed;
|
|
||||||
|
|
||||||
/* second stage of initialization, analog parts and others */
|
/* second stage of initialization, analog parts and others */
|
||||||
ak = ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
|
ak = ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
|
||||||
if (! ak)
|
if (! ak)
|
||||||
|
@ -153,6 +176,7 @@ static int __devinit revo_init(struct snd_ice1712 *ice)
|
||||||
ice->akm_codecs = 2;
|
ice->akm_codecs = 2;
|
||||||
switch (ice->eeprom.subvendor) {
|
switch (ice->eeprom.subvendor) {
|
||||||
case VT1724_SUBDEVICE_REVOLUTION71:
|
case VT1724_SUBDEVICE_REVOLUTION71:
|
||||||
|
ice->akm_codecs = 2;
|
||||||
if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo_front, &akm_revo_front_priv, ice)) < 0)
|
if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo_front, &akm_revo_front_priv, ice)) < 0)
|
||||||
return err;
|
return err;
|
||||||
if ((err = snd_ice1712_akm4xxx_init(ak + 1, &akm_revo_surround, &akm_revo_surround_priv, ice)) < 0)
|
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 */
|
/* unmute all codecs */
|
||||||
snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
|
snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE);
|
||||||
break;
|
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;
|
return 0;
|
||||||
|
@ -172,6 +203,7 @@ static int __devinit revo_add_controls(struct snd_ice1712 *ice)
|
||||||
|
|
||||||
switch (ice->eeprom.subvendor) {
|
switch (ice->eeprom.subvendor) {
|
||||||
case VT1724_SUBDEVICE_REVOLUTION71:
|
case VT1724_SUBDEVICE_REVOLUTION71:
|
||||||
|
case VT1724_SUBDEVICE_REVOLUTION51:
|
||||||
err = snd_ice1712_akm4xxx_build_controls(ice);
|
err = snd_ice1712_akm4xxx_build_controls(ice);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
@ -188,5 +220,12 @@ struct snd_ice1712_card_info snd_vt1724_revo_cards[] __devinitdata = {
|
||||||
.chip_init = revo_init,
|
.chip_init = revo_init,
|
||||||
.build_controls = revo_add_controls,
|
.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 */
|
{ } /* terminator */
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,9 +25,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define REVO_DEVICE_DESC \
|
#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_REVOLUTION71 0x12143036
|
||||||
|
#define VT1724_SUBDEVICE_REVOLUTION51 0x12143136
|
||||||
|
|
||||||
/* entry point */
|
/* entry point */
|
||||||
extern struct snd_ice1712_card_info snd_vt1724_revo_cards[];
|
extern struct snd_ice1712_card_info snd_vt1724_revo_cards[];
|
||||||
|
|
Loading…
Reference in New Issue