Hi,
The Gigabyte GA-7DXR motherboard has a 4-channel SB128
(ct5880 + STAC9708/11) onboard. The line in and second line out (rear out)
are wired to the same connector.
After some trial-and-error with the ct5880 GPIO registers I found one which
switches line in to rear out.
The patch below adds a new mixer element when the ens1371 finds itself
on a GA-7DXR (by checking subsystem vendor device IDs).
Other motherboards with the ct5880 may have different IDs and/or
may require a different GPIO line.
Cheers,
Mike
--- alsa-driver-1.0.1-orig/alsa-kernel/pci/ens1370.c2003-10-28 12:28:01.0
+0100
+++ alsa-driver-1.0.1/alsa-kernel/pci/ens1370.c 2004-01-10 16:45:12.0 +0100
@@ -1512,6 +1512,54 @@
.put = snd_es1373_rear_put,
};
+static int snd_es1373_line_info(snd_kcontrol_t *kcontrol,
snd_ctl_elem_info_t *uinfo)
+{
+uinfo-type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+uinfo-count = 1;
+uinfo-value.integer.min = 0;
+uinfo-value.integer.max = 1;
+return 0;
+}
+
+static int snd_es1373_line_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
+{
+ ensoniq_t *ensoniq = snd_kcontrol_chip(kcontrol);
+ int val = 0;
+
+ spin_lock_irq(ensoniq-reg_lock);
+ if ((ensoniq-ctrl ES_1371_GPIO_OUTM) = 4)
+ val = 1;
+ ucontrol-value.integer.value[0] = val;
+ spin_unlock_irq(ensoniq-reg_lock);
+ return 0;
+}
+
+static int snd_es1373_line_put(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
+{
+ ensoniq_t *ensoniq = snd_kcontrol_chip(kcontrol);
+ unsigned int nval1 = 0;
+
+ nval1 = ucontrol-value.integer.value[0];
+ spin_lock_irq(ensoniq-reg_lock);
+ if(nval1) {
+ ensoniq-ctrl |= ES_1371_GPIO_OUT(4); /* switch line-in - rear out */
+ } else {
+ ensoniq-ctrl = ~(ES_1371_GPIO_OUT(4));
+ }
+ outl(ensoniq-ctrl, ES_REG(ensoniq, CONTROL));
+ spin_unlock_irq(ensoniq-reg_lock);
+ return nval1;
+}
+
+static snd_kcontrol_new_t snd_ens1373_line __devinitdata =
+{
+ .iface =SNDRV_CTL_ELEM_IFACE_MIXER,
+ .name = Line In-Rear Out Switch,
+ .info = snd_es1373_line_info,
+ .get = snd_es1373_line_get,
+ .put = snd_es1373_line_put,
+};
+
static void snd_ensoniq_mixer_free_ac97(ac97_t *ac97)
{
ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t,
ac97-private_data, return);
@@ -1586,6 +1634,11 @@
ensoniq-cssr |= ES_1373_REAR_BIT26;
snd_ctl_add(card, snd_ctl_new1(snd_ens1373_rear, ensoniq));
}
+ if ((ensoniq-subsystem_vendor_id == 0x1274)
+ (ensoniq-subsystem_device_id == 0x2000)) { /* GA-7DXR */
+snd_ctl_add(card, snd_ctl_new1(snd_ens1373_line, ensoniq));
+ }
+
return 0;
}
---
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel