Lines Matching +full:mt8186 +full:- +full:memory +full:- +full:port

1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/dma-mapping.h>
17 #include "../common/mtk-afe-platform-driver.h"
18 #include "../common/mtk-afe-fe-dai.h"
20 #include "mt8186-afe-common.h"
21 #include "mt8186-afe-clk.h"
22 #include "mt8186-afe-gpio.h"
23 #include "mt8186-interconnection.h"
43 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_fe_startup()
45 struct snd_pcm_runtime *runtime = substream->runtime; in mt8186_fe_startup()
46 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_startup()
47 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_startup()
48 const struct snd_pcm_hardware *mtk_afe_hardware = afe->mtk_afe_hardware; in mt8186_fe_startup()
51 memif->substream = substream; in mt8186_fe_startup()
53 snd_pcm_hw_constraint_step(substream->runtime, 0, in mt8186_fe_startup()
61 dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n"); in mt8186_fe_startup()
66 if (memif->irq_usage < 0) { in mt8186_fe_startup()
69 if (irq_id != afe->irqs_size) { in mt8186_fe_startup()
71 memif->irq_usage = irq_id; in mt8186_fe_startup()
73 dev_err(afe->dev, "%s() error: no more asys irq\n", in mt8186_fe_startup()
75 return -EBUSY; in mt8186_fe_startup()
85 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_fe_shutdown()
87 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_fe_shutdown()
88 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_shutdown()
89 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_shutdown()
90 int irq_id = memif->irq_usage; in mt8186_fe_shutdown()
92 memif->substream = NULL; in mt8186_fe_shutdown()
93 afe_priv->irq_cnt[id] = 0; in mt8186_fe_shutdown()
94 afe_priv->xrun_assert[id] = 0; in mt8186_fe_shutdown()
96 if (!memif->const_irq) { in mt8186_fe_shutdown()
98 memif->irq_usage = -1; in mt8186_fe_shutdown()
99 memif->substream = NULL; in mt8186_fe_shutdown()
107 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_fe_hw_params()
109 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_hw_params()
123 int fs_mode = mt8186_rate_transform(afe->dev, rate, id); in mt8186_fe_hw_params()
127 (channels - 1) << CHANNEL_MERGE0_CHNUM_SFT | in mt8186_fe_hw_params()
132 regmap_update_bits(afe->regmap, AFE_CM1_CON, mask, val); in mt8186_fe_hw_params()
146 dev_err(afe->dev, "%s failed\n", __func__); in mt8186_fe_hw_free()
156 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_fe_trigger()
157 struct snd_pcm_runtime * const runtime = substream->runtime; in mt8186_fe_trigger()
159 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_fe_trigger()
160 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_trigger()
161 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_trigger()
162 int irq_id = memif->irq_usage; in mt8186_fe_trigger()
163 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_fe_trigger()
164 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_fe_trigger()
165 unsigned int rate = runtime->rate; in mt8186_fe_trigger()
170 dev_dbg(afe->dev, "%s(), %s cmd %d, irq_id %d\n", in mt8186_fe_trigger()
171 __func__, memif->data->name, cmd, irq_id); in mt8186_fe_trigger()
178 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n", in mt8186_fe_trigger()
187 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE && in mt8186_fe_trigger()
188 ((runtime->period_size * 1000) / rate <= 10)) in mt8186_fe_trigger()
192 if (afe_priv->irq_cnt[id] > 0) in mt8186_fe_trigger()
193 counter = afe_priv->irq_cnt[id]; in mt8186_fe_trigger()
195 counter = runtime->period_size; in mt8186_fe_trigger()
197 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_fe_trigger()
198 irq_data->irq_cnt_maskbit in mt8186_fe_trigger()
199 << irq_data->irq_cnt_shift, in mt8186_fe_trigger()
200 counter << irq_data->irq_cnt_shift); in mt8186_fe_trigger()
203 fs = afe->irq_fs(substream, runtime->rate); in mt8186_fe_trigger()
205 return -EINVAL; in mt8186_fe_trigger()
207 regmap_update_bits(afe->regmap, irq_data->irq_fs_reg, in mt8186_fe_trigger()
208 irq_data->irq_fs_maskbit in mt8186_fe_trigger()
209 << irq_data->irq_fs_shift, in mt8186_fe_trigger()
210 fs << irq_data->irq_fs_shift); in mt8186_fe_trigger()
213 if (runtime->stop_threshold != ~(0U)) in mt8186_fe_trigger()
214 regmap_update_bits(afe->regmap, in mt8186_fe_trigger()
215 irq_data->irq_en_reg, in mt8186_fe_trigger()
216 1 << irq_data->irq_en_shift, in mt8186_fe_trigger()
217 1 << irq_data->irq_en_shift); in mt8186_fe_trigger()
221 if (afe_priv->xrun_assert[id] > 0) { in mt8186_fe_trigger()
222 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { in mt8186_fe_trigger()
225 if (avail >= runtime->buffer_size) in mt8186_fe_trigger()
226 dev_dbg(afe->dev, "%s(), id %d, xrun assert\n", in mt8186_fe_trigger()
233 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n", in mt8186_fe_trigger()
237 if (runtime->stop_threshold != ~(0U)) in mt8186_fe_trigger()
238 regmap_update_bits(afe->regmap, in mt8186_fe_trigger()
239 irq_data->irq_en_reg, in mt8186_fe_trigger()
240 1 << irq_data->irq_en_shift, in mt8186_fe_trigger()
241 0 << irq_data->irq_en_shift); in mt8186_fe_trigger()
244 regmap_write(afe->regmap, irq_data->irq_clr_reg, in mt8186_fe_trigger()
245 1 << irq_data->irq_clr_shift); in mt8186_fe_trigger()
248 return -EINVAL; in mt8186_fe_trigger()
255 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_memif_fs()
259 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_memif_fs()
261 return mt8186_rate_transform(afe->dev, rate, id); in mt8186_memif_fs()
267 return mt8186_rate_transform(afe->dev, rate, dai_id); in mt8186_get_dai_fs()
272 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_irq_fs()
277 return mt8186_general_rate_transform(afe->dev, rate); in mt8186_irq_fs()
282 struct snd_pcm_runtime *runtime = substream->runtime; in mt8186_get_memif_pbuf_size()
284 if ((runtime->period_size * 1000) / runtime->rate > 10) in mt8186_get_memif_pbuf_size()
293 struct snd_soc_pcm_runtime *rtd = substream->private_data; in mt8186_fe_prepare()
294 struct snd_pcm_runtime * const runtime = substream->runtime; in mt8186_fe_prepare()
296 int id = asoc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_prepare()
297 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_prepare()
298 int irq_id = memif->irq_usage; in mt8186_fe_prepare()
299 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_fe_prepare()
300 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_fe_prepare()
301 unsigned int counter = runtime->period_size; in mt8186_fe_prepare()
310 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_fe_prepare()
311 irq_data->irq_cnt_maskbit in mt8186_fe_prepare()
312 << irq_data->irq_cnt_shift, in mt8186_fe_prepare()
313 counter << irq_data->irq_cnt_shift); in mt8186_fe_prepare()
316 fs = afe->irq_fs(substream, runtime->rate); in mt8186_fe_prepare()
319 return -EINVAL; in mt8186_fe_prepare()
321 regmap_update_bits(afe->regmap, irq_data->irq_fs_reg, in mt8186_fe_prepare()
322 irq_data->irq_fs_maskbit in mt8186_fe_prepare()
323 << irq_data->irq_fs_shift, in mt8186_fe_prepare()
324 fs << irq_data->irq_fs_shift); in mt8186_fe_prepare()
355 /* FE DAIs: memory intefaces to CPU */
568 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt1_get()
570 ucontrol->value.integer.value[0] = in mt8186_irq_cnt1_get()
571 afe_priv->irq_cnt[MT8186_PRIMARY_MEMIF]; in mt8186_irq_cnt1_get()
581 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt1_set()
583 struct mtk_base_afe_memif *memif = &afe->memif[memif_num]; in mt8186_irq_cnt1_set()
584 int irq_id = memif->irq_usage; in mt8186_irq_cnt1_set()
585 int irq_cnt = afe_priv->irq_cnt[memif_num]; in mt8186_irq_cnt1_set()
587 dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n", in mt8186_irq_cnt1_set()
588 __func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]); in mt8186_irq_cnt1_set()
590 if (irq_cnt == ucontrol->value.integer.value[0]) in mt8186_irq_cnt1_set()
593 irq_cnt = ucontrol->value.integer.value[0]; in mt8186_irq_cnt1_set()
594 afe_priv->irq_cnt[memif_num] = irq_cnt; in mt8186_irq_cnt1_set()
596 if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) { in mt8186_irq_cnt1_set()
597 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_irq_cnt1_set()
598 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_irq_cnt1_set()
600 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_irq_cnt1_set()
601 irq_data->irq_cnt_maskbit in mt8186_irq_cnt1_set()
602 << irq_data->irq_cnt_shift, in mt8186_irq_cnt1_set()
603 irq_cnt << irq_data->irq_cnt_shift); in mt8186_irq_cnt1_set()
605 dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n", in mt8186_irq_cnt1_set()
617 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt2_get()
619 ucontrol->value.integer.value[0] = in mt8186_irq_cnt2_get()
620 afe_priv->irq_cnt[MT8186_RECORD_MEMIF]; in mt8186_irq_cnt2_get()
630 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt2_set()
632 struct mtk_base_afe_memif *memif = &afe->memif[memif_num]; in mt8186_irq_cnt2_set()
633 int irq_id = memif->irq_usage; in mt8186_irq_cnt2_set()
634 int irq_cnt = afe_priv->irq_cnt[memif_num]; in mt8186_irq_cnt2_set()
636 dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n", in mt8186_irq_cnt2_set()
637 __func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]); in mt8186_irq_cnt2_set()
639 if (irq_cnt == ucontrol->value.integer.value[0]) in mt8186_irq_cnt2_set()
642 irq_cnt = ucontrol->value.integer.value[0]; in mt8186_irq_cnt2_set()
643 afe_priv->irq_cnt[memif_num] = irq_cnt; in mt8186_irq_cnt2_set()
645 if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) { in mt8186_irq_cnt2_set()
646 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_irq_cnt2_set()
647 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_irq_cnt2_set()
649 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_irq_cnt2_set()
650 irq_data->irq_cnt_maskbit in mt8186_irq_cnt2_set()
651 << irq_data->irq_cnt_shift, in mt8186_irq_cnt2_set()
652 irq_cnt << irq_data->irq_cnt_shift); in mt8186_irq_cnt2_set()
654 dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n", in mt8186_irq_cnt2_set()
666 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_record_xrun_assert_get()
667 int xrun_assert = afe_priv->xrun_assert[MT8186_RECORD_MEMIF]; in mt8186_record_xrun_assert_get()
669 ucontrol->value.integer.value[0] = xrun_assert; in mt8186_record_xrun_assert_get()
679 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_record_xrun_assert_set()
680 int xrun_assert = ucontrol->value.integer.value[0]; in mt8186_record_xrun_assert_set()
682 dev_dbg(afe->dev, "%s(), xrun_assert %d\n", __func__, xrun_assert); in mt8186_record_xrun_assert_set()
684 if (xrun_assert == afe_priv->xrun_assert[MT8186_RECORD_MEMIF]) in mt8186_record_xrun_assert_set()
687 afe_priv->xrun_assert[MT8186_RECORD_MEMIF] = xrun_assert; in mt8186_record_xrun_assert_set()
1280 /* inter-connections */
1547 .agent_disable_reg = -1,
1548 .agent_disable_shift = -1,
1549 .msb_reg = -1,
1550 .msb_shift = -1,
1581 .agent_disable_reg = -1,
1582 .agent_disable_shift = -1,
1583 .msb_reg = -1,
1584 .msb_shift = -1,
1612 .agent_disable_reg = -1,
1613 .agent_disable_shift = -1,
1614 .msb_reg = -1,
1615 .msb_shift = -1,
1643 .agent_disable_reg = -1,
1644 .agent_disable_shift = -1,
1645 .msb_reg = -1,
1646 .msb_shift = -1,
1674 .agent_disable_reg = -1,
1675 .agent_disable_shift = -1,
1676 .msb_reg = -1,
1677 .msb_shift = -1,
1705 .agent_disable_reg = -1,
1706 .agent_disable_shift = -1,
1707 .msb_reg = -1,
1708 .msb_shift = -1,
1736 .agent_disable_reg = -1,
1737 .agent_disable_shift = -1,
1738 .msb_reg = -1,
1739 .msb_shift = -1,
1767 .agent_disable_reg = -1,
1768 .agent_disable_shift = -1,
1769 .msb_reg = -1,
1770 .msb_shift = -1,
1798 .agent_disable_reg = -1,
1799 .agent_disable_shift = -1,
1800 .msb_reg = -1,
1801 .msb_shift = -1,
1832 .agent_disable_reg = -1,
1833 .agent_disable_shift = -1,
1834 .msb_reg = -1,
1835 .msb_shift = -1,
1857 .agent_disable_reg = -1,
1858 .agent_disable_shift = -1,
1859 .msb_reg = -1,
1860 .msb_shift = -1,
1882 .agent_disable_reg = -1,
1883 .agent_disable_shift = -1,
1884 .msb_reg = -1,
1885 .msb_shift = -1,
1907 .agent_disable_reg = -1,
1908 .agent_disable_shift = -1,
1909 .msb_reg = -1,
1910 .msb_shift = -1,
1932 .agent_disable_reg = -1,
1933 .agent_disable_shift = -1,
1934 .msb_reg = -1,
1935 .msb_shift = -1,
1957 .agent_disable_reg = -1,
1958 .agent_disable_shift = -1,
1959 .msb_reg = -1,
1960 .msb_shift = -1,
1982 .agent_disable_reg = -1,
1983 .agent_disable_shift = -1,
1984 .msb_reg = -1,
1985 .msb_shift = -1,
2007 .agent_disable_reg = -1,
2008 .agent_disable_shift = -1,
2009 .msb_reg = -1,
2010 .msb_shift = -1,
2391 /* these auto-gen reg has read-only bit, so put it as volatile */ in mt8186_is_volatile_reg()
2643 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &mcu_en); in mt8186_afe_irq_handler()
2645 dev_err(afe->dev, "%s, get irq direction fail, ret %d", __func__, ret); in mt8186_afe_irq_handler()
2649 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_STATUS, &status); in mt8186_afe_irq_handler()
2654 dev_err(afe->dev, "%s(), irq status err, ret %d, status 0x%x, mcu_en 0x%x\n", in mt8186_afe_irq_handler()
2661 struct mtk_base_afe_memif *memif = &afe->memif[i]; in mt8186_afe_irq_handler()
2663 if (!memif->substream) in mt8186_afe_irq_handler()
2666 if (memif->irq_usage < 0) in mt8186_afe_irq_handler()
2669 irq = &afe->irqs[memif->irq_usage]; in mt8186_afe_irq_handler()
2671 if (status_mcu & (1 << irq->irq_data->irq_en_shift)) in mt8186_afe_irq_handler()
2672 snd_pcm_period_elapsed(memif->substream); in mt8186_afe_irq_handler()
2677 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, status_mcu); in mt8186_afe_irq_handler()
2685 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_afe_runtime_suspend()
2689 if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) in mt8186_afe_runtime_suspend()
2693 regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x0); in mt8186_afe_runtime_suspend()
2695 ret = regmap_read_poll_timeout(afe->regmap, in mt8186_afe_runtime_suspend()
2702 dev_err(afe->dev, "%s(), ret %d\n", __func__, ret); in mt8186_afe_runtime_suspend()
2707 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff); in mt8186_afe_runtime_suspend()
2708 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff); in mt8186_afe_runtime_suspend()
2711 regmap_write(afe->regmap, AFE_SINEGEN_CON0, 0x0); in mt8186_afe_runtime_suspend()
2712 regmap_update_bits(afe->regmap, AFE_SINEGEN_CON2, in mt8186_afe_runtime_suspend()
2717 regcache_cache_only(afe->regmap, true); in mt8186_afe_runtime_suspend()
2718 regcache_mark_dirty(afe->regmap); in mt8186_afe_runtime_suspend()
2730 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_afe_runtime_resume()
2741 if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) in mt8186_afe_runtime_resume()
2744 regcache_cache_only(afe->regmap, false); in mt8186_afe_runtime_resume()
2745 regcache_sync(afe->regmap); in mt8186_afe_runtime_resume()
2748 regmap_update_bits(afe_priv->infracfg, PERI_BUS_DCM_CTRL, BIT(29), BIT(29)); in mt8186_afe_runtime_resume()
2749 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, BIT(29), BIT(29)); in mt8186_afe_runtime_resume()
2752 regmap_update_bits(afe->regmap, AFE_MEMIF_CON0, CPU_HD_ALIGN_MASK_SFT, 0); in mt8186_afe_runtime_resume()
2754 /* set all output port to 24bit */ in mt8186_afe_runtime_resume()
2755 regmap_write(afe->regmap, AFE_CONN_24BIT, 0xffffffff); in mt8186_afe_runtime_resume()
2756 regmap_write(afe->regmap, AFE_CONN_24BIT_1, 0xffffffff); in mt8186_afe_runtime_resume()
2759 regmap_update_bits(afe->regmap, AFE_DAC_CON0, AUDIO_AFE_ON_MASK_SFT, BIT(0)); in mt8186_afe_runtime_resume()
2784 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8186_dai_memif_register()
2786 return -ENOMEM; in mt8186_dai_memif_register()
2788 list_add(&dai->list, &afe->sub_dais); in mt8186_dai_memif_register()
2790 dai->dai_drivers = mt8186_memif_dai_driver; in mt8186_dai_memif_register()
2791 dai->num_dai_drivers = ARRAY_SIZE(mt8186_memif_dai_driver); in mt8186_dai_memif_register()
2793 dai->controls = mt8186_pcm_kcontrols; in mt8186_dai_memif_register()
2794 dai->num_controls = ARRAY_SIZE(mt8186_pcm_kcontrols); in mt8186_dai_memif_register()
2795 dai->dapm_widgets = mt8186_memif_widgets; in mt8186_dai_memif_register()
2796 dai->num_dapm_widgets = ARRAY_SIZE(mt8186_memif_widgets); in mt8186_dai_memif_register()
2797 dai->dapm_routes = mt8186_memif_routes; in mt8186_dai_memif_register()
2798 dai->num_dapm_routes = ARRAY_SIZE(mt8186_memif_routes); in mt8186_dai_memif_register()
2819 struct device *dev = &pdev->dev; in mt8186_afe_pcm_dev_probe()
2828 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2831 afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv), GFP_KERNEL); in mt8186_afe_pcm_dev_probe()
2832 if (!afe->platform_priv) in mt8186_afe_pcm_dev_probe()
2833 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2835 afe_priv = afe->platform_priv; in mt8186_afe_pcm_dev_probe()
2836 afe->dev = &pdev->dev; in mt8186_afe_pcm_dev_probe()
2838 afe->base_addr = devm_platform_ioremap_resource(pdev, 0); in mt8186_afe_pcm_dev_probe()
2839 if (IS_ERR(afe->base_addr)) in mt8186_afe_pcm_dev_probe()
2840 return PTR_ERR(afe->base_addr); in mt8186_afe_pcm_dev_probe()
2850 afe->memif_32bit_supported = 0; in mt8186_afe_pcm_dev_probe()
2851 afe->memif_size = MT8186_MEMIF_NUM; in mt8186_afe_pcm_dev_probe()
2852 afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif), GFP_KERNEL); in mt8186_afe_pcm_dev_probe()
2853 if (!afe->memif) in mt8186_afe_pcm_dev_probe()
2854 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2856 for (i = 0; i < afe->memif_size; i++) { in mt8186_afe_pcm_dev_probe()
2857 afe->memif[i].data = &memif_data[i]; in mt8186_afe_pcm_dev_probe()
2858 afe->memif[i].irq_usage = memif_irq_usage[i]; in mt8186_afe_pcm_dev_probe()
2859 afe->memif[i].const_irq = 1; in mt8186_afe_pcm_dev_probe()
2862 mutex_init(&afe->irq_alloc_lock); /* needed when dynamic irq */ in mt8186_afe_pcm_dev_probe()
2865 afe->irqs_size = MT8186_IRQ_NUM; in mt8186_afe_pcm_dev_probe()
2866 afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs), in mt8186_afe_pcm_dev_probe()
2869 if (!afe->irqs) in mt8186_afe_pcm_dev_probe()
2870 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2872 for (i = 0; i < afe->irqs_size; i++) in mt8186_afe_pcm_dev_probe()
2873 afe->irqs[i].irq_data = &irq_data[i]; in mt8186_afe_pcm_dev_probe()
2878 return dev_err_probe(dev, irq_id < 0 ? irq_id : -ENXIO, in mt8186_afe_pcm_dev_probe()
2892 INIT_LIST_HEAD(&afe->sub_dais); in mt8186_afe_pcm_dev_probe()
2915 afe_priv->pm_runtime_bypass_reg_ctl = true; in mt8186_afe_pcm_dev_probe()
2925 afe->regmap = devm_regmap_init_mmio(dev, afe->base_addr, in mt8186_afe_pcm_dev_probe()
2927 if (IS_ERR(afe->regmap)) { in mt8186_afe_pcm_dev_probe()
2928 ret = PTR_ERR(afe->regmap); in mt8186_afe_pcm_dev_probe()
2933 afe->mtk_afe_hardware = &mt8186_afe_hardware; in mt8186_afe_pcm_dev_probe()
2934 afe->memif_fs = mt8186_memif_fs; in mt8186_afe_pcm_dev_probe()
2935 afe->irq_fs = mt8186_irq_fs; in mt8186_afe_pcm_dev_probe()
2936 afe->get_dai_fs = mt8186_get_dai_fs; in mt8186_afe_pcm_dev_probe()
2937 afe->get_memif_pbuf_size = mt8186_get_memif_pbuf_size; in mt8186_afe_pcm_dev_probe()
2939 afe->runtime_resume = mt8186_afe_runtime_resume; in mt8186_afe_pcm_dev_probe()
2940 afe->runtime_suspend = mt8186_afe_runtime_suspend; in mt8186_afe_pcm_dev_probe()
2947 afe->dai_drivers, in mt8186_afe_pcm_dev_probe()
2948 afe->num_dai_drivers); in mt8186_afe_pcm_dev_probe()
2960 afe_priv->pm_runtime_bypass_reg_ctl = false; in mt8186_afe_pcm_dev_probe()
2962 regcache_cache_only(afe->regmap, true); in mt8186_afe_pcm_dev_probe()
2963 regcache_mark_dirty(afe->regmap); in mt8186_afe_pcm_dev_probe()
2975 { .compatible = "mediatek,mt8186-sound", },
2987 .name = "mt8186-audio",