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

Reply via email to