[RFC TEST] ASoC: soc-dai: revert all changes to DAI startup/shutdown sequence
Hans de Goede
hdegoede at redhat.com
Wed Apr 15 23:26:27 CEST 2020
Hi,
On 4/15/20 5:04 AM, Pierre-Louis Bossart wrote:
> On Baytrail/Cherrytrail, the Atom/SST driver fails miserably:
>
> [ 9.741953] intel_sst_acpi 80860F28:00: FW Version 01.0c.00.01
> [ 9.832992] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
> [ 9.833019] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
> [ 9.833028] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
> [ 9.833033] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
> [ 9.833037] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed
> [ 9.853942] intel_sst_acpi 80860F28:00: FW sent error response 0x40034
> [ 9.853974] intel_sst_acpi 80860F28:00: FW alloc failed ret -4
> [ 9.853984] intel_sst_acpi 80860F28:00: sst_get_stream returned err -5
> [ 9.853990] sst-mfld-platform sst-mfld-platform: ASoC: DAI prepare error: -5
> [ 9.853994] Baytrail Audio Port: ASoC: prepare FE Baytrail Audio Port failed
>
> Commit b56be800f1292 ("ASoC: soc-pcm: call
> snd_soc_dai_startup()/shutdown() once") was the initial problematic
> commit.
>
> Commit 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
> was an attempt to fix things but it does not work on Baytrail,
> reverting all changes seems necessary for now.
>
> Fixes: 1ba616bd1a6d5e ("ASoC: soc-dai: fix DAI startup/shutdown sequence")
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
Thank you for figuring this out!
I've tested this on the 2 devices where I have seen the problem
(the only 2 devices on which I've tested 5.7-rc1 so far):
One Cherry Trail device with a RT5645 codec and another
Cherry Trail device with an ES8316 and I can confirm that this
fixes the issue on both devices:
Tested-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
>
> Sending as RFC since I don't have a good understanding of the
> root-cause and for others to confirm my findings. Tested on top of
> v5.7-rc1.
>
> include/sound/soc-dai.h | 1 -
> sound/soc/soc-dai.c | 11 ++---------
> 2 files changed, 2 insertions(+), 10 deletions(-)
>
> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
> index d4825b82c7a3..b33abe93b905 100644
> --- a/include/sound/soc-dai.h
> +++ b/include/sound/soc-dai.h
> @@ -351,7 +351,6 @@ struct snd_soc_dai {
>
> /* bit field */
> unsigned int probed:1;
> - unsigned int started[SNDRV_PCM_STREAM_LAST + 1];
> };
>
> static inline struct snd_soc_pcm_stream *
> diff --git a/sound/soc/soc-dai.c b/sound/soc/soc-dai.c
> index 8f3cad8db89a..31c41559034b 100644
> --- a/sound/soc/soc-dai.c
> +++ b/sound/soc/soc-dai.c
> @@ -295,24 +295,17 @@ int snd_soc_dai_startup(struct snd_soc_dai *dai,
> {
> int ret = 0;
>
> - if (!dai->started[substream->stream] &&
> - dai->driver->ops->startup)
> + if (dai->driver->ops->startup)
> ret = dai->driver->ops->startup(substream, dai);
>
> - if (ret == 0)
> - dai->started[substream->stream] = 1;
> -
> return ret;
> }
>
> void snd_soc_dai_shutdown(struct snd_soc_dai *dai,
> struct snd_pcm_substream *substream)
> {
> - if (dai->started[substream->stream] &&
> - dai->driver->ops->shutdown)
> + if (dai->driver->ops->shutdown)
> dai->driver->ops->shutdown(substream, dai);
> -
> - dai->started[substream->stream] = 0;
> }
>
> int snd_soc_dai_prepare(struct snd_soc_dai *dai,
>
More information about the Alsa-devel
mailing list