diff options
-rw-r--r-- | include/sound/sof.h | 6 | ||||
-rw-r--r-- | sound/soc/sof/nocodec.c | 18 | ||||
-rw-r--r-- | sound/soc/sof/pcm.c | 3 | ||||
-rw-r--r-- | sound/soc/sof/sof-audio.c | 2 | ||||
-rw-r--r-- | sound/soc/sof/sof-audio.h | 3 |
5 files changed, 23 insertions, 9 deletions
diff --git a/include/sound/sof.h b/include/sound/sof.h index 9aa055289dcc..646a655c3c6b 100644 --- a/include/sound/sof.h +++ b/include/sound/sof.h @@ -100,6 +100,8 @@ struct sof_dev_desc { const struct snd_sof_dsp_ops *ops; }; -int sof_nocodec_setup(struct device *dev, - const struct snd_sof_dsp_ops *ops); +int sof_nocodec_setup(struct device *dev, const struct snd_sof_dsp_ops *ops, + int (*pcm_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd, + struct snd_pcm_hw_params *params)); + #endif diff --git a/sound/soc/sof/nocodec.c b/sound/soc/sof/nocodec.c index 9e922df6a710..3b9bb2e83a86 100644 --- a/sound/soc/sof/nocodec.c +++ b/sound/soc/sof/nocodec.c @@ -10,17 +10,21 @@ #include <linux/module.h> #include <sound/sof.h> +#include "sof-audio.h" #include "sof-priv.h" static struct snd_soc_card sof_nocodec_card = { .name = "nocodec", /* the sof- prefix is added by the core */ + .topology_shortname = "sof-nocodec", .owner = THIS_MODULE }; static int sof_nocodec_bes_setup(struct device *dev, const struct snd_sof_dsp_ops *ops, struct snd_soc_dai_link *links, - int link_num, struct snd_soc_card *card) + int link_num, struct snd_soc_card *card, + int (*pcm_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd, + struct snd_pcm_hw_params *params)) { struct snd_soc_dai_link_component *dlc; int i; @@ -39,6 +43,8 @@ static int sof_nocodec_bes_setup(struct device *dev, if (!links[i].name) return -ENOMEM; + links[i].stream_name = links[i].name; + links[i].cpus = &dlc[0]; links[i].codecs = &dlc[1]; links[i].platforms = &dlc[2]; @@ -57,6 +63,8 @@ static int sof_nocodec_bes_setup(struct device *dev, links[i].dpcm_playback = 1; if (ops->drv[i].capture.channels_min) links[i].dpcm_capture = 1; + + links[i].be_hw_params_fixup = pcm_dai_link_fixup; } card->dai_link = links; @@ -65,8 +73,9 @@ static int sof_nocodec_bes_setup(struct device *dev, return 0; } -int sof_nocodec_setup(struct device *dev, - const struct snd_sof_dsp_ops *ops) +int sof_nocodec_setup(struct device *dev, const struct snd_sof_dsp_ops *ops, + int (*pcm_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd, + struct snd_pcm_hw_params *params)) { struct snd_soc_dai_link *links; @@ -77,7 +86,7 @@ int sof_nocodec_setup(struct device *dev, return -ENOMEM; return sof_nocodec_bes_setup(dev, ops, links, ops->num_drv, - &sof_nocodec_card); + &sof_nocodec_card, pcm_dai_link_fixup); } EXPORT_SYMBOL(sof_nocodec_setup); @@ -86,6 +95,7 @@ static int sof_nocodec_probe(struct platform_device *pdev) struct snd_soc_card *card = &sof_nocodec_card; card->dev = &pdev->dev; + card->topology_shortname_created = true; return devm_snd_soc_register_card(&pdev->dev, card); } diff --git a/sound/soc/sof/pcm.c b/sound/soc/sof/pcm.c index 37d12162e448..0dc39fbcd81d 100644 --- a/sound/soc/sof/pcm.c +++ b/sound/soc/sof/pcm.c @@ -620,8 +620,7 @@ capture: } /* fixup the BE DAI link to match any values from topology */ -static int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, - struct snd_pcm_hw_params *params) +int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_params *params) { struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c index 9a8ce25a8fc8..3277489fee5e 100644 --- a/sound/soc/sof/sof-audio.c +++ b/sound/soc/sof/sof-audio.c @@ -468,7 +468,7 @@ int sof_machine_check(struct snd_sof_dev *sdev) mach->drv_name = "sof-nocodec"; sof_pdata->tplg_filename = desc->nocodec_tplg_filename; - ret = sof_nocodec_setup(sdev->dev, desc->ops); + ret = sof_nocodec_setup(sdev->dev, desc->ops, sof_pcm_dai_link_fixup); if (ret < 0) return ret; diff --git a/sound/soc/sof/sof-audio.h b/sound/soc/sof/sof-audio.h index ddcfd46617f8..d00a918b6f39 100644 --- a/sound/soc/sof/sof-audio.h +++ b/sound/soc/sof/sof-audio.h @@ -214,6 +214,9 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, enum sof_ipc_ctrl_cmd ctrl_cmd, bool send); +/* DAI link fixup */ +int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_params *params); + /* PM */ int sof_restore_pipelines(struct device *dev); int sof_set_hw_params_upon_resume(struct device *dev); |