Commit 616f89e7 authored by Herton Ronaldo Krzesinski's avatar Herton Ronaldo Krzesinski Committed by Takashi Iwai

ALSA: hda - Additional pin nids for STAC92HD71Bx and STAC92HD75Bx codecs

Current code for STAC92HD71Bx and STAC92HD75Bx doesn't consider pin
complexes 0x20 and 0x27. Also for 4 port models, nids 0x0e and 0x0f
are vendor reserved. This commit changes code so it'll consider the
additional pin complexes for models that have it, and avoid reserved
nids to be touched on 4 port models.
Signed-off-by: default avatarHerton Ronaldo Krzesinski <herton@mandriva.com.br>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 306f47bd
...@@ -481,10 +481,17 @@ static hda_nid_t stac92hd83xxx_pin_nids[14] = { ...@@ -481,10 +481,17 @@ static hda_nid_t stac92hd83xxx_pin_nids[14] = {
0x0f, 0x10, 0x11, 0x12, 0x13, 0x0f, 0x10, 0x11, 0x12, 0x13,
0x1d, 0x1e, 0x1f, 0x20 0x1d, 0x1e, 0x1f, 0x20
}; };
static hda_nid_t stac92hd71bxx_pin_nids[11] = {
#define STAC92HD71BXX_NUM_PINS 13
static hda_nid_t stac92hd71bxx_pin_nids_4port[STAC92HD71BXX_NUM_PINS] = {
0x0a, 0x0b, 0x0c, 0x0d, 0x00,
0x00, 0x14, 0x18, 0x19, 0x1e,
0x1f, 0x20, 0x27
};
static hda_nid_t stac92hd71bxx_pin_nids_6port[STAC92HD71BXX_NUM_PINS] = {
0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
0x0f, 0x14, 0x18, 0x19, 0x1e, 0x0f, 0x14, 0x18, 0x19, 0x1e,
0x1f, 0x1f, 0x20, 0x27
}; };
static hda_nid_t stac927x_pin_nids[14] = { static hda_nid_t stac927x_pin_nids[14] = {
...@@ -1745,28 +1752,32 @@ static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { ...@@ -1745,28 +1752,32 @@ static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
{} /* terminator */ {} /* terminator */
}; };
static unsigned int ref92hd71bxx_pin_configs[11] = { static unsigned int ref92hd71bxx_pin_configs[STAC92HD71BXX_NUM_PINS] = {
0x02214030, 0x02a19040, 0x01a19020, 0x01014010, 0x02214030, 0x02a19040, 0x01a19020, 0x01014010,
0x0181302e, 0x01014010, 0x01019020, 0x90a000f0, 0x0181302e, 0x01014010, 0x01019020, 0x90a000f0,
0x90a000f0, 0x01452050, 0x01452050, 0x90a000f0, 0x01452050, 0x01452050, 0x00000000,
0x00000000
}; };
static unsigned int dell_m4_1_pin_configs[11] = { static unsigned int dell_m4_1_pin_configs[STAC92HD71BXX_NUM_PINS] = {
0x0421101f, 0x04a11221, 0x40f000f0, 0x90170110, 0x0421101f, 0x04a11221, 0x40f000f0, 0x90170110,
0x23a1902e, 0x23014250, 0x40f000f0, 0x90a000f0, 0x23a1902e, 0x23014250, 0x40f000f0, 0x90a000f0,
0x40f000f0, 0x4f0000f0, 0x4f0000f0, 0x40f000f0, 0x4f0000f0, 0x4f0000f0, 0x00000000,
0x00000000
}; };
static unsigned int dell_m4_2_pin_configs[11] = { static unsigned int dell_m4_2_pin_configs[STAC92HD71BXX_NUM_PINS] = {
0x0421101f, 0x04a11221, 0x90a70330, 0x90170110, 0x0421101f, 0x04a11221, 0x90a70330, 0x90170110,
0x23a1902e, 0x23014250, 0x40f000f0, 0x40f000f0, 0x23a1902e, 0x23014250, 0x40f000f0, 0x40f000f0,
0x40f000f0, 0x044413b0, 0x044413b0, 0x40f000f0, 0x044413b0, 0x044413b0, 0x00000000,
0x00000000
}; };
static unsigned int dell_m4_3_pin_configs[11] = { static unsigned int dell_m4_3_pin_configs[STAC92HD71BXX_NUM_PINS] = {
0x0421101f, 0x04a11221, 0x90a70330, 0x90170110, 0x0421101f, 0x04a11221, 0x90a70330, 0x90170110,
0x40f000f0, 0x40f000f0, 0x40f000f0, 0x90a000f0, 0x40f000f0, 0x40f000f0, 0x40f000f0, 0x90a000f0,
0x40f000f0, 0x044413b0, 0x044413b0, 0x40f000f0, 0x044413b0, 0x044413b0, 0x00000000,
0x00000000
}; };
static unsigned int *stac92hd71bxx_brd_tbl[STAC_92HD71BXX_MODELS] = { static unsigned int *stac92hd71bxx_brd_tbl[STAC_92HD71BXX_MODELS] = {
...@@ -2311,7 +2322,9 @@ static int stac92xx_save_bios_config_regs(struct hda_codec *codec) ...@@ -2311,7 +2322,9 @@ static int stac92xx_save_bios_config_regs(struct hda_codec *codec)
for (i = 0; i < spec->num_pins; i++) { for (i = 0; i < spec->num_pins; i++) {
hda_nid_t nid = spec->pin_nids[i]; hda_nid_t nid = spec->pin_nids[i];
unsigned int pin_cfg; unsigned int pin_cfg;
if (!nid)
continue;
pin_cfg = snd_hda_codec_read(codec, nid, 0, pin_cfg = snd_hda_codec_read(codec, nid, 0,
AC_VERB_GET_CONFIG_DEFAULT, 0x00); AC_VERB_GET_CONFIG_DEFAULT, 0x00);
snd_printdd(KERN_INFO "hda_codec: pin nid %2.2x bios pin config %8.8x\n", snd_printdd(KERN_INFO "hda_codec: pin nid %2.2x bios pin config %8.8x\n",
...@@ -2354,8 +2367,9 @@ static void stac92xx_set_config_regs(struct hda_codec *codec) ...@@ -2354,8 +2367,9 @@ static void stac92xx_set_config_regs(struct hda_codec *codec)
return; return;
for (i = 0; i < spec->num_pins; i++) for (i = 0; i < spec->num_pins; i++)
stac92xx_set_config_reg(codec, spec->pin_nids[i], if (spec->pin_nids[i] && spec->pin_configs[i])
spec->pin_configs[i]); stac92xx_set_config_reg(codec, spec->pin_nids[i],
spec->pin_configs[i]);
} }
static int stac_save_pin_cfgs(struct hda_codec *codec, unsigned int *pins) static int stac_save_pin_cfgs(struct hda_codec *codec, unsigned int *pins)
...@@ -4952,9 +4966,21 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) ...@@ -4952,9 +4966,21 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
codec->spec = spec; codec->spec = spec;
codec->patch_ops = stac92xx_patch_ops; codec->patch_ops = stac92xx_patch_ops;
spec->num_pins = ARRAY_SIZE(stac92hd71bxx_pin_nids); spec->num_pins = STAC92HD71BXX_NUM_PINS;
switch (codec->vendor_id) {
case 0x111d76b6:
case 0x111d76b7:
spec->pin_nids = stac92hd71bxx_pin_nids_4port;
break;
case 0x111d7603:
case 0x111d7608:
/* On 92HD75Bx 0x27 isn't a pin nid */
spec->num_pins--;
/* fallthrough */
default:
spec->pin_nids = stac92hd71bxx_pin_nids_6port;
}
spec->num_pwrs = ARRAY_SIZE(stac92hd71bxx_pwr_nids); spec->num_pwrs = ARRAY_SIZE(stac92hd71bxx_pwr_nids);
spec->pin_nids = stac92hd71bxx_pin_nids;
memcpy(&spec->private_dimux, &stac92hd71bxx_dmux, memcpy(&spec->private_dimux, &stac92hd71bxx_dmux,
sizeof(stac92hd71bxx_dmux)); sizeof(stac92hd71bxx_dmux));
spec->board_config = snd_hda_check_board_config(codec, spec->board_config = snd_hda_check_board_config(codec,
...@@ -5018,7 +5044,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) ...@@ -5018,7 +5044,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
/* disable VSW */ /* disable VSW */
spec->init = &stac92hd71bxx_analog_core_init[HD_DISABLE_PORTF]; spec->init = &stac92hd71bxx_analog_core_init[HD_DISABLE_PORTF];
unmute_init++; unmute_init++;
stac_change_pin_config(codec, 0xf, 0x40f000f0); stac_change_pin_config(codec, 0x0f, 0x40f000f0);
stac_change_pin_config(codec, 0x19, 0x40f000f3);
break; break;
case 0x111d7603: /* 6 Port with Analog Mixer */ case 0x111d7603: /* 6 Port with Analog Mixer */
if ((codec->revision_id & 0xf) == 1) if ((codec->revision_id & 0xf) == 1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment