Lines Matching refs:afe

3  * mtk-afe-fe-dais.c  --  Mediatek afe fe dai operator
14 #include "mtk-afe-platform-driver.h"
16 #include "mtk-afe-fe-dai.h"
17 #include "mtk-base-afe.h"
41 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
44 struct mtk_base_afe_memif *memif = &afe->memif[memif_num];
45 const struct snd_pcm_hardware *mtk_afe_hardware = afe->mtk_afe_hardware;
53 mtk_regmap_update_bits(afe->regmap, memif->data->agent_disable_reg,
71 dev_err(afe->dev, "hw_constraint_minmax failed\n");
79 dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n");
83 int irq_id = mtk_dynamic_irq_acquire(afe);
85 if (irq_id != afe->irqs_size) {
89 dev_err(afe->dev, "%s() error: no more asys irq\n",
102 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
103 struct mtk_base_afe_memif *memif = &afe->memif[asoc_rtd_to_cpu(rtd, 0)->id];
108 mtk_regmap_update_bits(afe->regmap, memif->data->agent_disable_reg,
112 mtk_dynamic_irq_release(afe, irq_id);
124 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
126 struct mtk_base_afe_memif *memif = &afe->memif[id];
132 if (afe->request_dram_resource)
133 afe->request_dram_resource(afe->dev);
135 dev_dbg(afe->dev, "%s(), %s, ch %d, rate %d, fmt %d, dma_addr %pad, dma_area %p, dma_bytes 0x%zx\n",
146 ret = mtk_memif_set_addr(afe, id,
151 dev_err(afe->dev, "%s(), error, id %d, set addr, ret %d\n",
157 ret = mtk_memif_set_channel(afe, id, channels);
159 dev_err(afe->dev, "%s(), error, id %d, set channel %d, ret %d\n",
167 dev_err(afe->dev, "%s(), error, id %d, set rate %d, ret %d\n",
173 ret = mtk_memif_set_format(afe, id, format);
175 dev_err(afe->dev, "%s(), error, id %d, set format %d, ret %d\n",
187 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
189 if (afe->release_dram_resource)
190 afe->release_dram_resource(afe->dev);
201 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
203 struct mtk_base_afe_memif *memif = &afe->memif[id];
204 struct mtk_base_afe_irq *irqs = &afe->irqs[memif->irq_usage];
210 dev_dbg(afe->dev, "%s %s cmd=%d\n", __func__, memif->data->name, cmd);
215 ret = mtk_memif_set_enable(afe, id);
217 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
223 mtk_regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
228 fs = afe->irq_fs(substream, runtime->rate);
233 mtk_regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,
238 mtk_regmap_update_bits(afe->regmap, irq_data->irq_en_reg,
244 ret = mtk_memif_set_disable(afe, id);
246 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
251 mtk_regmap_update_bits(afe->regmap, irq_data->irq_en_reg,
254 mtk_regmap_write(afe->regmap, irq_data->irq_clr_reg,
267 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
272 if (afe->get_memif_pbuf_size) {
273 pbuf_size = afe->get_memif_pbuf_size(substream);
274 mtk_memif_set_pbuf_size(afe, id, pbuf_size);
292 int mtk_dynamic_irq_acquire(struct mtk_base_afe *afe)
296 mutex_lock(&afe->irq_alloc_lock);
297 for (i = 0; i < afe->irqs_size; ++i) {
298 if (afe->irqs[i].irq_occupyed == 0) {
299 afe->irqs[i].irq_occupyed = 1;
300 mutex_unlock(&afe->irq_alloc_lock);
304 mutex_unlock(&afe->irq_alloc_lock);
305 return afe->irqs_size;
309 int mtk_dynamic_irq_release(struct mtk_base_afe *afe, int irq_id)
311 mutex_lock(&afe->irq_alloc_lock);
312 if (irq_id >= 0 && irq_id < afe->irqs_size) {
313 afe->irqs[irq_id].irq_occupyed = 0;
314 mutex_unlock(&afe->irq_alloc_lock);
317 mutex_unlock(&afe->irq_alloc_lock);
324 struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
325 struct device *dev = afe->dev;
326 struct regmap *regmap = afe->regmap;
329 if (pm_runtime_status_suspended(dev) || afe->suspended)
332 if (!afe->reg_back_up)
333 afe->reg_back_up =
334 devm_kcalloc(dev, afe->reg_back_up_list_num,
337 for (i = 0; i < afe->reg_back_up_list_num; i++)
338 regmap_read(regmap, afe->reg_back_up_list[i],
339 &afe->reg_back_up[i]);
341 afe->suspended = true;
342 afe->runtime_suspend(dev);
349 struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
350 struct device *dev = afe->dev;
351 struct regmap *regmap = afe->regmap;
354 if (pm_runtime_status_suspended(dev) || !afe->suspended)
357 afe->runtime_resume(dev);
359 if (!afe->reg_back_up)
362 for (i = 0; i < afe->reg_back_up_list_num; i++)
363 mtk_regmap_write(regmap, afe->reg_back_up_list[i],
364 afe->reg_back_up[i]);
366 afe->suspended = false;
371 int mtk_memif_set_enable(struct mtk_base_afe *afe, int id)
373 struct mtk_base_afe_memif *memif = &afe->memif[id];
376 dev_warn(afe->dev, "%s(), error, id %d, enable_shift < 0\n",
380 return mtk_regmap_update_bits(afe->regmap, memif->data->enable_reg,
385 int mtk_memif_set_disable(struct mtk_base_afe *afe, int id)
387 struct mtk_base_afe_memif *memif = &afe->memif[id];
390 dev_warn(afe->dev, "%s(), error, id %d, enable_shift < 0\n",
394 return mtk_regmap_update_bits(afe->regmap, memif->data->enable_reg,
399 int mtk_memif_set_addr(struct mtk_base_afe *afe, int id,
404 struct mtk_base_afe_memif *memif = &afe->memif[id];
414 mtk_regmap_write(afe->regmap, memif->data->reg_ofs_base,
418 mtk_regmap_write(afe->regmap,
422 mtk_regmap_write(afe->regmap,
429 mtk_regmap_write(afe->regmap, memif->data->reg_ofs_base_msb,
431 mtk_regmap_write(afe->regmap,
438 mtk_regmap_update_bits(afe->regmap, memif->data->msb_reg,
445 int mtk_memif_set_channel(struct mtk_base_afe *afe,
448 struct mtk_base_afe_memif *memif = &afe->memif[id];
457 mtk_regmap_update_bits(afe->regmap, memif->data->quad_ch_reg,
467 return mtk_regmap_update_bits(afe->regmap, memif->data->mono_reg,
472 static int mtk_memif_set_rate_fs(struct mtk_base_afe *afe,
475 struct mtk_base_afe_memif *memif = &afe->memif[id];
478 mtk_regmap_update_bits(afe->regmap, memif->data->fs_reg,
485 int mtk_memif_set_rate(struct mtk_base_afe *afe,
490 if (!afe->get_dai_fs) {
491 dev_err(afe->dev, "%s(), error, afe->get_dai_fs == NULL\n",
496 fs = afe->get_dai_fs(afe, id, rate);
501 return mtk_memif_set_rate_fs(afe, id, fs);
511 struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
515 if (!afe->memif_fs) {
516 dev_err(afe->dev, "%s(), error, afe->memif_fs == NULL\n",
521 fs = afe->memif_fs(substream, rate);
526 return mtk_memif_set_rate_fs(afe, id, fs);
530 int mtk_memif_set_format(struct mtk_base_afe *afe,
533 struct mtk_base_afe_memif *memif = &afe->memif[id];
553 dev_err(afe->dev, "%s() error: unsupported format %d\n",
558 mtk_regmap_update_bits(afe->regmap, memif->data->hd_reg,
561 mtk_regmap_update_bits(afe->regmap, memif->data->hd_align_reg,
568 int mtk_memif_set_pbuf_size(struct mtk_base_afe *afe,
571 const struct mtk_base_memif_data *memif_data = afe->memif[id].data;
576 mtk_regmap_update_bits(afe->regmap, memif_data->pbuf_reg,
580 mtk_regmap_update_bits(afe->regmap, memif_data->minlen_reg,