tplg 81 sound/soc/soc-topology.c static int soc_tplg_process_headers(struct soc_tplg *tplg); tplg 82 sound/soc/soc-topology.c static void soc_tplg_complete(struct soc_tplg *tplg); tplg 87 sound/soc/soc-topology.c static int soc_tplg_check_elem_count(struct soc_tplg *tplg, size_t elem_size, tplg 90 sound/soc/soc-topology.c const u8 *end = tplg->pos + elem_size * count; tplg 92 sound/soc/soc-topology.c if (end > tplg->fw->data + tplg->fw->size) { tplg 93 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: %s overflow end of data\n", tplg 101 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 110 sound/soc/soc-topology.c static inline int soc_tplg_is_eof(struct soc_tplg *tplg) tplg 112 sound/soc/soc-topology.c const u8 *end = tplg->hdr_pos; tplg 114 sound/soc/soc-topology.c if (end >= tplg->fw->data + tplg->fw->size) tplg 119 sound/soc/soc-topology.c static inline unsigned long soc_tplg_get_hdr_offset(struct soc_tplg *tplg) tplg 121 sound/soc/soc-topology.c return (unsigned long)(tplg->hdr_pos - tplg->fw->data); tplg 124 sound/soc/soc-topology.c static inline unsigned long soc_tplg_get_offset(struct soc_tplg *tplg) tplg 126 sound/soc/soc-topology.c return (unsigned long)(tplg->pos - tplg->fw->data); tplg 192 sound/soc/soc-topology.c static int tplc_chan_get_reg(struct soc_tplg *tplg, tplg 205 sound/soc/soc-topology.c static int tplc_chan_get_shift(struct soc_tplg *tplg, tplg 230 sound/soc/soc-topology.c static inline void soc_bind_err(struct soc_tplg *tplg, tplg 233 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 236 sound/soc/soc-topology.c soc_tplg_get_offset(tplg)); tplg 239 sound/soc/soc-topology.c static inline void soc_control_err(struct soc_tplg *tplg, tplg 242 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 245 sound/soc/soc-topology.c soc_tplg_get_offset(tplg)); tplg 249 sound/soc/soc-topology.c static int soc_tplg_vendor_load_(struct soc_tplg *tplg, tplg 254 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->vendor_load) tplg 255 sound/soc/soc-topology.c ret = tplg->ops->vendor_load(tplg->comp, tplg->index, hdr); tplg 257 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: no vendor load callback for ID %d\n", tplg 263 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 265 sound/soc/soc-topology.c soc_tplg_get_hdr_offset(tplg), tplg 266 sound/soc/soc-topology.c soc_tplg_get_hdr_offset(tplg), tplg 272 sound/soc/soc-topology.c static int soc_tplg_vendor_load(struct soc_tplg *tplg, tplg 275 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_VENDOR) tplg 278 sound/soc/soc-topology.c return soc_tplg_vendor_load_(tplg, hdr); tplg 283 sound/soc/soc-topology.c static int soc_tplg_widget_load(struct soc_tplg *tplg, tplg 286 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->widget_load) tplg 287 sound/soc/soc-topology.c return tplg->ops->widget_load(tplg->comp, tplg->index, w, tplg 295 sound/soc/soc-topology.c static int soc_tplg_widget_ready(struct soc_tplg *tplg, tplg 298 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->widget_ready) tplg 299 sound/soc/soc-topology.c return tplg->ops->widget_ready(tplg->comp, tplg->index, w, tplg 306 sound/soc/soc-topology.c static int soc_tplg_dai_load(struct soc_tplg *tplg, tplg 310 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->dai_load) tplg 311 sound/soc/soc-topology.c return tplg->ops->dai_load(tplg->comp, tplg->index, dai_drv, tplg 318 sound/soc/soc-topology.c static int soc_tplg_dai_link_load(struct soc_tplg *tplg, tplg 321 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->link_load) tplg 322 sound/soc/soc-topology.c return tplg->ops->link_load(tplg->comp, tplg->index, link, cfg); tplg 328 sound/soc/soc-topology.c static void soc_tplg_complete(struct soc_tplg *tplg) tplg 330 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->complete) tplg 331 sound/soc/soc-topology.c tplg->ops->complete(tplg->comp); tplg 359 sound/soc/soc-topology.c static int soc_tplg_add_kcontrol(struct soc_tplg *tplg, tplg 362 sound/soc/soc-topology.c struct snd_soc_component *comp = tplg->comp; tplg 582 sound/soc/soc-topology.c const struct soc_tplg *tplg) tplg 604 sound/soc/soc-topology.c ext_ops = tplg->bytes_ext_ops; tplg 605 sound/soc/soc-topology.c num_ops = tplg->bytes_ext_ops_count; tplg 622 sound/soc/soc-topology.c ops = tplg->io_ops; tplg 623 sound/soc/soc-topology.c num_ops = tplg->io_ops_count; tplg 683 sound/soc/soc-topology.c static int soc_tplg_init_kcontrol(struct soc_tplg *tplg, tplg 686 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->control_load) tplg 687 sound/soc/soc-topology.c return tplg->ops->control_load(tplg->comp, tplg->index, k, tplg 694 sound/soc/soc-topology.c static int soc_tplg_create_tlv_db_scale(struct soc_tplg *tplg, tplg 714 sound/soc/soc-topology.c static int soc_tplg_create_tlv(struct soc_tplg *tplg, tplg 727 sound/soc/soc-topology.c return soc_tplg_create_tlv_db_scale(tplg, kc, tplg 732 sound/soc/soc-topology.c dev_dbg(tplg->dev, "Unsupported TLV type %d\n", tplg 741 sound/soc/soc-topology.c static inline void soc_tplg_free_tlv(struct soc_tplg *tplg, tplg 747 sound/soc/soc-topology.c static int soc_tplg_dbytes_create(struct soc_tplg *tplg, unsigned int count, tplg 755 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 758 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: Invalid count %d for byte control\n", tplg 764 sound/soc/soc-topology.c be = (struct snd_soc_tplg_bytes_control *)tplg->pos; tplg 775 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_bytes_control) + tplg 778 sound/soc/soc-topology.c dev_dbg(tplg->dev, tplg 790 sound/soc/soc-topology.c sbe->dobj.ops = tplg->ops; tplg 794 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc, tplg); tplg 796 sound/soc/soc-topology.c soc_control_err(tplg, &be->hdr, be->hdr.name); tplg 802 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc, tplg 805 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 812 sound/soc/soc-topology.c err = soc_tplg_add_kcontrol(tplg, &kc, tplg 815 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to add %s\n", tplg 821 sound/soc/soc-topology.c list_add(&sbe->dobj.list, &tplg->comp->dobj_list); tplg 827 sound/soc/soc-topology.c static int soc_tplg_dmixer_create(struct soc_tplg *tplg, unsigned int count, tplg 835 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 839 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid count %d for controls\n", tplg 845 sound/soc/soc-topology.c mc = (struct snd_soc_tplg_mixer_control *)tplg->pos; tplg 855 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_mixer_control) + tplg 858 sound/soc/soc-topology.c dev_dbg(tplg->dev, tplg 869 sound/soc/soc-topology.c sm->reg = tplc_chan_get_reg(tplg, mc->channel, tplg 871 sound/soc/soc-topology.c sm->rreg = tplc_chan_get_reg(tplg, mc->channel, tplg 873 sound/soc/soc-topology.c sm->shift = tplc_chan_get_shift(tplg, mc->channel, tplg 875 sound/soc/soc-topology.c sm->rshift = tplc_chan_get_shift(tplg, mc->channel, tplg 882 sound/soc/soc-topology.c sm->dobj.index = tplg->index; tplg 883 sound/soc/soc-topology.c sm->dobj.ops = tplg->ops; tplg 888 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc, tplg); tplg 890 sound/soc/soc-topology.c soc_control_err(tplg, &mc->hdr, mc->hdr.name); tplg 896 sound/soc/soc-topology.c err = soc_tplg_create_tlv(tplg, &kc, &mc->hdr); tplg 898 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to create TLV %s\n", tplg 905 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc, tplg 908 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 910 sound/soc/soc-topology.c soc_tplg_free_tlv(tplg, &kc); tplg 916 sound/soc/soc-topology.c err = soc_tplg_add_kcontrol(tplg, &kc, tplg 919 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to add %s\n", tplg 921 sound/soc/soc-topology.c soc_tplg_free_tlv(tplg, &kc); tplg 926 sound/soc/soc-topology.c list_add(&sm->dobj.list, &tplg->comp->dobj_list); tplg 1003 sound/soc/soc-topology.c static int soc_tplg_denum_create(struct soc_tplg *tplg, unsigned int count, tplg 1011 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 1015 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid count %d for enum controls\n", tplg 1021 sound/soc/soc-topology.c ec = (struct snd_soc_tplg_enum_control *)tplg->pos; tplg 1032 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_enum_control) + tplg 1035 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: adding enum kcontrol %s size %d\n", tplg 1044 sound/soc/soc-topology.c se->reg = tplc_chan_get_reg(tplg, ec->channel, SNDRV_CHMAP_FL); tplg 1045 sound/soc/soc-topology.c se->shift_l = tplc_chan_get_shift(tplg, ec->channel, tplg 1047 sound/soc/soc-topology.c se->shift_r = tplc_chan_get_shift(tplg, ec->channel, tplg 1051 sound/soc/soc-topology.c se->dobj.index = tplg->index; tplg 1053 sound/soc/soc-topology.c se->dobj.ops = tplg->ops; tplg 1061 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 1073 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 1081 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 1089 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&ec->hdr, &kc, tplg); tplg 1091 sound/soc/soc-topology.c soc_control_err(tplg, &ec->hdr, ec->hdr.name); tplg 1097 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc, tplg 1100 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 1107 sound/soc/soc-topology.c ret = soc_tplg_add_kcontrol(tplg, tplg 1110 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: could not add kcontrol %s\n", tplg 1116 sound/soc/soc-topology.c list_add(&se->dobj.list, &tplg->comp->dobj_list); tplg 1122 sound/soc/soc-topology.c static int soc_tplg_kcontrol_elems_load(struct soc_tplg *tplg, tplg 1129 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_MIXER) { tplg 1130 sound/soc/soc-topology.c tplg->pos += le32_to_cpu(hdr->size) + tplg 1135 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: adding %d kcontrols at 0x%lx\n", hdr->count, tplg 1136 sound/soc/soc-topology.c soc_tplg_get_offset(tplg)); tplg 1140 sound/soc/soc-topology.c control_hdr = (struct snd_soc_tplg_ctl_hdr *)tplg->pos; tplg 1143 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid control size\n"); tplg 1155 sound/soc/soc-topology.c ret = soc_tplg_dmixer_create(tplg, 1, tplg 1163 sound/soc/soc-topology.c ret = soc_tplg_denum_create(tplg, 1, tplg 1167 sound/soc/soc-topology.c ret = soc_tplg_dbytes_create(tplg, 1, tplg 1171 sound/soc/soc-topology.c soc_bind_err(tplg, control_hdr, i); tplg 1175 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid control\n"); tplg 1185 sound/soc/soc-topology.c static int soc_tplg_add_route(struct soc_tplg *tplg, tplg 1188 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->dapm_route_load) tplg 1189 sound/soc/soc-topology.c return tplg->ops->dapm_route_load(tplg->comp, tplg->index, tplg 1195 sound/soc/soc-topology.c static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg, tplg 1198 sound/soc/soc-topology.c struct snd_soc_dapm_context *dapm = &tplg->comp->dapm; tplg 1206 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_GRAPH) { tplg 1207 sound/soc/soc-topology.c tplg->pos += tplg 1214 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 1218 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid count %d for DAPM routes\n", tplg 1223 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: adding %d DAPM routes for index %d\n", count, tplg 1250 sound/soc/soc-topology.c elem = (struct snd_soc_tplg_dapm_graph_elem *)tplg->pos; tplg 1251 sound/soc/soc-topology.c tplg->pos += sizeof(struct snd_soc_tplg_dapm_graph_elem); tplg 1282 sound/soc/soc-topology.c routes[i]->dobj.ops = tplg->ops; tplg 1283 sound/soc/soc-topology.c routes[i]->dobj.index = tplg->index; tplg 1284 sound/soc/soc-topology.c list_add(&routes[i]->dobj.list, &tplg->comp->dobj_list); tplg 1286 sound/soc/soc-topology.c ret = soc_tplg_add_route(tplg, routes[i]); tplg 1310 sound/soc/soc-topology.c struct soc_tplg *tplg, int num_kcontrols) tplg 1322 sound/soc/soc-topology.c mc = (struct snd_soc_tplg_mixer_control *)tplg->pos; tplg 1333 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_mixer_control) + tplg 1336 sound/soc/soc-topology.c dev_dbg(tplg->dev, " adding DAPM widget mixer control %s at %d\n", tplg 1347 sound/soc/soc-topology.c sm->reg = tplc_chan_get_reg(tplg, mc->channel, tplg 1349 sound/soc/soc-topology.c sm->rreg = tplc_chan_get_reg(tplg, mc->channel, tplg 1351 sound/soc/soc-topology.c sm->shift = tplc_chan_get_shift(tplg, mc->channel, tplg 1353 sound/soc/soc-topology.c sm->rshift = tplc_chan_get_shift(tplg, mc->channel, tplg 1360 sound/soc/soc-topology.c sm->dobj.index = tplg->index; tplg 1364 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc[i], tplg); tplg 1366 sound/soc/soc-topology.c soc_control_err(tplg, &mc->hdr, mc->hdr.name); tplg 1371 sound/soc/soc-topology.c err = soc_tplg_create_tlv(tplg, &kc[i], &mc->hdr); tplg 1373 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to create TLV %s\n", tplg 1380 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc[i], tplg 1383 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 1385 sound/soc/soc-topology.c soc_tplg_free_tlv(tplg, &kc[i]); tplg 1403 sound/soc/soc-topology.c struct soc_tplg *tplg, int num_kcontrols) tplg 1415 sound/soc/soc-topology.c ec = (struct snd_soc_tplg_enum_control *)tplg->pos; tplg 1425 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_enum_control) + tplg 1428 sound/soc/soc-topology.c dev_dbg(tplg->dev, " adding DAPM widget enum control %s\n", tplg 1439 sound/soc/soc-topology.c se->reg = tplc_chan_get_reg(tplg, ec->channel, SNDRV_CHMAP_FL); tplg 1440 sound/soc/soc-topology.c se->shift_l = tplc_chan_get_shift(tplg, ec->channel, tplg 1442 sound/soc/soc-topology.c se->shift_r = tplc_chan_get_shift(tplg, ec->channel, tplg 1447 sound/soc/soc-topology.c se->dobj.index = tplg->index; tplg 1454 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: could not create values for %s\n", tplg 1464 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: could not create texts for %s\n", tplg 1470 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid enum control type %d for %s\n", tplg 1476 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&ec->hdr, &kc[i], tplg); tplg 1478 sound/soc/soc-topology.c soc_control_err(tplg, &ec->hdr, ec->hdr.name); tplg 1483 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc[i], tplg 1486 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 1513 sound/soc/soc-topology.c struct soc_tplg *tplg, int num_kcontrols) tplg 1525 sound/soc/soc-topology.c be = (struct snd_soc_tplg_bytes_control *)tplg->pos; tplg 1536 sound/soc/soc-topology.c tplg->pos += (sizeof(struct snd_soc_tplg_bytes_control) + tplg 1539 sound/soc/soc-topology.c dev_dbg(tplg->dev, tplg 1554 sound/soc/soc-topology.c err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc[i], tplg); tplg 1556 sound/soc/soc-topology.c soc_control_err(tplg, &be->hdr, be->hdr.name); tplg 1561 sound/soc/soc-topology.c err = soc_tplg_init_kcontrol(tplg, &kc[i], tplg 1564 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to init %s\n", tplg 1583 sound/soc/soc-topology.c static int soc_tplg_dapm_widget_create(struct soc_tplg *tplg, tplg 1586 sound/soc/soc-topology.c struct snd_soc_dapm_context *dapm = &tplg->comp->dapm; tplg 1589 sound/soc/soc-topology.c struct snd_soc_card *card = tplg->comp->card; tplg 1600 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: creating DAPM widget %s id %d\n", tplg 1627 sound/soc/soc-topology.c template.dobj.index = tplg->index; tplg 1629 sound/soc/soc-topology.c tplg->pos += tplg 1639 sound/soc/soc-topology.c control_hdr = (struct snd_soc_tplg_ctl_hdr *)tplg->pos; tplg 1640 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: template %s has %d controls of type %x\n", tplg 1653 sound/soc/soc-topology.c soc_tplg_dapm_widget_dmixer_create(tplg, tplg 1668 sound/soc/soc-topology.c soc_tplg_dapm_widget_denum_create(tplg, tplg 1679 sound/soc/soc-topology.c soc_tplg_dapm_widget_dbytes_create(tplg, tplg 1687 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid widget control type %d:%d:%d\n", tplg 1695 sound/soc/soc-topology.c ret = soc_tplg_widget_load(tplg, &template, w); tplg 1712 sound/soc/soc-topology.c widget->dobj.ops = tplg->ops; tplg 1713 sound/soc/soc-topology.c widget->dobj.index = tplg->index; tplg 1714 sound/soc/soc-topology.c list_add(&widget->dobj.list, &tplg->comp->dobj_list); tplg 1716 sound/soc/soc-topology.c ret = soc_tplg_widget_ready(tplg, widget, w); tplg 1735 sound/soc/soc-topology.c static int soc_tplg_dapm_widget_elems_load(struct soc_tplg *tplg, tplg 1743 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_WIDGET) tplg 1746 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: adding %d DAPM widgets\n", count); tplg 1749 sound/soc/soc-topology.c widget = (struct snd_soc_tplg_dapm_widget *) tplg->pos; tplg 1751 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid widget size\n"); tplg 1755 sound/soc/soc-topology.c ret = soc_tplg_dapm_widget_create(tplg, widget); tplg 1757 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to load widget %s\n", tplg 1766 sound/soc/soc-topology.c static int soc_tplg_dapm_complete(struct soc_tplg *tplg) tplg 1768 sound/soc/soc-topology.c struct snd_soc_card *card = tplg->comp->card; tplg 1775 sound/soc/soc-topology.c dev_warn(tplg->dev, "ASoC: Parent card not yet available," tplg 1782 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to create new widgets %d\n", tplg 1819 sound/soc/soc-topology.c static int soc_tplg_dai_create(struct soc_tplg *tplg, tplg 1851 sound/soc/soc-topology.c ret = soc_tplg_dai_load(tplg, dai_drv, pcm, NULL); tplg 1853 sound/soc/soc-topology.c dev_err(tplg->comp->dev, "ASoC: DAI loading failed\n"); tplg 1861 sound/soc/soc-topology.c dai_drv->dobj.index = tplg->index; tplg 1862 sound/soc/soc-topology.c dai_drv->dobj.ops = tplg->ops; tplg 1864 sound/soc/soc-topology.c list_add(&dai_drv->dobj.list, &tplg->comp->dobj_list); tplg 1867 sound/soc/soc-topology.c return snd_soc_register_dai(tplg->comp, dai_drv); tplg 1894 sound/soc/soc-topology.c static int soc_tplg_fe_link_create(struct soc_tplg *tplg, tplg 1916 sound/soc/soc-topology.c link->dobj.index = tplg->index; tplg 1917 sound/soc/soc-topology.c link->dobj.ops = tplg->ops; tplg 1944 sound/soc/soc-topology.c ret = soc_tplg_dai_link_load(tplg, link, NULL); tplg 1946 sound/soc/soc-topology.c dev_err(tplg->comp->dev, "ASoC: FE link loading failed\n"); tplg 1950 sound/soc/soc-topology.c ret = snd_soc_add_dai_link(tplg->comp->card, link); tplg 1952 sound/soc/soc-topology.c dev_err(tplg->comp->dev, "ASoC: adding FE link failed\n"); tplg 1956 sound/soc/soc-topology.c list_add(&link->dobj.list, &tplg->comp->dobj_list); tplg 1968 sound/soc/soc-topology.c static int soc_tplg_pcm_create(struct soc_tplg *tplg, tplg 1973 sound/soc/soc-topology.c ret = soc_tplg_dai_create(tplg, pcm); tplg 1977 sound/soc/soc-topology.c return soc_tplg_fe_link_create(tplg, pcm); tplg 2008 sound/soc/soc-topology.c static int pcm_new_ver(struct soc_tplg *tplg, tplg 2019 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid PCM size\n"); tplg 2023 sound/soc/soc-topology.c dev_warn(tplg->dev, "ASoC: old version of PCM\n"); tplg 2049 sound/soc/soc-topology.c static int soc_tplg_pcm_elems_load(struct soc_tplg *tplg, tplg 2061 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_PCM_DAI) tplg 2065 sound/soc/soc-topology.c pcm = (struct snd_soc_tplg_pcm *)tplg->pos; tplg 2069 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid size %d for PCM elems\n", tplg 2074 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 2078 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid count %d for PCM DAI elems\n", tplg 2084 sound/soc/soc-topology.c pcm = (struct snd_soc_tplg_pcm *)tplg->pos; tplg 2095 sound/soc/soc-topology.c ret = pcm_new_ver(tplg, pcm, &_pcm); tplg 2101 sound/soc/soc-topology.c ret = soc_tplg_pcm_create(tplg, _pcm); tplg 2111 sound/soc/soc-topology.c tplg->pos += size + le32_to_cpu(_pcm->priv.size); tplg 2117 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: adding %d PCM DAIs\n", count); tplg 2199 sound/soc/soc-topology.c static int link_new_ver(struct soc_tplg *tplg, tplg 2211 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid physical link config size\n"); tplg 2215 sound/soc/soc-topology.c dev_warn(tplg->dev, "ASoC: old version of physical link config\n"); tplg 2234 sound/soc/soc-topology.c static int soc_tplg_link_config(struct soc_tplg *tplg, tplg 2258 sound/soc/soc-topology.c link = snd_soc_find_dai_link(tplg->comp->card, le32_to_cpu(cfg->id), tplg 2261 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: physical link %s (id %d) not exist\n", tplg 2277 sound/soc/soc-topology.c ret = soc_tplg_dai_link_load(tplg, link, cfg); tplg 2279 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: physical link loading failed\n"); tplg 2284 sound/soc/soc-topology.c link->dobj.index = tplg->index; tplg 2285 sound/soc/soc-topology.c link->dobj.ops = tplg->ops; tplg 2287 sound/soc/soc-topology.c list_add(&link->dobj.list, &tplg->comp->dobj_list); tplg 2294 sound/soc/soc-topology.c static int soc_tplg_link_elems_load(struct soc_tplg *tplg, tplg 2305 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_LINK) { tplg 2306 sound/soc/soc-topology.c tplg->pos += le32_to_cpu(hdr->size) + tplg 2312 sound/soc/soc-topology.c link = (struct snd_soc_tplg_link_config *)tplg->pos; tplg 2316 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid size %d for physical link elems\n", tplg 2321 sound/soc/soc-topology.c if (soc_tplg_check_elem_count(tplg, tplg 2325 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid count %d for physical link elems\n", tplg 2332 sound/soc/soc-topology.c link = (struct snd_soc_tplg_link_config *)tplg->pos; tplg 2339 sound/soc/soc-topology.c ret = link_new_ver(tplg, link, &_link); tplg 2344 sound/soc/soc-topology.c ret = soc_tplg_link_config(tplg, _link); tplg 2354 sound/soc/soc-topology.c tplg->pos += size + le32_to_cpu(_link->priv.size); tplg 2371 sound/soc/soc-topology.c static int soc_tplg_dai_config(struct soc_tplg *tplg, tplg 2386 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: physical DAI %s not registered\n", tplg 2392 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: physical DAI %s id mismatch\n", tplg 2419 sound/soc/soc-topology.c ret = soc_tplg_dai_load(tplg, dai_drv, NULL, dai); tplg 2421 sound/soc/soc-topology.c dev_err(tplg->comp->dev, "ASoC: DAI loading failed\n"); tplg 2429 sound/soc/soc-topology.c static int soc_tplg_dai_elems_load(struct soc_tplg *tplg, tplg 2438 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_BE_DAI) tplg 2443 sound/soc/soc-topology.c dai = (struct snd_soc_tplg_dai *)tplg->pos; tplg 2445 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: invalid physical DAI size\n"); tplg 2449 sound/soc/soc-topology.c ret = soc_tplg_dai_config(tplg, dai); tplg 2451 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: failed to configure DAI\n"); tplg 2455 sound/soc/soc-topology.c tplg->pos += (sizeof(*dai) + le32_to_cpu(dai->priv.size)); tplg 2458 sound/soc/soc-topology.c dev_dbg(tplg->dev, "ASoC: Configure %d BE DAIs\n", count); tplg 2471 sound/soc/soc-topology.c static int manifest_new_ver(struct soc_tplg *tplg, tplg 2483 sound/soc/soc-topology.c dev_warn(tplg->dev, "ASoC: invalid manifest size %d\n", tplg 2490 sound/soc/soc-topology.c dev_warn(tplg->dev, "ASoC: old version of manifest\n"); tplg 2513 sound/soc/soc-topology.c static int soc_tplg_manifest_load(struct soc_tplg *tplg, tplg 2520 sound/soc/soc-topology.c if (tplg->pass != SOC_TPLG_PASS_MANIFEST) tplg 2523 sound/soc/soc-topology.c manifest = (struct snd_soc_tplg_manifest *)tplg->pos; tplg 2531 sound/soc/soc-topology.c ret = manifest_new_ver(tplg, manifest, &_manifest); tplg 2537 sound/soc/soc-topology.c if (tplg->comp && tplg->ops && tplg->ops->manifest) tplg 2538 sound/soc/soc-topology.c ret = tplg->ops->manifest(tplg->comp, tplg->index, _manifest); tplg 2547 sound/soc/soc-topology.c static int soc_valid_header(struct soc_tplg *tplg, tplg 2550 sound/soc/soc-topology.c if (soc_tplg_get_hdr_offset(tplg) >= tplg->fw->size) tplg 2554 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 2556 sound/soc/soc-topology.c le32_to_cpu(hdr->type), soc_tplg_get_hdr_offset(tplg), tplg 2557 sound/soc/soc-topology.c tplg->fw->size); tplg 2563 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 2565 sound/soc/soc-topology.c tplg->pass, hdr->magic, tplg 2566 sound/soc/soc-topology.c soc_tplg_get_hdr_offset(tplg), tplg->fw->size); tplg 2571 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 2573 sound/soc/soc-topology.c tplg->pass, hdr->magic, tplg 2574 sound/soc/soc-topology.c soc_tplg_get_hdr_offset(tplg), tplg->fw->size); tplg 2581 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 2583 sound/soc/soc-topology.c tplg->pass, hdr->abi, tplg 2584 sound/soc/soc-topology.c SND_SOC_TPLG_ABI_VERSION, soc_tplg_get_hdr_offset(tplg), tplg 2585 sound/soc/soc-topology.c tplg->fw->size); tplg 2590 sound/soc/soc-topology.c dev_err(tplg->dev, "ASoC: header has 0 size at offset 0x%lx.\n", tplg 2591 sound/soc/soc-topology.c soc_tplg_get_hdr_offset(tplg)); tplg 2595 sound/soc/soc-topology.c if (tplg->pass == le32_to_cpu(hdr->type)) tplg 2596 sound/soc/soc-topology.c dev_dbg(tplg->dev, tplg 2599 sound/soc/soc-topology.c hdr->vendor_type, tplg->pass); tplg 2605 sound/soc/soc-topology.c static int soc_tplg_load_header(struct soc_tplg *tplg, tplg 2608 sound/soc/soc-topology.c tplg->pos = tplg->hdr_pos + sizeof(struct snd_soc_tplg_hdr); tplg 2611 sound/soc/soc-topology.c if (le32_to_cpu(hdr->index) != tplg->req_index && tplg 2612 sound/soc/soc-topology.c tplg->req_index != SND_SOC_TPLG_INDEX_ALL) tplg 2615 sound/soc/soc-topology.c tplg->index = le32_to_cpu(hdr->index); tplg 2621 sound/soc/soc-topology.c return soc_tplg_kcontrol_elems_load(tplg, hdr); tplg 2623 sound/soc/soc-topology.c return soc_tplg_dapm_graph_elems_load(tplg, hdr); tplg 2625 sound/soc/soc-topology.c return soc_tplg_dapm_widget_elems_load(tplg, hdr); tplg 2627 sound/soc/soc-topology.c return soc_tplg_pcm_elems_load(tplg, hdr); tplg 2629 sound/soc/soc-topology.c return soc_tplg_dai_elems_load(tplg, hdr); tplg 2633 sound/soc/soc-topology.c return soc_tplg_link_elems_load(tplg, hdr); tplg 2635 sound/soc/soc-topology.c return soc_tplg_manifest_load(tplg, hdr); tplg 2638 sound/soc/soc-topology.c return soc_tplg_vendor_load(tplg, hdr); tplg 2645 sound/soc/soc-topology.c static int soc_tplg_process_headers(struct soc_tplg *tplg) tplg 2650 sound/soc/soc-topology.c tplg->pass = SOC_TPLG_PASS_START; tplg 2653 sound/soc/soc-topology.c while (tplg->pass <= SOC_TPLG_PASS_END) { tplg 2655 sound/soc/soc-topology.c tplg->hdr_pos = tplg->fw->data; tplg 2656 sound/soc/soc-topology.c hdr = (struct snd_soc_tplg_hdr *)tplg->hdr_pos; tplg 2658 sound/soc/soc-topology.c while (!soc_tplg_is_eof(tplg)) { tplg 2661 sound/soc/soc-topology.c ret = soc_valid_header(tplg, hdr); tplg 2668 sound/soc/soc-topology.c ret = soc_tplg_load_header(tplg, hdr); tplg 2673 sound/soc/soc-topology.c tplg->hdr_pos += le32_to_cpu(hdr->payload_size) + tplg 2675 sound/soc/soc-topology.c hdr = (struct snd_soc_tplg_hdr *)tplg->hdr_pos; tplg 2679 sound/soc/soc-topology.c tplg->pass++; tplg 2683 sound/soc/soc-topology.c ret = soc_tplg_dapm_complete(tplg); tplg 2685 sound/soc/soc-topology.c dev_err(tplg->dev, tplg 2691 sound/soc/soc-topology.c static int soc_tplg_load(struct soc_tplg *tplg) tplg 2695 sound/soc/soc-topology.c ret = soc_tplg_process_headers(tplg); tplg 2697 sound/soc/soc-topology.c soc_tplg_complete(tplg); tplg 2706 sound/soc/soc-topology.c struct soc_tplg tplg; tplg 2710 sound/soc/soc-topology.c memset(&tplg, 0, sizeof(tplg)); tplg 2711 sound/soc/soc-topology.c tplg.fw = fw; tplg 2712 sound/soc/soc-topology.c tplg.dev = comp->dev; tplg 2713 sound/soc/soc-topology.c tplg.comp = comp; tplg 2714 sound/soc/soc-topology.c tplg.ops = ops; tplg 2715 sound/soc/soc-topology.c tplg.req_index = id; tplg 2716 sound/soc/soc-topology.c tplg.io_ops = ops->io_ops; tplg 2717 sound/soc/soc-topology.c tplg.io_ops_count = ops->io_ops_count; tplg 2718 sound/soc/soc-topology.c tplg.bytes_ext_ops = ops->bytes_ext_ops; tplg 2719 sound/soc/soc-topology.c tplg.bytes_ext_ops_count = ops->bytes_ext_ops_count; tplg 2721 sound/soc/soc-topology.c ret = soc_tplg_load(&tplg);