Lines Matching refs:be

37 	/* Negative values might be errors */
144 struct snd_soc_pcm_runtime *be = dpcm->be;
145 params = &be->dpcm[stream].hw_params;
148 "- %s\n", be->dai_link->name);
152 dpcm_state_string(be->dpcm[stream].state));
154 if ((be->dpcm[stream].state >= SND_SOC_DPCM_STATE_HW_PARAMS) &&
155 (be->dpcm[stream].state <= SND_SOC_DPCM_STATE_STOP))
224 name = kasprintf(GFP_KERNEL, "%s:%s", dpcm->be->dai_link->name,
273 static void dpcm_set_be_update_state(struct snd_soc_pcm_runtime *be,
276 be->dpcm[stream].runtime_update = state;
288 * Should typically be called when a stream is opened.
290 * Must be called with the rtd->card->pcm_mutex being held
315 * @rtd: The ASoC PCM runtime that should be checked.
317 * This function checks whether the power down delay should be ignored for a
363 struct snd_soc_pcm_runtime *be = dpcm->be;
365 dev_dbg(be->dev, "ASoC: BE %s event %d dir %d\n",
366 be->dai_link->name, event, dir);
369 (be->dpcm[dir].users >= 1))
372 snd_soc_dapm_stream_event(be, dir, event);
639 * chan min/max cannot be enforced if there are multiple CODEC DAIs
641 * channel allocation be fixed up later
660 * have bailed out on a higher level, since there would be no CPU or
743 * Called by ALSA when a PCM substream is closed. Private data can be
804 * then initialized and any private data can be allocated. This also calls
883 * rate, etc. This function is non atomic and can be called multiple times,
956 /* clear the corresponding DAIs parameters when going to be inactive */
985 * Frees resources allocated by hw_params, can be called multiple times
1007 * function can also be called multiple times and can allocate buffers
1035 * set up transfer direction, it should not need to be
1037 * not even be supported by that CODEC. There may be cases
1038 * however where a CODEC needs to be set up although it is
1218 * the runtime->delay will be updated via snd_soc_pcm_component/dai_delay().
1229 /* should be called *after* snd_soc_pcm_component_pointer() */
1240 struct snd_soc_pcm_runtime *be, int stream)
1250 if (dpcm->be == be && dpcm->fe == fe)
1255 be_substream = snd_soc_dpcm_get_substream(be, stream);
1258 dev_err(be->dev, "%s: FE is atomic but BE is nonatomic, invalid configuration\n",
1263 dev_dbg(be->dev, "FE is nonatomic but BE is not, forcing BE as nonatomic\n");
1271 dpcm->be = be;
1276 list_add(&dpcm->list_fe, &be->dpcm[stream].fe_clients);
1281 stream ? "<-" : "->", be->dai_link->name);
1290 struct snd_soc_pcm_runtime *be, int stream)
1296 if (!be->dpcm[stream].users)
1299 be_substream = snd_soc_dpcm_get_substream(be, stream);
1303 for_each_dpcm_fe(be, stream, dpcm) {
1310 stream ? "<-" : "->", dpcm->be->dai_link->name);
1330 dpcm->be->dai_link->name);
1337 stream ? "<-" : "->", dpcm->be->dai_link->name);
1340 dpcm_be_reparent(fe, dpcm->be, stream);
1360 struct snd_soc_pcm_runtime *be;
1367 for_each_card_rtds(card, be) {
1369 if (!be->dai_link->no_pcm)
1372 if (!snd_soc_dpcm_get_substream(be, stream))
1375 for_each_rtd_dais(be, i, dai) {
1382 return be;
1463 for_each_rtd_dais(dpcm->be, i, dai) {
1490 dpcm->be->dai_link->name, fe->dai_link->name);
1492 dpcm_set_be_update_state(dpcm->be, stream, SND_SOC_DPCM_UPDATE_BE);
1505 struct snd_soc_pcm_runtime *be;
1531 be = dpcm_get_be(card, widget, stream);
1532 if (!be) {
1544 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_NEW) &&
1545 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_CLOSE))
1549 err = dpcm_be_connect(fe, be, stream);
1558 dpcm_set_be_update_state(be, stream, SND_SOC_DPCM_UPDATE_BE);
1584 dpcm_set_be_update_state(dpcm->be, stream, SND_SOC_DPCM_UPDATE_NO);
1594 struct snd_soc_pcm_runtime *be = dpcm->be;
1596 snd_soc_dpcm_get_substream(be, stream);
1602 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1605 if (be->dpcm[stream].users == 0) {
1606 dev_err(be->dev, "ASoC: no users %s at close - state %d\n",
1608 be->dpcm[stream].state);
1612 if (--be->dpcm[stream].users != 0)
1615 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) {
1619 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) {
1620 __soc_pcm_hw_free(be, be_substream);
1621 be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE;
1625 __soc_pcm_close(be, be_substream);
1627 be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
1634 struct snd_soc_pcm_runtime *be;
1642 be = dpcm->be;
1643 be_substream = snd_soc_dpcm_get_substream(be, stream);
1646 dev_err(be->dev, "ASoC: no backend %s stream\n",
1652 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1656 if (be->dpcm[stream].users == DPCM_MAX_BE_USERS) {
1657 dev_err(be->dev, "ASoC: too many users %s at open %d\n",
1659 be->dpcm[stream].state);
1663 if (be->dpcm[stream].users++ != 0)
1666 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_NEW) &&
1667 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_CLOSE))
1670 dev_dbg(be->dev, "ASoC: open %s BE %s\n",
1671 stream ? "capture" : "playback", be->dai_link->name);
1674 err = __soc_pcm_open(be, be_substream);
1676 be->dpcm[stream].users--;
1677 if (be->dpcm[stream].users < 0)
1678 dev_err(be->dev, "ASoC: no users %s at unwind %d\n",
1680 be->dpcm[stream].state);
1682 be->dpcm[stream].state = SND_SOC_DPCM_STATE_CLOSE;
1685 be->dpcm[stream].be_start = 0;
1686 be->dpcm[stream].state = SND_SOC_DPCM_STATE_OPEN;
1751 struct snd_soc_pcm_runtime *be = dpcm->be;
1755 for_each_rtd_codec_dais(be, i, dai) {
1788 struct snd_soc_pcm_runtime *be = dpcm->be;
1793 for_each_rtd_cpu_dais(be, i, dai) {
1807 * chan min/max cannot be enforced if there are multiple CODEC
1810 if (be->dai_link->num_codecs == 1) {
1812 snd_soc_rtd_to_codec(be, 0), stream);
1836 struct snd_soc_pcm_runtime *be = dpcm->be;
1841 for_each_rtd_dais(be, i, dai) {
1877 struct snd_soc_pcm_runtime *be = dpcm->be;
1879 snd_soc_dpcm_get_substream(be, stream);
1974 struct snd_soc_pcm_runtime *be = dpcm->be;
1976 snd_soc_dpcm_get_substream(be, stream);
1979 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
1983 if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
1987 if (be->dpcm[stream].users > 1)
1990 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
1991 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) &&
1992 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
1993 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED) &&
1994 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
1995 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
1998 dev_dbg(be->dev, "ASoC: hw_free BE %s\n",
1999 be->dai_link->name);
2001 __soc_pcm_hw_free(be, be_substream);
2003 be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_FREE;
2033 struct snd_soc_pcm_runtime *be;
2041 be = dpcm->be;
2042 be_substream = snd_soc_dpcm_get_substream(be, stream);
2045 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2053 ret = snd_soc_link_be_hw_params_fixup(be, &hw_params);
2058 memcpy(&be->dpcm[stream].hw_params, &hw_params,
2062 if (!snd_soc_dpcm_can_be_params(fe, be, stream))
2065 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
2066 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2067 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE))
2070 dev_dbg(be->dev, "ASoC: hw_params BE %s\n",
2071 be->dai_link->name);
2073 ret = __soc_pcm_hw_params(be, be_substream, &hw_params);
2077 be->dpcm[stream].state = SND_SOC_DPCM_STATE_HW_PARAMS;
2083 __func__, be->dai_link->name, ret);
2087 be = dpcm->be;
2088 be_substream = snd_soc_dpcm_get_substream(be, stream);
2090 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2094 if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
2097 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&
2098 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2099 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
2100 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP))
2103 __soc_pcm_hw_free(be, be_substream);
2145 struct snd_soc_pcm_runtime *be;
2154 be = dpcm->be;
2155 be_substream = snd_soc_dpcm_get_substream(be, stream);
2157 snd_soc_dpcm_stream_lock_irqsave_nested(be, stream, flags);
2160 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2163 dev_dbg(be->dev, "ASoC: trigger BE %s cmd %d\n",
2164 be->dai_link->name, cmd);
2168 if (!be->dpcm[stream].be_start &&
2169 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) &&
2170 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
2171 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2174 be->dpcm[stream].be_start++;
2175 if (be->dpcm[stream].be_start != 1)
2178 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_PAUSED)
2185 be->dpcm[stream].be_start--;
2189 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2192 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
2195 be->dpcm[stream].be_start++;
2196 if (be->dpcm[stream].be_start != 1)
2201 be->dpcm[stream].be_start--;
2205 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2208 if (!be->dpcm[stream].be_start &&
2209 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) &&
2210 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2214 be->dpcm[stream].be_pause--;
2216 be->dpcm[stream].be_start++;
2217 if (be->dpcm[stream].be_start != 1)
2222 be->dpcm[stream].be_start--;
2226 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
2229 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) &&
2230 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2233 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_START)
2234 be->dpcm[stream].be_start--;
2236 if (be->dpcm[stream].be_start != 0)
2243 be->dpcm[stream].be_pause--;
2246 if (be->dpcm[stream].be_pause != 0)
2252 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_START)
2253 be->dpcm[stream].be_start++;
2256 be->dpcm[stream].be_pause++;
2261 if (be->dpcm[stream].be_pause != 0)
2262 be->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED;
2264 be->dpcm[stream].state = SND_SOC_DPCM_STATE_STOP;
2268 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2271 be->dpcm[stream].be_start--;
2272 if (be->dpcm[stream].be_start != 0)
2277 be->dpcm[stream].be_start++;
2281 be->dpcm[stream].state = SND_SOC_DPCM_STATE_SUSPEND;
2284 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START)
2288 be->dpcm[stream].be_pause++;
2290 be->dpcm[stream].be_start--;
2291 if (be->dpcm[stream].be_start != 0)
2296 be->dpcm[stream].be_start++;
2300 be->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED;
2304 snd_soc_dpcm_stream_unlock_irqrestore(be, stream, flags);
2455 struct snd_soc_pcm_runtime *be = dpcm->be;
2457 snd_soc_dpcm_get_substream(be, stream);
2460 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2463 if (!snd_soc_dpcm_can_be_prepared(fe, be, stream))
2466 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2467 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
2468 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND) &&
2469 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2472 dev_dbg(be->dev, "ASoC: prepare BE %s\n",
2473 be->dai_link->name);
2475 ret = __soc_pcm_prepare(be, be_substream);
2479 be->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
2578 /* startup must always be called for new BEs */
2634 struct snd_soc_pcm_runtime *be = dpcm->be;
2637 if (!snd_soc_dpcm_be_can_update(fe, be, stream))
2640 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_CLOSE ||
2641 be->dpcm[stream].state == SND_SOC_DPCM_STATE_NEW)
3029 struct snd_soc_pcm_runtime *be, int stream)
3033 be->dpcm[stream].runtime_update))
3041 snd_soc_dpcm_get_substream(struct snd_soc_pcm_runtime *be, int stream)
3043 return be->pcm->streams[stream].substream;
3048 struct snd_soc_pcm_runtime *be,
3058 for_each_dpcm_fe(be, stream, dpcm) {
3081 struct snd_soc_pcm_runtime *be, int stream)
3089 return snd_soc_dpcm_check_state(fe, be, stream, state, ARRAY_SIZE(state));
3098 struct snd_soc_pcm_runtime *be, int stream)
3107 return snd_soc_dpcm_check_state(fe, be, stream, state, ARRAY_SIZE(state));
3116 struct snd_soc_pcm_runtime *be, int stream)
3124 return snd_soc_dpcm_check_state(fe, be, stream, state, ARRAY_SIZE(state));