Commit ee94b3e6 authored by Jaroslav Kysela's avatar Jaroslav Kysela

ALSA CVS update - Jaroslav Kysela <perex@suse.cz>

ICE1724 driver,ICE1712 driver
Dirk Kalis <Dirk.Kalis@t-online.de>
Added num_total_adcs.
Separated analog input / s/pdif input controls
parent 9735a027
......@@ -38,6 +38,7 @@ static int __devinit snd_vt1724_amp_init(ice1712_t *ice)
/* only use basic functionality for now */
ice->num_total_dacs = 2; /* only PSDOUT0 is connected */
ice->num_total_adcs = 2;
return 0;
}
......
......@@ -409,10 +409,13 @@ static int __devinit aureon_init(ice1712_t *ice)
unsigned int tmp;
unsigned int i;
if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY)
if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY) {
ice->num_total_dacs = 6;
else
ice->num_total_adcs = 6;
} else {
ice->num_total_dacs = 8;
ice->num_total_adcs = 8;
}
/* to remeber the register values */
ice->akm = snd_kcalloc(sizeof(akm4xxx_t), GFP_KERNEL);
......
......@@ -511,20 +511,25 @@ static int __devinit snd_ice1712_delta_init(ice1712_t *ice)
switch (ice->eeprom.subvendor) {
case ICE1712_SUBDEVICE_AUDIOPHILE:
ice->num_total_dacs = 2;
ice->num_total_adcs = 2;
break;
case ICE1712_SUBDEVICE_DELTA410:
ice->num_total_dacs = 8;
ice->num_total_adcs = 2;
break;
case ICE1712_SUBDEVICE_DELTA44:
case ICE1712_SUBDEVICE_DELTA66:
ice->num_total_dacs = ice->omni ? 8 : 4;
ice->num_total_adcs = ice->omni ? 8 : 4;
break;
case ICE1712_SUBDEVICE_DELTA1010:
case ICE1712_SUBDEVICE_DELTA1010LT:
ice->num_total_dacs = 8;
ice->num_total_adcs = 8;
break;
case ICE1712_SUBDEVICE_VX442:
ice->num_total_dacs = 4;
ice->num_total_adcs = 4;
break;
}
......
......@@ -406,15 +406,18 @@ static int __devinit snd_ice1712_ews_init(ice1712_t *ice)
switch (ice->eeprom.subvendor) {
case ICE1712_SUBDEVICE_EWX2496:
ice->num_total_dacs = 2;
ice->num_total_adcs = 2;
break;
case ICE1712_SUBDEVICE_EWS88MT:
case ICE1712_SUBDEVICE_EWS88MT_NEW:
ice->num_total_dacs = 8;
ice->num_total_adcs = 8;
break;
case ICE1712_SUBDEVICE_EWS88D:
break; /* no analog */
case ICE1712_SUBDEVICE_DMX6FIRE:
ice->num_total_dacs = 6;
ice->num_total_adcs = 6;
break;
}
......
......@@ -153,6 +153,7 @@ static int __devinit snd_ice1712_hoontech_init(ice1712_t *ice)
int box, chn;
ice->num_total_dacs = 8;
ice->num_total_adcs = 8;
ice->hoontech_boxbits[0] =
ice->hoontech_boxbits[1] =
......
......@@ -1384,7 +1384,7 @@ static int snd_ice1712_pro_mixer_volume_put(snd_kcontrol_t * kcontrol, snd_ctl_e
}
static snd_kcontrol_new_t snd_ice1712_multi_ctrls[] __devinitdata = {
static snd_kcontrol_new_t snd_ice1712_multi_playback_ctrls[] __devinitdata = {
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Multi Playback Switch",
......@@ -1403,24 +1403,44 @@ static snd_kcontrol_new_t snd_ice1712_multi_ctrls[] __devinitdata = {
.private_value = 0,
.count = 10,
},
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Multi Capture Switch",
.info = snd_ice1712_pro_mixer_switch_info,
.get = snd_ice1712_pro_mixer_switch_get,
.put = snd_ice1712_pro_mixer_switch_put,
.private_value = 10,
.count = 10,
},
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Multi Capture Volume",
.info = snd_ice1712_pro_mixer_volume_info,
.get = snd_ice1712_pro_mixer_volume_get,
.put = snd_ice1712_pro_mixer_volume_put,
.private_value = 10,
.count = 10,
},
};
static snd_kcontrol_new_t snd_ice1712_multi_capture_analog_switch __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "H/W Multi Capture Switch",
.info = snd_ice1712_pro_mixer_switch_info,
.get = snd_ice1712_pro_mixer_switch_get,
.put = snd_ice1712_pro_mixer_switch_put,
.private_value = 10,
};
static snd_kcontrol_new_t snd_ice1712_multi_capture_spdif_switch __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "IEC958 Multi Capture Switch",
.info = snd_ice1712_pro_mixer_switch_info,
.get = snd_ice1712_pro_mixer_switch_get,
.put = snd_ice1712_pro_mixer_switch_put,
.private_value = 18,
.count = 2,
};
static snd_kcontrol_new_t snd_ice1712_multi_capture_analog_volume __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "H/W Multi Capture Volume",
.info = snd_ice1712_pro_mixer_volume_info,
.get = snd_ice1712_pro_mixer_volume_get,
.put = snd_ice1712_pro_mixer_volume_put,
.private_value = 10,
};
static snd_kcontrol_new_t snd_ice1712_multi_capture_spdif_volume __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "IEC958 Multi Capture Volume",
.info = snd_ice1712_pro_mixer_volume_info,
.get = snd_ice1712_pro_mixer_volume_get,
.put = snd_ice1712_pro_mixer_volume_put,
.private_value = 18,
.count = 2,
};
static int __devinit snd_ice1712_build_pro_mixer(ice1712_t *ice)
......@@ -1430,14 +1450,46 @@ static int __devinit snd_ice1712_build_pro_mixer(ice1712_t *ice)
int err;
/* multi-channel mixer */
for (idx = 0; idx < ARRAY_SIZE(snd_ice1712_multi_ctrls); idx++) {
err = snd_ctl_add(card, snd_ctl_new1(&snd_ice1712_multi_ctrls[idx], ice));
for (idx = 0; idx < ARRAY_SIZE(snd_ice1712_multi_playback_ctrls); idx++) {
err = snd_ctl_add(card, snd_ctl_new1(&snd_ice1712_multi_playback_ctrls[idx], ice));
if (err < 0)
return err;
}
if (ice->num_total_adcs > 0) {
snd_kcontrol_new_t tmp = snd_ice1712_multi_capture_analog_switch;
tmp.count = ice->num_total_adcs;
err = snd_ctl_add(card, snd_ctl_new1(&tmp, ice));
if (err < 0)
return err;
}
err = snd_ctl_add(card, snd_ctl_new1(&snd_ice1712_multi_capture_spdif_switch, ice));
if (err < 0)
return err;
if (ice->num_total_adcs > 0) {
snd_kcontrol_new_t tmp = snd_ice1712_multi_capture_analog_volume;
tmp.count = ice->num_total_adcs;
err = snd_ctl_add(card, snd_ctl_new1(&tmp, ice));
if (err < 0)
return err;
}
err = snd_ctl_add(card, snd_ctl_new1(&snd_ice1712_multi_capture_spdif_volume, ice));
if (err < 0)
return err;
/* initialize volumes */
for (idx = 0; idx < 20; idx++) {
for (idx = 0; idx < 10; idx++) {
ice->pro_volumes[idx] = 0x80008000; /* mute */
snd_ice1712_update_volume(ice, idx);
}
for (idx = 10; idx < 10 + ice->num_total_adcs; idx++) {
ice->pro_volumes[idx] = 0x80008000; /* mute */
snd_ice1712_update_volume(ice, idx);
}
for (idx = 18; idx < 20; idx++) {
ice->pro_volumes[idx] = 0x80008000; /* mute */
snd_ice1712_update_volume(ice, idx);
}
......
......@@ -330,6 +330,7 @@ struct _snd_ice1712 {
unsigned int omni: 1; /* Delta Omni I/O */
unsigned int vt1724: 1;
unsigned int num_total_dacs; /* total DACs */
unsigned int num_total_adcs; /* total ADCs */
unsigned char hoontech_boxbits[4];
unsigned int hoontech_config;
unsigned short hoontech_boxconfig[4];
......
......@@ -585,6 +585,7 @@ static int __devinit prodigy_init(ice1712_t *ice)
printk(KERN_INFO "ice1724: Apostolos Dimitromanolakis <apostol@cs.utoronto.ca>\n");
ice->num_total_dacs = 8;
ice->num_total_adcs = 8;
/* to remeber the register values */
ice->akm = snd_kcalloc(sizeof(akm4xxx_t), GFP_KERNEL);
......
......@@ -128,6 +128,7 @@ static int __devinit revo_init(ice1712_t *ice)
switch (ice->eeprom.subvendor) {
case VT1724_SUBDEVICE_REVOLUTION71:
ice->num_total_dacs = 8;
ice->num_total_adcs = 4;
break;
default:
snd_BUG();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment