[ALSA] hda-codec - Fix default pin config of Abit AW9D-MAX

Fix the default pin configuration of Abit AW9D-MAX.  The board has a
broken BIOS that doesn't set the correct pin default configs, which
screws up the auto-configuration of snd-hda-intel driver.
The patch enables the override of default pin config values.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
Takashi Iwai 2007-07-10 00:47:43 +02:00 committed by Jaroslav Kysela
parent 341d4eb0cf
commit f95474ec05

View File

@ -723,6 +723,38 @@ static void alc_subsystem_id(struct hda_codec *codec,
}
}
/*
* Fix-up pin default configurations
*/
struct alc_pincfg {
hda_nid_t nid;
u32 val;
};
static void alc_fix_pincfg(struct hda_codec *codec,
const struct snd_pci_quirk *quirk,
const struct alc_pincfg **pinfix)
{
const struct alc_pincfg *cfg;
quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk);
if (!quirk)
return;
cfg = pinfix[quirk->value];
for (; cfg->nid; cfg++) {
int i;
u32 val = cfg->val;
for (i = 0; i < 4; i++) {
snd_hda_codec_write(codec, cfg->nid, 0,
AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
val & 0xff);
val >>= 8;
}
}
}
/*
* ALC880 3-stack model
*
@ -5409,6 +5441,29 @@ static struct alc_config_preset alc882_presets[] = {
};
/*
* Pin config fixes
*/
enum {
PINFIX_ABIT_AW9D_MAX
};
static struct alc_pincfg alc882_abit_aw9d_pinfix[] = {
{ 0x15, 0x01080104 }, /* side */
{ 0x16, 0x01011012 }, /* rear */
{ 0x17, 0x01016011 }, /* clfe */
{ }
};
static const struct alc_pincfg *alc882_pin_fixes[] = {
[PINFIX_ABIT_AW9D_MAX] = alc882_abit_aw9d_pinfix,
};
static struct snd_pci_quirk alc882_pinfix_tbl[] = {
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX),
{}
};
/*
* BIOS auto configuration
*/
@ -5532,6 +5587,8 @@ static int patch_alc882(struct hda_codec *codec)
}
}
alc_fix_pincfg(codec, alc882_pinfix_tbl, alc882_pin_fixes);
if (board_config == ALC882_AUTO) {
/* automatic parse from the BIOS config */
err = alc882_parse_auto_config(codec);