From 56c4786f88a0591205222b8d9918aec838cf5cfe Mon Sep 17 00:00:00 2001 From: Daniel T. Chen Date: Sat, 28 Apr 2007 23:59:10 -0400 Subject: [PATCH] UBUNTU: sound/pci/hda/: Fix detection for Toshiba A100 and other ATI SB450 devices (hda_intel.c) Status: Merged in upstream alsa-kernel hg This commit for Feisty (updates) originates from Takashi Iwai: "Some boards have the audio codec on slot #3 while the modem codec on slot #0. The driver should continue to probe the slots when no audio codec is found. "This fixes the problem of no device on Toshiba A100 (and some other ATI SB450 devices)." Verified working in #alsa/Freenode on Sat, Apr 28, 2007. Signed-off-by: Daniel T Chen --- sound/pci/hda/hda_intel.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 7141c97..00b23d0 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -979,7 +979,7 @@ static unsigned int azx_max_codecs[] __devinitdata = { static int __devinit azx_codec_create(struct azx *chip, const char *model) { struct hda_bus_template bus_temp; - int c, codecs, err; + int c, codecs, audio_codecs, err; memset(&bus_temp, 0, sizeof(bus_temp)); bus_temp.private_data = chip; @@ -991,16 +991,19 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model) if ((err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus)) < 0) return err; - codecs = 0; + codecs = audio_codecs = 0; 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); + struct hda_codec *codec; + err = snd_hda_codec_new(chip->bus, c, &codec); if (err < 0) continue; codecs++; + if (codec->afg) + audio_codecs++; } } - if (!codecs) { + if (!audio_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) { -- 1.4.4.2