ASoC: SOF: IPC4: extend dai_data with node_id
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Tue, 2 Apr 2024 15:18:21 +0000 (10:18 -0500)
committerMark Brown <broonie@kernel.org>
Tue, 2 Apr 2024 16:14:51 +0000 (17:14 +0100)
The node_id value needs to be handled specifically for ALH.

Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://msgid.link/r/20240402151828.175002-11-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-dai.c
sound/soc/sof/intel/hda.c
sound/soc/sof/ipc4-topology.c
sound/soc/sof/sof-audio.h

index 5e3229c8fe1328884e7ff2f1029adeee6b5845d1..86c2325e594910a4d5fdd5e35eb4e78ab98fd6b9 100644 (file)
@@ -491,6 +491,7 @@ int sdw_hda_dai_hw_params(struct snd_pcm_substream *substream,
        int i;
 
        data.dai_index = (link_id << 8) | cpu_dai->id;
+       data.dai_node_id = intel_alh_id;
        ret = non_hda_dai_hw_params_data(substream, params, cpu_dai, &data, flags);
        if (ret < 0) {
                dev_err(cpu_dai->dev, "%s: non_hda_dai_hw_params failed %d\n", __func__, ret);
index 63f1cf3b915f4c998d12111808c648832800c838..ae1a38f20bdbb781ae4c56f8e9c5c83b0a3e9f82 100644 (file)
@@ -145,6 +145,7 @@ static int sdw_params_stream(struct device *dev,
 
        data.dai_index = (params_data->link_id << 8) | d->id;
        data.dai_data = params_data->alh_stream_id;
+       data.dai_node_id = data.dai_data;
 
        return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_PARAMS, &data);
 }
index cca5d43e5fd8bbf8950bb6230cab34b7feee6730..0368ef6d0807b4ed900d8105aa9ee7659c86eda3 100644 (file)
@@ -2825,7 +2825,11 @@ static int sof_ipc4_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *
        case SOF_DAI_INTEL_HDA:
                gtw_attr = ipc4_copier->gtw_attr;
                gtw_attr->lp_buffer_alloc = pipeline->lp_mode;
-               fallthrough;
+               if (flags & SOF_DAI_CONFIG_FLAGS_HW_PARAMS) {
+                       copier_data->gtw_cfg.node_id &= ~SOF_IPC4_NODE_INDEX_MASK;
+                       copier_data->gtw_cfg.node_id |= SOF_IPC4_NODE_INDEX(data->dai_data);
+               }
+               break;
        case SOF_DAI_INTEL_ALH:
                /*
                 * Do not clear the node ID when this op is invoked with
@@ -2834,7 +2838,7 @@ static int sof_ipc4_dai_config(struct snd_sof_dev *sdev, struct snd_sof_widget *
                 */
                if (flags & SOF_DAI_CONFIG_FLAGS_HW_PARAMS) {
                        copier_data->gtw_cfg.node_id &= ~SOF_IPC4_NODE_INDEX_MASK;
-                       copier_data->gtw_cfg.node_id |= SOF_IPC4_NODE_INDEX(data->dai_data);
+                       copier_data->gtw_cfg.node_id |= SOF_IPC4_NODE_INDEX(data->dai_node_id);
                }
                break;
        case SOF_DAI_INTEL_DMIC:
index 9ea2ac5adac79ee322f82060b908ce529cd9c43b..fd664d5586f0d579236ab6a56ce336fa50214dbb 100644 (file)
@@ -91,6 +91,7 @@ struct snd_sof_pcm;
 struct snd_sof_dai_config_data {
        int dai_index;
        int dai_data; /* contains DAI-specific information */
+       int dai_node_id; /* contains DAI-specific information for Gateway configuration */
 };
 
 /**