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