Lines Matching +full:mt8186 +full:- +full:memory +full:- +full:port
1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/dma-mapping.h>
18 #include "../common/mtk-afe-platform-driver.h"
19 #include "../common/mtk-afe-fe-dai.h"
21 #include "mt8186-afe-common.h"
22 #include "mt8186-afe-clk.h"
23 #include "mt8186-afe-gpio.h"
24 #include "mt8186-interconnection.h"
46 struct snd_pcm_runtime *runtime = substream->runtime; in mt8186_fe_startup()
47 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_startup()
48 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_startup()
49 const struct snd_pcm_hardware *mtk_afe_hardware = afe->mtk_afe_hardware; in mt8186_fe_startup()
52 memif->substream = substream; in mt8186_fe_startup()
54 snd_pcm_hw_constraint_step(substream->runtime, 0, in mt8186_fe_startup()
62 dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n"); in mt8186_fe_startup()
67 if (memif->irq_usage < 0) { in mt8186_fe_startup()
70 if (irq_id != afe->irqs_size) { in mt8186_fe_startup()
72 memif->irq_usage = irq_id; in mt8186_fe_startup()
74 dev_err(afe->dev, "%s() error: no more asys irq\n", in mt8186_fe_startup()
76 return -EBUSY; in mt8186_fe_startup()
88 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_fe_shutdown()
89 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_shutdown()
90 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_shutdown()
91 int irq_id = memif->irq_usage; in mt8186_fe_shutdown()
93 memif->substream = NULL; in mt8186_fe_shutdown()
94 afe_priv->irq_cnt[id] = 0; in mt8186_fe_shutdown()
95 afe_priv->xrun_assert[id] = 0; in mt8186_fe_shutdown()
97 if (!memif->const_irq) { in mt8186_fe_shutdown()
99 memif->irq_usage = -1; in mt8186_fe_shutdown()
100 memif->substream = NULL; in mt8186_fe_shutdown()
110 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_hw_params()
124 int fs_mode = mt8186_rate_transform(afe->dev, rate, id); in mt8186_fe_hw_params()
128 (channels - 1) << CHANNEL_MERGE0_CHNUM_SFT | in mt8186_fe_hw_params()
133 regmap_update_bits(afe->regmap, AFE_CM1_CON, mask, val); in mt8186_fe_hw_params()
147 dev_err(afe->dev, "%s failed\n", __func__); in mt8186_fe_hw_free()
158 struct snd_pcm_runtime * const runtime = substream->runtime; in mt8186_fe_trigger()
160 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_fe_trigger()
161 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_trigger()
162 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_trigger()
163 int irq_id = memif->irq_usage; in mt8186_fe_trigger()
164 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_fe_trigger()
165 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_fe_trigger()
166 unsigned int rate = runtime->rate; in mt8186_fe_trigger()
171 dev_dbg(afe->dev, "%s(), %s cmd %d, irq_id %d\n", in mt8186_fe_trigger()
172 __func__, memif->data->name, cmd, irq_id); in mt8186_fe_trigger()
179 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n", in mt8186_fe_trigger()
188 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE && in mt8186_fe_trigger()
189 ((runtime->period_size * 1000) / rate <= 10)) in mt8186_fe_trigger()
193 if (afe_priv->irq_cnt[id] > 0) in mt8186_fe_trigger()
194 counter = afe_priv->irq_cnt[id]; in mt8186_fe_trigger()
196 counter = runtime->period_size; in mt8186_fe_trigger()
198 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_fe_trigger()
199 irq_data->irq_cnt_maskbit in mt8186_fe_trigger()
200 << irq_data->irq_cnt_shift, in mt8186_fe_trigger()
201 counter << irq_data->irq_cnt_shift); in mt8186_fe_trigger()
204 fs = afe->irq_fs(substream, runtime->rate); in mt8186_fe_trigger()
206 return -EINVAL; in mt8186_fe_trigger()
208 regmap_update_bits(afe->regmap, irq_data->irq_fs_reg, in mt8186_fe_trigger()
209 irq_data->irq_fs_maskbit in mt8186_fe_trigger()
210 << irq_data->irq_fs_shift, in mt8186_fe_trigger()
211 fs << irq_data->irq_fs_shift); in mt8186_fe_trigger()
214 if (runtime->stop_threshold != ~(0U)) in mt8186_fe_trigger()
215 regmap_update_bits(afe->regmap, in mt8186_fe_trigger()
216 irq_data->irq_en_reg, in mt8186_fe_trigger()
217 1 << irq_data->irq_en_shift, in mt8186_fe_trigger()
218 1 << irq_data->irq_en_shift); in mt8186_fe_trigger()
222 if (afe_priv->xrun_assert[id] > 0) { in mt8186_fe_trigger()
223 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { in mt8186_fe_trigger()
226 if (avail >= runtime->buffer_size) in mt8186_fe_trigger()
227 dev_dbg(afe->dev, "%s(), id %d, xrun assert\n", in mt8186_fe_trigger()
234 dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n", in mt8186_fe_trigger()
238 if (runtime->stop_threshold != ~(0U)) in mt8186_fe_trigger()
239 regmap_update_bits(afe->regmap, in mt8186_fe_trigger()
240 irq_data->irq_en_reg, in mt8186_fe_trigger()
241 1 << irq_data->irq_en_shift, in mt8186_fe_trigger()
242 0 << irq_data->irq_en_shift); in mt8186_fe_trigger()
245 regmap_write(afe->regmap, irq_data->irq_clr_reg, in mt8186_fe_trigger()
246 1 << irq_data->irq_clr_shift); in mt8186_fe_trigger()
249 return -EINVAL; in mt8186_fe_trigger()
260 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_memif_fs()
262 return mt8186_rate_transform(afe->dev, rate, id); in mt8186_memif_fs()
268 return mt8186_rate_transform(afe->dev, rate, dai_id); in mt8186_get_dai_fs()
278 return mt8186_general_rate_transform(afe->dev, rate); in mt8186_irq_fs()
283 struct snd_pcm_runtime *runtime = substream->runtime; in mt8186_get_memif_pbuf_size()
285 if ((runtime->period_size * 1000) / runtime->rate > 10) in mt8186_get_memif_pbuf_size()
295 struct snd_pcm_runtime * const runtime = substream->runtime; in mt8186_fe_prepare()
297 int id = snd_soc_rtd_to_cpu(rtd, 0)->id; in mt8186_fe_prepare()
298 struct mtk_base_afe_memif *memif = &afe->memif[id]; in mt8186_fe_prepare()
299 int irq_id = memif->irq_usage; in mt8186_fe_prepare()
300 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_fe_prepare()
301 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_fe_prepare()
302 unsigned int counter = runtime->period_size; in mt8186_fe_prepare()
311 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_fe_prepare()
312 irq_data->irq_cnt_maskbit in mt8186_fe_prepare()
313 << irq_data->irq_cnt_shift, in mt8186_fe_prepare()
314 counter << irq_data->irq_cnt_shift); in mt8186_fe_prepare()
317 fs = afe->irq_fs(substream, runtime->rate); in mt8186_fe_prepare()
320 return -EINVAL; in mt8186_fe_prepare()
322 regmap_update_bits(afe->regmap, irq_data->irq_fs_reg, in mt8186_fe_prepare()
323 irq_data->irq_fs_maskbit in mt8186_fe_prepare()
324 << irq_data->irq_fs_shift, in mt8186_fe_prepare()
325 fs << irq_data->irq_fs_shift); in mt8186_fe_prepare()
356 /* FE DAIs: memory intefaces to CPU */
569 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt1_get()
571 ucontrol->value.integer.value[0] = in mt8186_irq_cnt1_get()
572 afe_priv->irq_cnt[MT8186_PRIMARY_MEMIF]; in mt8186_irq_cnt1_get()
582 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt1_set()
584 struct mtk_base_afe_memif *memif = &afe->memif[memif_num]; in mt8186_irq_cnt1_set()
585 int irq_id = memif->irq_usage; in mt8186_irq_cnt1_set()
586 int irq_cnt = afe_priv->irq_cnt[memif_num]; in mt8186_irq_cnt1_set()
588 dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n", in mt8186_irq_cnt1_set()
589 __func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]); in mt8186_irq_cnt1_set()
591 if (irq_cnt == ucontrol->value.integer.value[0]) in mt8186_irq_cnt1_set()
594 irq_cnt = ucontrol->value.integer.value[0]; in mt8186_irq_cnt1_set()
595 afe_priv->irq_cnt[memif_num] = irq_cnt; in mt8186_irq_cnt1_set()
597 if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) { in mt8186_irq_cnt1_set()
598 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_irq_cnt1_set()
599 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_irq_cnt1_set()
601 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_irq_cnt1_set()
602 irq_data->irq_cnt_maskbit in mt8186_irq_cnt1_set()
603 << irq_data->irq_cnt_shift, in mt8186_irq_cnt1_set()
604 irq_cnt << irq_data->irq_cnt_shift); in mt8186_irq_cnt1_set()
606 dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n", in mt8186_irq_cnt1_set()
618 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt2_get()
620 ucontrol->value.integer.value[0] = in mt8186_irq_cnt2_get()
621 afe_priv->irq_cnt[MT8186_RECORD_MEMIF]; in mt8186_irq_cnt2_get()
631 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_irq_cnt2_set()
633 struct mtk_base_afe_memif *memif = &afe->memif[memif_num]; in mt8186_irq_cnt2_set()
634 int irq_id = memif->irq_usage; in mt8186_irq_cnt2_set()
635 int irq_cnt = afe_priv->irq_cnt[memif_num]; in mt8186_irq_cnt2_set()
637 dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n", in mt8186_irq_cnt2_set()
638 __func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]); in mt8186_irq_cnt2_set()
640 if (irq_cnt == ucontrol->value.integer.value[0]) in mt8186_irq_cnt2_set()
643 irq_cnt = ucontrol->value.integer.value[0]; in mt8186_irq_cnt2_set()
644 afe_priv->irq_cnt[memif_num] = irq_cnt; in mt8186_irq_cnt2_set()
646 if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) { in mt8186_irq_cnt2_set()
647 struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id]; in mt8186_irq_cnt2_set()
648 const struct mtk_base_irq_data *irq_data = irqs->irq_data; in mt8186_irq_cnt2_set()
650 regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg, in mt8186_irq_cnt2_set()
651 irq_data->irq_cnt_maskbit in mt8186_irq_cnt2_set()
652 << irq_data->irq_cnt_shift, in mt8186_irq_cnt2_set()
653 irq_cnt << irq_data->irq_cnt_shift); in mt8186_irq_cnt2_set()
655 dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n", in mt8186_irq_cnt2_set()
667 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_record_xrun_assert_get()
668 int xrun_assert = afe_priv->xrun_assert[MT8186_RECORD_MEMIF]; in mt8186_record_xrun_assert_get()
670 ucontrol->value.integer.value[0] = xrun_assert; in mt8186_record_xrun_assert_get()
680 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_record_xrun_assert_set()
681 int xrun_assert = ucontrol->value.integer.value[0]; in mt8186_record_xrun_assert_set()
683 dev_dbg(afe->dev, "%s(), xrun_assert %d\n", __func__, xrun_assert); in mt8186_record_xrun_assert_set()
685 if (xrun_assert == afe_priv->xrun_assert[MT8186_RECORD_MEMIF]) in mt8186_record_xrun_assert_set()
688 afe_priv->xrun_assert[MT8186_RECORD_MEMIF] = xrun_assert; in mt8186_record_xrun_assert_set()
1281 /* inter-connections */
1548 .agent_disable_reg = -1,
1549 .agent_disable_shift = -1,
1550 .msb_reg = -1,
1551 .msb_shift = -1,
1582 .agent_disable_reg = -1,
1583 .agent_disable_shift = -1,
1584 .msb_reg = -1,
1585 .msb_shift = -1,
1613 .agent_disable_reg = -1,
1614 .agent_disable_shift = -1,
1615 .msb_reg = -1,
1616 .msb_shift = -1,
1644 .agent_disable_reg = -1,
1645 .agent_disable_shift = -1,
1646 .msb_reg = -1,
1647 .msb_shift = -1,
1675 .agent_disable_reg = -1,
1676 .agent_disable_shift = -1,
1677 .msb_reg = -1,
1678 .msb_shift = -1,
1706 .agent_disable_reg = -1,
1707 .agent_disable_shift = -1,
1708 .msb_reg = -1,
1709 .msb_shift = -1,
1737 .agent_disable_reg = -1,
1738 .agent_disable_shift = -1,
1739 .msb_reg = -1,
1740 .msb_shift = -1,
1768 .agent_disable_reg = -1,
1769 .agent_disable_shift = -1,
1770 .msb_reg = -1,
1771 .msb_shift = -1,
1799 .agent_disable_reg = -1,
1800 .agent_disable_shift = -1,
1801 .msb_reg = -1,
1802 .msb_shift = -1,
1833 .agent_disable_reg = -1,
1834 .agent_disable_shift = -1,
1835 .msb_reg = -1,
1836 .msb_shift = -1,
1858 .agent_disable_reg = -1,
1859 .agent_disable_shift = -1,
1860 .msb_reg = -1,
1861 .msb_shift = -1,
1883 .agent_disable_reg = -1,
1884 .agent_disable_shift = -1,
1885 .msb_reg = -1,
1886 .msb_shift = -1,
1908 .agent_disable_reg = -1,
1909 .agent_disable_shift = -1,
1910 .msb_reg = -1,
1911 .msb_shift = -1,
1933 .agent_disable_reg = -1,
1934 .agent_disable_shift = -1,
1935 .msb_reg = -1,
1936 .msb_shift = -1,
1958 .agent_disable_reg = -1,
1959 .agent_disable_shift = -1,
1960 .msb_reg = -1,
1961 .msb_shift = -1,
1983 .agent_disable_reg = -1,
1984 .agent_disable_shift = -1,
1985 .msb_reg = -1,
1986 .msb_shift = -1,
2008 .agent_disable_reg = -1,
2009 .agent_disable_shift = -1,
2010 .msb_reg = -1,
2011 .msb_shift = -1,
2392 /* these auto-gen reg has read-only bit, so put it as volatile */ in mt8186_is_volatile_reg()
2644 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &mcu_en); in mt8186_afe_irq_handler()
2646 dev_err(afe->dev, "%s, get irq direction fail, ret %d", __func__, ret); in mt8186_afe_irq_handler()
2650 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_STATUS, &status); in mt8186_afe_irq_handler()
2655 dev_err(afe->dev, "%s(), irq status err, ret %d, status 0x%x, mcu_en 0x%x\n", in mt8186_afe_irq_handler()
2662 struct mtk_base_afe_memif *memif = &afe->memif[i]; in mt8186_afe_irq_handler()
2664 if (!memif->substream) in mt8186_afe_irq_handler()
2667 if (memif->irq_usage < 0) in mt8186_afe_irq_handler()
2670 irq = &afe->irqs[memif->irq_usage]; in mt8186_afe_irq_handler()
2672 if (status_mcu & (1 << irq->irq_data->irq_en_shift)) in mt8186_afe_irq_handler()
2673 snd_pcm_period_elapsed(memif->substream); in mt8186_afe_irq_handler()
2678 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, status_mcu); in mt8186_afe_irq_handler()
2686 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_afe_runtime_suspend()
2690 if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) in mt8186_afe_runtime_suspend()
2694 regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x0); in mt8186_afe_runtime_suspend()
2696 ret = regmap_read_poll_timeout(afe->regmap, in mt8186_afe_runtime_suspend()
2703 dev_err(afe->dev, "%s(), ret %d\n", __func__, ret); in mt8186_afe_runtime_suspend()
2708 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff); in mt8186_afe_runtime_suspend()
2709 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff); in mt8186_afe_runtime_suspend()
2712 regmap_write(afe->regmap, AFE_SINEGEN_CON0, 0x0); in mt8186_afe_runtime_suspend()
2713 regmap_update_bits(afe->regmap, AFE_SINEGEN_CON2, in mt8186_afe_runtime_suspend()
2718 regcache_cache_only(afe->regmap, true); in mt8186_afe_runtime_suspend()
2719 regcache_mark_dirty(afe->regmap); in mt8186_afe_runtime_suspend()
2731 struct mt8186_afe_private *afe_priv = afe->platform_priv; in mt8186_afe_runtime_resume()
2742 if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) in mt8186_afe_runtime_resume()
2745 regcache_cache_only(afe->regmap, false); in mt8186_afe_runtime_resume()
2746 regcache_sync(afe->regmap); in mt8186_afe_runtime_resume()
2749 regmap_update_bits(afe_priv->infracfg, PERI_BUS_DCM_CTRL, BIT(29), BIT(29)); in mt8186_afe_runtime_resume()
2750 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, BIT(29), BIT(29)); in mt8186_afe_runtime_resume()
2753 regmap_update_bits(afe->regmap, AFE_MEMIF_CON0, CPU_HD_ALIGN_MASK_SFT, 0); in mt8186_afe_runtime_resume()
2755 /* set all output port to 24bit */ in mt8186_afe_runtime_resume()
2756 regmap_write(afe->regmap, AFE_CONN_24BIT, 0xffffffff); in mt8186_afe_runtime_resume()
2757 regmap_write(afe->regmap, AFE_CONN_24BIT_1, 0xffffffff); in mt8186_afe_runtime_resume()
2760 regmap_update_bits(afe->regmap, AFE_DAC_CON0, AUDIO_AFE_ON_MASK_SFT, BIT(0)); in mt8186_afe_runtime_resume()
2785 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8186_dai_memif_register()
2787 return -ENOMEM; in mt8186_dai_memif_register()
2789 list_add(&dai->list, &afe->sub_dais); in mt8186_dai_memif_register()
2791 dai->dai_drivers = mt8186_memif_dai_driver; in mt8186_dai_memif_register()
2792 dai->num_dai_drivers = ARRAY_SIZE(mt8186_memif_dai_driver); in mt8186_dai_memif_register()
2794 dai->controls = mt8186_pcm_kcontrols; in mt8186_dai_memif_register()
2795 dai->num_controls = ARRAY_SIZE(mt8186_pcm_kcontrols); in mt8186_dai_memif_register()
2796 dai->dapm_widgets = mt8186_memif_widgets; in mt8186_dai_memif_register()
2797 dai->num_dapm_widgets = ARRAY_SIZE(mt8186_memif_widgets); in mt8186_dai_memif_register()
2798 dai->dapm_routes = mt8186_memif_routes; in mt8186_dai_memif_register()
2799 dai->num_dapm_routes = ARRAY_SIZE(mt8186_memif_routes); in mt8186_dai_memif_register()
2820 struct device *dev = &pdev->dev; in mt8186_afe_pcm_dev_probe()
2829 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2832 afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv), GFP_KERNEL); in mt8186_afe_pcm_dev_probe()
2833 if (!afe->platform_priv) in mt8186_afe_pcm_dev_probe()
2834 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2836 afe_priv = afe->platform_priv; in mt8186_afe_pcm_dev_probe()
2837 afe->dev = &pdev->dev; in mt8186_afe_pcm_dev_probe()
2841 dev_info(dev, "no reserved memory found, pre-allocating buffers instead\n"); in mt8186_afe_pcm_dev_probe()
2842 afe->preallocate_buffers = true; in mt8186_afe_pcm_dev_probe()
2845 afe->base_addr = devm_platform_ioremap_resource(pdev, 0); in mt8186_afe_pcm_dev_probe()
2846 if (IS_ERR(afe->base_addr)) in mt8186_afe_pcm_dev_probe()
2847 return PTR_ERR(afe->base_addr); in mt8186_afe_pcm_dev_probe()
2857 afe->memif_32bit_supported = 0; in mt8186_afe_pcm_dev_probe()
2858 afe->memif_size = MT8186_MEMIF_NUM; in mt8186_afe_pcm_dev_probe()
2859 afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif), GFP_KERNEL); in mt8186_afe_pcm_dev_probe()
2860 if (!afe->memif) in mt8186_afe_pcm_dev_probe()
2861 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2863 for (i = 0; i < afe->memif_size; i++) { in mt8186_afe_pcm_dev_probe()
2864 afe->memif[i].data = &memif_data[i]; in mt8186_afe_pcm_dev_probe()
2865 afe->memif[i].irq_usage = memif_irq_usage[i]; in mt8186_afe_pcm_dev_probe()
2866 afe->memif[i].const_irq = 1; in mt8186_afe_pcm_dev_probe()
2869 mutex_init(&afe->irq_alloc_lock); /* needed when dynamic irq */ in mt8186_afe_pcm_dev_probe()
2872 afe->irqs_size = MT8186_IRQ_NUM; in mt8186_afe_pcm_dev_probe()
2873 afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs), in mt8186_afe_pcm_dev_probe()
2876 if (!afe->irqs) in mt8186_afe_pcm_dev_probe()
2877 return -ENOMEM; in mt8186_afe_pcm_dev_probe()
2879 for (i = 0; i < afe->irqs_size; i++) in mt8186_afe_pcm_dev_probe()
2880 afe->irqs[i].irq_data = &irq_data[i]; in mt8186_afe_pcm_dev_probe()
2885 return dev_err_probe(dev, irq_id < 0 ? irq_id : -ENXIO, in mt8186_afe_pcm_dev_probe()
2899 INIT_LIST_HEAD(&afe->sub_dais); in mt8186_afe_pcm_dev_probe()
2922 afe_priv->pm_runtime_bypass_reg_ctl = true; in mt8186_afe_pcm_dev_probe()
2932 afe->regmap = devm_regmap_init_mmio(dev, afe->base_addr, in mt8186_afe_pcm_dev_probe()
2934 if (IS_ERR(afe->regmap)) { in mt8186_afe_pcm_dev_probe()
2935 ret = PTR_ERR(afe->regmap); in mt8186_afe_pcm_dev_probe()
2940 afe->mtk_afe_hardware = &mt8186_afe_hardware; in mt8186_afe_pcm_dev_probe()
2941 afe->memif_fs = mt8186_memif_fs; in mt8186_afe_pcm_dev_probe()
2942 afe->irq_fs = mt8186_irq_fs; in mt8186_afe_pcm_dev_probe()
2943 afe->get_dai_fs = mt8186_get_dai_fs; in mt8186_afe_pcm_dev_probe()
2944 afe->get_memif_pbuf_size = mt8186_get_memif_pbuf_size; in mt8186_afe_pcm_dev_probe()
2946 afe->runtime_resume = mt8186_afe_runtime_resume; in mt8186_afe_pcm_dev_probe()
2947 afe->runtime_suspend = mt8186_afe_runtime_suspend; in mt8186_afe_pcm_dev_probe()
2954 afe->dai_drivers, in mt8186_afe_pcm_dev_probe()
2955 afe->num_dai_drivers); in mt8186_afe_pcm_dev_probe()
2967 afe_priv->pm_runtime_bypass_reg_ctl = false; in mt8186_afe_pcm_dev_probe()
2969 regcache_cache_only(afe->regmap, true); in mt8186_afe_pcm_dev_probe()
2970 regcache_mark_dirty(afe->regmap); in mt8186_afe_pcm_dev_probe()
2982 { .compatible = "mediatek,mt8186-sound", },
2994 .name = "mt8186-audio",