提交 b2c4f4d7 编写于 作者: M Matthew Ranostay 提交者: Jaroslav Kysela

ALSA: hda: 92xx S/PDIF In support

Add support for S/PDIF IN on reference boards quirks. Also disable the
IEC958 capture switch on boards with GPIO0 enabled.
Signed-off-by: NMatthew Ranostay <mranostay@embeddedalley.com>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
Signed-off-by: NJaroslav Kysela <perex@perex.cz>
上级 97c889a7
...@@ -1245,7 +1245,7 @@ static int stac92xx_build_controls(struct hda_codec *codec) ...@@ -1245,7 +1245,7 @@ static int stac92xx_build_controls(struct hda_codec *codec)
return err; return err;
spec->multiout.share_spdif = 1; spec->multiout.share_spdif = 1;
} }
if (spec->dig_in_nid) { if (spec->dig_in_nid && (!spec->gpio_dir & 0x01)) {
err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid); err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
if (err < 0) if (err < 0)
return err; return err;
...@@ -4079,10 +4079,6 @@ static int patch_stac92hd73xx(struct hda_codec *codec) ...@@ -4079,10 +4079,6 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
memcpy(&spec->private_dimux, &stac92hd73xx_dmux, memcpy(&spec->private_dimux, &stac92hd73xx_dmux,
sizeof(stac92hd73xx_dmux)); sizeof(stac92hd73xx_dmux));
/* GPIO0 High = Enable EAPD */
spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1;
spec->gpio_data = 0x01;
switch (spec->board_config) { switch (spec->board_config) {
case STAC_DELL_M6: case STAC_DELL_M6:
spec->init = dell_eq_core_init; spec->init = dell_eq_core_init;
...@@ -4120,6 +4116,11 @@ static int patch_stac92hd73xx(struct hda_codec *codec) ...@@ -4120,6 +4116,11 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
spec->num_dmics = STAC92HD73XX_NUM_DMICS; spec->num_dmics = STAC92HD73XX_NUM_DMICS;
spec->num_smuxes = ARRAY_SIZE(stac92hd73xx_smux_nids); spec->num_smuxes = ARRAY_SIZE(stac92hd73xx_smux_nids);
} }
if (spec->board_config > STAC_92HD73XX_REF) {
/* GPIO0 High = Enable EAPD */
spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1;
spec->gpio_data = 0x01;
}
spec->dinput_mux = &spec->private_dimux; spec->dinput_mux = &spec->private_dimux;
spec->num_pwrs = ARRAY_SIZE(stac92hd73xx_pwr_nids); spec->num_pwrs = ARRAY_SIZE(stac92hd73xx_pwr_nids);
...@@ -4356,10 +4357,12 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) ...@@ -4356,10 +4357,12 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
spec->aloopback_mask = 0x20; spec->aloopback_mask = 0x20;
spec->aloopback_shift = 0; spec->aloopback_shift = 0;
/* GPIO0 High = EAPD */ if (spec->board_config > STAC_92HD71BXX_REF) {
spec->gpio_mask = 0x01; /* GPIO0 = EAPD */
spec->gpio_dir = 0x01; spec->gpio_mask = 0x01;
spec->gpio_data = 0x01; spec->gpio_dir = 0x01;
spec->gpio_data = 0x01;
}
spec->powerdown_adcs = 1; spec->powerdown_adcs = 1;
spec->digbeep_nid = 0x26; spec->digbeep_nid = 0x26;
...@@ -4601,9 +4604,11 @@ static int patch_stac927x(struct hda_codec *codec) ...@@ -4601,9 +4604,11 @@ static int patch_stac927x(struct hda_codec *codec)
spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids); spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids);
break; break;
default: default:
/* GPIO0 High = Enable EAPD */ if (spec->board_config > STAC_D965_REF) {
spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1; /* GPIO0 High = Enable EAPD */
spec->gpio_data = 0x01; spec->eapd_mask = spec->gpio_mask = 0x01;
spec->gpio_dir = spec->gpio_data = 0x01;
}
spec->num_dmics = 0; spec->num_dmics = 0;
spec->init = stac927x_core_init; spec->init = stac927x_core_init;
...@@ -4717,6 +4722,9 @@ static int patch_stac9205(struct hda_codec *codec) ...@@ -4717,6 +4722,9 @@ static int patch_stac9205(struct hda_codec *codec)
*/ */
spec->gpio_data = 0x01; spec->gpio_data = 0x01;
break; break;
case STAC_9205_REF:
/* SPDIF-In enabled */
break;
default: default:
/* GPIO0 High = EAPD */ /* GPIO0 High = EAPD */
spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1; spec->eapd_mask = spec->gpio_mask = spec->gpio_dir = 0x1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册