On Mon, Aug 10, 2020 at 6:53 AM Takashi Iwai tiwai@suse.de wrote:
Along with the recent unification of snd_soc_component_read*() functions, the behavior of snd_soc_component_read() was changed slightly; namely it returns the register read value directly, and even if an error happens, it returns zero (but it prints an error message). That said, the caller side can't know whether it's an error or not any longer.
Ideally this shouldn't matter much, but in practice this seems causing a regression, as John reported. And, grepping the tree revealed that there are still plenty of callers that do check the error code, so we'll need to deal with them in anyway.
As a quick band-aid over the regression, this patch changes the return value of snd_soc_component_read() again to the negative error code. It can't work, obviously, for 32bit register values, but it should be enough for the known regressions, so far.
Fixes: cf6e26c71bfd ("ASoC: soc-component: merge snd_soc_component_read() and snd_soc_component_read32()") Reported-by: John Stultz john.stultz@linaro.org Signed-off-by: Takashi Iwai tiwai@suse.de
sound/soc/soc-component.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c index f0b4f4bc44a4..5504b92946e3 100644 --- a/sound/soc/soc-component.c +++ b/sound/soc/soc-component.c @@ -406,7 +406,7 @@ static unsigned int soc_component_read_no_lock( ret = -EIO;
if (ret < 0)
soc_component_ret(component, ret);
return soc_component_ret(component, ret);
So oddly, using this instead of just "return ret;", doesn't seem to fully resolve the issue for me. It's baffling!
My only guess is at boot up I get a *ton* of error messages: q6routing remoteproc-adsp:glink-edge:apr:apr-service@8:routing: ASoC: error at soc_component_read_no_lock on remoteproc-adsp:glink-edge:apr:5 which I suspect is causing other failures due to timing issues.
Srini sent me a patch to provide dummy read functions for the routing and dai components that were missing it, and that seems to properly avoid the issue.
thanks -john