summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorMartin Povišer <povik+lin@cutebit.org>2023-02-24 18:33:02 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-03-11 15:55:31 +0300
commit124fee6c62b21c8fa6216f930291a9d5f2e210b9 (patch)
treeb4ddccd0be93b9f2321e39fbe1bd47eed7815928 /sound
parent0c398c1c19ff562570f0c789aa8d7c6283078fc4 (diff)
downloadlinux-124fee6c62b21c8fa6216f930291a9d5f2e210b9.tar.xz
ASoC: apple: mca: Improve handling of unavailable DMA channels
[ Upstream commit fb1847cc460c127b12720119eae5f438ffc62e85 ] When we fail to obtain a DMA channel, don't return a blanket -EINVAL, instead return the original error code if there's one. This makes deferring work as it should. Also don't print an error message for -EPROBE_DEFER. Fixes: 4ec8179c212f ("ASoC: apple: mca: Postpone requesting of DMA channels") Signed-off-by: Martin Povišer <povik+lin@cutebit.org> Link: https://lore.kernel.org/r/20230224153302.45365-3-povik+lin@cutebit.org Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/apple/mca.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c
index aea08c7b2ee8..64750db9b963 100644
--- a/sound/soc/apple/mca.c
+++ b/sound/soc/apple/mca.c
@@ -950,10 +950,17 @@ static int mca_pcm_new(struct snd_soc_component *component,
chan = mca_request_dma_channel(cl, i);
if (IS_ERR_OR_NULL(chan)) {
+ mca_pcm_free(component, rtd->pcm);
+
+ if (chan && PTR_ERR(chan) == -EPROBE_DEFER)
+ return PTR_ERR(chan);
+
dev_err(component->dev, "unable to obtain DMA channel (stream %d cluster %d): %pe\n",
i, cl->no, chan);
- mca_pcm_free(component, rtd->pcm);
- return -EINVAL;
+
+ if (!chan)
+ return -EINVAL;
+ return PTR_ERR(chan);
}
cl->dma_chans[i] = chan;