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: a5911ac579
--
2.25.1
This commit is contained in:
commit
37d65a26c9
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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),
|
||||
},
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -375,6 +375,14 @@ static int imx8_ipc_pcm_params(struct snd_sof_dev *sdev,
|
|||
static struct snd_soc_dai_driver imx8_dai[] = {
|
||||
{
|
||||
.name = "esai-port",
|
||||
.playback = {
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
},
|
||||
.capture = {
|
||||
.channels_min = 1,
|
||||
.channels_max = 8,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -240,6 +240,14 @@ static int imx8m_ipc_pcm_params(struct snd_sof_dev *sdev,
|
|||
static struct snd_soc_dai_driver imx8m_dai[] = {
|
||||
{
|
||||
.name = "sai-port",
|
||||
.playback = {
|
||||
.channels_min = 1,
|
||||
.channels_max = 32,
|
||||
},
|
||||
.capture = {
|
||||
.channels_min = 1,
|
||||
.channels_max = 32,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue