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.c 2003-10-28 12:28:01.000000000
+0100
+++ alsa-driver-1.0.1/alsa-kernel/pci/ens1370.c 2004-01-10 16:45:12.000000000 +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