Lines Matching refs:config

396 static void sof_dbg_comp_config(struct snd_soc_component *scomp, struct sof_ipc_comp_config *config)
398 dev_dbg(scomp->dev, " config: periods snk %d src %d fmt %d\n",
399 config->periods_sink, config->periods_source,
400 config->frame_fmt);
417 host->config.hdr.size = sizeof(host->config);
431 ret = sof_update_ipc_object(scomp, &host->config, SOF_COMP_TOKENS, swidget->tuples,
432 swidget->num_tuples, sizeof(host->config), 1);
437 sof_dbg_comp_config(scomp, &host->config);
467 tone->config.hdr.size = sizeof(tone->config);
470 ret = sof_update_ipc_object(scomp, &tone->config, SOF_COMP_TOKENS, swidget->tuples,
471 swidget->num_tuples, sizeof(tone->config), 1);
480 sof_dbg_comp_config(scomp, &tone->config);
500 mixer->config.hdr.size = sizeof(mixer->config);
503 ret = sof_update_ipc_object(scomp, &mixer->config, SOF_COMP_TOKENS,
505 sizeof(mixer->config), 1);
514 sof_dbg_comp_config(scomp, &mixer->config);
636 src->config.hdr.size = sizeof(src->config);
645 ret = sof_update_ipc_object(scomp, &src->config, SOF_COMP_TOKENS,
646 swidget->tuples, swidget->num_tuples, sizeof(src->config), 1);
652 sof_dbg_comp_config(scomp, &src->config);
677 asrc->config.hdr.size = sizeof(asrc->config);
686 ret = sof_update_ipc_object(scomp, &asrc->config, SOF_COMP_TOKENS,
687 swidget->tuples, swidget->num_tuples, sizeof(asrc->config), 1);
695 sof_dbg_comp_config(scomp, &asrc->config);
723 mux->config.hdr.size = sizeof(mux->config);
726 ret = sof_update_ipc_object(scomp, &mux->config, SOF_COMP_TOKENS,
727 swidget->tuples, swidget->num_tuples, sizeof(mux->config), 1);
735 sof_dbg_comp_config(scomp, &mux->config);
762 volume->config.hdr.size = sizeof(volume->config);
771 ret = sof_update_ipc_object(scomp, &volume->config, SOF_COMP_TOKENS,
773 sizeof(volume->config), 1);
778 sof_dbg_comp_config(scomp, &volume->config);
908 /* we are exceeding max ipc size, config needs to be sent separately */
924 process->config.hdr.size = sizeof(process->config);
927 ret = sof_update_ipc_object(scomp, &process->config, SOF_COMP_TOKENS,
929 sizeof(process->config), 1);
934 sof_dbg_comp_config(scomp, &process->config);
985 struct sof_ipc_comp_process config;
988 memset(&config, 0, sizeof(config));
989 config.comp.core = swidget->core;
992 ret = sof_update_ipc_object(scomp, &config, SOF_PROCESS_TOKENS, swidget->tuples,
993 swidget->num_tuples, sizeof(config), 1);
998 return sof_process_load(scomp, swidget, find_process_comp_type(config.type));
1002 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1005 u32 size = sizeof(*config);
1009 memset(&config->hda, 0, sizeof(config->hda));
1010 config->hdr.size = size;
1013 ret = sof_update_ipc_object(scomp, &config->hda, SOF_HDA_TOKENS, slink->tuples,
1018 dev_dbg(scomp->dev, "HDA config rate %d channels %d\n",
1019 config->hda.rate, config->hda.channels);
1021 config->hda.link_dma_ch = DMA_CHAN_INVALID;
1025 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1033 struct sof_ipc_dai_config *config)
1036 config->format &= ~SOF_DAI_FMT_CLOCK_PROVIDER_MASK;
1040 config->format |= SOF_DAI_FMT_CBP_CFP;
1042 config->format |= SOF_DAI_FMT_CBP_CFC;
1046 config->format |= SOF_DAI_FMT_CBC_CFP;
1048 config->format |= SOF_DAI_FMT_CBC_CFC;
1052 config->format &= ~SOF_DAI_FMT_INV_MASK;
1055 config->format |= SOF_DAI_FMT_IB_IF;
1057 config->format |= SOF_DAI_FMT_IB_NF;
1060 config->format |= SOF_DAI_FMT_NB_IF;
1062 config->format |= SOF_DAI_FMT_NB_NF;
1067 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1071 u32 size = sizeof(*config);
1075 sof_dai_set_format(hw_config, config);
1078 memset(&config->sai, 0, sizeof(config->sai));
1079 config->hdr.size = size;
1082 ret = sof_update_ipc_object(scomp, &config->sai, SOF_SAI_TOKENS, slink->tuples,
1087 config->sai.mclk_rate = le32_to_cpu(hw_config->mclk_rate);
1088 config->sai.bclk_rate = le32_to_cpu(hw_config->bclk_rate);
1089 config->sai.fsync_rate = le32_to_cpu(hw_config->fsync_rate);
1090 config->sai.mclk_direction = hw_config->mclk_direction;
1092 config->sai.tdm_slots = le32_to_cpu(hw_config->tdm_slots);
1093 config->sai.tdm_slot_width = le32_to_cpu(hw_config->tdm_slot_width);
1094 config->sai.rx_slots = le32_to_cpu(hw_config->rx_slots);
1095 config->sai.tx_slots = le32_to_cpu(hw_config->tx_slots);
1098 "tplg: config SAI%d fmt 0x%x mclk %d width %d slots %d mclk id %d\n",
1099 config->dai_index, config->format,
1100 config->sai.mclk_rate, config->sai.tdm_slot_width,
1101 config->sai.tdm_slots, config->sai.mclk_id);
1103 if (config->sai.tdm_slots < 1 || config->sai.tdm_slots > 8) {
1104 dev_err(scomp->dev, "Invalid channel count for SAI%d\n", config->dai_index);
1110 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1118 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1122 u32 size = sizeof(*config);
1126 sof_dai_set_format(hw_config, config);
1129 memset(&config->esai, 0, sizeof(config->esai));
1130 config->hdr.size = size;
1133 ret = sof_update_ipc_object(scomp, &config->esai, SOF_ESAI_TOKENS, slink->tuples,
1138 config->esai.mclk_rate = le32_to_cpu(hw_config->mclk_rate);
1139 config->esai.bclk_rate = le32_to_cpu(hw_config->bclk_rate);
1140 config->esai.fsync_rate = le32_to_cpu(hw_config->fsync_rate);
1141 config->esai.mclk_direction = hw_config->mclk_direction;
1142 config->esai.tdm_slots = le32_to_cpu(hw_config->tdm_slots);
1143 config->esai.tdm_slot_width = le32_to_cpu(hw_config->tdm_slot_width);
1144 config->esai.rx_slots = le32_to_cpu(hw_config->rx_slots);
1145 config->esai.tx_slots = le32_to_cpu(hw_config->tx_slots);
1148 "tplg: config ESAI%d fmt 0x%x mclk %d width %d slots %d mclk id %d\n",
1149 config->dai_index, config->format,
1150 config->esai.mclk_rate, config->esai.tdm_slot_width,
1151 config->esai.tdm_slots, config->esai.mclk_id);
1153 if (config->esai.tdm_slots < 1 || config->esai.tdm_slots > 8) {
1154 dev_err(scomp->dev, "Invalid channel count for ESAI%d\n", config->dai_index);
1160 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1168 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1172 u32 size = sizeof(*config);
1176 sof_dai_set_format(hw_config, config);
1178 config->hdr.size = size;
1181 ret = sof_update_ipc_object(scomp, &config->micfil, SOF_MICFIL_TOKENS, slink->tuples,
1186 dev_info(scomp->dev, "MICFIL PDM config dai_index %d channel %d rate %d\n",
1187 config->dai_index, config->micfil.pdm_ch, config->micfil.pdm_rate);
1191 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1199 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1203 u32 size = sizeof(*config);
1207 sof_dai_set_format(hw_config, config);
1209 config->hdr.size = size;
1212 ret = sof_update_ipc_object(scomp, &config->acpdmic, SOF_ACPDMIC_TOKENS, slink->tuples,
1217 dev_info(scomp->dev, "ACP_DMIC config ACP%d channel %d rate %d\n",
1218 config->dai_index, config->acpdmic.pdm_ch,
1219 config->acpdmic.pdm_rate);
1223 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1231 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1235 u32 size = sizeof(*config);
1239 sof_dai_set_format(hw_config, config);
1242 memset(&config->acpbt, 0, sizeof(config->acpbt));
1243 config->hdr.size = size;
1245 ret = sof_update_ipc_object(scomp, &config->acpbt, SOF_ACPI2S_TOKENS, slink->tuples,
1250 dev_info(scomp->dev, "ACP_BT config ACP%d channel %d rate %d tdm_mode %d\n",
1251 config->dai_index, config->acpbt.tdm_slots,
1252 config->acpbt.fsync_rate, config->acpbt.tdm_mode);
1256 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1264 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1268 u32 size = sizeof(*config);
1272 sof_dai_set_format(hw_config, config);
1275 memset(&config->acpsp, 0, sizeof(config->acpsp));
1276 config->hdr.size = size;
1278 ret = sof_update_ipc_object(scomp, &config->acpsp, SOF_ACPI2S_TOKENS, slink->tuples,
1284 dev_info(scomp->dev, "ACP_SP config ACP%d channel %d rate %d tdm_mode %d\n",
1285 config->dai_index, config->acpsp.tdm_slots,
1286 config->acpsp.fsync_rate, config->acpsp.tdm_mode);
1290 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1298 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1302 u32 size = sizeof(*config);
1306 sof_dai_set_format(hw_config, config);
1309 memset(&config->acphs, 0, sizeof(config->acphs));
1310 config->hdr.size = size;
1312 ret = sof_update_ipc_object(scomp, &config->acphs, SOF_ACPI2S_TOKENS, slink->tuples,
1317 dev_info(scomp->dev, "ACP_HS config ACP%d channel %d rate %d tdm_mode %d\n",
1318 config->dai_index, config->acphs.tdm_slots,
1319 config->acphs.fsync_rate, config->acphs.tdm_mode);
1323 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1331 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1334 u32 size = sizeof(*config);
1338 ret = sof_update_ipc_object(scomp, &config->acp_sdw, SOF_ACP_SDW_TOKENS, slink->tuples,
1344 config->hdr.size = size;
1345 dev_dbg(scomp->dev, "ACP SDW config rate %d channels %d\n",
1346 config->acp_sdw.rate, config->acp_sdw.channels);
1348 /* set config for all DAI's with name matching the link name */
1351 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1359 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1362 u32 size = sizeof(*config);
1365 config->hdr.size = size;
1368 ret = sof_update_ipc_object(scomp, &config->afe, SOF_AFE_TOKENS, slink->tuples,
1373 dev_dbg(scomp->dev, "AFE config rate %d channels %d format:%d\n",
1374 config->afe.rate, config->afe.channels, config->afe.format);
1376 config->afe.stream_id = DMA_CHAN_INVALID;
1380 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1388 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1393 u32 size = sizeof(*config);
1400 ret = sof_update_ipc_object(scomp, &config->ssp, SOF_SSP_TOKENS, slink->tuples,
1411 sof_dai_set_format(&hw_config[i], &config[i]);
1413 config[i].hdr.size = size;
1417 config[i].ssp.mclk_id, sdev->mclk_id_quirk);
1418 config[i].ssp.mclk_id = sdev->mclk_id_quirk;
1422 config[i].ssp.mclk_rate = le32_to_cpu(hw_config[i].mclk_rate);
1423 config[i].ssp.bclk_rate = le32_to_cpu(hw_config[i].bclk_rate);
1424 config[i].ssp.fsync_rate = le32_to_cpu(hw_config[i].fsync_rate);
1425 config[i].ssp.tdm_slots = le32_to_cpu(hw_config[i].tdm_slots);
1426 config[i].ssp.tdm_slot_width = le32_to_cpu(hw_config[i].tdm_slot_width);
1427 config[i].ssp.mclk_direction = hw_config[i].mclk_direction;
1428 config[i].ssp.rx_slots = le32_to_cpu(hw_config[i].rx_slots);
1429 config[i].ssp.tx_slots = le32_to_cpu(hw_config[i].tx_slots);
1431 dev_dbg(scomp->dev, "tplg: config SSP%d fmt %#x mclk %d bclk %d fclk %d width (%d)%d slots %d mclk id %d quirks %d clks_control %#x\n",
1432 config[i].dai_index, config[i].format,
1433 config[i].ssp.mclk_rate, config[i].ssp.bclk_rate,
1434 config[i].ssp.fsync_rate, config[i].ssp.sample_valid_bits,
1435 config[i].ssp.tdm_slot_width, config[i].ssp.tdm_slots,
1436 config[i].ssp.mclk_id, config[i].ssp.quirks, config[i].ssp.clks_control);
1439 if (config[i].ssp.fsync_rate < 8000 || config[i].ssp.fsync_rate > 192000) {
1440 dev_err(scomp->dev, "Invalid fsync rate for SSP%d\n", config[i].dai_index);
1444 if (config[i].ssp.tdm_slots < 1 || config[i].ssp.tdm_slots > 8) {
1446 config[i].dai_index);
1453 private->dai_config = kmemdup(config, size * slink->num_hw_configs, GFP_KERNEL);
1461 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1467 size_t size = sizeof(*config);
1470 /* Ensure the entire DMIC config struct is zeros */
1471 memset(&config->dmic, 0, sizeof(config->dmic));
1474 ret = sof_update_ipc_object(scomp, &config->dmic, SOF_DMIC_TOKENS, slink->tuples,
1480 ret = sof_update_ipc_object(scomp, &config->dmic.pdm[0], SOF_DMIC_PDM_TOKENS,
1483 config->dmic.num_pdm_active);
1488 config->hdr.size = size;
1491 dev_dbg(scomp->dev, "tplg: config DMIC%d driver version %d\n",
1492 config->dai_index, config->dmic.driver_ipc_version);
1494 config->dmic.pdmclk_min, config->dmic.pdmclk_max,
1495 config->dmic.duty_min);
1497 config->dmic.duty_max, config->dmic.fifo_fs,
1498 config->dmic.num_pdm_active);
1499 dev_dbg(scomp->dev, "fifo word length %d\n", config->dmic.fifo_bits);
1501 for (i = 0; i < config->dmic.num_pdm_active; i++) {
1503 config->dmic.pdm[i].id,
1504 config->dmic.pdm[i].enable_mic_a,
1505 config->dmic.pdm[i].enable_mic_b);
1507 config->dmic.pdm[i].id,
1508 config->dmic.pdm[i].polarity_mic_a,
1509 config->dmic.pdm[i].polarity_mic_b);
1511 config->dmic.pdm[i].id,
1512 config->dmic.pdm[i].clk_edge,
1513 config->dmic.pdm[i].skew);
1521 config->dmic.fifo_bits_b = config->dmic.fifo_bits;
1525 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1533 struct sof_ipc_dai_config *config, struct snd_sof_dai *dai)
1536 u32 size = sizeof(*config);
1540 ret = sof_update_ipc_object(scomp, &config->alh, SOF_ALH_TOKENS, slink->tuples,
1546 config->hdr.size = size;
1548 /* set config for all DAI's with name matching the link name */
1551 private->dai_config = kmemdup(config, size, GFP_KERNEL);
1566 struct sof_ipc_dai_config *config;
1585 comp_dai->config.hdr.size = sizeof(comp_dai->config);
1594 ret = sof_update_ipc_object(scomp, &comp_dai->config, SOF_COMP_TOKENS,
1596 sizeof(comp_dai->config), 1);
1614 sof_dbg_comp_config(scomp, &comp_dai->config);
1616 /* now update DAI config */
1625 config = kcalloc(slink->num_hw_configs, sizeof(*config), GFP_KERNEL);
1626 if (!config) {
1639 config[i].hdr.cmd = SOF_IPC_GLB_DAI_MSG | SOF_IPC_DAI_CONFIG;
1640 config[i].format = le32_to_cpu(slink->hw_configs[i].fmt);
1641 config[i].type = common_config.type;
1642 config[i].dai_index = comp_dai->dai_index;
1647 ret = sof_link_ssp_load(scomp, slink, config, dai);
1650 ret = sof_link_dmic_load(scomp, slink, config, dai);
1653 ret = sof_link_hda_load(scomp, slink, config, dai);
1656 ret = sof_link_alh_load(scomp, slink, config, dai);
1659 ret = sof_link_sai_load(scomp, slink, config, dai);
1662 ret = sof_link_esai_load(scomp, slink, config, dai);
1665 ret = sof_link_micfil_load(scomp, slink, config, dai);
1668 ret = sof_link_acp_bt_load(scomp, slink, config, dai);
1672 ret = sof_link_acp_sp_load(scomp, slink, config, dai);
1676 ret = sof_link_acp_hs_load(scomp, slink, config, dai);
1679 ret = sof_link_acp_dmic_load(scomp, slink, config, dai);
1682 ret = sof_link_afe_load(scomp, slink, config, dai);
1685 ret = sof_link_acp_sdw_load(scomp, slink, config, dai);
1691 dev_err(scomp->dev, "failed to load config for dai %s\n", dai->name);
1695 kfree(config);
1700 kfree(config);
2147 struct sof_ipc_dai_config *config;
2157 dev_err(sdev->dev, "No config for DAI %s\n", dai->name);
2161 config = &private->dai_config[dai->current_config];
2162 if (!config) {
2163 dev_err(sdev->dev, "Invalid current config for DAI %s\n", dai->name);
2167 switch (config->type) {
2180 config->hda.link_dma_ch = data->dai_data;
2190 config->dai_index, INTEL_ALH_DAI_INDEX_BASE);
2193 config->dai_index = data->dai_index - INTEL_ALH_DAI_INDEX_BASE;
2195 config->alh.stream_id = data->dai_data;
2224 config->flags &= ~SOF_DAI_CONFIG_FLAGS_CMD_MASK;
2225 config->flags |= flags;
2227 config->flags = flags;
2232 ret = sof_ipc_tx_message_no_reply(sdev->ipc, config, config->hdr.size);
2234 dev_err(sdev->dev, "Failed to set dai config for %s\n", dai->name);
2237 config->flags = SOF_DAI_CONFIG_FLAGS_NONE;
2305 /* update DAI config. The IPC will be sent in sof_widget_setup() */
2309 struct sof_ipc_dai_config *config;
2317 config = private->dai_config;
2322 * the dai config in the DSP.
2324 if (config->type == SOF_DAI_INTEL_HDA)
2325 config->hda.link_dma_ch = DMA_CHAN_INVALID;