ASoC: rsnd: don't fallback to PIO mode when -EPROBE_DEFER
Current rsnd driver will fallback to PIO mode if it can't get DMA
handler. But, DMA might return -EPROBE_DEFER when probe timing.
This driver always fallback to PIO mode especially from
commit ac6bbf0cdf
("iommu: Remove IOMMU_OF_DECLARE") because
of this reason.
The DMA driver will be probed later, but sound driver might be
probed as PIO mode in such case. This patch fixup this issue.
Then, -EPROBE_DEFER is not error. Thus, let's don't indicate error
message in such case.
And it needs to call rsnd_adg_remove() individually if probe failed,
because it registers clk which should be unregister.
Maybe PIO fallback feature itself is not needed,
but let's keep it so far.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
69235ccf49
commit
6c92d5a274
@ -478,7 +478,7 @@ static int rsnd_status_update(u32 *status,
|
||||
(func_call && (mod)->ops->fn) ? #fn : ""); \
|
||||
if (func_call && (mod)->ops->fn) \
|
||||
tmp = (mod)->ops->fn(mod, io, param); \
|
||||
if (tmp) \
|
||||
if (tmp && (tmp != -EPROBE_DEFER)) \
|
||||
dev_err(dev, "%s[%d] : %s error %d\n", \
|
||||
rsnd_mod_name(mod), rsnd_mod_id(mod), \
|
||||
#fn, tmp); \
|
||||
@ -1561,6 +1561,14 @@ exit_snd_probe:
|
||||
rsnd_dai_call(remove, &rdai->capture, priv);
|
||||
}
|
||||
|
||||
/*
|
||||
* adg is very special mod which can't use rsnd_dai_call(remove),
|
||||
* and it registers ADG clock on probe.
|
||||
* It should be unregister if probe failed.
|
||||
* Mainly it is assuming -EPROBE_DEFER case
|
||||
*/
|
||||
rsnd_adg_remove(priv);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -241,6 +241,10 @@ static int rsnd_dmaen_attach(struct rsnd_dai_stream *io,
|
||||
/* try to get DMAEngine channel */
|
||||
chan = rsnd_dmaen_request_channel(io, mod_from, mod_to);
|
||||
if (IS_ERR_OR_NULL(chan)) {
|
||||
/* Let's follow when -EPROBE_DEFER case */
|
||||
if (PTR_ERR(chan) == -EPROBE_DEFER)
|
||||
return PTR_ERR(chan);
|
||||
|
||||
/*
|
||||
* DMA failed. try to PIO mode
|
||||
* see
|
||||
|
Loading…
Reference in New Issue
Block a user