ASoC: apple: mca: Improve handling of unavailable DMA channels
authorMartin Povišer <povik+lin@cutebit.org>
Fri, 24 Feb 2023 15:33:02 +0000 (16:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:31 +0000 (13:55 +0100)
[ 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>
sound/soc/apple/mca.c

index aea08c7..64750db 100644 (file)
@@ -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;