Lines Matching refs:dai
11 #include <sound/soc-dai.h>
35 int axg_tdm_set_tdm_slots(struct snd_soc_dai *dai, u32 *tx_mask,
39 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
41 dai->playback_dma_data;
43 dai->capture_dma_data;
52 dev_err(dai->dev, "interface has no slot\n");
76 dev_err(dai->dev, "unsupported slot width: %d\n", slot_width);
82 /* Amend the dai driver and let dpcm merge do its job */
85 dai->driver->playback.channels_max = tx_slots;
86 dai->driver->playback.formats = fmt;
91 dai->driver->capture.channels_max = rx_slots;
92 dai->driver->capture.formats = fmt;
99 static int axg_tdm_iface_set_sysclk(struct snd_soc_dai *dai, int clk_id,
102 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
107 dev_warn(dai->dev, "master clock not provided\n");
118 static int axg_tdm_iface_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
120 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
125 dev_err(dai->dev, "cpu clock master: mclk missing\n");
135 dev_err(dai->dev, "only CBS_CFS and CBM_CFM are supported\n");
146 struct snd_soc_dai *dai)
148 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
150 snd_soc_dai_get_dma_data(dai, substream);
154 dev_err(dai->dev, "interface has not slots\n");
159 if (snd_soc_component_active(dai->component)) {
164 dev_err(dai->dev,
175 struct snd_soc_dai *dai)
177 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
178 struct axg_tdm_stream *ts = snd_soc_dai_get_dma_data(dai, substream);
187 dev_err(dai->dev, "not enough slots for channels\n");
192 dev_err(dai->dev, "incompatible slots width for stream\n");
204 static int axg_tdm_iface_set_lrclk(struct snd_soc_dai *dai,
207 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
213 dev_err(dai->dev, "setting sample clock failed: %d\n", ret);
242 dev_err(dai->dev,
251 dev_err(dai->dev,
259 static int axg_tdm_iface_set_sclk(struct snd_soc_dai *dai,
262 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
274 dev_err(dai->dev,
283 dev_err(dai->dev, "setting bit clock failed: %d\n", ret);
291 dev_err(dai->dev, "setting bit clock phase failed: %d\n", ret);
300 struct snd_soc_dai *dai)
302 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
310 dev_err(dai->dev, "bad slot number for format: %d\n",
321 dev_err(dai->dev, "unsupported dai format\n");
325 ret = axg_tdm_iface_set_stream(substream, params, dai);
331 ret = axg_tdm_iface_set_sclk(dai, params);
335 ret = axg_tdm_iface_set_lrclk(dai, params);
344 struct snd_soc_dai *dai)
346 struct axg_tdm_stream *ts = snd_soc_dai_get_dma_data(dai, substream);
355 struct snd_soc_dai *dai)
357 struct axg_tdm_stream *ts = snd_soc_dai_get_dma_data(dai, substream);
363 static int axg_tdm_iface_remove_dai(struct snd_soc_dai *dai)
365 if (dai->capture_dma_data)
366 axg_tdm_stream_free(dai->capture_dma_data);
368 if (dai->playback_dma_data)
369 axg_tdm_stream_free(dai->playback_dma_data);
374 static int axg_tdm_iface_probe_dai(struct snd_soc_dai *dai)
376 struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
378 if (dai->capture_widget) {
379 dai->capture_dma_data = axg_tdm_stream_alloc(iface);
380 if (!dai->capture_dma_data)
384 if (dai->playback_widget) {
385 dai->playback_dma_data = axg_tdm_stream_alloc(iface);
386 if (!dai->playback_dma_data) {
387 axg_tdm_iface_remove_dai(dai);
505 * Duplicate dai driver: depending on the slot masks configuration
537 * mclk maybe be missing when the cpu dai is in slave mode and
540 * throw an error if the cpu dai is master and mclk is missing