Commit 022b466f authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Avoid invalid formats and rates with shared SPDIF

Check whether formats and rates don't result in zero due to the
restriction of SPDIF sharing.  If any of them can be zero, disable
the SPDIF sharing mode instead.  Otherwise it will lead to a PCM
configuration error.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent aa202455
...@@ -3470,10 +3470,16 @@ int snd_hda_multi_out_analog_open(struct hda_codec *codec, ...@@ -3470,10 +3470,16 @@ int snd_hda_multi_out_analog_open(struct hda_codec *codec,
} }
mutex_lock(&codec->spdif_mutex); mutex_lock(&codec->spdif_mutex);
if (mout->share_spdif) { if (mout->share_spdif) {
if ((runtime->hw.rates & mout->spdif_rates) &&
(runtime->hw.formats & mout->spdif_formats)) {
runtime->hw.rates &= mout->spdif_rates; runtime->hw.rates &= mout->spdif_rates;
runtime->hw.formats &= mout->spdif_formats; runtime->hw.formats &= mout->spdif_formats;
if (mout->spdif_maxbps < hinfo->maxbps) if (mout->spdif_maxbps < hinfo->maxbps)
hinfo->maxbps = mout->spdif_maxbps; hinfo->maxbps = mout->spdif_maxbps;
} else {
mout->share_spdif = 0;
/* FIXME: need notify? */
}
} }
mutex_unlock(&codec->spdif_mutex); mutex_unlock(&codec->spdif_mutex);
} }
......
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