Lines Matching +full:is +full:- +full:compress +full:- +full:dai
1 /* SPDX-License-Identifier: GPL-2.0
3 * linux/sound/soc-dai.h -- ALSA SoC Layer
5 * Copyright: 2005-2008 Wolfson Microelectronics. PLC.
7 * Digital Audio Interface (DAI) API.
22 * DAI hardware audio formats.
40 * DAI Clock gating.
42 * DAI bit clocks can be gated (disabled) when the DAI is not
46 #define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */
49 * DAI hardware signal polarity.
51 * Specifies whether the DAI can also support inverted clocks for the specified
55 * - "normal" polarity means signal is available at rising edge of BCLK
56 * - "inverted" polarity means signal is available at falling edge of BCLK
59 * - I2S: frame consists of left then right channel data. Left channel starts
61 * - Left/Right Justified: frame consists of left then right channel data.
64 * - DSP A/B: Frame starts with rising FSYNC edge.
65 * - AC97: Frame starts with rising FSYNC edge.
67 * "Negative" FSYNC polarity is the one opposite of "normal" polarity.
75 * DAI hardware clock masters.
77 * This is wrt the codec, the inverse is true for the interface
78 * i.e. if the codec is clk and FRM master then the interface is
114 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
117 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
120 int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
123 int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio);
126 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt);
128 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
131 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
135 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
138 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
142 int snd_soc_dai_get_channel_map(struct snd_soc_dai *dai,
146 int snd_soc_dai_is_dummy(struct snd_soc_dai *dai);
148 int snd_soc_dai_hw_params(struct snd_soc_dai *dai,
151 void snd_soc_dai_hw_free(struct snd_soc_dai *dai,
153 int snd_soc_dai_startup(struct snd_soc_dai *dai,
155 void snd_soc_dai_shutdown(struct snd_soc_dai *dai,
157 snd_pcm_sframes_t snd_soc_dai_delay(struct snd_soc_dai *dai,
159 void snd_soc_dai_suspend(struct snd_soc_dai *dai);
160 void snd_soc_dai_resume(struct snd_soc_dai *dai);
161 int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
163 bool snd_soc_dai_stream_valid(struct snd_soc_dai *dai, int stream);
165 void snd_soc_dai_action(struct snd_soc_dai *dai,
167 static inline void snd_soc_dai_activate(struct snd_soc_dai *dai, in snd_soc_dai_activate() argument
170 snd_soc_dai_action(dai, stream, 1); in snd_soc_dai_activate()
172 static inline void snd_soc_dai_deactivate(struct snd_soc_dai *dai, in snd_soc_dai_deactivate() argument
175 snd_soc_dai_action(dai, stream, -1); in snd_soc_dai_deactivate()
177 int snd_soc_dai_active(struct snd_soc_dai *dai);
187 int snd_soc_dai_compr_startup(struct snd_soc_dai *dai,
189 void snd_soc_dai_compr_shutdown(struct snd_soc_dai *dai,
191 int snd_soc_dai_compr_trigger(struct snd_soc_dai *dai,
193 int snd_soc_dai_compr_set_params(struct snd_soc_dai *dai,
196 int snd_soc_dai_compr_get_params(struct snd_soc_dai *dai,
199 int snd_soc_dai_compr_ack(struct snd_soc_dai *dai,
202 int snd_soc_dai_compr_pointer(struct snd_soc_dai *dai,
205 int snd_soc_dai_compr_set_metadata(struct snd_soc_dai *dai,
208 int snd_soc_dai_compr_get_metadata(struct snd_soc_dai *dai,
214 * DAI clocking configuration, all optional.
217 int (*set_sysclk)(struct snd_soc_dai *dai,
219 int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,
221 int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
222 int (*set_bclk_ratio)(struct snd_soc_dai *dai, unsigned int ratio);
225 * DAI format configuration
228 int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt);
231 int (*set_tdm_slot)(struct snd_soc_dai *dai,
234 int (*set_channel_map)(struct snd_soc_dai *dai,
237 int (*get_channel_map)(struct snd_soc_dai *dai,
240 int (*set_tristate)(struct snd_soc_dai *dai, int tristate);
242 int (*set_stream)(struct snd_soc_dai *dai,
244 void *(*get_stream)(struct snd_soc_dai *dai, int direction);
247 * DAI digital mute - optional.
248 * Called by soc-core to minimise any pops.
250 int (*mute_stream)(struct snd_soc_dai *dai, int mute, int stream);
253 * ALSA PCM audio operations - all optional.
254 * Called by soc-core during audio PCM operations.
268 * compatible with the current state of the dai. For example this
269 * sequence of commands is possible: START STOP STOP.
290 * for compress ops
315 * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97
317 * structure for every DAI they have.
323 /* DAI description */
329 /* DAI driver callbacks */
330 int (*probe)(struct snd_soc_dai *dai);
331 int (*remove)(struct snd_soc_dai *dai);
332 /* compress dai */
336 struct snd_soc_dai *dai);
342 /* DAI capabilities */
349 /* probe ordering - for components with runtime dependencies */
357 * Holds runtime data for a DAI.
367 /* DAI runtime info */
373 /* DAI DMA data */
377 /* Symmetry data - only valid if symmetry is being enforced */
399 snd_soc_dai_get_pcm_stream(const struct snd_soc_dai *dai, int stream) in snd_soc_dai_get_pcm_stream() argument
402 &dai->driver->playback : &dai->driver->capture; in snd_soc_dai_get_pcm_stream()
407 struct snd_soc_dai *dai, int stream) in snd_soc_dai_get_widget() argument
410 dai->playback_widget : dai->capture_widget; in snd_soc_dai_get_widget()
413 static inline void *snd_soc_dai_get_dma_data(const struct snd_soc_dai *dai, in snd_soc_dai_get_dma_data() argument
416 return (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) ? in snd_soc_dai_get_dma_data()
417 dai->playback_dma_data : dai->capture_dma_data; in snd_soc_dai_get_dma_data()
420 static inline void snd_soc_dai_set_dma_data(struct snd_soc_dai *dai, in snd_soc_dai_set_dma_data() argument
424 if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) in snd_soc_dai_set_dma_data()
425 dai->playback_dma_data = data; in snd_soc_dai_set_dma_data()
427 dai->capture_dma_data = data; in snd_soc_dai_set_dma_data()
430 static inline void snd_soc_dai_init_dma_data(struct snd_soc_dai *dai, in snd_soc_dai_init_dma_data() argument
433 dai->playback_dma_data = playback; in snd_soc_dai_init_dma_data()
434 dai->capture_dma_data = capture; in snd_soc_dai_init_dma_data()
437 static inline void snd_soc_dai_set_drvdata(struct snd_soc_dai *dai, in snd_soc_dai_set_drvdata() argument
440 dev_set_drvdata(dai->dev, data); in snd_soc_dai_set_drvdata()
443 static inline void *snd_soc_dai_get_drvdata(struct snd_soc_dai *dai) in snd_soc_dai_get_drvdata() argument
445 return dev_get_drvdata(dai->dev); in snd_soc_dai_get_drvdata()
449 * snd_soc_dai_set_stream() - Configures a DAI for stream operation
450 * @dai: DAI
451 * @stream: STREAM (opaque structure depending on DAI type)
460 static inline int snd_soc_dai_set_stream(struct snd_soc_dai *dai, in snd_soc_dai_set_stream() argument
463 if (dai->driver->ops->set_stream) in snd_soc_dai_set_stream()
464 return dai->driver->ops->set_stream(dai, stream, direction); in snd_soc_dai_set_stream()
466 return -ENOTSUPP; in snd_soc_dai_set_stream()
470 * snd_soc_dai_get_stream() - Retrieves stream from DAI
471 * @dai: DAI
478 * ERR_PTR(-ENOTSUPP) if callback is not supported;
480 static inline void *snd_soc_dai_get_stream(struct snd_soc_dai *dai, in snd_soc_dai_get_stream() argument
483 if (dai->driver->ops->get_stream) in snd_soc_dai_get_stream()
484 return dai->driver->ops->get_stream(dai, direction); in snd_soc_dai_get_stream()
486 return ERR_PTR(-ENOTSUPP); in snd_soc_dai_get_stream()
490 snd_soc_dai_stream_active(struct snd_soc_dai *dai, int stream) in snd_soc_dai_stream_active() argument
492 return dai->stream_active[stream]; in snd_soc_dai_stream_active()