Commit 5180ebb8 authored by Mark Brown's avatar Mark Brown

Merge series "SOF IMX fixes" from Daniel Baluta <daniel.baluta@oss.nxp.com>

Daniel Baluta <daniel.baluta@nxp.com>:

From: Daniel Baluta <daniel.baluta@nxp.com>

This patchseries contains a couple of SOF IMX fixes
found during our first IMX SOF release.

Daniel Baluta (7):
  ASoC: SOF: define INFO_ flags in dsp_ops for imx8
  ASoC: SOF: imx: Use ARRAY_SIZE instead of hardcoded value
  ASoC: SOF: imx8: Fix ESAI DAI driver name for i.MX8/iMX8X
  ASoC: SOF: imx8m: Fix SAI DAI driver for i.MX8M
  ASoC: SOF: imx8: Add SAI dai driver for i.MX/i.MX8X
  ASoC: SOF: topology: Update SAI config bclk/fsync rate
  ASoC: SOF: pcm: Update rate/channels for SAI/ESAI DAIs

 sound/soc/sof/imx/imx8.c  | 24 +++++++++++++++++++++---
 sound/soc/sof/imx/imx8m.c |  4 ++--
 sound/soc/sof/pcm.c       |  8 ++++++++
 sound/soc/sof/topology.c  |  2 ++
 4 files changed, 33 insertions(+), 5 deletions(-)

--
2.17.1
parents 06f07e23 51b0243a
...@@ -374,7 +374,7 @@ static int imx8_ipc_pcm_params(struct snd_sof_dev *sdev, ...@@ -374,7 +374,7 @@ static int imx8_ipc_pcm_params(struct snd_sof_dev *sdev,
static struct snd_soc_dai_driver imx8_dai[] = { static struct snd_soc_dai_driver imx8_dai[] = {
{ {
.name = "esai-port", .name = "esai0",
.playback = { .playback = {
.channels_min = 1, .channels_min = 1,
.channels_max = 8, .channels_max = 8,
...@@ -384,6 +384,17 @@ static struct snd_soc_dai_driver imx8_dai[] = { ...@@ -384,6 +384,17 @@ static struct snd_soc_dai_driver imx8_dai[] = {
.channels_max = 8, .channels_max = 8,
}, },
}, },
{
.name = "sai1",
.playback = {
.channels_min = 1,
.channels_max = 32,
},
.capture = {
.channels_min = 1,
.channels_max = 32,
},
},
}; };
/* i.MX8 ops */ /* i.MX8 ops */
...@@ -415,7 +426,14 @@ struct snd_sof_dsp_ops sof_imx8_ops = { ...@@ -415,7 +426,14 @@ struct snd_sof_dsp_ops sof_imx8_ops = {
/* DAI drivers */ /* DAI drivers */
.drv = imx8_dai, .drv = imx8_dai,
.num_drv = 1, /* we have only 1 ESAI interface on i.MX8 */ .num_drv = ARRAY_SIZE(imx8_dai),
/* ALSA HW info flags */
.hw_info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_NO_PERIOD_WAKEUP,
}; };
EXPORT_SYMBOL(sof_imx8_ops); EXPORT_SYMBOL(sof_imx8_ops);
...@@ -448,7 +466,7 @@ struct snd_sof_dsp_ops sof_imx8x_ops = { ...@@ -448,7 +466,7 @@ struct snd_sof_dsp_ops sof_imx8x_ops = {
/* DAI drivers */ /* DAI drivers */
.drv = imx8_dai, .drv = imx8_dai,
.num_drv = 1, /* we have only 1 ESAI interface on i.MX8 */ .num_drv = ARRAY_SIZE(imx8_dai),
/* ALSA HW info flags */ /* ALSA HW info flags */
.hw_info = SNDRV_PCM_INFO_MMAP | .hw_info = SNDRV_PCM_INFO_MMAP |
......
...@@ -239,7 +239,7 @@ static int imx8m_ipc_pcm_params(struct snd_sof_dev *sdev, ...@@ -239,7 +239,7 @@ static int imx8m_ipc_pcm_params(struct snd_sof_dev *sdev,
static struct snd_soc_dai_driver imx8m_dai[] = { static struct snd_soc_dai_driver imx8m_dai[] = {
{ {
.name = "sai-port", .name = "sai3",
.playback = { .playback = {
.channels_min = 1, .channels_min = 1,
.channels_max = 32, .channels_max = 32,
...@@ -280,7 +280,7 @@ struct snd_sof_dsp_ops sof_imx8m_ops = { ...@@ -280,7 +280,7 @@ struct snd_sof_dsp_ops sof_imx8m_ops = {
/* DAI drivers */ /* DAI drivers */
.drv = imx8m_dai, .drv = imx8m_dai,
.num_drv = 1, /* we have only 1 SAI interface on i.MX8M */ .num_drv = ARRAY_SIZE(imx8m_dai),
.hw_info = SNDRV_PCM_INFO_MMAP | .hw_info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_MMAP_VALID |
......
...@@ -718,17 +718,25 @@ static int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, ...@@ -718,17 +718,25 @@ static int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
/* do nothing for ALH dai_link */ /* do nothing for ALH dai_link */
break; break;
case SOF_DAI_IMX_ESAI: case SOF_DAI_IMX_ESAI:
rate->min = dai->dai_config->esai.fsync_rate;
rate->max = dai->dai_config->esai.fsync_rate;
channels->min = dai->dai_config->esai.tdm_slots; channels->min = dai->dai_config->esai.tdm_slots;
channels->max = dai->dai_config->esai.tdm_slots; channels->max = dai->dai_config->esai.tdm_slots;
dev_dbg(component->dev,
"rate_min: %d rate_max: %d\n", rate->min, rate->max);
dev_dbg(component->dev, dev_dbg(component->dev,
"channels_min: %d channels_max: %d\n", "channels_min: %d channels_max: %d\n",
channels->min, channels->max); channels->min, channels->max);
break; break;
case SOF_DAI_IMX_SAI: case SOF_DAI_IMX_SAI:
rate->min = dai->dai_config->sai.fsync_rate;
rate->max = dai->dai_config->sai.fsync_rate;
channels->min = dai->dai_config->sai.tdm_slots; channels->min = dai->dai_config->sai.tdm_slots;
channels->max = dai->dai_config->sai.tdm_slots; channels->max = dai->dai_config->sai.tdm_slots;
dev_dbg(component->dev,
"rate_min: %d rate_max: %d\n", rate->min, rate->max);
dev_dbg(component->dev, dev_dbg(component->dev,
"channels_min: %d channels_max: %d\n", "channels_min: %d channels_max: %d\n",
channels->min, channels->max); channels->min, channels->max);
......
...@@ -2831,6 +2831,8 @@ static int sof_link_sai_load(struct snd_soc_component *scomp, int index, ...@@ -2831,6 +2831,8 @@ static int sof_link_sai_load(struct snd_soc_component *scomp, int index,
} }
config->sai.mclk_rate = le32_to_cpu(hw_config->mclk_rate); config->sai.mclk_rate = le32_to_cpu(hw_config->mclk_rate);
config->sai.bclk_rate = le32_to_cpu(hw_config->bclk_rate);
config->sai.fsync_rate = le32_to_cpu(hw_config->fsync_rate);
config->sai.mclk_direction = hw_config->mclk_direction; config->sai.mclk_direction = hw_config->mclk_direction;
config->sai.tdm_slots = le32_to_cpu(hw_config->tdm_slots); config->sai.tdm_slots = le32_to_cpu(hw_config->tdm_slots);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment