diff --git a/src/audio/aria/aria.c b/src/audio/aria/aria.c index 7599c6c41383..9d9c16c9c1d9 100644 --- a/src/audio/aria/aria.c +++ b/src/audio/aria/aria.c @@ -154,23 +154,11 @@ static void aria_set_stream_params(struct comp_buffer *buffer, struct processing_module *mod) { struct comp_buffer __sparse_cache *buffer_c; - enum sof_ipc_frame valid_fmt, frame_fmt; const struct ipc4_audio_format *audio_fmt = &mod->priv.cfg.base_cfg.audio_fmt; - struct aria_data *cd = module_get_private_data(mod); buffer_c = buffer_acquire(buffer); - audio_stream_fmt_conversion(audio_fmt->depth, - audio_fmt->valid_bit_depth, - &frame_fmt, &valid_fmt, - audio_fmt->s_type); - audio_stream_set_buffer_fmt(&buffer_c->stream, - audio_fmt->interleaving_style); - audio_stream_set_frm_fmt(&buffer_c->stream, frame_fmt); - audio_stream_set_valid_fmt(&buffer_c->stream, valid_fmt); - audio_stream_set_channels(&buffer_c->stream, cd->chan_cnt); - audio_stream_set_rate(&buffer_c->stream, audio_fmt->sampling_frequency); - + ipc4_update_buffer_format(buffer_c, audio_fmt); #ifdef ARIA_GENERIC audio_stream_init_alignment_constants(1, 1, &buffer_c->stream); #else diff --git a/src/audio/copier/copier.c b/src/audio/copier/copier.c index 90d09298a528..ae03226be8c1 100644 --- a/src/audio/copier/copier.c +++ b/src/audio/copier/copier.c @@ -101,8 +101,7 @@ static int copier_init(struct processing_module *mod) switch (node_id.f.dma_type) { case ipc4_hda_host_output_class: case ipc4_hda_host_input_class: - ret = copier_host_create(dev, cd, &dev->ipc_config, - copier, cd->direction, ipc_pipe->pipeline); + ret = copier_host_create(dev, cd, copier, ipc_pipe->pipeline); if (ret < 0) { comp_err(dev, "unable to create host"); goto error; @@ -115,8 +114,7 @@ static int copier_init(struct processing_module *mod) case ipc4_i2s_link_input_class: case ipc4_alh_link_output_class: case ipc4_alh_link_input_class: - ret = copier_dai_create(dev, cd, &dev->ipc_config, - copier, ipc_pipe->pipeline); + ret = copier_dai_create(dev, cd, copier, ipc_pipe->pipeline); if (ret < 0) { comp_err(dev, "unable to create dai"); goto error; @@ -125,8 +123,7 @@ static int copier_init(struct processing_module *mod) #if CONFIG_IPC4_GATEWAY case ipc4_ipc_output_class: case ipc4_ipc_input_class: - ret = copier_ipcgtw_create(dev, cd, &dev->ipc_config, - copier, ipc_pipe->pipeline); + ret = copier_ipcgtw_create(dev, cd, copier, ipc_pipe->pipeline); if (ret < 0) { comp_err(dev, "unable to create IPC gateway"); goto error; diff --git a/src/audio/copier/copier_dai.c b/src/audio/copier/copier_dai.c index dec0a7d46ad2..31b832b81d01 100644 --- a/src/audio/copier/copier_dai.c +++ b/src/audio/copier/copier_dai.c @@ -31,18 +31,18 @@ static uint32_t bitmask_to_nibble_channel_map(uint8_t bitmask) return nibble_map; } -static int copier_set_alh_multi_gtw_channel_map(struct comp_dev *parent_dev, +static int copier_set_alh_multi_gtw_channel_map(struct comp_dev *dev, const struct ipc4_copier_module_cfg *copier_cfg, int index) { - struct processing_module *mod = comp_get_drvdata(parent_dev); + struct processing_module *mod = comp_get_drvdata(dev); struct copier_data *cd = module_get_private_data(mod); const struct sof_alh_configuration_blob *alh_blob; uint8_t chan_bitmask; int channels; if (!copier_cfg->gtw_cfg.config_length) { - comp_err(parent_dev, "No ipc4_alh_multi_gtw_cfg found in blob!"); + comp_err(dev, "No ipc4_alh_multi_gtw_cfg found in blob!"); return -EINVAL; } @@ -54,7 +54,7 @@ static int copier_set_alh_multi_gtw_channel_map(struct comp_dev *parent_dev, channels = popcount(chan_bitmask); if (channels < 1 || channels > SOF_IPC_MAX_CHANNELS) { - comp_err(parent_dev, "Invalid channels mask: 0x%x", chan_bitmask); + comp_err(dev, "Invalid channels mask: 0x%x", chan_bitmask); return -EINVAL; } @@ -64,7 +64,7 @@ static int copier_set_alh_multi_gtw_channel_map(struct comp_dev *parent_dev, return 0; } -static int copier_dai_init(struct comp_dev *parent_dev, +static int copier_dai_init(struct comp_dev *dev, struct comp_ipc_config *config, const struct ipc4_copier_module_cfg *copier, struct pipeline *pipeline, @@ -72,7 +72,7 @@ static int copier_dai_init(struct comp_dev *parent_dev, enum ipc4_gateway_type type, int index, int dai_count) { - struct processing_module *mod = comp_get_drvdata(parent_dev); + struct processing_module *mod = comp_get_drvdata(dev); struct copier_data *cd = module_get_private_data(mod); struct dai_data *dd; int ret; @@ -86,7 +86,7 @@ static int copier_dai_init(struct comp_dev *parent_dev, &out_valid_fmt, copier->out_fmt.s_type); config->frame_fmt = out_frame_fmt; - pipeline->sink_comp = parent_dev; + pipeline->sink_comp = dev; cd->bsource_buffer = true; } else { enum sof_ipc_frame in_frame_fmt, in_valid_fmt; @@ -96,14 +96,12 @@ static int copier_dai_init(struct comp_dev *parent_dev, &in_frame_fmt, &in_valid_fmt, copier->base.audio_fmt.s_type); config->frame_fmt = in_frame_fmt; - pipeline->source_comp = parent_dev; + pipeline->source_comp = dev; } - parent_dev->ipc_config.frame_fmt = config->frame_fmt; - /* save the channel map and count for ALH multi-gateway */ if (type == ipc4_gtw_alh && is_multi_gateway(copier->gtw_cfg.node_id)) { - ret = copier_set_alh_multi_gtw_channel_map(parent_dev, copier, index); + ret = copier_set_alh_multi_gtw_channel_map(dev, copier, index); if (ret < 0) return ret; } @@ -112,14 +110,14 @@ static int copier_dai_init(struct comp_dev *parent_dev, if (!dd) return -ENOMEM; - ret = dai_common_new(dd, parent_dev, dai); + ret = dai_common_new(dd, dev, dai); if (ret < 0) goto free_dd; pipeline->sched_id = config->id; cd->dd[index] = dd; - ret = comp_dai_config(cd->dd[index], parent_dev, dai, copier); + ret = comp_dai_config(cd->dd[index], dev, dai, copier); if (ret < 0) goto e_zephyr_free; @@ -137,12 +135,12 @@ static int copier_dai_init(struct comp_dev *parent_dev, * ssp, dmic or alh. Sof dai component can support this case so copier * reuses dai component to support non-host gateway. */ -int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_dai_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier, struct pipeline *pipeline) { - struct processing_module *mod = comp_get_drvdata(parent_dev); + struct processing_module *mod = comp_get_drvdata(dev); + struct comp_ipc_config *config = &dev->ipc_config; int dai_index[IPC4_ALH_MAX_NUMBER_OF_GTW]; union ipc4_connector_node_id node_id; enum ipc4_gateway_type type; @@ -177,7 +175,7 @@ int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, ret = ipc4_find_dma_config(&dai, (uint8_t *)copier->gtw_cfg.config_data, copier->gtw_cfg.config_length * 4); if (ret != 0) { - comp_err(parent_dev, "No ssp dma_config found in blob!"); + comp_err(dev, "No ssp dma_config found in blob!"); return -EINVAL; } dai.out_fmt = &copier->out_fmt; @@ -214,14 +212,14 @@ int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, dai_count = alh_blob->alh_cfg.count; if (dai_count > IPC4_ALH_MAX_NUMBER_OF_GTW || dai_count < 0) { - comp_err(parent_dev, "Invalid dai_count: %d", dai_count); + comp_err(dev, "Invalid dai_count: %d", dai_count); return -EINVAL; } for (i = 0; i < dai_count; i++) dai_index[i] = IPC4_ALH_DAI_INDEX(alh_blob->alh_cfg.mapping[i].alh_id); } else { - comp_err(parent_dev, "No ipc4_alh_multi_gtw_cfg found in blob!"); + comp_err(dev, "No ipc4_alh_multi_gtw_cfg found in blob!"); return -EINVAL; } } else { @@ -237,7 +235,7 @@ int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, ret = ipc4_find_dma_config(&dai, (uint8_t *)copier->gtw_cfg.config_data, copier->gtw_cfg.config_length * 4); if (ret != 0) { - comp_err(parent_dev, "No dmic dma_config found in blob!"); + comp_err(dev, "No dmic dma_config found in blob!"); return -EINVAL; } dai.out_fmt = &copier->out_fmt; @@ -248,10 +246,10 @@ int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, for (i = 0; i < dai_count; i++) { dai.dai_index = dai_index[i]; - ret = copier_dai_init(parent_dev, config, copier, pipeline, &dai, type, i, + ret = copier_dai_init(dev, config, copier, pipeline, &dai, type, i, dai_count); if (ret) { - comp_err(parent_dev, "failed to create dai"); + comp_err(dev, "failed to create dai"); return ret; } } @@ -260,22 +258,22 @@ int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, get_converter_func(&copier->base.audio_fmt, &copier->out_fmt, type, IPC4_DIRECTION(dai.direction)); if (!cd->converter[IPC4_COPIER_GATEWAY_PIN]) { - comp_err(parent_dev, "failed to get converter type %d, dir %d", + comp_err(dev, "failed to get converter type %d, dir %d", type, dai.direction); return -EINVAL; } /* create multi_endpoint_buffer for ALH multi-gateway case */ if (dai_count > 1) { - ret = create_endpoint_buffer(parent_dev, cd, config, copier, type, true, 0); + ret = create_endpoint_buffer(dev, cd, copier, true); if (ret < 0) return ret; } if (cd->direction == SOF_IPC_STREAM_PLAYBACK) { - pipeline->sink_comp = parent_dev; + pipeline->sink_comp = dev; } else { - pipeline->source_comp = parent_dev; + pipeline->source_comp = dev; /* set max sink count for capture */ mod->max_sinks = IPC4_COPIER_MODULE_OUTPUT_PINS_COUNT; diff --git a/src/audio/copier/copier_generic.c b/src/audio/copier/copier_generic.c index 9ffbc8102f1e..e9ca748a8b2e 100644 --- a/src/audio/copier/copier_generic.c +++ b/src/audio/copier/copier_generic.c @@ -129,14 +129,12 @@ void copier_update_params(struct copier_data *cd, struct comp_dev *dev, } } -int create_endpoint_buffer(struct comp_dev *parent_dev, +int create_endpoint_buffer(struct comp_dev *dev, struct copier_data *cd, - struct comp_ipc_config *config, const struct ipc4_copier_module_cfg *copier_cfg, - enum ipc4_gateway_type type, - bool create_multi_endpoint_buffer, - int index) + bool create_multi_endpoint_buffer) { + struct comp_ipc_config *config = &dev->ipc_config; enum sof_ipc_frame in_frame_fmt, out_frame_fmt; enum sof_ipc_frame in_valid_fmt, out_valid_fmt; enum sof_ipc_frame valid_fmt; @@ -200,7 +198,7 @@ int create_endpoint_buffer(struct comp_dev *parent_dev, chan_map = copier_cfg->base.audio_fmt.ch_map; } - parent_dev->ipc_config.frame_fmt = config->frame_fmt; + dev->ipc_config.frame_fmt = config->frame_fmt; memset(&ipc_buf, 0, sizeof(ipc_buf)); ipc_buf.size = buf_size; diff --git a/src/audio/copier/copier_host.c b/src/audio/copier/copier_host.c index 3e9f40139e26..27044eae0f1b 100644 --- a/src/audio/copier/copier_host.c +++ b/src/audio/copier/copier_host.c @@ -43,14 +43,15 @@ static int init_pipeline_reg(struct comp_dev *dev) * Sof host component can support this case so copier reuses host * component to support host gateway. */ -int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_host_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier_cfg, - int dir, struct pipeline *pipeline) + struct pipeline *pipeline) { - struct processing_module *mod = comp_get_drvdata(parent_dev); + struct processing_module *mod = comp_get_drvdata(dev); + struct comp_ipc_config *config = &dev->ipc_config; struct ipc_config_host ipc_host; struct host_data *hd; + int dir = cd->direction; int ret; enum sof_ipc_frame in_frame_fmt, out_frame_fmt; enum sof_ipc_frame in_valid_fmt, out_valid_fmt; @@ -76,9 +77,9 @@ int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, if (!hd) return -ENOMEM; - ret = host_common_new(hd, parent_dev, &ipc_host, config->id); + ret = host_common_new(hd, dev, &ipc_host, config->id); if (ret < 0) { - comp_err(parent_dev, "copier: host new failed with exit"); + comp_err(dev, "copier: host new failed with exit"); goto e_data; } @@ -87,7 +88,7 @@ int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, &copier_cfg->out_fmt, ipc4_gtw_host, IPC4_DIRECTION(dir)); if (!cd->converter[IPC4_COPIER_GATEWAY_PIN]) { - comp_err(parent_dev, "failed to get converter for host, dir %d", dir); + comp_err(dev, "failed to get converter for host, dir %d", dir); ret = -EINVAL; goto e_conv; } @@ -97,8 +98,8 @@ int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, if (cd->direction == SOF_IPC_STREAM_PLAYBACK) { config->frame_fmt = in_frame_fmt; - pipeline->source_comp = parent_dev; - ret = init_pipeline_reg(parent_dev); + pipeline->source_comp = dev; + ret = init_pipeline_reg(dev); if (ret) goto e_conv; @@ -106,9 +107,8 @@ int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, mod->max_sinks = IPC4_COPIER_MODULE_OUTPUT_PINS_COUNT; } else { config->frame_fmt = out_frame_fmt; - pipeline->sink_comp = parent_dev; + pipeline->sink_comp = dev; } - parent_dev->ipc_config.frame_fmt = config->frame_fmt; return 0; diff --git a/src/audio/copier/copier_ipcgtw.c b/src/audio/copier/copier_ipcgtw.c index 890da553d45b..967467f098ad 100644 --- a/src/audio/copier/copier_ipcgtw.c +++ b/src/audio/copier/copier_ipcgtw.c @@ -223,10 +223,10 @@ void copier_ipcgtw_reset(struct comp_dev *dev) } } -int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_ipcgtw_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier, struct pipeline *pipeline) { + struct comp_ipc_config *config = &dev->ipc_config; struct ipcgtw_data *ipcgtw_data; const struct ipc4_copier_gateway_cfg *gtw_cfg; const struct ipc4_ipc_gateway_config_blob *blob; @@ -234,7 +234,7 @@ int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, gtw_cfg = &copier->gtw_cfg; if (!gtw_cfg->config_length) { - comp_err(parent_dev, "ipcgtw_create(): empty ipc4_gateway_config_data"); + comp_err(dev, "ipcgtw_create(): empty ipc4_gateway_config_data"); return -EINVAL; } @@ -246,7 +246,7 @@ int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, */ config->type = SOF_COMP_HOST; - ret = create_endpoint_buffer(parent_dev, cd, config, copier, ipc4_gtw_none, false, 0); + ret = create_endpoint_buffer(dev, cd, copier, false); if (ret < 0) return ret; @@ -257,7 +257,7 @@ int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, } ipcgtw_data->node_id = gtw_cfg->node_id; - ipcgtw_data->dev = parent_dev; + ipcgtw_data->dev = dev; blob = (const struct ipc4_ipc_gateway_config_blob *) ((const struct ipc4_gateway_config_data *)gtw_cfg->config_data)->config_blob; @@ -265,7 +265,7 @@ int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, /* Endpoint buffer is created in copier with size specified in copier config. That buffer * will be resized to size specified in IPC gateway blob later in ipcgtw_params(). */ - comp_dbg(parent_dev, "ipcgtw_create(): buffer_size: %u", blob->buffer_size); + comp_dbg(dev, "ipcgtw_create(): buffer_size: %u", blob->buffer_size); ipcgtw_data->buf_size = blob->buffer_size; cd->converter[IPC4_COPIER_GATEWAY_PIN] = @@ -273,24 +273,24 @@ int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, &copier->out_fmt, ipc4_gtw_host, IPC4_DIRECTION(cd->direction)); if (!cd->converter[IPC4_COPIER_GATEWAY_PIN]) { - comp_err(parent_dev, "failed to get converter for IPC gateway, dir %d", + comp_err(dev, "failed to get converter for IPC gateway, dir %d", cd->direction); ret = -EINVAL; goto e_ipcgtw; } if (cd->direction == SOF_IPC_STREAM_PLAYBACK) { - comp_buffer_connect(parent_dev, config->core, + comp_buffer_connect(dev, config->core, cd->endpoint_buffer[cd->endpoint_num], PPL_CONN_DIR_COMP_TO_BUFFER); cd->bsource_buffer = false; - pipeline->source_comp = parent_dev; + pipeline->source_comp = dev; } else { - comp_buffer_connect(parent_dev, config->core, + comp_buffer_connect(dev, config->core, cd->endpoint_buffer[cd->endpoint_num], PPL_CONN_DIR_BUFFER_TO_COMP); cd->bsource_buffer = true; - pipeline->sink_comp = parent_dev; + pipeline->sink_comp = dev; } list_item_append(&ipcgtw_data->item, &ipcgtw_list_head); diff --git a/src/audio/google/google_rtc_audio_processing.c b/src/audio/google/google_rtc_audio_processing.c index 5c54acd00f95..513f8dbb3334 100644 --- a/src/audio/google/google_rtc_audio_processing.c +++ b/src/audio/google/google_rtc_audio_processing.c @@ -109,22 +109,7 @@ static int google_rtc_audio_processing_params( sink = list_first_item(&dev->bsink_list, struct comp_buffer, source_list); sink_c = buffer_acquire(sink); - - audio_stream_fmt_conversion(out_fmt->depth, - out_fmt->valid_bit_depth, - &frame_fmt, &valid_fmt, - out_fmt->s_type); - - audio_stream_set_frm_fmt(&sink_c->stream, frame_fmt); - audio_stream_set_valid_fmt(&sink_c->stream, valid_fmt); - audio_stream_set_channels(&sink_c->stream, cd->config.output_fmt.channels_count); - audio_stream_set_rate(&sink_c->stream, cd->config.output_fmt.sampling_frequency); - - sink_c->buffer_fmt = out_fmt->interleaving_style; - params->frame_fmt = valid_fmt; - - sink_c->hw_params_configured = true; - + ipc4_update_buffer_format(sink_c, out_fmt); buffer_release(sink_c); } #endif diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index 3c877f5be57f..bfecf972e298 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -275,9 +275,8 @@ static void set_mux_params(struct processing_module *mod) struct comp_dev *dev = mod->dev; struct comp_buffer *sink, *source; struct comp_buffer __sparse_cache *sink_c, *source_c; - enum sof_ipc_frame frame_fmt, valid_fmt; struct list_item *source_list; - int i, j, valid_bit_depth; + int j, valid_bit_depth; const uint32_t byte_align = 1; const uint32_t frame_align_req = 1; @@ -304,32 +303,16 @@ static void set_mux_params(struct processing_module *mod) &sink_c->stream); if (!sink_c->hw_params_configured) { - struct ipc4_audio_format out_fmt; - - out_fmt = cd->md.output_format; - audio_stream_fmt_conversion(out_fmt.depth, - out_fmt.valid_bit_depth, - &frame_fmt, &valid_fmt, - out_fmt.s_type); - - audio_stream_set_frm_fmt(&sink_c->stream, frame_fmt); - audio_stream_set_valid_fmt(&sink_c->stream, valid_fmt); - audio_stream_set_channels(&sink_c->stream, out_fmt.channels_count); - audio_stream_set_rate(&sink_c->stream, out_fmt.sampling_frequency); - - audio_stream_set_buffer_fmt(&sink_c->stream, out_fmt.interleaving_style); + ipc4_update_buffer_format(sink_c, &cd->md.output_format); params->frame_fmt = audio_stream_get_frm_fmt(&sink_c->stream); - - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - sink_c->chmap[i] = (out_fmt.ch_map >> i * 4) & 0xf; - - sink_c->hw_params_configured = true; } buffer_release(sink_c); } /* update each source format */ if (!list_is_empty(&dev->bsource_list)) { + struct ipc4_audio_format *audio_fmt; + list_for_item(source_list, &dev->bsource_list) { source = container_of(source_list, struct comp_buffer, sink_list); @@ -339,47 +322,12 @@ static void set_mux_params(struct processing_module *mod) j = source_c->id; cd->config.streams[j].pipeline_id = source_c->pipeline_id; valid_bit_depth = cd->md.base_cfg.audio_fmt.valid_bit_depth; - if (j == BASE_CFG_QUEUED_ID) { - audio_stream_set_channels(&source_c->stream, - cd->md.base_cfg.audio_fmt.channels_count); - audio_stream_set_rate(&source_c->stream, - cd->md.base_cfg.audio_fmt.sampling_frequency); - audio_stream_fmt_conversion(cd->md.base_cfg.audio_fmt.depth, - valid_bit_depth, - &frame_fmt, &valid_fmt, - cd->md.base_cfg.audio_fmt.s_type); - - audio_stream_set_buffer_fmt - (&source_c->stream, - cd->md.base_cfg.audio_fmt.interleaving_style); - - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - source_c->chmap[i] = - (cd->md.base_cfg.audio_fmt.ch_map >> i * 4) & 0xf; - } else { - /* set parameters for reference input channels */ - audio_stream_set_channels(&source_c->stream, - cd->md.reference_format.channels_count); - audio_stream_set_rate(&source_c->stream, - cd->md.reference_format.sampling_frequency); - audio_stream_fmt_conversion(cd->md.reference_format.depth, - cd->md.reference_format.valid_bit_depth, - &frame_fmt, &valid_fmt, - cd->md.reference_format.s_type); - - audio_stream_set_buffer_fmt - (&source_c->stream, - cd->md.reference_format.interleaving_style); - - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - source_c->chmap[i] = - (cd->md.reference_format.ch_map >> i * 4) & 0xf; - } - - audio_stream_set_frm_fmt(&source_c->stream, frame_fmt); - audio_stream_set_valid_fmt(&source_c->stream, valid_fmt); + if (j == BASE_CFG_QUEUED_ID) + audio_fmt = &cd->md.base_cfg.audio_fmt; + else + audio_fmt = &cd->md.reference_format; - source_c->hw_params_configured = true; + ipc4_update_buffer_format(source_c, audio_fmt); buffer_release(source_c); } } diff --git a/src/audio/selector/selector.c b/src/audio/selector/selector.c index 5ac8dfca56f6..8a39db81b2ef 100644 --- a/src/audio/selector/selector.c +++ b/src/audio/selector/selector.c @@ -701,24 +701,10 @@ static void set_selector_params(struct processing_module *mod, struct comp_buffer *sink_buf = container_of(sink_list, struct comp_buffer, source_list); struct comp_buffer __sparse_cache *sink = buffer_acquire(sink_buf); - enum sof_ipc_frame frame_fmt, valid_fmt; - audio_stream_fmt_conversion(out_fmt->depth, - out_fmt->valid_bit_depth, - &frame_fmt, &valid_fmt, - out_fmt->s_type); - - audio_stream_set_frm_fmt(&sink->stream, frame_fmt); - audio_stream_set_valid_fmt(&sink->stream, valid_fmt); + ipc4_update_buffer_format(sink, out_fmt); audio_stream_set_channels(&sink->stream, params->channels); audio_stream_set_rate(&sink->stream, params->rate); - - audio_stream_set_buffer_fmt(&sink->stream, out_fmt->interleaving_style); - - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - sink->chmap[i] = (out_fmt->ch_map >> i * 4) & 0xf; - - sink->hw_params_configured = true; buffer_release(sink); } @@ -730,28 +716,9 @@ static void set_selector_params(struct processing_module *mod, */ src_buf = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list); source = buffer_acquire(src_buf); - if (!source->hw_params_configured) { - struct ipc4_audio_format *in_fmt; - enum sof_ipc_frame frame_fmt, valid_fmt; - - in_fmt = &mod->priv.cfg.base_cfg.audio_fmt; - audio_stream_fmt_conversion(in_fmt->depth, - in_fmt->valid_bit_depth, - &frame_fmt, &valid_fmt, - in_fmt->s_type); - audio_stream_set_frm_fmt(&source->stream, frame_fmt); - audio_stream_set_valid_fmt(&source->stream, valid_fmt); - audio_stream_set_channels(&source->stream, in_fmt->channels_count); - audio_stream_set_rate(&source->stream, in_fmt->sampling_frequency); - - audio_stream_set_buffer_fmt(&source->stream, in_fmt->interleaving_style); - - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - source->chmap[i] = (in_fmt->ch_map >> i * 4) & 0xf; - - source->hw_params_configured = true; - } + if (!source->hw_params_configured) + ipc4_update_buffer_format(source, &mod->priv.cfg.base_cfg.audio_fmt); buffer_release(source); } diff --git a/src/include/ipc4/copier.h b/src/include/ipc4/copier.h index d6965f1c3c22..568e9cbe8ce6 100644 --- a/src/include/ipc4/copier.h +++ b/src/include/ipc4/copier.h @@ -272,13 +272,10 @@ pcm_converter_func get_converter_func(const struct ipc4_audio_format *in_fmt, enum ipc4_direction_type dir); struct comp_ipc_config; -int create_endpoint_buffer(struct comp_dev *parent_dev, +int create_endpoint_buffer(struct comp_dev *dev, struct copier_data *cd, - struct comp_ipc_config *config, const struct ipc4_copier_module_cfg *copier_cfg, - enum ipc4_gateway_type type, - bool create_multi_endpoint_buffer, - int index); + bool create_multi_endpoint_buffer); enum sof_ipc_stream_direction get_gateway_direction(enum ipc4_connector_node_id_type node_id_type); diff --git a/src/include/sof/audio/dai_copier.h b/src/include/sof/audio/dai_copier.h index 839e3b61f871..6219b92fb5b7 100644 --- a/src/include/sof/audio/dai_copier.h +++ b/src/include/sof/audio/dai_copier.h @@ -57,8 +57,7 @@ int dai_zephyr_unbind(struct dai_data *dd, struct comp_dev *dev, void *data); struct ipc4_copier_module_cfg; struct copier_data; -int copier_dai_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_dai_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier, struct pipeline *pipeline); diff --git a/src/include/sof/audio/host_copier.h b/src/include/sof/audio/host_copier.h index 6abff822fe53..3f8ffbc1d387 100644 --- a/src/include/sof/audio/host_copier.h +++ b/src/include/sof/audio/host_copier.h @@ -109,10 +109,9 @@ int host_common_params(struct host_data *hd, struct comp_dev *dev, int host_common_copy(struct host_data *hd, struct comp_dev *dev, copy_callback_t cb); void host_common_update(struct host_data *hd, struct comp_dev *dev, uint32_t bytes); void host_common_one_shot(struct host_data *hd, uint32_t bytes); -int copier_host_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_host_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier_cfg, - int dir, struct pipeline *pipeline); + struct pipeline *pipeline); void copier_host_free(struct copier_data *cd); int copier_host_params(struct copier_data *cd, struct comp_dev *dev, struct sof_ipc_stream_params *params); diff --git a/src/include/sof/audio/ipcgtw_copier.h b/src/include/sof/audio/ipcgtw_copier.h index 84c0d7384211..6a52e25e61e8 100644 --- a/src/include/sof/audio/ipcgtw_copier.h +++ b/src/include/sof/audio/ipcgtw_copier.h @@ -100,8 +100,7 @@ int copier_ipcgtw_params(struct ipcgtw_data *ipcgtw_data, struct comp_dev *dev, void copier_ipcgtw_reset(struct comp_dev *dev); -int copier_ipcgtw_create(struct comp_dev *parent_dev, struct copier_data *cd, - struct comp_ipc_config *config, +int copier_ipcgtw_create(struct comp_dev *dev, struct copier_data *cd, const struct ipc4_copier_module_cfg *copier, struct pipeline *pipeline); void copier_ipcgtw_free(struct copier_data *cd); diff --git a/src/samples/audio/smart_amp_test_ipc4.c b/src/samples/audio/smart_amp_test_ipc4.c index 658c175c3fb4..a256de9c3d28 100644 --- a/src/samples/audio/smart_amp_test_ipc4.c +++ b/src/samples/audio/smart_amp_test_ipc4.c @@ -88,25 +88,13 @@ static int smart_amp_init(struct processing_module *mod) static void smart_amp_set_params(struct processing_module *mod) { - const struct ipc4_audio_format *audio_fmt = &mod->priv.cfg.base_cfg.audio_fmt; struct sof_ipc_stream_params *params = mod->stream_params; struct comp_dev *dev = mod->dev; struct smart_amp_data *sad = module_get_private_data(mod); struct comp_buffer *sink; struct comp_buffer __sparse_cache *sink_c; - enum sof_ipc_frame frame_fmt, valid_fmt; - int i; - - memset(params, 0, sizeof(*params)); - params->channels = audio_fmt->channels_count; - params->rate = audio_fmt->sampling_frequency; - params->sample_container_bytes = audio_fmt->depth / 8; - params->sample_valid_bytes = audio_fmt->valid_bit_depth / 8; - params->buffer_fmt = audio_fmt->interleaving_style; - params->buffer.size = mod->priv.cfg.base_cfg.ibs; - for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) - params->chmap[i] = (audio_fmt->ch_map >> i * 4) & 0xf; + ipc4_base_module_cfg_to_stream_params(&mod->priv.cfg.base_cfg, params); /* update sink format */ if (!list_is_empty(&dev->bsink_list)) { @@ -116,18 +104,8 @@ static void smart_amp_set_params(struct processing_module *mod) sink = list_first_item(&dev->bsink_list, struct comp_buffer, source_list); sink_c = buffer_acquire(sink); - audio_stream_fmt_conversion(out_fmt.depth, - out_fmt.valid_bit_depth, - &frame_fmt, &valid_fmt, - out_fmt.s_type); - - audio_stream_set_frm_fmt(&sink_c->stream, frame_fmt); - audio_stream_set_valid_fmt(&sink_c->stream, valid_fmt); - audio_stream_set_channels(&sink_c->stream, out_fmt.channels_count); - audio_stream_set_rate(&sink_c->stream, out_fmt.sampling_frequency); - audio_stream_set_buffer_fmt(&sink_c->stream, out_fmt.interleaving_style); + ipc4_update_buffer_format(sink_c, &out_fmt); params->frame_fmt = audio_stream_get_frm_fmt(&sink_c->stream); - sink_c->hw_params_configured = true; buffer_release(sink_c); } }