[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
|
* 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
|
* 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) {
|
if (board_config == ALC882_AUTO) {
|
||||||
/* automatic parse from the BIOS config */
|
/* automatic parse from the BIOS config */
|
||||||
err = alc882_parse_auto_config(codec);
|
err = alc882_parse_auto_config(codec);
|
||||||
|
Loading…
Reference in New Issue
Block a user