On Mon, Aug 10, 2020 at 6:53 AM Takashi Iwai <tiwai@xxxxxxx> 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@xxxxxxxxxx> > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > --- > 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