Unverified Commit 37d65a26 authored by Mark Brown's avatar Mark Brown
Browse files

Merge series "ASoC: more fixes for dpcm checks" from Pierre-Louis Bossart...

Merge series "ASoC: more fixes for dpcm checks" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

This is hopefully the last set of fixes to avoid probe errors due to
stricter checks of DAI capabilities introduced late in the 5.8 cycle.

Daniel Baluta (1):
  ASoC: SOF: imx: add min/max channels for SAI/ESAI on i.MX8/i.MX8M

Pierre-Louis Bossart (2):
  ASoC: soc-dai: set dai_link dpcm_ flags with a helper
  ASoC: Intel: bdw-rt5677: fix non BE conversion

 include/sound/soc-dai.h              |  1 +
 sound/soc/generic/audio-graph-card.c |  4 +--
 sound/soc/generic/simple-card.c      |  4 +--
 sound/soc/intel/boards/bdw-rt5677.c  |  1 +
 sound/soc/soc-dai.c                  | 38 ++++++++++++++++++++++++++++
 sound/soc/sof/imx/imx8.c             |  8 ++++++
 sound/soc/sof/imx/imx8m.c            |  8 ++++++
 7 files changed, 60 insertions(+), 4 deletions(-)

base-commit: a5911ac5
--
2.25.1
parents 1e9c7ce7 4e7f8cac
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ void snd_soc_dai_resume(struct snd_soc_dai *dai);
int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
			     struct snd_soc_pcm_runtime *rtd, int num);
bool snd_soc_dai_stream_valid(struct snd_soc_dai *dai, int stream);
void snd_soc_dai_link_set_capabilities(struct snd_soc_dai_link *dai_link);
void snd_soc_dai_action(struct snd_soc_dai *dai,
			int stream, int action);
static inline void snd_soc_dai_activate(struct snd_soc_dai *dai,
+2 −2
Original line number Diff line number Diff line
@@ -317,8 +317,8 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv,
	if (ret < 0)
		goto out_put_node;

	dai_link->dpcm_playback		= 1;
	dai_link->dpcm_capture		= 1;
	snd_soc_dai_link_set_capabilities(dai_link);

	dai_link->ops			= &graph_ops;
	dai_link->init			= asoc_simple_dai_init;

+2 −2
Original line number Diff line number Diff line
@@ -231,8 +231,8 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv,
	if (ret < 0)
		goto out_put_node;

	dai_link->dpcm_playback		= 1;
	dai_link->dpcm_capture		= 1;
	snd_soc_dai_link_set_capabilities(dai_link);

	dai_link->ops			= &simple_ops;
	dai_link->init			= asoc_simple_dai_init;

+1 −0
Original line number Diff line number Diff line
@@ -354,6 +354,7 @@ static struct snd_soc_dai_link bdw_rt5677_dais[] = {
	{
		.name = "Codec DSP",
		.stream_name = "Wake on Voice",
		.capture_only = 1,
		.ops = &bdw_rt5677_dsp_ops,
		SND_SOC_DAILINK_REG(dsp),
	},
+38 −0
Original line number Diff line number Diff line
@@ -391,6 +391,44 @@ bool snd_soc_dai_stream_valid(struct snd_soc_dai *dai, int dir)
	return stream->channels_min;
}

/*
 * snd_soc_dai_link_set_capabilities() - set dai_link properties based on its DAIs
 */
void snd_soc_dai_link_set_capabilities(struct snd_soc_dai_link *dai_link)
{
	struct snd_soc_dai_link_component *cpu;
	struct snd_soc_dai_link_component *codec;
	struct snd_soc_dai *dai;
	bool supported[SNDRV_PCM_STREAM_LAST + 1];
	int direction;
	int i;

	for_each_pcm_streams(direction) {
		supported[direction] = true;

		for_each_link_cpus(dai_link, i, cpu) {
			dai = snd_soc_find_dai(cpu);
			if (!dai || !snd_soc_dai_stream_valid(dai, direction)) {
				supported[direction] = false;
				break;
			}
		}
		if (!supported[direction])
			continue;
		for_each_link_codecs(dai_link, i, codec) {
			dai = snd_soc_find_dai(codec);
			if (!dai || !snd_soc_dai_stream_valid(dai, direction)) {
				supported[direction] = false;
				break;
			}
		}
	}

	dai_link->dpcm_playback = supported[SNDRV_PCM_STREAM_PLAYBACK];
	dai_link->dpcm_capture  = supported[SNDRV_PCM_STREAM_CAPTURE];
}
EXPORT_SYMBOL_GPL(snd_soc_dai_link_set_capabilities);

void snd_soc_dai_action(struct snd_soc_dai *dai,
			int stream, int action)
{
Loading