Lines Matching defs:scomp

61 	struct snd_soc_component *scomp = swidget->scomp;
62 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
71 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname);
73 dev_err(scomp->dev, "error: cannot find PCM for %s\n",
111 dev_err(scomp->dev, "error: pcm params failed for %s\n",
120 struct snd_soc_component *scomp = swidget->scomp;
121 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
135 dev_err(scomp->dev, "error: failed to trigger %s\n",
145 struct snd_soc_component *scomp;
153 scomp = swidget->scomp;
155 dev_dbg(scomp->dev, "received event %d for widget %s\n",
159 spcm = snd_sof_find_spcm_name(scomp, swidget->widget->sname);
161 dev_err(scomp->dev, "error: cannot find PCM for %s\n",
170 dev_dbg(scomp->dev, "PRE_PMU event ignored, KWD pipeline is already RUNNING\n");
177 dev_err(scomp->dev,
186 dev_err(scomp->dev,
192 dev_dbg(scomp->dev, "POST_PMD even ignored, KWD pipeline will remain RUNNING\n");
199 dev_err(scomp->dev,
206 dev_err(scomp->dev,
800 static int sof_parse_uuid_tokens(struct snd_soc_component *scomp,
837 static int sof_parse_string_tokens(struct snd_soc_component *scomp,
874 static int sof_parse_word_tokens(struct snd_soc_component *scomp,
916 * @scomp: pointer to soc component
928 static int sof_parse_token_sets(struct snd_soc_component *scomp,
945 dev_err(scomp->dev, "error: invalid array size 0x%x\n",
953 dev_err(scomp->dev, "error: invalid array size 0x%x\n",
961 found += sof_parse_uuid_tokens(scomp, object, tokens,
965 found += sof_parse_string_tokens(scomp, object, tokens,
972 found += sof_parse_word_tokens(scomp, object, tokens,
976 dev_err(scomp->dev, "error: unknown token type %d\n",
996 static int sof_parse_tokens(struct snd_soc_component *scomp,
1009 return sof_parse_token_sets(scomp, object, tokens, count, array,
1013 static void sof_dbg_comp_config(struct snd_soc_component *scomp,
1016 dev_dbg(scomp->dev, " config: periods snk %d src %d fmt %d\n",
1025 static int sof_control_load_volume(struct snd_soc_component *scomp,
1030 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1068 dev_err(scomp->dev, "error: invalid TLV data\n");
1076 dev_err(scomp->dev, "error: setting up volume table\n");
1089 ret = sof_parse_tokens(scomp, &scontrol->led_ctl, led_tokens,
1093 dev_err(scomp->dev, "error: parse led tokens failed %d\n",
1098 dev_dbg(scomp->dev, "tplg: load kcontrol index %d chans %d\n",
1112 static int sof_control_load_enum(struct snd_soc_component *scomp,
1117 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1137 dev_dbg(scomp->dev, "tplg: load kcontrol index %d chans %d comp_id %d\n",
1143 static int sof_control_load_bytes(struct snd_soc_component *scomp,
1148 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1165 dev_err(scomp->dev, "err: bytes data size %zu exceeds max %zu.\n",
1183 dev_dbg(scomp->dev, "tplg: load kcontrol index %d chans %d\n",
1191 dev_err(scomp->dev, "error: Wrong ABI magic 0x%08x.\n",
1198 dev_err(scomp->dev,
1206 dev_err(scomp->dev,
1222 static int sof_control_load(struct snd_soc_component *scomp, int index,
1229 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1234 dev_dbg(scomp->dev, "tplg: load control type %d name : %s\n",
1241 scontrol->scomp = scomp;
1249 ret = sof_control_load_volume(scomp, scontrol, kc, hdr);
1254 ret = sof_control_load_bytes(scomp, scontrol, kc, hdr);
1260 ret = sof_control_load_enum(scomp, scontrol, kc, hdr);
1270 dev_warn(scomp->dev, "control type not supported %d:%d:%d\n",
1288 static int sof_control_unload(struct snd_soc_component *scomp,
1291 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1295 dev_dbg(scomp->dev, "tplg: unload control name : %s\n", scomp->name);
1381 static int sof_connect_dai_widget(struct snd_soc_component *scomp,
1386 struct snd_soc_card *card = scomp->card;
1392 dev_vdbg(scomp->dev, "tplg: check widget: %s stream: %s dai stream: %s\n",
1416 dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
1422 dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
1438 dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
1444 dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
1454 dev_err(scomp->dev, "error: can't connect DAI %s stream %s\n",
1505 static int sof_widget_load_dai(struct snd_soc_component *scomp, int index,
1511 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1526 ret = sof_parse_tokens(scomp, comp_dai, dai_tokens,
1530 dev_err(scomp->dev, "error: parse dai tokens failed %d\n",
1535 ret = sof_parse_tokens(scomp, &comp_dai->config, comp_tokens,
1539 dev_err(scomp->dev, "error: parse dai.cfg tokens failed %d\n",
1544 dev_dbg(scomp->dev, "dai %s: type %d index %d\n",
1546 sof_dbg_comp_config(scomp, &comp_dai->config);
1552 dai->scomp = scomp;
1571 static int sof_widget_load_buffer(struct snd_soc_component *scomp, int index,
1576 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1593 ret = sof_parse_tokens(scomp, buffer, buffer_tokens,
1597 dev_err(scomp->dev, "error: parse buffer tokens failed %d\n",
1603 dev_dbg(scomp->dev, "buffer %s: size %d caps 0x%x\n",
1611 dev_err(scomp->dev, "error: buffer %s load failed\n",
1620 static int spcm_bind(struct snd_soc_component *scomp, struct snd_sof_pcm *spcm,
1625 host_widget = snd_sof_find_swidget_sname(scomp,
1629 dev_err(scomp->dev, "can't find host comp to bind pcm\n");
1642 static int sof_widget_load_pcm(struct snd_soc_component *scomp, int index,
1648 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1664 ret = sof_parse_tokens(scomp, host, pcm_tokens,
1668 dev_err(scomp->dev, "error: parse host tokens failed %d\n",
1673 ret = sof_parse_tokens(scomp, &host->config, comp_tokens,
1677 dev_err(scomp->dev, "error: parse host.cfg tokens failed %d\n",
1682 dev_dbg(scomp->dev, "loaded host %s\n", swidget->widget->name);
1683 sof_dbg_comp_config(scomp, &host->config);
1717 static int sof_widget_load_pipeline(struct snd_soc_component *scomp, int index,
1738 comp_swidget = snd_sof_find_swidget(scomp, tw->sname);
1740 dev_err(scomp->dev, "error: widget %s refers to non existent widget %s\n",
1748 dev_dbg(scomp->dev, "tplg: pipeline id %d comp %d scheduling comp id %d\n",
1751 ret = sof_parse_tokens(scomp, pipeline, sched_tokens,
1755 dev_err(scomp->dev, "error: parse pipeline tokens failed %d\n",
1760 dev_dbg(scomp->dev, "pipeline %s: period %d pri %d mips %d core %d frames %d\n",
1767 ret = sof_load_pipeline_ipc(scomp->dev, pipeline, r);
1779 static int sof_widget_load_mixer(struct snd_soc_component *scomp, int index,
1784 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1799 ret = sof_parse_tokens(scomp, &mixer->config, comp_tokens,
1803 dev_err(scomp->dev, "error: parse mixer.cfg tokens failed %d\n",
1809 sof_dbg_comp_config(scomp, &mixer->config);
1824 static int sof_widget_load_mux(struct snd_soc_component *scomp, int index,
1829 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1844 ret = sof_parse_tokens(scomp, &mux->config, comp_tokens,
1848 dev_err(scomp->dev, "error: parse mux.cfg tokens failed %d\n",
1854 sof_dbg_comp_config(scomp, &mux->config);
1870 static int sof_widget_load_pga(struct snd_soc_component *scomp, int index,
1875 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1890 dev_err(scomp->dev, "error: invalid kcontrol count %d for volume\n",
1900 ret = sof_parse_tokens(scomp, volume, volume_tokens,
1904 dev_err(scomp->dev, "error: parse volume tokens failed %d\n",
1908 ret = sof_parse_tokens(scomp, &volume->config, comp_tokens,
1912 dev_err(scomp->dev, "error: parse volume.cfg tokens failed %d\n",
1917 sof_dbg_comp_config(scomp, &volume->config);
1946 static int sof_widget_load_src(struct snd_soc_component *scomp, int index,
1951 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
1966 ret = sof_parse_tokens(scomp, src, src_tokens,
1970 dev_err(scomp->dev, "error: parse src tokens failed %d\n",
1975 ret = sof_parse_tokens(scomp, &src->config, comp_tokens,
1979 dev_err(scomp->dev, "error: parse src.cfg tokens failed %d\n",
1984 dev_dbg(scomp->dev, "src %s: source rate %d sink rate %d\n",
1986 sof_dbg_comp_config(scomp, &src->config);
2003 static int sof_widget_load_asrc(struct snd_soc_component *scomp, int index,
2008 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2023 ret = sof_parse_tokens(scomp, asrc, asrc_tokens,
2027 dev_err(scomp->dev, "error: parse asrc tokens failed %d\n",
2032 ret = sof_parse_tokens(scomp, &asrc->config, comp_tokens,
2036 dev_err(scomp->dev, "error: parse asrc.cfg tokens failed %d\n",
2041 dev_dbg(scomp->dev, "asrc %s: source rate %d sink rate %d "
2045 sof_dbg_comp_config(scomp, &asrc->config);
2062 static int sof_widget_load_siggen(struct snd_soc_component *scomp, int index,
2067 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2082 ret = sof_parse_tokens(scomp, tone, tone_tokens,
2086 dev_err(scomp->dev, "error: parse tone tokens failed %d\n",
2091 ret = sof_parse_tokens(scomp, &tone->config, comp_tokens,
2095 dev_err(scomp->dev, "error: parse tone.cfg tokens failed %d\n",
2100 dev_dbg(scomp->dev, "tone %s: frequency %d amplitude %d\n",
2102 sof_dbg_comp_config(scomp, &tone->config);
2115 static int sof_get_control_data(struct snd_soc_component *scomp,
2145 dev_err(scomp->dev, "error: unknown kcontrol type %d in widget %s\n",
2152 dev_err(scomp->dev, "error: no scontrol for widget %s\n",
2187 static int sof_process_load(struct snd_soc_component *scomp, int index,
2193 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2214 ret = sof_get_control_data(scomp, widget, wdata,
2240 ret = sof_parse_tokens(scomp, &process->config, comp_tokens,
2244 dev_err(scomp->dev, "error: parse process.cfg tokens failed %d\n",
2249 sof_dbg_comp_config(scomp, &process->config);
2272 dev_err(scomp->dev, "error: create process failed\n");
2289 dev_err(scomp->dev, "error: send control failed\n");
2307 static int sof_widget_load_process(struct snd_soc_component *scomp, int index,
2318 dev_err(scomp->dev, "error: process tokens not found\n");
2326 ret = sof_parse_tokens(scomp, &config, process_tokens,
2330 dev_err(scomp->dev, "error: parse process tokens failed %d\n",
2336 ret = sof_process_load(scomp, index, swidget, tw, r,
2339 dev_err(scomp->dev, "error: process loading failed\n");
2346 static int sof_widget_bind_event(struct snd_soc_component *scomp,
2372 dev_err(scomp->dev,
2379 static int sof_widget_ready(struct snd_soc_component *scomp, int index,
2383 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2397 swidget->scomp = scomp;
2406 dev_dbg(scomp->dev, "tplg: ready widget id %d pipe %d type %d name : %s stream %s\n",
2411 ret = sof_parse_tokens(scomp, &comp, core_tokens,
2415 dev_err(scomp->dev, "error: parsing core tokens failed %d\n",
2426 dev_err(scomp->dev, "error: enable core: %d\n", ret);
2431 ret = sof_parse_tokens(scomp, &swidget->comp_ext, comp_ext_tokens,
2435 dev_err(scomp->dev, "error: parsing comp_ext_tokens failed %d\n",
2451 ret = sof_widget_load_dai(scomp, index, swidget, tw, &reply, dai);
2453 sof_connect_dai_widget(scomp, w, tw, dai);
2461 ret = sof_widget_load_mixer(scomp, index, swidget, tw, &reply);
2464 ret = sof_widget_load_pga(scomp, index, swidget, tw, &reply);
2474 ret = sof_widget_load_buffer(scomp, index, swidget, tw, &reply);
2477 ret = sof_widget_load_pipeline(scomp, index, swidget, tw, &reply);
2480 ret = sof_widget_load_pcm(scomp, index, swidget,
2484 ret = sof_widget_load_pcm(scomp, index, swidget,
2488 ret = sof_widget_load_src(scomp, index, swidget, tw, &reply);
2491 ret = sof_widget_load_asrc(scomp, index, swidget, tw, &reply);
2494 ret = sof_widget_load_siggen(scomp, index, swidget, tw, &reply);
2497 ret = sof_widget_load_process(scomp, index, swidget, tw, &reply);
2501 ret = sof_widget_load_mux(scomp, index, swidget, tw, &reply);
2507 dev_dbg(scomp->dev, "widget type %d name %s not handled\n", swidget->id, tw->name);
2513 dev_err(scomp->dev,
2524 ret = sof_widget_bind_event(scomp, swidget,
2527 dev_err(scomp->dev, "error: widget event binding failed\n");
2539 static int sof_route_unload(struct snd_soc_component *scomp,
2556 static int sof_widget_unload(struct snd_soc_component *scomp,
2559 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2604 dev_err(scomp->dev, "error: powering down pipeline schedule core %d\n",
2632 dev_warn(scomp->dev, "unsupported kcontrol_type\n");
2656 static int sof_dai_load(struct snd_soc_component *scomp, int index,
2660 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2675 spcm->scomp = scomp;
2684 dev_dbg(scomp->dev, "tplg: load pcm %s\n", pcm->dai_name);
2689 ret = sof_parse_tokens(scomp, spcm, stream_tokens,
2693 dev_err(scomp->dev, "error: parse stream tokens failed %d\n",
2704 dev_vdbg(scomp->dev, "tplg: pcm %s stream tokens: playback d0i3:%d\n",
2713 dev_err(scomp->dev, "error: can't alloc page table for %s %d\n",
2720 ret = spcm_bind(scomp, spcm, stream);
2722 dev_err(scomp->dev,
2734 dev_vdbg(scomp->dev, "tplg: pcm %s stream tokens: capture d0i3:%d\n",
2743 dev_err(scomp->dev, "error: can't alloc page table for %s %d\n",
2749 ret = spcm_bind(scomp, spcm, stream);
2751 dev_err(scomp->dev,
2766 static int sof_dai_unload(struct snd_soc_component *scomp,
2879 static int sof_link_ssp_load(struct snd_soc_component *scomp, int index,
2885 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2897 ret = sof_parse_tokens(scomp, &config->ssp, ssp_tokens,
2901 dev_err(scomp->dev, "error: parse ssp tokens failed %d\n",
2915 dev_dbg(scomp->dev, "tplg: config SSP%d fmt 0x%x mclk %d bclk %d fclk %d width (%d)%d slots %d mclk id %d quirks %d\n",
2924 dev_err(scomp->dev, "error: invalid fsync rate for SSP%d\n",
2930 dev_err(scomp->dev, "error: invalid channel count for SSP%d\n",
2938 dev_err(scomp->dev, "error: failed to save DAI config for SSP%d\n",
2944 static int sof_link_sai_load(struct snd_soc_component *scomp, int index,
2950 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
2962 ret = sof_parse_tokens(scomp, &config->sai, sai_tokens,
2966 dev_err(scomp->dev, "error: parse sai tokens failed %d\n",
2981 dev_info(scomp->dev,
2988 dev_err(scomp->dev, "error: invalid channel count for SAI%d\n",
2996 dev_err(scomp->dev, "error: failed to save DAI config for SAI%d\n",
3002 static int sof_link_esai_load(struct snd_soc_component *scomp, int index,
3008 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3020 ret = sof_parse_tokens(scomp, &config->esai, esai_tokens,
3024 dev_err(scomp->dev, "error: parse esai tokens failed %d\n",
3038 dev_info(scomp->dev,
3045 dev_err(scomp->dev, "error: invalid channel count for ESAI%d\n",
3053 dev_err(scomp->dev, "error: failed to save DAI config for ESAI%d\n",
3059 static int sof_link_dmic_load(struct snd_soc_component *scomp, int index,
3065 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3076 ret = sof_parse_tokens(scomp, &config->dmic, dmic_tokens,
3080 dev_err(scomp->dev, "error: parse dmic tokens failed %d\n",
3086 ret = sof_parse_token_sets(scomp, &config->dmic.pdm[0], dmic_pdm_tokens,
3093 dev_err(scomp->dev, "error: parse dmic pdm tokens failed %d\n",
3102 dev_dbg(scomp->dev, "tplg: config DMIC%d driver version %d\n",
3104 dev_dbg(scomp->dev, "pdmclk_min %d pdm_clkmax %d duty_min %hd\n",
3107 dev_dbg(scomp->dev, "duty_max %hd fifo_fs %d num_pdms active %d\n",
3110 dev_dbg(scomp->dev, "fifo word length %hd\n", config->dmic.fifo_bits);
3113 dev_dbg(scomp->dev, "pdm %hd mic a %hd mic b %hd\n",
3117 dev_dbg(scomp->dev, "pdm %hd polarity a %hd polarity b %hd\n",
3121 dev_dbg(scomp->dev, "pdm %hd clk_edge %hd skew %hd\n",
3137 dev_err(scomp->dev, "error: failed to save DAI config for DMIC%d\n",
3143 static int sof_link_hda_load(struct snd_soc_component *scomp, int index,
3149 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3160 ret = sof_parse_tokens(scomp, &config->hda, hda_tokens,
3164 dev_err(scomp->dev, "error: parse hda tokens failed %d\n",
3169 dev_dbg(scomp->dev, "HDA config rate %d channels %d\n",
3174 dev_err(scomp->dev, "error: failed to find dai %s in %s",
3183 dev_err(scomp->dev, "error: failed to process hda dai link %s",
3189 static int sof_link_alh_load(struct snd_soc_component *scomp, int index,
3195 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3200 ret = sof_parse_tokens(scomp, &config->alh, alh_tokens,
3204 dev_err(scomp->dev, "error: parse alh tokens failed %d\n",
3215 dev_err(scomp->dev, "error: failed to save DAI config for ALH %d\n",
3222 static int sof_link_load(struct snd_soc_component *scomp, int index,
3234 dev_err(scomp->dev, "error: no platforms\n");
3237 link->platforms->name = dev_name(scomp->dev);
3264 dev_err(scomp->dev, "error: expected tokens for DAI, none found\n");
3272 ret = sof_parse_tokens(scomp, &config, dai_link_tokens,
3276 dev_err(scomp->dev, "error: parse link tokens failed %d\n",
3288 dev_err(scomp->dev, "error: unexpected DAI config count %d!\n",
3293 dev_dbg(scomp->dev, "tplg: %d hw_configs found, default id: %d!\n",
3302 dev_err(scomp->dev, "error: default hw_config id: %d not found!\n",
3317 ret = sof_link_ssp_load(scomp, index, link, cfg, hw_config,
3321 ret = sof_link_dmic_load(scomp, index, link, cfg, hw_config,
3325 ret = sof_link_hda_load(scomp, index, link, cfg, hw_config,
3329 ret = sof_link_alh_load(scomp, index, link, cfg, hw_config,
3333 ret = sof_link_sai_load(scomp, index, link, cfg, hw_config,
3337 ret = sof_link_esai_load(scomp, index, link, cfg, hw_config,
3341 dev_err(scomp->dev, "error: invalid DAI type %d\n",
3367 static int sof_link_unload(struct snd_soc_component *scomp,
3370 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3389 dev_err(scomp->dev, "error: failed to find dai %s in %s",
3406 dev_err(scomp->dev, "error: invalid DAI type %d\n",
3416 static int sof_route_load(struct snd_soc_component *scomp, int index,
3419 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3432 sroute->scomp = scomp;
3443 dev_dbg(scomp->dev, "sink %s control %s source %s\n",
3448 source_swidget = snd_sof_find_swidget(scomp, (char *)route->source);
3450 dev_err(scomp->dev, "error: source %s not found\n",
3469 sink_swidget = snd_sof_find_swidget(scomp, (char *)route->sink);
3471 dev_err(scomp->dev, "error: sink %s not found\n",
3495 dev_dbg(scomp->dev, "warning: neither Linked source component %s nor sink component %s is of buffer type, ignoring link\n",
3506 dev_err(scomp->dev, "error: failed to add route sink %s control %s source %s\n",
3515 dev_err(scomp->dev, "error: DSP failed to add route sink %s control %s source %s result %d\n",
3542 static int snd_sof_cache_kcontrol_val(struct snd_soc_component *scomp)
3544 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3564 dev_err(scomp->dev,
3574 dev_warn(scomp->dev,
3608 static void sof_complete(struct snd_soc_component *scomp)
3610 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
3621 snd_sof_complete_pipeline(scomp->dev, swidget);
3631 snd_sof_cache_kcontrol_val(scomp);
3635 static int sof_manifest(struct snd_soc_component *scomp, int index,
3645 dev_dbg(scomp->dev, "No topology ABI info\n");
3650 dev_err(scomp->dev, "error: invalid topology ABI size\n");
3654 dev_info(scomp->dev,
3665 dev_err(scomp->dev, "error: incompatible topology ABI version\n");
3671 dev_warn(scomp->dev, "warn: topology ABI is more recent than kernel\n");
3673 dev_err(scomp->dev, "error: topology ABI is more recent than kernel\n");
3732 int snd_sof_load_topology(struct snd_soc_component *scomp, const char *file)
3737 dev_dbg(scomp->dev, "loading topology:%s\n", file);
3739 ret = request_firmware(&fw, file, scomp->dev);
3741 dev_err(scomp->dev, "error: tplg request firmware %s failed err: %d\n",
3746 ret = snd_soc_tplg_component_load(scomp,
3750 dev_err(scomp->dev, "error: tplg component load failed %d\n",