[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:
parent
341d4eb0cf
commit
f95474ec05
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user