提交 bccad14e 编写于 作者: T Takashi Iwai 提交者: Jaroslav Kysela

[ALSA] hda-intel - Fix detection of audio codec on Toshiba A100

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).
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
Signed-off-by: NJaroslav Kysela <perex@suse.cz>
上级 baba8ee9
...@@ -979,7 +979,7 @@ static unsigned int azx_max_codecs[] __devinitdata = { ...@@ -979,7 +979,7 @@ static unsigned int azx_max_codecs[] __devinitdata = {
static int __devinit azx_codec_create(struct azx *chip, const char *model) static int __devinit azx_codec_create(struct azx *chip, const char *model)
{ {
struct hda_bus_template bus_temp; struct hda_bus_template bus_temp;
int c, codecs, err; int c, codecs, audio_codecs, err;
memset(&bus_temp, 0, sizeof(bus_temp)); memset(&bus_temp, 0, sizeof(bus_temp));
bus_temp.private_data = chip; bus_temp.private_data = chip;
...@@ -991,16 +991,19 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model) ...@@ -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) if ((err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus)) < 0)
return err; return err;
codecs = 0; codecs = audio_codecs = 0;
for (c = 0; c < AZX_MAX_CODECS; c++) { for (c = 0; c < AZX_MAX_CODECS; c++) {
if ((chip->codec_mask & (1 << c)) & probe_mask) { 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) if (err < 0)
continue; continue;
codecs++; codecs++;
if (codec->afg)
audio_codecs++;
} }
} }
if (!codecs) { if (!audio_codecs) {
/* probe additional slots if no codec is found */ /* probe additional slots if no codec is found */
for (; c < azx_max_codecs[chip->driver_type]; c++) { for (; c < azx_max_codecs[chip->driver_type]; c++) {
if ((chip->codec_mask & (1 << c)) & probe_mask) { if ((chip->codec_mask & (1 << c)) & probe_mask) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册