|
@@ -2590,12 +2590,12 @@ static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
|
|
unsigned int stream_tag, unsigned int format)
|
|
unsigned int stream_tag, unsigned int format)
|
|
{
|
|
{
|
|
/* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
|
|
/* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
|
|
- if (codec->spdif_ctls & AC_DIG1_ENABLE)
|
|
|
|
|
|
+ if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
|
|
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
|
|
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
|
|
codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff);
|
|
codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff);
|
|
snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
|
|
snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
|
|
/* turn on again (if needed) */
|
|
/* turn on again (if needed) */
|
|
- if (codec->spdif_ctls & AC_DIG1_ENABLE)
|
|
|
|
|
|
+ if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
|
|
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
|
|
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1,
|
|
codec->spdif_ctls & 0xff);
|
|
codec->spdif_ctls & 0xff);
|
|
}
|
|
}
|