Merge tag 'sound-6.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[sfrench/cifs-2.6.git] / sound / soc / sof / ipc.c
index c5aef5fc056b59f1da77d379f6bfd903abb46257..6ed3f9b6a0c4e60084d98ac022992d903c815bec 100644 (file)
@@ -155,12 +155,22 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
 
        init_waitqueue_head(&msg->waitq);
 
-       /*
-        * Use IPC3 ops as it is the only available version now. With the addition of new IPC
-        * versions, this will need to be modified to use the selected version at runtime.
-        */
-       ipc->ops = &ipc3_ops;
-       ops = ipc->ops;
+       switch (sdev->pdata->ipc_type) {
+#if defined(CONFIG_SND_SOC_SOF_IPC3)
+       case SOF_IPC:
+               ops = &ipc3_ops;
+               break;
+#endif
+#if defined(CONFIG_SND_SOC_SOF_INTEL_IPC4)
+       case SOF_INTEL_IPC4:
+               ops = &ipc4_ops;
+               break;
+#endif
+       default:
+               dev_err(sdev->dev, "Not supported IPC version: %d\n",
+                       sdev->pdata->ipc_type);
+               return NULL;
+       }
 
        /* check for mandatory ops */
        if (!ops->tx_msg || !ops->rx_msg || !ops->set_get_data || !ops->get_reply) {
@@ -190,6 +200,8 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
                return NULL;
        }
 
+       ipc->ops = ops;
+
        return ipc;
 }
 EXPORT_SYMBOL(snd_sof_ipc_init);