[PATCH] ASoC: Make soc_component_read() returning an error code again

John Stultz john.stultz at linaro.org
Tue Aug 11 06:45:14 CEST 2020


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


More information about the Alsa-devel mailing list