|
@@ -636,21 +636,28 @@ static struct hda_verb stac92hd71bxx_core_init[] = {
|
|
{ 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
{ 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+#define HD_DISABLE_PORTF 3
|
|
static struct hda_verb stac92hd71bxx_analog_core_init[] = {
|
|
static struct hda_verb stac92hd71bxx_analog_core_init[] = {
|
|
|
|
+ /* start of config #1 */
|
|
|
|
+
|
|
|
|
+ /* connect port 0f to audio mixer */
|
|
|
|
+ { 0x0f, AC_VERB_SET_CONNECT_SEL, 0x2},
|
|
|
|
+ { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, /* Speaker */
|
|
|
|
+ /* unmute right and left channels for node 0x0f */
|
|
|
|
+ { 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
|
|
+ /* start of config #2 */
|
|
|
|
+
|
|
/* set master volume and direct control */
|
|
/* set master volume and direct control */
|
|
{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
|
|
{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
|
|
/* connect headphone jack to dac1 */
|
|
/* connect headphone jack to dac1 */
|
|
{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
|
|
{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
|
|
- /* connect ports 0d and 0f to audio mixer */
|
|
|
|
|
|
+ /* connect port 0d to audio mixer */
|
|
{ 0x0d, AC_VERB_SET_CONNECT_SEL, 0x2},
|
|
{ 0x0d, AC_VERB_SET_CONNECT_SEL, 0x2},
|
|
- { 0x0f, AC_VERB_SET_CONNECT_SEL, 0x2},
|
|
|
|
- { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, /* Speaker */
|
|
|
|
/* unmute dac0 input in audio mixer */
|
|
/* unmute dac0 input in audio mixer */
|
|
{ 0x17, AC_VERB_SET_AMP_GAIN_MUTE, 0x701f},
|
|
{ 0x17, AC_VERB_SET_AMP_GAIN_MUTE, 0x701f},
|
|
- /* unmute right and left channels for nodes 0x0a, 0xd, 0x0f */
|
|
|
|
|
|
+ /* unmute right and left channels for nodes 0x0a, 0xd */
|
|
{ 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
{ 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
{ 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
{ 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
- { 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
|
|
|
{}
|
|
{}
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1317,13 +1324,13 @@ static unsigned int ref92hd71bxx_pin_configs[10] = {
|
|
0x90a000f0, 0x01452050,
|
|
0x90a000f0, 0x01452050,
|
|
};
|
|
};
|
|
|
|
|
|
-static unsigned int dell_m4_1_pin_configs[13] = {
|
|
|
|
|
|
+static unsigned int dell_m4_1_pin_configs[10] = {
|
|
0x0421101f, 0x04a11221, 0x40f000f0, 0x90170110,
|
|
0x0421101f, 0x04a11221, 0x40f000f0, 0x90170110,
|
|
0x23a1902e, 0x23014250, 0x40f000f0, 0x90a000f0,
|
|
0x23a1902e, 0x23014250, 0x40f000f0, 0x90a000f0,
|
|
0x40f000f0, 0x4f0000f0,
|
|
0x40f000f0, 0x4f0000f0,
|
|
};
|
|
};
|
|
|
|
|
|
-static unsigned int dell_m4_2_pin_configs[13] = {
|
|
|
|
|
|
+static unsigned int dell_m4_2_pin_configs[10] = {
|
|
0x0421101f, 0x04a11221, 0x90a70330, 0x90170110,
|
|
0x0421101f, 0x04a11221, 0x90a70330, 0x90170110,
|
|
0x23a1902e, 0x23014250, 0x40f000f0, 0x40f000f0,
|
|
0x23a1902e, 0x23014250, 0x40f000f0, 0x40f000f0,
|
|
0x40f000f0, 0x044413b0,
|
|
0x40f000f0, 0x044413b0,
|
|
@@ -3095,13 +3102,16 @@ static int stac92xx_init(struct hda_codec *codec)
|
|
0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
|
|
0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
|
|
int def_conf = snd_hda_codec_read(codec, spec->pwr_nids[i],
|
|
int def_conf = snd_hda_codec_read(codec, spec->pwr_nids[i],
|
|
0, AC_VERB_GET_CONFIG_DEFAULT, 0);
|
|
0, AC_VERB_GET_CONFIG_DEFAULT, 0);
|
|
|
|
+ def_conf = get_defcfg_connect(def_conf);
|
|
/* outputs are only ports capable of power management
|
|
/* outputs are only ports capable of power management
|
|
* any attempts on powering down a input port cause the
|
|
* any attempts on powering down a input port cause the
|
|
* referenced VREF to act quirky.
|
|
* referenced VREF to act quirky.
|
|
*/
|
|
*/
|
|
if (pinctl & AC_PINCTL_IN_EN)
|
|
if (pinctl & AC_PINCTL_IN_EN)
|
|
continue;
|
|
continue;
|
|
- if (get_defcfg_connect(def_conf) != AC_JACK_PORT_FIXED)
|
|
|
|
|
|
+ /* skip any ports that don't have jacks since presence
|
|
|
|
+ * detection is useless */
|
|
|
|
+ if (def_conf && def_conf != AC_JACK_PORT_FIXED)
|
|
continue;
|
|
continue;
|
|
enable_pin_detect(codec, spec->pwr_nids[i], event | i);
|
|
enable_pin_detect(codec, spec->pwr_nids[i], event | i);
|
|
codec->patch_ops.unsol_event(codec, (event | i) << 26);
|
|
codec->patch_ops.unsol_event(codec, (event | i) << 26);
|
|
@@ -3606,6 +3616,7 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
|
|
|
|
|
|
codec->spec = spec;
|
|
codec->spec = spec;
|
|
spec->num_pins = ARRAY_SIZE(stac92hd71bxx_pin_nids);
|
|
spec->num_pins = ARRAY_SIZE(stac92hd71bxx_pin_nids);
|
|
|
|
+ spec->num_pwrs = ARRAY_SIZE(stac92hd71bxx_pwr_nids);
|
|
spec->pin_nids = stac92hd71bxx_pin_nids;
|
|
spec->pin_nids = stac92hd71bxx_pin_nids;
|
|
spec->board_config = snd_hda_check_board_config(codec,
|
|
spec->board_config = snd_hda_check_board_config(codec,
|
|
STAC_92HD71BXX_MODELS,
|
|
STAC_92HD71BXX_MODELS,
|
|
@@ -3634,6 +3645,19 @@ again:
|
|
spec->mixer = stac92hd71bxx_mixer;
|
|
spec->mixer = stac92hd71bxx_mixer;
|
|
spec->init = stac92hd71bxx_core_init;
|
|
spec->init = stac92hd71bxx_core_init;
|
|
break;
|
|
break;
|
|
|
|
+ case 0x111d7608: /* 5 Port with Analog Mixer */
|
|
|
|
+ /* no output amps */
|
|
|
|
+ spec->num_pwrs = 0;
|
|
|
|
+ spec->mixer = stac92hd71bxx_analog_mixer;
|
|
|
|
+
|
|
|
|
+ /* disable VSW */
|
|
|
|
+ spec->init = &stac92hd71bxx_analog_core_init[HD_DISABLE_PORTF];
|
|
|
|
+ stac92xx_set_config_reg(codec, 0xf, 0x40f000f0);
|
|
|
|
+ break;
|
|
|
|
+ case 0x111d7603: /* 6 Port with Analog Mixer */
|
|
|
|
+ /* no output amps */
|
|
|
|
+ spec->num_pwrs = 0;
|
|
|
|
+ /* fallthru */
|
|
default:
|
|
default:
|
|
spec->mixer = stac92hd71bxx_analog_mixer;
|
|
spec->mixer = stac92hd71bxx_analog_mixer;
|
|
spec->init = stac92hd71bxx_analog_core_init;
|
|
spec->init = stac92hd71bxx_analog_core_init;
|
|
@@ -3652,15 +3676,13 @@ again:
|
|
spec->adc_nids = stac92hd71bxx_adc_nids;
|
|
spec->adc_nids = stac92hd71bxx_adc_nids;
|
|
spec->dmic_nids = stac92hd71bxx_dmic_nids;
|
|
spec->dmic_nids = stac92hd71bxx_dmic_nids;
|
|
spec->dmux_nids = stac92hd71bxx_dmux_nids;
|
|
spec->dmux_nids = stac92hd71bxx_dmux_nids;
|
|
|
|
+ spec->pwr_nids = stac92hd71bxx_pwr_nids;
|
|
|
|
|
|
spec->num_muxes = ARRAY_SIZE(stac92hd71bxx_mux_nids);
|
|
spec->num_muxes = ARRAY_SIZE(stac92hd71bxx_mux_nids);
|
|
spec->num_adcs = ARRAY_SIZE(stac92hd71bxx_adc_nids);
|
|
spec->num_adcs = ARRAY_SIZE(stac92hd71bxx_adc_nids);
|
|
spec->num_dmics = STAC92HD71BXX_NUM_DMICS;
|
|
spec->num_dmics = STAC92HD71BXX_NUM_DMICS;
|
|
spec->num_dmuxes = ARRAY_SIZE(stac92hd71bxx_dmux_nids);
|
|
spec->num_dmuxes = ARRAY_SIZE(stac92hd71bxx_dmux_nids);
|
|
|
|
|
|
- spec->num_pwrs = ARRAY_SIZE(stac92hd71bxx_pwr_nids);
|
|
|
|
- spec->pwr_nids = stac92hd71bxx_pwr_nids;
|
|
|
|
-
|
|
|
|
spec->multiout.num_dacs = 1;
|
|
spec->multiout.num_dacs = 1;
|
|
spec->multiout.hp_nid = 0x11;
|
|
spec->multiout.hp_nid = 0x11;
|
|
spec->multiout.dac_nids = stac92hd71bxx_dac_nids;
|
|
spec->multiout.dac_nids = stac92hd71bxx_dac_nids;
|
|
@@ -4298,10 +4320,11 @@ struct hda_codec_preset snd_hda_preset_sigmatel[] = {
|
|
{ .id = 0x838476a5, .name = "STAC9255D", .patch = patch_stac9205 },
|
|
{ .id = 0x838476a5, .name = "STAC9255D", .patch = patch_stac9205 },
|
|
{ .id = 0x838476a6, .name = "STAC9254", .patch = patch_stac9205 },
|
|
{ .id = 0x838476a6, .name = "STAC9254", .patch = patch_stac9205 },
|
|
{ .id = 0x838476a7, .name = "STAC9254D", .patch = patch_stac9205 },
|
|
{ .id = 0x838476a7, .name = "STAC9254D", .patch = patch_stac9205 },
|
|
|
|
+ { .id = 0x111d7603, .name = "92HD75B3X5", .patch = patch_stac92hd71bxx},
|
|
|
|
+ { .id = 0x111d7608, .name = "92HD75B2X5", .patch = patch_stac92hd71bxx},
|
|
{ .id = 0x111d7674, .name = "92HD73D1X5", .patch = patch_stac92hd73xx },
|
|
{ .id = 0x111d7674, .name = "92HD73D1X5", .patch = patch_stac92hd73xx },
|
|
{ .id = 0x111d7675, .name = "92HD73C1X5", .patch = patch_stac92hd73xx },
|
|
{ .id = 0x111d7675, .name = "92HD73C1X5", .patch = patch_stac92hd73xx },
|
|
{ .id = 0x111d7676, .name = "92HD73E1X5", .patch = patch_stac92hd73xx },
|
|
{ .id = 0x111d7676, .name = "92HD73E1X5", .patch = patch_stac92hd73xx },
|
|
- { .id = 0x111d7608, .name = "92HD71BXX", .patch = patch_stac92hd71bxx },
|
|
|
|
{ .id = 0x111d76b0, .name = "92HD71B8X", .patch = patch_stac92hd71bxx },
|
|
{ .id = 0x111d76b0, .name = "92HD71B8X", .patch = patch_stac92hd71bxx },
|
|
{ .id = 0x111d76b1, .name = "92HD71B8X", .patch = patch_stac92hd71bxx },
|
|
{ .id = 0x111d76b1, .name = "92HD71B8X", .patch = patch_stac92hd71bxx },
|
|
{ .id = 0x111d76b2, .name = "92HD71B7X", .patch = patch_stac92hd71bxx },
|
|
{ .id = 0x111d76b2, .name = "92HD71B7X", .patch = patch_stac92hd71bxx },
|