From ba9c8c81bf6638096b5efd46ceeb4b08b74cd181 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Wed, 21 Mar 2007 15:14:35 +0100 Subject: [PATCH] --- yaml --- r: 56138 b: refs/heads/master c: 19a982b69442d39b3bb6e710677320182480576b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/sound/pci/hda/hda_intel.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1d75a71a3937..3ea971893dc0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4505179c73197c39272e8e66a172ab788009e07e +refs/heads/master: 19a982b69442d39b3bb6e710677320182480576b diff --git a/trunk/sound/pci/hda/hda_intel.c b/trunk/sound/pci/hda/hda_intel.c index 517a8d7bf337..5e478b917aab 100644 --- a/trunk/sound/pci/hda/hda_intel.c +++ b/trunk/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; }