Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=19a982b69442d39b3bb6e710677320182480576b
Commit:     19a982b69442d39b3bb6e710677320182480576b
Parent:     4505179c73197c39272e8e66a172ab788009e07e
Author:     Takashi Iwai <[EMAIL PROTECTED]>
AuthorDate: Wed Mar 21 15:14:35 2007 +0100
Committer:  Jaroslav Kysela <[EMAIL PROTECTED]>
CommitDate: Fri May 11 16:55:52 2007 +0200

    [ALSA] hda-intel - Probe additional slots only if necessary
    
    Probing the codec slots on ATI controller causes problems on some
    devices like Acer laptops.  On these devices, reading from codec
    slot 3 results in the communication failure with the codec chip.
    Meanwhile, some laptops (e.g. Gateway) have the codec connection
    only on slot 3, and probing this slot is mandatory for them.
    The patch improves the probing robustness.  The additional slots
    are now checked only when no codecs are found in the primary three
    slots.
    
    Signed-off-by: Takashi Iwai <[EMAIL PROTECTED]>
    Signed-off-by: Jaroslav Kysela <[EMAIL PROTECTED]>
---
 sound/pci/hda/hda_intel.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 517a8d7..5e478b9 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -198,6 +198,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
 #define RIRB_INT_MASK          0x05
 
 /* STATESTS int mask: SD2,SD1,SD0 */
+#define AZX_MAX_CODECS         3
 #define STATESTS_INT_MASK      0x07
 
 /* SD_CTL bits */
@@ -991,7 +992,7 @@ static int __devinit azx_codec_create(struct azx *chip, 
const char *model)
                return err;
 
        codecs = 0;
-       for (c = 0; c < azx_max_codecs[chip->driver_type]; c++) {
+       for (c = 0; c < AZX_MAX_CODECS; c++) {
                if ((chip->codec_mask & (1 << c)) & probe_mask) {
                        err = snd_hda_codec_new(chip->bus, c, NULL);
                        if (err < 0)
@@ -999,7 +1000,18 @@ static int __devinit azx_codec_create(struct azx *chip, 
const char *model)
                        codecs++;
                }
        }
-       if (! codecs) {
+       if (!codecs) {
+               /* probe additional slots if no codec is found */
+               for (; c < azx_max_codecs[chip->driver_type]; c++) {
+                       if ((chip->codec_mask & (1 << c)) & probe_mask) {
+                               err = snd_hda_codec_new(chip->bus, c, NULL);
+                               if (err < 0)
+                                       continue;
+                               codecs++;
+                       }
+               }
+       }
+       if (!codecs) {
                snd_printk(KERN_ERR SFX "no codecs initialized\n");
                return -ENXIO;
        }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to