Lines Matching +full:dai +full:- +full:tdm +full:- +full:slot +full:- +full:width +full:- +full:map
1 // SPDX-License-Identifier: GPL-2.0
3 // soc-dai.c
10 #include <sound/soc-dai.h>
11 #include <sound/soc-link.h>
13 #define soc_dai_ret(dai, ret) _soc_dai_ret(dai, __func__, ret) argument
14 static inline int _soc_dai_ret(const struct snd_soc_dai *dai, in _soc_dai_ret() argument
17 return snd_soc_ret(dai->dev, ret, in _soc_dai_ret()
18 "at %s() on %s\n", func, dai->name); in _soc_dai_ret()
25 #define soc_dai_mark_push(dai, substream, tgt) ((dai)->mark_##tgt = substream) argument
26 #define soc_dai_mark_pop(dai, tgt) ((dai)->mark_##tgt = NULL) argument
27 #define soc_dai_mark_match(dai, substream, tgt) ((dai)->mark_##tgt == substream) argument
30 * snd_soc_dai_set_sysclk - configure DAI system or master clock.
31 * @dai: DAI
32 * @clk_id: DAI specific clock ID
36 * Configures the DAI master (MCLK) or system (SYSCLK) clocking.
38 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, in snd_soc_dai_set_sysclk() argument
43 if (dai->driver->ops && in snd_soc_dai_set_sysclk()
44 dai->driver->ops->set_sysclk) in snd_soc_dai_set_sysclk()
45 ret = dai->driver->ops->set_sysclk(dai, clk_id, freq, dir); in snd_soc_dai_set_sysclk()
47 ret = snd_soc_component_set_sysclk(dai->component, clk_id, 0, in snd_soc_dai_set_sysclk()
50 return soc_dai_ret(dai, ret); in snd_soc_dai_set_sysclk()
55 * snd_soc_dai_set_clkdiv - configure DAI clock dividers.
56 * @dai: DAI
57 * @div_id: DAI specific clock divider ID
60 * Configures the clock dividers. This is used to derive the best DAI bit and
61 * frame clocks from the system or master clock. It's best to set the DAI bit
64 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, in snd_soc_dai_set_clkdiv() argument
67 int ret = -EINVAL; in snd_soc_dai_set_clkdiv()
69 if (dai->driver->ops && in snd_soc_dai_set_clkdiv()
70 dai->driver->ops->set_clkdiv) in snd_soc_dai_set_clkdiv()
71 ret = dai->driver->ops->set_clkdiv(dai, div_id, div); in snd_soc_dai_set_clkdiv()
73 return soc_dai_ret(dai, ret); in snd_soc_dai_set_clkdiv()
78 * snd_soc_dai_set_pll - configure DAI PLL.
79 * @dai: DAI
80 * @pll_id: DAI specific PLL ID
81 * @source: DAI specific source for the PLL
87 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source, in snd_soc_dai_set_pll() argument
92 if (dai->driver->ops && in snd_soc_dai_set_pll()
93 dai->driver->ops->set_pll) in snd_soc_dai_set_pll()
94 ret = dai->driver->ops->set_pll(dai, pll_id, source, in snd_soc_dai_set_pll()
97 ret = snd_soc_component_set_pll(dai->component, pll_id, source, in snd_soc_dai_set_pll()
100 return soc_dai_ret(dai, ret); in snd_soc_dai_set_pll()
105 * snd_soc_dai_set_bclk_ratio - configure BCLK to sample rate ratio.
106 * @dai: DAI
109 * Configures the DAI for a preset BCLK to sample rate ratio.
111 int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio) in snd_soc_dai_set_bclk_ratio() argument
113 int ret = -ENOTSUPP; in snd_soc_dai_set_bclk_ratio()
115 if (dai->driver->ops && in snd_soc_dai_set_bclk_ratio()
116 dai->driver->ops->set_bclk_ratio) in snd_soc_dai_set_bclk_ratio()
117 ret = dai->driver->ops->set_bclk_ratio(dai, ratio); in snd_soc_dai_set_bclk_ratio()
119 return soc_dai_ret(dai, ret); in snd_soc_dai_set_bclk_ratio()
125 struct snd_soc_dai *dai; in snd_soc_dai_get_fmt_max_priority() local
131 for_each_rtd_dais(rtd, i, dai) { in snd_soc_dai_get_fmt_max_priority()
132 if (dai->driver->ops && in snd_soc_dai_get_fmt_max_priority()
133 dai->driver->ops->num_auto_selectable_formats) in snd_soc_dai_get_fmt_max_priority()
134 max = max(max, dai->driver->ops->num_auto_selectable_formats); in snd_soc_dai_get_fmt_max_priority()
143 * snd_soc_dai_get_fmt - get supported audio format.
144 * @dai: DAI
148 * quality by the DAI so that the core can configure a
155 u64 snd_soc_dai_get_fmt(const struct snd_soc_dai *dai, int priority) in snd_soc_dai_get_fmt() argument
157 const struct snd_soc_dai_ops *ops = dai->driver->ops; in snd_soc_dai_get_fmt()
175 max = ops->num_auto_selectable_formats; in snd_soc_dai_get_fmt()
181 fmt |= ops->auto_selectable_formats[i]; in snd_soc_dai_get_fmt()
187 * snd_soc_dai_set_fmt - configure DAI hardware audio format.
188 * @dai: DAI
191 * Configures the DAI hardware format and clocking.
193 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) in snd_soc_dai_set_fmt() argument
195 int ret = -ENOTSUPP; in snd_soc_dai_set_fmt()
197 if (dai->driver->ops && dai->driver->ops->set_fmt) in snd_soc_dai_set_fmt()
198 ret = dai->driver->ops->set_fmt(dai, fmt); in snd_soc_dai_set_fmt()
200 return soc_dai_ret(dai, ret); in snd_soc_dai_set_fmt()
205 * snd_soc_xlate_tdm_slot_mask - generate tx/rx slot mask.
210 * Generates the TDM tx and rx slot default masks for DAI.
220 return -EINVAL; in snd_soc_xlate_tdm_slot_mask()
222 *tx_mask = (1 << slots) - 1; in snd_soc_xlate_tdm_slot_mask()
223 *rx_mask = (1 << slots) - 1; in snd_soc_xlate_tdm_slot_mask()
229 * snd_soc_dai_set_tdm_slot() - Configures a DAI for TDM operation
230 * @dai: The DAI to configure
234 * @slot_width: Width in bits for each slot.
236 * This function configures the specified DAI for TDM operation. @slot contains
237 * the total number of slots of the TDM stream and @slot_with the width of each
238 * slot in bit clock cycles. @tx_mask and @rx_mask are bitmasks specifying the
239 * active slots of the TDM stream for the specified DAI, i.e. which slots the
240 * DAI should write to or read from. If a bit is set the corresponding slot is
241 * active, if a bit is cleared the corresponding slot is inactive. Bit 0 maps to
242 * the first slot, bit 1 to the second slot and so on. The first active slot
243 * maps to the first channel of the DAI, the second active slot to the second
246 * TDM mode can be disabled by passing 0 for @slots. In this case @tx_mask,
251 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, in snd_soc_dai_set_tdm_slot() argument
255 int ret = -ENOTSUPP; in snd_soc_dai_set_tdm_slot()
262 if (dai->driver->ops && in snd_soc_dai_set_tdm_slot()
263 dai->driver->ops->xlate_tdm_slot_mask) in snd_soc_dai_set_tdm_slot()
264 ret = dai->driver->ops->xlate_tdm_slot_mask(slots, &tx_mask, &rx_mask); in snd_soc_dai_set_tdm_slot()
271 snd_soc_dai_tdm_mask_set(dai, stream, *tdm_mask[stream]); in snd_soc_dai_set_tdm_slot()
273 if (dai->driver->ops && in snd_soc_dai_set_tdm_slot()
274 dai->driver->ops->set_tdm_slot) in snd_soc_dai_set_tdm_slot()
275 ret = dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask, in snd_soc_dai_set_tdm_slot()
278 return soc_dai_ret(dai, ret); in snd_soc_dai_set_tdm_slot()
283 * snd_soc_dai_set_channel_map - configure DAI audio channel map
284 * @dai: DAI
286 * @tx_slot: pointer to an array which imply the TX slot number channel
287 * 0~num-1 uses
289 * @rx_slot: pointer to an array which imply the RX slot number channel
290 * 0~num-1 uses
292 * configure the relationship between channel number and TDM slot number.
294 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai, in snd_soc_dai_set_channel_map() argument
298 int ret = -ENOTSUPP; in snd_soc_dai_set_channel_map()
300 if (dai->driver->ops && in snd_soc_dai_set_channel_map()
301 dai->driver->ops->set_channel_map) in snd_soc_dai_set_channel_map()
302 ret = dai->driver->ops->set_channel_map(dai, tx_num, tx_slot, in snd_soc_dai_set_channel_map()
304 return soc_dai_ret(dai, ret); in snd_soc_dai_set_channel_map()
309 * snd_soc_dai_get_channel_map - Get DAI audio channel map
310 * @dai: DAI
312 * @tx_slot: pointer to an array which imply the TX slot number channel
313 * 0~num-1 uses
315 * @rx_slot: pointer to an array which imply the RX slot number channel
316 * 0~num-1 uses
318 int snd_soc_dai_get_channel_map(const struct snd_soc_dai *dai, in snd_soc_dai_get_channel_map() argument
322 int ret = -ENOTSUPP; in snd_soc_dai_get_channel_map()
324 if (dai->driver->ops && in snd_soc_dai_get_channel_map()
325 dai->driver->ops->get_channel_map) in snd_soc_dai_get_channel_map()
326 ret = dai->driver->ops->get_channel_map(dai, tx_num, tx_slot, in snd_soc_dai_get_channel_map()
328 return soc_dai_ret(dai, ret); in snd_soc_dai_get_channel_map()
333 * snd_soc_dai_set_tristate - configure DAI system or master clock.
334 * @dai: DAI
337 * Tristates the DAI so that others can use it.
339 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) in snd_soc_dai_set_tristate() argument
341 int ret = -EINVAL; in snd_soc_dai_set_tristate()
343 if (dai->driver->ops && in snd_soc_dai_set_tristate()
344 dai->driver->ops->set_tristate) in snd_soc_dai_set_tristate()
345 ret = dai->driver->ops->set_tristate(dai, tristate); in snd_soc_dai_set_tristate()
347 return soc_dai_ret(dai, ret); in snd_soc_dai_set_tristate()
351 int snd_soc_dai_prepare(struct snd_soc_dai *dai, in snd_soc_dai_prepare() argument
356 if (!snd_soc_dai_stream_valid(dai, substream->stream)) in snd_soc_dai_prepare()
359 if (dai->driver->ops && in snd_soc_dai_prepare()
360 dai->driver->ops->prepare) in snd_soc_dai_prepare()
361 ret = dai->driver->ops->prepare(substream, dai); in snd_soc_dai_prepare()
363 return soc_dai_ret(dai, ret); in snd_soc_dai_prepare()
367 int snd_soc_dai_mute_is_ctrled_at_trigger(struct snd_soc_dai *dai) in snd_soc_dai_mute_is_ctrled_at_trigger() argument
369 if (dai->driver->ops) in snd_soc_dai_mute_is_ctrled_at_trigger()
370 return dai->driver->ops->mute_unmute_on_trigger; in snd_soc_dai_mute_is_ctrled_at_trigger()
376 * snd_soc_dai_digital_mute - configure DAI system or master clock.
377 * @dai: DAI
381 * Mutes the DAI DAC.
383 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute, in snd_soc_dai_digital_mute() argument
386 int ret = -ENOTSUPP; in snd_soc_dai_digital_mute()
392 if (dai->driver->ops && in snd_soc_dai_digital_mute()
393 dai->driver->ops->mute_stream && in snd_soc_dai_digital_mute()
395 !dai->driver->ops->no_capture_mute)) in snd_soc_dai_digital_mute()
396 ret = dai->driver->ops->mute_stream(dai, mute, direction); in snd_soc_dai_digital_mute()
398 return soc_dai_ret(dai, ret); in snd_soc_dai_digital_mute()
402 int snd_soc_dai_hw_params(struct snd_soc_dai *dai, in snd_soc_dai_hw_params() argument
408 if (dai->driver->ops && in snd_soc_dai_hw_params()
409 dai->driver->ops->hw_params) in snd_soc_dai_hw_params()
410 ret = dai->driver->ops->hw_params(substream, params, dai); in snd_soc_dai_hw_params()
414 soc_dai_mark_push(dai, substream, hw_params); in snd_soc_dai_hw_params()
416 return soc_dai_ret(dai, ret); in snd_soc_dai_hw_params()
419 void snd_soc_dai_hw_free(struct snd_soc_dai *dai, in snd_soc_dai_hw_free() argument
423 if (rollback && !soc_dai_mark_match(dai, substream, hw_params)) in snd_soc_dai_hw_free()
426 if (dai->driver->ops && in snd_soc_dai_hw_free()
427 dai->driver->ops->hw_free) in snd_soc_dai_hw_free()
428 dai->driver->ops->hw_free(substream, dai); in snd_soc_dai_hw_free()
431 soc_dai_mark_pop(dai, hw_params); in snd_soc_dai_hw_free()
434 int snd_soc_dai_startup(struct snd_soc_dai *dai, in snd_soc_dai_startup() argument
439 if (!snd_soc_dai_stream_valid(dai, substream->stream)) in snd_soc_dai_startup()
442 if (dai->driver->ops && in snd_soc_dai_startup()
443 dai->driver->ops->startup) in snd_soc_dai_startup()
444 ret = dai->driver->ops->startup(substream, dai); in snd_soc_dai_startup()
448 soc_dai_mark_push(dai, substream, startup); in snd_soc_dai_startup()
450 return soc_dai_ret(dai, ret); in snd_soc_dai_startup()
453 void snd_soc_dai_shutdown(struct snd_soc_dai *dai, in snd_soc_dai_shutdown() argument
457 if (!snd_soc_dai_stream_valid(dai, substream->stream)) in snd_soc_dai_shutdown()
460 if (rollback && !soc_dai_mark_match(dai, substream, startup)) in snd_soc_dai_shutdown()
463 if (dai->driver->ops && in snd_soc_dai_shutdown()
464 dai->driver->ops->shutdown) in snd_soc_dai_shutdown()
465 dai->driver->ops->shutdown(substream, dai); in snd_soc_dai_shutdown()
468 soc_dai_mark_pop(dai, startup); in snd_soc_dai_shutdown()
471 int snd_soc_dai_compress_new(struct snd_soc_dai *dai, in snd_soc_dai_compress_new() argument
474 int ret = -ENOTSUPP; in snd_soc_dai_compress_new()
475 if (dai->driver->ops && in snd_soc_dai_compress_new()
476 dai->driver->ops->compress_new) in snd_soc_dai_compress_new()
477 ret = dai->driver->ops->compress_new(rtd); in snd_soc_dai_compress_new()
478 return soc_dai_ret(dai, ret); in snd_soc_dai_compress_new()
482 * snd_soc_dai_stream_valid() - check if a DAI supports the given stream
484 * Returns true if the DAI supports the indicated stream type.
486 bool snd_soc_dai_stream_valid(const struct snd_soc_dai *dai, int dir) in snd_soc_dai_stream_valid() argument
488 const struct snd_soc_pcm_stream *stream = snd_soc_dai_get_pcm_stream(dai, dir); in snd_soc_dai_stream_valid()
491 return stream->channels_min; in snd_soc_dai_stream_valid()
494 void snd_soc_dai_action(struct snd_soc_dai *dai, in snd_soc_dai_action() argument
498 dai->stream[stream].active += action; in snd_soc_dai_action()
501 dai->component->active += action; in snd_soc_dai_action()
505 int snd_soc_dai_active(const struct snd_soc_dai *dai) in snd_soc_dai_active() argument
511 active += dai->stream[stream].active; in snd_soc_dai_active()
519 struct snd_soc_dai *dai; in snd_soc_pcm_dai_probe() local
522 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_probe()
523 if (dai->probed) in snd_soc_pcm_dai_probe()
526 if (dai->driver->ops) { in snd_soc_pcm_dai_probe()
527 if (dai->driver->ops->probe_order != order) in snd_soc_pcm_dai_probe()
530 if (dai->driver->ops->probe) { in snd_soc_pcm_dai_probe()
531 int ret = dai->driver->ops->probe(dai); in snd_soc_pcm_dai_probe()
534 return soc_dai_ret(dai, ret); in snd_soc_pcm_dai_probe()
537 dai->probed = 1; in snd_soc_pcm_dai_probe()
545 struct snd_soc_dai *dai; in snd_soc_pcm_dai_remove() local
548 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_remove()
549 if (!dai->probed) in snd_soc_pcm_dai_remove()
552 if (dai->driver->ops) { in snd_soc_pcm_dai_remove()
553 if (dai->driver->ops->remove_order != order) in snd_soc_pcm_dai_remove()
556 if (dai->driver->ops->remove) { in snd_soc_pcm_dai_remove()
557 r = dai->driver->ops->remove(dai); in snd_soc_pcm_dai_remove()
562 dai->probed = 0; in snd_soc_pcm_dai_remove()
570 struct snd_soc_dai *dai; in snd_soc_pcm_dai_new() local
573 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_new()
574 if (dai->driver->ops && in snd_soc_pcm_dai_new()
575 dai->driver->ops->pcm_new) { in snd_soc_pcm_dai_new()
576 int ret = dai->driver->ops->pcm_new(rtd, dai); in snd_soc_pcm_dai_new()
578 return soc_dai_ret(dai, ret); in snd_soc_pcm_dai_new()
588 struct snd_soc_dai *dai; in snd_soc_pcm_dai_prepare() local
591 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_prepare()
592 ret = snd_soc_dai_prepare(dai, substream); in snd_soc_pcm_dai_prepare()
600 static int soc_dai_trigger(struct snd_soc_dai *dai, in soc_dai_trigger() argument
605 if (!snd_soc_dai_stream_valid(dai, substream->stream)) in soc_dai_trigger()
608 if (dai->driver->ops && in soc_dai_trigger()
609 dai->driver->ops->trigger) in soc_dai_trigger()
610 ret = dai->driver->ops->trigger(substream, cmd, dai); in soc_dai_trigger()
612 return soc_dai_ret(dai, ret); in soc_dai_trigger()
619 struct snd_soc_dai *dai; in snd_soc_pcm_dai_trigger() local
626 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_trigger()
627 ret = soc_dai_trigger(dai, substream, cmd); in snd_soc_pcm_dai_trigger()
631 if (snd_soc_dai_mute_is_ctrled_at_trigger(dai)) in snd_soc_pcm_dai_trigger()
632 snd_soc_dai_digital_mute(dai, 0, substream->stream); in snd_soc_pcm_dai_trigger()
634 soc_dai_mark_push(dai, substream, trigger); in snd_soc_pcm_dai_trigger()
640 for_each_rtd_dais(rtd, i, dai) { in snd_soc_pcm_dai_trigger()
641 if (rollback && !soc_dai_mark_match(dai, substream, trigger)) in snd_soc_pcm_dai_trigger()
644 if (snd_soc_dai_mute_is_ctrled_at_trigger(dai)) in snd_soc_pcm_dai_trigger()
645 snd_soc_dai_digital_mute(dai, 1, substream->stream); in snd_soc_pcm_dai_trigger()
647 r = soc_dai_trigger(dai, substream, cmd); in snd_soc_pcm_dai_trigger()
650 soc_dai_mark_pop(dai, trigger); in snd_soc_pcm_dai_trigger()
662 struct snd_soc_dai *dai; in snd_soc_pcm_dai_delay() local
673 for_each_rtd_cpu_dais(rtd, i, dai) in snd_soc_pcm_dai_delay()
674 if (dai->driver->ops && in snd_soc_pcm_dai_delay()
675 dai->driver->ops->delay) in snd_soc_pcm_dai_delay()
676 *cpu_delay = max(*cpu_delay, dai->driver->ops->delay(substream, dai)); in snd_soc_pcm_dai_delay()
679 for_each_rtd_codec_dais(rtd, i, dai) in snd_soc_pcm_dai_delay()
680 if (dai->driver->ops && in snd_soc_pcm_dai_delay()
681 dai->driver->ops->delay) in snd_soc_pcm_dai_delay()
682 *codec_delay = max(*codec_delay, dai->driver->ops->delay(substream, dai)); in snd_soc_pcm_dai_delay()
685 int snd_soc_dai_compr_startup(struct snd_soc_dai *dai, in snd_soc_dai_compr_startup() argument
690 if (dai->driver->cops && in snd_soc_dai_compr_startup()
691 dai->driver->cops->startup) in snd_soc_dai_compr_startup()
692 ret = dai->driver->cops->startup(cstream, dai); in snd_soc_dai_compr_startup()
696 soc_dai_mark_push(dai, cstream, compr_startup); in snd_soc_dai_compr_startup()
698 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_startup()
702 void snd_soc_dai_compr_shutdown(struct snd_soc_dai *dai, in snd_soc_dai_compr_shutdown() argument
706 if (rollback && !soc_dai_mark_match(dai, cstream, compr_startup)) in snd_soc_dai_compr_shutdown()
709 if (dai->driver->cops && in snd_soc_dai_compr_shutdown()
710 dai->driver->cops->shutdown) in snd_soc_dai_compr_shutdown()
711 dai->driver->cops->shutdown(cstream, dai); in snd_soc_dai_compr_shutdown()
714 soc_dai_mark_pop(dai, compr_startup); in snd_soc_dai_compr_shutdown()
718 int snd_soc_dai_compr_trigger(struct snd_soc_dai *dai, in snd_soc_dai_compr_trigger() argument
723 if (dai->driver->cops && in snd_soc_dai_compr_trigger()
724 dai->driver->cops->trigger) in snd_soc_dai_compr_trigger()
725 ret = dai->driver->cops->trigger(cstream, cmd, dai); in snd_soc_dai_compr_trigger()
727 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_trigger()
731 int snd_soc_dai_compr_set_params(struct snd_soc_dai *dai, in snd_soc_dai_compr_set_params() argument
737 if (dai->driver->cops && in snd_soc_dai_compr_set_params()
738 dai->driver->cops->set_params) in snd_soc_dai_compr_set_params()
739 ret = dai->driver->cops->set_params(cstream, params, dai); in snd_soc_dai_compr_set_params()
741 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_set_params()
745 int snd_soc_dai_compr_get_params(struct snd_soc_dai *dai, in snd_soc_dai_compr_get_params() argument
751 if (dai->driver->cops && in snd_soc_dai_compr_get_params()
752 dai->driver->cops->get_params) in snd_soc_dai_compr_get_params()
753 ret = dai->driver->cops->get_params(cstream, params, dai); in snd_soc_dai_compr_get_params()
755 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_get_params()
759 int snd_soc_dai_compr_ack(struct snd_soc_dai *dai, in snd_soc_dai_compr_ack() argument
765 if (dai->driver->cops && in snd_soc_dai_compr_ack()
766 dai->driver->cops->ack) in snd_soc_dai_compr_ack()
767 ret = dai->driver->cops->ack(cstream, bytes, dai); in snd_soc_dai_compr_ack()
769 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_ack()
773 int snd_soc_dai_compr_pointer(struct snd_soc_dai *dai, in snd_soc_dai_compr_pointer() argument
779 if (dai->driver->cops && in snd_soc_dai_compr_pointer()
780 dai->driver->cops->pointer) in snd_soc_dai_compr_pointer()
781 ret = dai->driver->cops->pointer(cstream, tstamp, dai); in snd_soc_dai_compr_pointer()
783 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_pointer()
787 int snd_soc_dai_compr_set_metadata(struct snd_soc_dai *dai, in snd_soc_dai_compr_set_metadata() argument
793 if (dai->driver->cops && in snd_soc_dai_compr_set_metadata()
794 dai->driver->cops->set_metadata) in snd_soc_dai_compr_set_metadata()
795 ret = dai->driver->cops->set_metadata(cstream, metadata, dai); in snd_soc_dai_compr_set_metadata()
797 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_set_metadata()
801 int snd_soc_dai_compr_get_metadata(struct snd_soc_dai *dai, in snd_soc_dai_compr_get_metadata() argument
807 if (dai->driver->cops && in snd_soc_dai_compr_get_metadata()
808 dai->driver->cops->get_metadata) in snd_soc_dai_compr_get_metadata()
809 ret = dai->driver->cops->get_metadata(cstream, metadata, dai); in snd_soc_dai_compr_get_metadata()
811 return soc_dai_ret(dai, ret); in snd_soc_dai_compr_get_metadata()