summaryrefslogtreecommitdiff
path: root/sound/soc/sof/ipc.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>2022-04-05 20:27:01 +0300
committerMark Brown <broonie@kernel.org>2022-04-11 21:17:54 +0300
commit785b3fbe61c6c1c413b696e335e9f288aaec4364 (patch)
tree27ad51f4daaef029e078f8d992ea36ce99aa4bce /sound/soc/sof/ipc.c
parent74ad8ed6512186134527fc82440f62007a98ff48 (diff)
downloadlinux-785b3fbe61c6c1c413b696e335e9f288aaec4364.tar.xz
ASoC: SOF: ipc: Separate the ops checks by functions/topics
Separate the mandatory ops checks by topics (pcm and topology for now) to be able to provide intuitive feedback on the possible missing ops and to make it easier to add new mandatory ops checks in the future. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20220405172708.122168-9-ranjani.sridharan@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof/ipc.c')
-rw-r--r--sound/soc/sof/ipc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
index a78b74514438..4966a2a41704 100644
--- a/sound/soc/sof/ipc.c
+++ b/sound/soc/sof/ipc.c
@@ -1043,6 +1043,7 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
{
struct snd_sof_ipc *ipc;
struct snd_sof_ipc_msg *msg;
+ const struct sof_ipc_ops *ops;
ipc = devm_kzalloc(sdev->dev, sizeof(*ipc), GFP_KERNEL);
if (!ipc)
@@ -1062,11 +1063,16 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
* versions, this will need to be modified to use the selected version at runtime.
*/
ipc->ops = &ipc3_ops;
+ ops = ipc->ops;
/* check for mandatory ops */
- if (!ipc->ops->pcm || !ipc->ops->tplg || !ipc->ops->tplg->widget ||
- !ipc->ops->tplg->control) {
- dev_err(sdev->dev, "Invalid IPC ops\n");
+ if (!ops->pcm) {
+ dev_err(sdev->dev, "Missing IPC PCM ops\n");
+ return NULL;
+ }
+
+ if (!ops->tplg || !ops->tplg->widget || !ops->tplg->control) {
+ dev_err(sdev->dev, "Missing IPC topology ops\n");
return NULL;
}