From 54679ec7f793cadaba432b2e364ea113348e77cb Mon Sep 17 00:00:00 2001 From: jc_gargma Date: Wed, 18 Dec 2019 17:30:54 -0800 Subject: Updated to 5.4.5 --- ...ALSA-hda-Fix-regression-by-strip-mask-fix.patch | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 0007-ALSA-hda-Fix-regression-by-strip-mask-fix.patch (limited to '0007-ALSA-hda-Fix-regression-by-strip-mask-fix.patch') diff --git a/0007-ALSA-hda-Fix-regression-by-strip-mask-fix.patch b/0007-ALSA-hda-Fix-regression-by-strip-mask-fix.patch new file mode 100644 index 0000000..07b11cc --- /dev/null +++ b/0007-ALSA-hda-Fix-regression-by-strip-mask-fix.patch @@ -0,0 +1,60 @@ +From 04fe3cc1f00622bf3ff356dca7f122768a14bdbc Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Sat, 14 Dec 2019 18:52:17 +0100 +Subject: ALSA: hda: Fix regression by strip mask fix + +The commit e38e486d66e2 ("ALSA: hda: Modify stream stripe mask only +when needed") tried to address the regression by the unconditional +application of the stripe mask, but this caused yet another +regression for the previously working devices. Namely, the patch +clears the azx_dev->stripe flag at snd_hdac_stream_clear(), but this +may be called multiple times before restarting the stream, so this +ended up with clearance of the flag for the whole time. + +This patch fixes the regression by moving the azx_dev->stripe flag +clearance at the counter-part, the close callback of HDMI codec +driver instead. + +Fixes: e38e486d66e2 ("ALSA: hda: Modify stream stripe mask only when needed") +BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205855 +BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=204477 +Cc: +Link: https://lore.kernel.org/r/20191214175217.31852-1-tiwai@suse.de +Signed-off-by: Takashi Iwai +--- + sound/hda/hdac_stream.c | 4 +--- + sound/pci/hda/patch_hdmi.c | 2 ++ + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/sound/hda/hdac_stream.c b/sound/hda/hdac_stream.c +index f9707fb05efe..682ed39f79b0 100644 +--- a/sound/hda/hdac_stream.c ++++ b/sound/hda/hdac_stream.c +@@ -120,10 +120,8 @@ void snd_hdac_stream_clear(struct hdac_stream *azx_dev) + snd_hdac_stream_updateb(azx_dev, SD_CTL, + SD_CTL_DMA_START | SD_INT_MASK, 0); + snd_hdac_stream_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */ +- if (azx_dev->stripe) { ++ if (azx_dev->stripe) + snd_hdac_stream_updateb(azx_dev, SD_CTL_3B, SD_CTL_STRIPE_MASK, 0); +- azx_dev->stripe = 0; +- } + azx_dev->running = false; + } + EXPORT_SYMBOL_GPL(snd_hdac_stream_clear); +diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c +index 4dafc864d765..488c17c9f375 100644 +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -1983,6 +1983,8 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, + per_cvt->assigned = 0; + hinfo->nid = 0; + ++ azx_stream(get_azx_dev(substream))->stripe = 0; ++ + mutex_lock(&spec->pcm_lock); + snd_hda_spdif_ctls_unassign(codec, pcm_idx); + clear_bit(pcm_idx, &spec->pcm_in_use); +-- +cgit v1.2.1-1-g437b + -- cgit v1.2.1