Update of /cvsroot/alsa/alsa-kernel/pci/ac97
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4225/pci/ac97

Modified Files:
        ac97_codec.c 
Log Message:
Add AC97 quick manual override module parameter.


Index: ac97_codec.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/ac97/ac97_codec.c,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -r1.118 -r1.119
--- ac97_codec.c        12 Jan 2004 14:38:06 -0000      1.118
+++ ac97_codec.c        5 Feb 2004 10:37:10 -0000       1.119
@@ -2140,10 +2140,28 @@
        return 0;
 }
 
+static int apply_quirk(ac97_t *ac97, int quirk)
+{
+       switch (quirk) {
+       case AC97_TUNE_NONE:
+               return 0;
+       case AC97_TUNE_HP_ONLY:
+               return swap_headphone(ac97, 1);
+       case AC97_TUNE_SWAP_HP:
+               return swap_headphone(ac97, 0);
+       case AC97_TUNE_SWAP_SURROUND:
+               return swap_surround(ac97);
+       case AC97_TUNE_AD_SHARING:
+               return tune_ad_sharing(ac97);
+       }
+       return -EINVAL;
+}
+
 /**
  * snd_ac97_tune_hardware - tune up the hardware
  * @ac97: the ac97 instance
  * @quirk: quirk list
+ * @override: explicit quirk value (overrides the list if not AC97_TUNE_DEFAULT)
  *
  * Do some workaround for each pci device, such as renaming of the
  * headphone (true line-out) control as "Master".
@@ -2152,28 +2170,29 @@
  * Returns zero if successful, or a negative error code on failure.
  */
 
-int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk)
+int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk, int override)
 {
+       int result;
+
        snd_assert(quirk, return -EINVAL);
 
+       if (override != AC97_TUNE_DEFAULT) {
+               result = apply_quirk(ac97, override);
+               if (result < 0)
+                       snd_printk(KERN_ERR "applying quirk type %d failed (%d)\n", 
override, result);
+               return result;
+       }
+
        for (; quirk->vendor; quirk++) {
                if (quirk->vendor != ac97->subsystem_vendor)
                        continue;
                if ((! quirk->mask && quirk->device == ac97->subsystem_device) ||
                    quirk->device == (quirk->mask & ac97->subsystem_device)) {
                        snd_printdd("ac97 quirk for %s (%04x:%04x)\n", quirk->name, 
ac97->subsystem_vendor, ac97->subsystem_device);
-                       switch (quirk->type) {
-                       case AC97_TUNE_HP_ONLY:
-                               return swap_headphone(ac97, 1);
-                       case AC97_TUNE_SWAP_HP:
-                               return swap_headphone(ac97, 0);
-                       case AC97_TUNE_SWAP_SURROUND:
-                               return swap_surround(ac97);
-                       case AC97_TUNE_AD_SHARING:
-                               return tune_ad_sharing(ac97);
-                       }
-                       snd_printk(KERN_ERR "invalid quirk type %d for %s\n", 
quirk->type, quirk->name);
-                       return -EINVAL;
+                       result = apply_quirk(ac97, quirk->type);
+                       if (result < 0)
+                               snd_printk(KERN_ERR "applying quirk type %d for %s 
failed (%d)\n", quirk->type, quirk->name, result);
+                       return result;
                }
        }
        return 0;



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to