1 // SPDX-License-Identifier: GPL-2.0
3 // Mediatek ALSA SoC AFE platform driver for 8192
5 // Copyright (c) 2020 MediaTek Inc.
6 // Author: Shane Chien <shane.chien@mediatek.com>
9 #include <linux/delay.h>
10 #include <linux/dma-mapping.h>
11 #include <linux/module.h>
12 #include <linux/mfd/syscon.h>
14 #include <linux/of_address.h>
15 #include <linux/pm_runtime.h>
16 #include <linux/reset.h>
17 #include <sound/soc.h>
19 #include "../common/mtk-afe-fe-dai.h"
20 #include "../common/mtk-afe-platform-driver.h"
22 #include "mt8192-afe-common.h"
23 #include "mt8192-afe-clk.h"
24 #include "mt8192-afe-gpio.h"
25 #include "mt8192-interconnection.h"
27 static const struct snd_pcm_hardware mt8192_afe_hardware
= {
28 .info
= (SNDRV_PCM_INFO_MMAP
|
29 SNDRV_PCM_INFO_INTERLEAVED
|
30 SNDRV_PCM_INFO_MMAP_VALID
),
31 .formats
= (SNDRV_PCM_FMTBIT_S16_LE
|
32 SNDRV_PCM_FMTBIT_S24_LE
|
33 SNDRV_PCM_FMTBIT_S32_LE
),
34 .period_bytes_min
= 96,
35 .period_bytes_max
= 4 * 48 * 1024,
38 .buffer_bytes_max
= 4 * 48 * 1024,
42 static int mt8192_memif_fs(struct snd_pcm_substream
*substream
,
45 struct snd_soc_pcm_runtime
*rtd
= substream
->private_data
;
46 struct snd_soc_component
*component
=
47 snd_soc_rtdcom_lookup(rtd
, AFE_PCM_NAME
);
48 struct mtk_base_afe
*afe
= snd_soc_component_get_drvdata(component
);
49 int id
= asoc_rtd_to_cpu(rtd
, 0)->id
;
51 return mt8192_rate_transform(afe
->dev
, rate
, id
);
54 static int mt8192_get_dai_fs(struct mtk_base_afe
*afe
,
55 int dai_id
, unsigned int rate
)
57 return mt8192_rate_transform(afe
->dev
, rate
, dai_id
);
60 static int mt8192_irq_fs(struct snd_pcm_substream
*substream
, unsigned int rate
)
62 struct snd_soc_pcm_runtime
*rtd
= substream
->private_data
;
63 struct snd_soc_component
*component
=
64 snd_soc_rtdcom_lookup(rtd
, AFE_PCM_NAME
);
65 struct mtk_base_afe
*afe
= snd_soc_component_get_drvdata(component
);
67 return mt8192_general_rate_transform(afe
->dev
, rate
);
70 static int mt8192_get_memif_pbuf_size(struct snd_pcm_substream
*substream
)
72 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
74 if ((runtime
->period_size
* 1000) / runtime
->rate
> 10)
75 return MT8192_MEMIF_PBUF_SIZE_256_BYTES
;
77 return MT8192_MEMIF_PBUF_SIZE_32_BYTES
;
80 #define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\
81 SNDRV_PCM_RATE_88200 |\
82 SNDRV_PCM_RATE_96000 |\
83 SNDRV_PCM_RATE_176400 |\
84 SNDRV_PCM_RATE_192000)
86 #define MTK_PCM_DAI_RATES (SNDRV_PCM_RATE_8000 |\
87 SNDRV_PCM_RATE_16000 |\
88 SNDRV_PCM_RATE_32000 |\
91 #define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
92 SNDRV_PCM_FMTBIT_S24_LE |\
93 SNDRV_PCM_FMTBIT_S32_LE)
95 static struct snd_soc_dai_driver mt8192_memif_dai_driver
[] = {
96 /* FE DAIs: memory intefaces to CPU */
99 .id
= MT8192_MEMIF_DL1
,
101 .stream_name
= "DL1",
104 .rates
= MTK_PCM_RATES
,
105 .formats
= MTK_PCM_FORMATS
,
107 .ops
= &mtk_afe_fe_ops
,
111 .id
= MT8192_MEMIF_DL12
,
113 .stream_name
= "DL12",
116 .rates
= MTK_PCM_RATES
,
117 .formats
= MTK_PCM_FORMATS
,
119 .ops
= &mtk_afe_fe_ops
,
123 .id
= MT8192_MEMIF_DL2
,
125 .stream_name
= "DL2",
128 .rates
= MTK_PCM_RATES
,
129 .formats
= MTK_PCM_FORMATS
,
131 .ops
= &mtk_afe_fe_ops
,
135 .id
= MT8192_MEMIF_DL3
,
137 .stream_name
= "DL3",
140 .rates
= MTK_PCM_RATES
,
141 .formats
= MTK_PCM_FORMATS
,
143 .ops
= &mtk_afe_fe_ops
,
147 .id
= MT8192_MEMIF_DL4
,
149 .stream_name
= "DL4",
152 .rates
= MTK_PCM_RATES
,
153 .formats
= MTK_PCM_FORMATS
,
155 .ops
= &mtk_afe_fe_ops
,
159 .id
= MT8192_MEMIF_DL5
,
161 .stream_name
= "DL5",
164 .rates
= MTK_PCM_RATES
,
165 .formats
= MTK_PCM_FORMATS
,
167 .ops
= &mtk_afe_fe_ops
,
171 .id
= MT8192_MEMIF_DL6
,
173 .stream_name
= "DL6",
176 .rates
= MTK_PCM_RATES
,
177 .formats
= MTK_PCM_FORMATS
,
179 .ops
= &mtk_afe_fe_ops
,
183 .id
= MT8192_MEMIF_DL7
,
185 .stream_name
= "DL7",
188 .rates
= MTK_PCM_RATES
,
189 .formats
= MTK_PCM_FORMATS
,
191 .ops
= &mtk_afe_fe_ops
,
195 .id
= MT8192_MEMIF_DL8
,
197 .stream_name
= "DL8",
200 .rates
= MTK_PCM_RATES
,
201 .formats
= MTK_PCM_FORMATS
,
203 .ops
= &mtk_afe_fe_ops
,
207 .id
= MT8192_MEMIF_DL9
,
209 .stream_name
= "DL9",
212 .rates
= MTK_PCM_RATES
,
213 .formats
= MTK_PCM_FORMATS
,
215 .ops
= &mtk_afe_fe_ops
,
219 .id
= MT8192_MEMIF_VUL12
,
221 .stream_name
= "UL1",
224 .rates
= MTK_PCM_RATES
,
225 .formats
= MTK_PCM_FORMATS
,
227 .ops
= &mtk_afe_fe_ops
,
231 .id
= MT8192_MEMIF_AWB
,
233 .stream_name
= "UL2",
236 .rates
= MTK_PCM_RATES
,
237 .formats
= MTK_PCM_FORMATS
,
239 .ops
= &mtk_afe_fe_ops
,
243 .id
= MT8192_MEMIF_VUL2
,
245 .stream_name
= "UL3",
248 .rates
= MTK_PCM_RATES
,
249 .formats
= MTK_PCM_FORMATS
,
251 .ops
= &mtk_afe_fe_ops
,
255 .id
= MT8192_MEMIF_AWB2
,
257 .stream_name
= "UL4",
260 .rates
= MTK_PCM_RATES
,
261 .formats
= MTK_PCM_FORMATS
,
263 .ops
= &mtk_afe_fe_ops
,
267 .id
= MT8192_MEMIF_VUL3
,
269 .stream_name
= "UL5",
272 .rates
= MTK_PCM_RATES
,
273 .formats
= MTK_PCM_FORMATS
,
275 .ops
= &mtk_afe_fe_ops
,
279 .id
= MT8192_MEMIF_VUL4
,
281 .stream_name
= "UL6",
284 .rates
= MTK_PCM_RATES
,
285 .formats
= MTK_PCM_FORMATS
,
287 .ops
= &mtk_afe_fe_ops
,
291 .id
= MT8192_MEMIF_VUL5
,
293 .stream_name
= "UL7",
296 .rates
= MTK_PCM_RATES
,
297 .formats
= MTK_PCM_FORMATS
,
299 .ops
= &mtk_afe_fe_ops
,
303 .id
= MT8192_MEMIF_VUL6
,
305 .stream_name
= "UL8",
308 .rates
= MTK_PCM_RATES
,
309 .formats
= MTK_PCM_FORMATS
,
311 .ops
= &mtk_afe_fe_ops
,
315 .id
= MT8192_MEMIF_MOD_DAI
,
317 .stream_name
= "UL_MONO_1",
320 .rates
= MTK_PCM_DAI_RATES
,
321 .formats
= MTK_PCM_FORMATS
,
323 .ops
= &mtk_afe_fe_ops
,
327 .id
= MT8192_MEMIF_DAI
,
329 .stream_name
= "UL_MONO_2",
332 .rates
= MTK_PCM_DAI_RATES
,
333 .formats
= MTK_PCM_FORMATS
,
335 .ops
= &mtk_afe_fe_ops
,
339 .id
= MT8192_MEMIF_DAI2
,
341 .stream_name
= "UL_MONO_3",
344 .rates
= MTK_PCM_DAI_RATES
,
345 .formats
= MTK_PCM_FORMATS
,
347 .ops
= &mtk_afe_fe_ops
,
351 .id
= MT8192_MEMIF_HDMI
,
353 .stream_name
= "HDMI",
356 .rates
= MTK_PCM_RATES
,
357 .formats
= MTK_PCM_FORMATS
,
359 .ops
= &mtk_afe_fe_ops
,
363 static int ul_tinyconn_event(struct snd_soc_dapm_widget
*w
,
364 struct snd_kcontrol
*kcontrol
,
367 struct snd_soc_component
*cmpnt
= snd_soc_dapm_to_component(w
->dapm
);
368 struct mtk_base_afe
*afe
= snd_soc_component_get_drvdata(cmpnt
);
369 unsigned int reg_shift
;
370 unsigned int reg_mask_shift
;
372 dev_info(afe
->dev
, "%s(), event 0x%x\n", __func__
, event
);
374 if (strstr(w
->name
, "UL1")) {
375 reg_shift
= VUL1_USE_TINY_SFT
;
376 reg_mask_shift
= VUL1_USE_TINY_MASK_SFT
;
377 } else if (strstr(w
->name
, "UL2")) {
378 reg_shift
= VUL2_USE_TINY_SFT
;
379 reg_mask_shift
= VUL2_USE_TINY_MASK_SFT
;
380 } else if (strstr(w
->name
, "UL3")) {
381 reg_shift
= VUL12_USE_TINY_SFT
;
382 reg_mask_shift
= VUL12_USE_TINY_MASK_SFT
;
383 } else if (strstr(w
->name
, "UL4")) {
384 reg_shift
= AWB2_USE_TINY_SFT
;
385 reg_mask_shift
= AWB2_USE_TINY_MASK_SFT
;
387 reg_shift
= AWB2_USE_TINY_SFT
;
388 reg_mask_shift
= AWB2_USE_TINY_MASK_SFT
;
389 dev_warn(afe
->dev
, "%s(), err widget name %s, default use UL4",
394 case SND_SOC_DAPM_PRE_PMU
:
395 regmap_update_bits(afe
->regmap
, AFE_MEMIF_CONN
, reg_mask_shift
,
398 case SND_SOC_DAPM_PRE_PMD
:
399 regmap_update_bits(afe
->regmap
, AFE_MEMIF_CONN
, reg_mask_shift
,
409 /* dma widget & routes*/
410 static const struct snd_kcontrol_new memif_ul1_ch1_mix
[] = {
411 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN21
,
412 I_ADDA_UL_CH1
, 1, 0),
413 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN21
,
414 I_ADDA_UL_CH2
, 1, 0),
415 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN21
,
416 I_ADDA_UL_CH3
, 1, 0),
419 static const struct snd_kcontrol_new memif_ul1_ch2_mix
[] = {
420 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN22
,
421 I_ADDA_UL_CH1
, 1, 0),
422 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN22
,
423 I_ADDA_UL_CH2
, 1, 0),
424 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN22
,
425 I_ADDA_UL_CH3
, 1, 0),
426 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4", AFE_CONN22
,
427 I_ADDA_UL_CH4
, 1, 0),
430 static const struct snd_kcontrol_new memif_ul1_ch3_mix
[] = {
431 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN9
,
432 I_ADDA_UL_CH1
, 1, 0),
433 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN9
,
434 I_ADDA_UL_CH2
, 1, 0),
435 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN9
,
436 I_ADDA_UL_CH3
, 1, 0),
439 static const struct snd_kcontrol_new memif_ul1_ch4_mix
[] = {
440 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN10
,
441 I_ADDA_UL_CH1
, 1, 0),
442 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN10
,
443 I_ADDA_UL_CH2
, 1, 0),
444 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN10
,
445 I_ADDA_UL_CH3
, 1, 0),
446 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4", AFE_CONN10
,
447 I_ADDA_UL_CH4
, 1, 0),
450 static const struct snd_kcontrol_new memif_ul2_ch1_mix
[] = {
451 SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1", AFE_CONN5
,
453 SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN5
,
455 SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN5
,
457 SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN5
,
459 SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN5
,
461 SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN5_1
,
463 SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN5_1
,
465 SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN5_1
,
467 SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN5
,
468 I_PCM_1_CAP_CH1
, 1, 0),
469 SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN5
,
470 I_PCM_2_CAP_CH1
, 1, 0),
471 SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1", AFE_CONN5
,
473 SOC_DAPM_SINGLE_AUTODISABLE("I2S6_CH1", AFE_CONN5_1
,
475 SOC_DAPM_SINGLE_AUTODISABLE("I2S8_CH1", AFE_CONN5_1
,
477 SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1", AFE_CONN5_1
,
478 I_CONNSYS_I2S_CH1
, 1, 0),
479 SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH1", AFE_CONN5_1
,
480 I_SRC_1_OUT_CH1
, 1, 0),
483 static const struct snd_kcontrol_new memif_ul2_ch2_mix
[] = {
484 SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2", AFE_CONN6
,
486 SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN6
,
488 SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN6
,
490 SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN6
,
492 SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN6
,
494 SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN6_1
,
496 SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN6_1
,
498 SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN6_1
,
500 SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN6
,
501 I_PCM_1_CAP_CH1
, 1, 0),
502 SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN6
,
503 I_PCM_2_CAP_CH1
, 1, 0),
504 SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2", AFE_CONN6
,
506 SOC_DAPM_SINGLE_AUTODISABLE("I2S6_CH2", AFE_CONN6_1
,
508 SOC_DAPM_SINGLE_AUTODISABLE("I2S8_CH2", AFE_CONN6_1
,
510 SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2", AFE_CONN6_1
,
511 I_CONNSYS_I2S_CH2
, 1, 0),
512 SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH2", AFE_CONN6_1
,
513 I_SRC_1_OUT_CH2
, 1, 0),
516 static const struct snd_kcontrol_new memif_ul3_ch1_mix
[] = {
517 SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1", AFE_CONN32_1
,
518 I_CONNSYS_I2S_CH1
, 1, 0),
519 SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN32
,
521 SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN32
,
525 static const struct snd_kcontrol_new memif_ul3_ch2_mix
[] = {
526 SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2", AFE_CONN33_1
,
527 I_CONNSYS_I2S_CH2
, 1, 0),
530 static const struct snd_kcontrol_new memif_ul4_ch1_mix
[] = {
531 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN38
,
532 I_ADDA_UL_CH1
, 1, 0),
533 SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1", AFE_CONN38
,
537 static const struct snd_kcontrol_new memif_ul4_ch2_mix
[] = {
538 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN39
,
539 I_ADDA_UL_CH2
, 1, 0),
540 SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2", AFE_CONN39
,
544 static const struct snd_kcontrol_new memif_ul5_ch1_mix
[] = {
545 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN44
,
546 I_ADDA_UL_CH1
, 1, 0),
549 static const struct snd_kcontrol_new memif_ul5_ch2_mix
[] = {
550 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN45
,
551 I_ADDA_UL_CH2
, 1, 0),
554 static const struct snd_kcontrol_new memif_ul6_ch1_mix
[] = {
555 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN46
,
556 I_ADDA_UL_CH1
, 1, 0),
557 SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN46
,
559 SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN46
,
561 SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN46_1
,
563 SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN46
,
565 SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN46
,
567 SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN46_1
,
569 SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN46
,
570 I_PCM_1_CAP_CH1
, 1, 0),
571 SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN46
,
572 I_PCM_2_CAP_CH1
, 1, 0),
575 static const struct snd_kcontrol_new memif_ul6_ch2_mix
[] = {
576 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN47
,
577 I_ADDA_UL_CH2
, 1, 0),
578 SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN47
,
580 SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN47
,
582 SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN47_1
,
584 SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN47
,
586 SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN47
,
588 SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN47_1
,
590 SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN47
,
591 I_PCM_1_CAP_CH1
, 1, 0),
592 SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN47
,
593 I_PCM_2_CAP_CH1
, 1, 0),
596 static const struct snd_kcontrol_new memif_ul7_ch1_mix
[] = {
597 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN48
,
598 I_ADDA_UL_CH1
, 1, 0),
601 static const struct snd_kcontrol_new memif_ul7_ch2_mix
[] = {
602 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN49
,
603 I_ADDA_UL_CH2
, 1, 0),
606 static const struct snd_kcontrol_new memif_ul8_ch1_mix
[] = {
607 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN50
,
608 I_ADDA_UL_CH1
, 1, 0),
611 static const struct snd_kcontrol_new memif_ul8_ch2_mix
[] = {
612 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN51
,
613 I_ADDA_UL_CH2
, 1, 0),
616 static const struct snd_kcontrol_new memif_ul_mono_1_mix
[] = {
617 SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN12
,
618 I_PCM_1_CAP_CH1
, 1, 0),
619 SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN12
,
620 I_PCM_2_CAP_CH1
, 1, 0),
623 static const struct snd_kcontrol_new memif_ul_mono_2_mix
[] = {
624 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN11
,
625 I_ADDA_UL_CH1
, 1, 0),
628 static const struct snd_kcontrol_new memif_ul_mono_3_mix
[] = {
629 SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN35
,
630 I_ADDA_UL_CH1
, 1, 0),
635 TINYCONN_CH1_MUX_I2S0
= 0x14,
636 TINYCONN_CH2_MUX_I2S0
= 0x15,
637 TINYCONN_CH1_MUX_I2S6
= 0x1a,
638 TINYCONN_CH2_MUX_I2S6
= 0x1b,
639 TINYCONN_CH1_MUX_I2S8
= 0x1c,
640 TINYCONN_CH2_MUX_I2S8
= 0x1d,
641 TINYCONN_MUX_NONE
= 0x1f,
644 static const char * const tinyconn_mux_map
[] = {
654 static int tinyconn_mux_map_value
[] = {
656 TINYCONN_CH1_MUX_I2S0
,
657 TINYCONN_CH2_MUX_I2S0
,
658 TINYCONN_CH1_MUX_I2S6
,
659 TINYCONN_CH2_MUX_I2S6
,
660 TINYCONN_CH1_MUX_I2S8
,
661 TINYCONN_CH2_MUX_I2S8
,
664 static SOC_VALUE_ENUM_SINGLE_DECL(ul4_tinyconn_ch1_mux_map_enum
,
669 tinyconn_mux_map_value
);
670 static SOC_VALUE_ENUM_SINGLE_DECL(ul4_tinyconn_ch2_mux_map_enum
,
675 tinyconn_mux_map_value
);
677 static const struct snd_kcontrol_new ul4_tinyconn_ch1_mux_control
=
678 SOC_DAPM_ENUM("UL4_TINYCONN_CH1_MUX", ul4_tinyconn_ch1_mux_map_enum
);
679 static const struct snd_kcontrol_new ul4_tinyconn_ch2_mux_control
=
680 SOC_DAPM_ENUM("UL4_TINYCONN_CH2_MUX", ul4_tinyconn_ch2_mux_map_enum
);
682 static const struct snd_soc_dapm_widget mt8192_memif_widgets
[] = {
683 /* inter-connections */
684 SND_SOC_DAPM_MIXER("UL1_CH1", SND_SOC_NOPM
, 0, 0,
685 memif_ul1_ch1_mix
, ARRAY_SIZE(memif_ul1_ch1_mix
)),
686 SND_SOC_DAPM_MIXER("UL1_CH2", SND_SOC_NOPM
, 0, 0,
687 memif_ul1_ch2_mix
, ARRAY_SIZE(memif_ul1_ch2_mix
)),
688 SND_SOC_DAPM_MIXER("UL1_CH3", SND_SOC_NOPM
, 0, 0,
689 memif_ul1_ch3_mix
, ARRAY_SIZE(memif_ul1_ch3_mix
)),
690 SND_SOC_DAPM_MIXER("UL1_CH4", SND_SOC_NOPM
, 0, 0,
691 memif_ul1_ch4_mix
, ARRAY_SIZE(memif_ul1_ch4_mix
)),
693 SND_SOC_DAPM_MIXER("UL2_CH1", SND_SOC_NOPM
, 0, 0,
694 memif_ul2_ch1_mix
, ARRAY_SIZE(memif_ul2_ch1_mix
)),
695 SND_SOC_DAPM_MIXER("UL2_CH2", SND_SOC_NOPM
, 0, 0,
696 memif_ul2_ch2_mix
, ARRAY_SIZE(memif_ul2_ch2_mix
)),
698 SND_SOC_DAPM_MIXER("UL3_CH1", SND_SOC_NOPM
, 0, 0,
699 memif_ul3_ch1_mix
, ARRAY_SIZE(memif_ul3_ch1_mix
)),
700 SND_SOC_DAPM_MIXER("UL3_CH2", SND_SOC_NOPM
, 0, 0,
701 memif_ul3_ch2_mix
, ARRAY_SIZE(memif_ul3_ch2_mix
)),
703 SND_SOC_DAPM_MIXER("UL4_CH1", SND_SOC_NOPM
, 0, 0,
704 memif_ul4_ch1_mix
, ARRAY_SIZE(memif_ul4_ch1_mix
)),
705 SND_SOC_DAPM_MIXER("UL4_CH2", SND_SOC_NOPM
, 0, 0,
706 memif_ul4_ch2_mix
, ARRAY_SIZE(memif_ul4_ch2_mix
)),
707 SND_SOC_DAPM_MUX_E("UL4_TINYCONN_CH1_MUX", SND_SOC_NOPM
, 0, 0,
708 &ul4_tinyconn_ch1_mux_control
,
710 SND_SOC_DAPM_PRE_PMU
| SND_SOC_DAPM_PRE_PMD
),
711 SND_SOC_DAPM_MUX_E("UL4_TINYCONN_CH2_MUX", SND_SOC_NOPM
, 0, 0,
712 &ul4_tinyconn_ch2_mux_control
,
714 SND_SOC_DAPM_PRE_PMU
| SND_SOC_DAPM_PRE_PMD
),
716 SND_SOC_DAPM_MIXER("UL5_CH1", SND_SOC_NOPM
, 0, 0,
717 memif_ul5_ch1_mix
, ARRAY_SIZE(memif_ul5_ch1_mix
)),
718 SND_SOC_DAPM_MIXER("UL5_CH2", SND_SOC_NOPM
, 0, 0,
719 memif_ul5_ch2_mix
, ARRAY_SIZE(memif_ul5_ch2_mix
)),
721 SND_SOC_DAPM_MIXER("UL6_CH1", SND_SOC_NOPM
, 0, 0,
722 memif_ul6_ch1_mix
, ARRAY_SIZE(memif_ul6_ch1_mix
)),
723 SND_SOC_DAPM_MIXER("UL6_CH2", SND_SOC_NOPM
, 0, 0,
724 memif_ul6_ch2_mix
, ARRAY_SIZE(memif_ul6_ch2_mix
)),
726 SND_SOC_DAPM_MIXER("UL7_CH1", SND_SOC_NOPM
, 0, 0,
727 memif_ul7_ch1_mix
, ARRAY_SIZE(memif_ul7_ch1_mix
)),
728 SND_SOC_DAPM_MIXER("UL7_CH2", SND_SOC_NOPM
, 0, 0,
729 memif_ul7_ch2_mix
, ARRAY_SIZE(memif_ul7_ch2_mix
)),
731 SND_SOC_DAPM_MIXER("UL8_CH1", SND_SOC_NOPM
, 0, 0,
732 memif_ul8_ch1_mix
, ARRAY_SIZE(memif_ul8_ch1_mix
)),
733 SND_SOC_DAPM_MIXER("UL8_CH2", SND_SOC_NOPM
, 0, 0,
734 memif_ul8_ch2_mix
, ARRAY_SIZE(memif_ul8_ch2_mix
)),
736 SND_SOC_DAPM_MIXER("UL_MONO_1_CH1", SND_SOC_NOPM
, 0, 0,
738 ARRAY_SIZE(memif_ul_mono_1_mix
)),
740 SND_SOC_DAPM_MIXER("UL_MONO_2_CH1", SND_SOC_NOPM
, 0, 0,
742 ARRAY_SIZE(memif_ul_mono_2_mix
)),
744 SND_SOC_DAPM_MIXER("UL_MONO_3_CH1", SND_SOC_NOPM
, 0, 0,
746 ARRAY_SIZE(memif_ul_mono_3_mix
)),
748 SND_SOC_DAPM_INPUT("UL1_VIRTUAL_INPUT"),
749 SND_SOC_DAPM_INPUT("UL2_VIRTUAL_INPUT"),
750 SND_SOC_DAPM_INPUT("UL6_VIRTUAL_INPUT"),
753 static const struct snd_soc_dapm_route mt8192_memif_routes
[] = {
754 {"UL1", NULL
, "UL1_CH1"},
755 {"UL1", NULL
, "UL1_CH2"},
756 {"UL1", NULL
, "UL1_CH3"},
757 {"UL1", NULL
, "UL1_CH4"},
758 {"UL1_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
759 {"UL1_CH1", "ADDA_UL_CH2", "ADDA_UL_Mux"},
760 {"UL1_CH1", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
761 {"UL1_CH2", "ADDA_UL_CH1", "ADDA_UL_Mux"},
762 {"UL1_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
763 {"UL1_CH2", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
764 {"UL1_CH2", "ADDA_UL_CH4", "ADDA_CH34_UL_Mux"},
765 {"UL1_CH3", "ADDA_UL_CH1", "ADDA_UL_Mux"},
766 {"UL1_CH3", "ADDA_UL_CH2", "ADDA_UL_Mux"},
767 {"UL1_CH3", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
768 {"UL1_CH4", "ADDA_UL_CH1", "ADDA_UL_Mux"},
769 {"UL1_CH4", "ADDA_UL_CH2", "ADDA_UL_Mux"},
770 {"UL1_CH4", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
771 {"UL1_CH4", "ADDA_UL_CH4", "ADDA_CH34_UL_Mux"},
773 {"UL2", NULL
, "UL2_CH1"},
774 {"UL2", NULL
, "UL2_CH2"},
775 {"UL2_CH1", "I2S0_CH1", "I2S0"},
776 {"UL2_CH2", "I2S0_CH2", "I2S0"},
777 {"UL2_CH1", "I2S2_CH1", "I2S2"},
778 {"UL2_CH2", "I2S2_CH2", "I2S2"},
779 {"UL2_CH1", "I2S6_CH1", "I2S6"},
780 {"UL2_CH2", "I2S6_CH2", "I2S6"},
781 {"UL2_CH1", "I2S8_CH1", "I2S8"},
782 {"UL2_CH2", "I2S8_CH2", "I2S8"},
784 {"UL2_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
785 {"UL2_CH2", "PCM_1_CAP_CH1", "PCM 1 Capture"},
786 {"UL2_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
787 {"UL2_CH2", "PCM_2_CAP_CH1", "PCM 2 Capture"},
789 {"UL_MONO_1", NULL
, "UL_MONO_1_CH1"},
790 {"UL_MONO_1_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
791 {"UL_MONO_1_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
793 {"UL_MONO_2", NULL
, "UL_MONO_2_CH1"},
794 {"UL_MONO_2_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
796 {"UL_MONO_3", NULL
, "UL_MONO_3_CH1"},
797 {"UL_MONO_3_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
799 {"UL2_CH1", "CONNSYS_I2S_CH1", "Connsys I2S"},
800 {"UL2_CH2", "CONNSYS_I2S_CH2", "Connsys I2S"},
802 {"UL3", NULL
, "UL3_CH1"},
803 {"UL3", NULL
, "UL3_CH2"},
804 {"UL3_CH1", "CONNSYS_I2S_CH1", "Connsys I2S"},
805 {"UL3_CH2", "CONNSYS_I2S_CH2", "Connsys I2S"},
807 {"UL4", NULL
, "UL4_CH1"},
808 {"UL4", NULL
, "UL4_CH2"},
809 {"UL4", NULL
, "UL4_TINYCONN_CH1_MUX"},
810 {"UL4", NULL
, "UL4_TINYCONN_CH2_MUX"},
811 {"UL4_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
812 {"UL4_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
813 {"UL4_CH1", "I2S0_CH1", "I2S0"},
814 {"UL4_CH2", "I2S0_CH2", "I2S0"},
815 {"UL4_TINYCONN_CH1_MUX", "I2S0_CH1", "I2S0"},
816 {"UL4_TINYCONN_CH2_MUX", "I2S0_CH2", "I2S0"},
818 {"UL5", NULL
, "UL5_CH1"},
819 {"UL5", NULL
, "UL5_CH2"},
820 {"UL5_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
821 {"UL5_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
823 {"UL6", NULL
, "UL6_CH1"},
824 {"UL6", NULL
, "UL6_CH2"},
826 {"UL6_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
827 {"UL6_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
828 {"UL6_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
829 {"UL6_CH2", "PCM_1_CAP_CH1", "PCM 1 Capture"},
830 {"UL6_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
831 {"UL6_CH2", "PCM_2_CAP_CH1", "PCM 2 Capture"},
833 {"UL7", NULL
, "UL7_CH1"},
834 {"UL7", NULL
, "UL7_CH2"},
835 {"UL7_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
836 {"UL7_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
838 {"UL8", NULL
, "UL8_CH1"},
839 {"UL8", NULL
, "UL8_CH2"},
840 {"UL8_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
841 {"UL8_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
844 static const struct mtk_base_memif_data memif_data
[MT8192_MEMIF_NUM
] = {
845 [MT8192_MEMIF_DL1
] = {
847 .id
= MT8192_MEMIF_DL1
,
848 .reg_ofs_base
= AFE_DL1_BASE
,
849 .reg_ofs_cur
= AFE_DL1_CUR
,
850 .reg_ofs_end
= AFE_DL1_END
,
851 .reg_ofs_base_msb
= AFE_DL1_BASE_MSB
,
852 .reg_ofs_cur_msb
= AFE_DL1_CUR_MSB
,
853 .reg_ofs_end_msb
= AFE_DL1_END_MSB
,
854 .fs_reg
= AFE_DL1_CON0
,
855 .fs_shift
= DL1_MODE_SFT
,
856 .fs_maskbit
= DL1_MODE_MASK
,
857 .mono_reg
= AFE_DL1_CON0
,
858 .mono_shift
= DL1_MONO_SFT
,
859 .enable_reg
= AFE_DAC_CON0
,
860 .enable_shift
= DL1_ON_SFT
,
861 .hd_reg
= AFE_DL1_CON0
,
862 .hd_shift
= DL1_HD_MODE_SFT
,
863 .hd_align_reg
= AFE_DL1_CON0
,
864 .hd_align_mshift
= DL1_HALIGN_SFT
,
865 .pbuf_reg
= AFE_DL1_CON0
,
866 .pbuf_shift
= DL1_PBUF_SIZE_SFT
,
867 .minlen_reg
= AFE_DL1_CON0
,
868 .minlen_shift
= DL1_MINLEN_SFT
,
870 [MT8192_MEMIF_DL12
] = {
872 .id
= MT8192_MEMIF_DL12
,
873 .reg_ofs_base
= AFE_DL12_BASE
,
874 .reg_ofs_cur
= AFE_DL12_CUR
,
875 .reg_ofs_end
= AFE_DL12_END
,
876 .reg_ofs_base_msb
= AFE_DL12_BASE_MSB
,
877 .reg_ofs_cur_msb
= AFE_DL12_CUR_MSB
,
878 .reg_ofs_end_msb
= AFE_DL12_END_MSB
,
879 .fs_reg
= AFE_DL12_CON0
,
880 .fs_shift
= DL12_MODE_SFT
,
881 .fs_maskbit
= DL12_MODE_MASK
,
882 .mono_reg
= AFE_DL12_CON0
,
883 .mono_shift
= DL12_MONO_SFT
,
884 .enable_reg
= AFE_DAC_CON0
,
885 .enable_shift
= DL12_ON_SFT
,
886 .hd_reg
= AFE_DL12_CON0
,
887 .hd_shift
= DL12_HD_MODE_SFT
,
888 .hd_align_reg
= AFE_DL12_CON0
,
889 .hd_align_mshift
= DL12_HALIGN_SFT
,
890 .pbuf_reg
= AFE_DL12_CON0
,
891 .pbuf_shift
= DL12_PBUF_SIZE_SFT
,
892 .minlen_reg
= AFE_DL12_CON0
,
893 .minlen_shift
= DL12_MINLEN_SFT
,
895 [MT8192_MEMIF_DL2
] = {
897 .id
= MT8192_MEMIF_DL2
,
898 .reg_ofs_base
= AFE_DL2_BASE
,
899 .reg_ofs_cur
= AFE_DL2_CUR
,
900 .reg_ofs_end
= AFE_DL2_END
,
901 .reg_ofs_base_msb
= AFE_DL2_BASE_MSB
,
902 .reg_ofs_cur_msb
= AFE_DL2_CUR_MSB
,
903 .reg_ofs_end_msb
= AFE_DL2_END_MSB
,
904 .fs_reg
= AFE_DL2_CON0
,
905 .fs_shift
= DL2_MODE_SFT
,
906 .fs_maskbit
= DL2_MODE_MASK
,
907 .mono_reg
= AFE_DL2_CON0
,
908 .mono_shift
= DL2_MONO_SFT
,
909 .enable_reg
= AFE_DAC_CON0
,
910 .enable_shift
= DL2_ON_SFT
,
911 .hd_reg
= AFE_DL2_CON0
,
912 .hd_shift
= DL2_HD_MODE_SFT
,
913 .hd_align_reg
= AFE_DL2_CON0
,
914 .hd_align_mshift
= DL2_HALIGN_SFT
,
915 .pbuf_reg
= AFE_DL2_CON0
,
916 .pbuf_shift
= DL2_PBUF_SIZE_SFT
,
917 .minlen_reg
= AFE_DL2_CON0
,
918 .minlen_shift
= DL2_MINLEN_SFT
,
920 [MT8192_MEMIF_DL3
] = {
922 .id
= MT8192_MEMIF_DL3
,
923 .reg_ofs_base
= AFE_DL3_BASE
,
924 .reg_ofs_cur
= AFE_DL3_CUR
,
925 .reg_ofs_end
= AFE_DL3_END
,
926 .reg_ofs_base_msb
= AFE_DL3_BASE_MSB
,
927 .reg_ofs_cur_msb
= AFE_DL3_CUR_MSB
,
928 .reg_ofs_end_msb
= AFE_DL3_END_MSB
,
929 .fs_reg
= AFE_DL3_CON0
,
930 .fs_shift
= DL3_MODE_SFT
,
931 .fs_maskbit
= DL3_MODE_MASK
,
932 .mono_reg
= AFE_DL3_CON0
,
933 .mono_shift
= DL3_MONO_SFT
,
934 .enable_reg
= AFE_DAC_CON0
,
935 .enable_shift
= DL3_ON_SFT
,
936 .hd_reg
= AFE_DL3_CON0
,
937 .hd_shift
= DL3_HD_MODE_SFT
,
938 .hd_align_reg
= AFE_DL3_CON0
,
939 .hd_align_mshift
= DL3_HALIGN_SFT
,
940 .pbuf_reg
= AFE_DL3_CON0
,
941 .pbuf_shift
= DL3_PBUF_SIZE_SFT
,
942 .minlen_reg
= AFE_DL3_CON0
,
943 .minlen_shift
= DL3_MINLEN_SFT
,
945 [MT8192_MEMIF_DL4
] = {
947 .id
= MT8192_MEMIF_DL4
,
948 .reg_ofs_base
= AFE_DL4_BASE
,
949 .reg_ofs_cur
= AFE_DL4_CUR
,
950 .reg_ofs_end
= AFE_DL4_END
,
951 .reg_ofs_base_msb
= AFE_DL4_BASE_MSB
,
952 .reg_ofs_cur_msb
= AFE_DL4_CUR_MSB
,
953 .reg_ofs_end_msb
= AFE_DL4_END_MSB
,
954 .fs_reg
= AFE_DL4_CON0
,
955 .fs_shift
= DL4_MODE_SFT
,
956 .fs_maskbit
= DL4_MODE_MASK
,
957 .mono_reg
= AFE_DL4_CON0
,
958 .mono_shift
= DL4_MONO_SFT
,
959 .enable_reg
= AFE_DAC_CON0
,
960 .enable_shift
= DL4_ON_SFT
,
961 .hd_reg
= AFE_DL4_CON0
,
962 .hd_shift
= DL4_HD_MODE_SFT
,
963 .hd_align_reg
= AFE_DL4_CON0
,
964 .hd_align_mshift
= DL4_HALIGN_SFT
,
965 .pbuf_reg
= AFE_DL4_CON0
,
966 .pbuf_shift
= DL4_PBUF_SIZE_SFT
,
967 .minlen_reg
= AFE_DL4_CON0
,
968 .minlen_shift
= DL4_MINLEN_SFT
,
970 [MT8192_MEMIF_DL5
] = {
972 .id
= MT8192_MEMIF_DL5
,
973 .reg_ofs_base
= AFE_DL5_BASE
,
974 .reg_ofs_cur
= AFE_DL5_CUR
,
975 .reg_ofs_end
= AFE_DL5_END
,
976 .reg_ofs_base_msb
= AFE_DL5_BASE_MSB
,
977 .reg_ofs_cur_msb
= AFE_DL5_CUR_MSB
,
978 .reg_ofs_end_msb
= AFE_DL5_END_MSB
,
979 .fs_reg
= AFE_DL5_CON0
,
980 .fs_shift
= DL5_MODE_SFT
,
981 .fs_maskbit
= DL5_MODE_MASK
,
982 .mono_reg
= AFE_DL5_CON0
,
983 .mono_shift
= DL5_MONO_SFT
,
984 .enable_reg
= AFE_DAC_CON0
,
985 .enable_shift
= DL5_ON_SFT
,
986 .hd_reg
= AFE_DL5_CON0
,
987 .hd_shift
= DL5_HD_MODE_SFT
,
988 .hd_align_reg
= AFE_DL5_CON0
,
989 .hd_align_mshift
= DL5_HALIGN_SFT
,
990 .pbuf_reg
= AFE_DL5_CON0
,
991 .pbuf_shift
= DL5_PBUF_SIZE_SFT
,
992 .minlen_reg
= AFE_DL5_CON0
,
993 .minlen_shift
= DL5_MINLEN_SFT
,
995 [MT8192_MEMIF_DL6
] = {
997 .id
= MT8192_MEMIF_DL6
,
998 .reg_ofs_base
= AFE_DL6_BASE
,
999 .reg_ofs_cur
= AFE_DL6_CUR
,
1000 .reg_ofs_end
= AFE_DL6_END
,
1001 .reg_ofs_base_msb
= AFE_DL6_BASE_MSB
,
1002 .reg_ofs_cur_msb
= AFE_DL6_CUR_MSB
,
1003 .reg_ofs_end_msb
= AFE_DL6_END_MSB
,
1004 .fs_reg
= AFE_DL6_CON0
,
1005 .fs_shift
= DL6_MODE_SFT
,
1006 .fs_maskbit
= DL6_MODE_MASK
,
1007 .mono_reg
= AFE_DL6_CON0
,
1008 .mono_shift
= DL6_MONO_SFT
,
1009 .enable_reg
= AFE_DAC_CON0
,
1010 .enable_shift
= DL6_ON_SFT
,
1011 .hd_reg
= AFE_DL6_CON0
,
1012 .hd_shift
= DL6_HD_MODE_SFT
,
1013 .hd_align_reg
= AFE_DL6_CON0
,
1014 .hd_align_mshift
= DL6_HALIGN_SFT
,
1015 .pbuf_reg
= AFE_DL6_CON0
,
1016 .pbuf_shift
= DL6_PBUF_SIZE_SFT
,
1017 .minlen_reg
= AFE_DL6_CON0
,
1018 .minlen_shift
= DL6_MINLEN_SFT
,
1020 [MT8192_MEMIF_DL7
] = {
1022 .id
= MT8192_MEMIF_DL7
,
1023 .reg_ofs_base
= AFE_DL7_BASE
,
1024 .reg_ofs_cur
= AFE_DL7_CUR
,
1025 .reg_ofs_end
= AFE_DL7_END
,
1026 .reg_ofs_base_msb
= AFE_DL7_BASE_MSB
,
1027 .reg_ofs_cur_msb
= AFE_DL7_CUR_MSB
,
1028 .reg_ofs_end_msb
= AFE_DL7_END_MSB
,
1029 .fs_reg
= AFE_DL7_CON0
,
1030 .fs_shift
= DL7_MODE_SFT
,
1031 .fs_maskbit
= DL7_MODE_MASK
,
1032 .mono_reg
= AFE_DL7_CON0
,
1033 .mono_shift
= DL7_MONO_SFT
,
1034 .enable_reg
= AFE_DAC_CON0
,
1035 .enable_shift
= DL7_ON_SFT
,
1036 .hd_reg
= AFE_DL7_CON0
,
1037 .hd_shift
= DL7_HD_MODE_SFT
,
1038 .hd_align_reg
= AFE_DL7_CON0
,
1039 .hd_align_mshift
= DL7_HALIGN_SFT
,
1040 .pbuf_reg
= AFE_DL7_CON0
,
1041 .pbuf_shift
= DL7_PBUF_SIZE_SFT
,
1042 .minlen_reg
= AFE_DL7_CON0
,
1043 .minlen_shift
= DL7_MINLEN_SFT
,
1045 [MT8192_MEMIF_DL8
] = {
1047 .id
= MT8192_MEMIF_DL8
,
1048 .reg_ofs_base
= AFE_DL8_BASE
,
1049 .reg_ofs_cur
= AFE_DL8_CUR
,
1050 .reg_ofs_end
= AFE_DL8_END
,
1051 .reg_ofs_base_msb
= AFE_DL8_BASE_MSB
,
1052 .reg_ofs_cur_msb
= AFE_DL8_CUR_MSB
,
1053 .reg_ofs_end_msb
= AFE_DL8_END_MSB
,
1054 .fs_reg
= AFE_DL8_CON0
,
1055 .fs_shift
= DL8_MODE_SFT
,
1056 .fs_maskbit
= DL8_MODE_MASK
,
1057 .mono_reg
= AFE_DL8_CON0
,
1058 .mono_shift
= DL8_MONO_SFT
,
1059 .enable_reg
= AFE_DAC_CON0
,
1060 .enable_shift
= DL8_ON_SFT
,
1061 .hd_reg
= AFE_DL8_CON0
,
1062 .hd_shift
= DL8_HD_MODE_SFT
,
1063 .hd_align_reg
= AFE_DL8_CON0
,
1064 .hd_align_mshift
= DL8_HALIGN_SFT
,
1065 .pbuf_reg
= AFE_DL8_CON0
,
1066 .pbuf_shift
= DL8_PBUF_SIZE_SFT
,
1067 .minlen_reg
= AFE_DL8_CON0
,
1068 .minlen_shift
= DL8_MINLEN_SFT
,
1070 [MT8192_MEMIF_DL9
] = {
1072 .id
= MT8192_MEMIF_DL9
,
1073 .reg_ofs_base
= AFE_DL9_BASE
,
1074 .reg_ofs_cur
= AFE_DL9_CUR
,
1075 .reg_ofs_end
= AFE_DL9_END
,
1076 .reg_ofs_base_msb
= AFE_DL9_BASE_MSB
,
1077 .reg_ofs_cur_msb
= AFE_DL9_CUR_MSB
,
1078 .reg_ofs_end_msb
= AFE_DL9_END_MSB
,
1079 .fs_reg
= AFE_DL9_CON0
,
1080 .fs_shift
= DL9_MODE_SFT
,
1081 .fs_maskbit
= DL9_MODE_MASK
,
1082 .mono_reg
= AFE_DL9_CON0
,
1083 .mono_shift
= DL9_MONO_SFT
,
1084 .enable_reg
= AFE_DAC_CON0
,
1085 .enable_shift
= DL9_ON_SFT
,
1086 .hd_reg
= AFE_DL9_CON0
,
1087 .hd_shift
= DL9_HD_MODE_SFT
,
1088 .hd_align_reg
= AFE_DL9_CON0
,
1089 .hd_align_mshift
= DL9_HALIGN_SFT
,
1090 .pbuf_reg
= AFE_DL9_CON0
,
1091 .pbuf_shift
= DL9_PBUF_SIZE_SFT
,
1092 .minlen_reg
= AFE_DL9_CON0
,
1093 .minlen_shift
= DL9_MINLEN_SFT
,
1095 [MT8192_MEMIF_DAI
] = {
1097 .id
= MT8192_MEMIF_DAI
,
1098 .reg_ofs_base
= AFE_DAI_BASE
,
1099 .reg_ofs_cur
= AFE_DAI_CUR
,
1100 .reg_ofs_end
= AFE_DAI_END
,
1101 .reg_ofs_base_msb
= AFE_DAI_BASE_MSB
,
1102 .reg_ofs_cur_msb
= AFE_DAI_CUR_MSB
,
1103 .reg_ofs_end_msb
= AFE_DAI_END_MSB
,
1104 .fs_reg
= AFE_DAI_CON0
,
1105 .fs_shift
= DAI_MODE_SFT
,
1106 .fs_maskbit
= DAI_MODE_MASK
,
1107 .mono_reg
= AFE_DAI_CON0
,
1108 .mono_shift
= DAI_DUPLICATE_WR_SFT
,
1110 .enable_reg
= AFE_DAC_CON0
,
1111 .enable_shift
= DAI_ON_SFT
,
1112 .hd_reg
= AFE_DAI_CON0
,
1113 .hd_shift
= DAI_HD_MODE_SFT
,
1114 .hd_align_reg
= AFE_DAI_CON0
,
1115 .hd_align_mshift
= DAI_HALIGN_SFT
,
1117 [MT8192_MEMIF_MOD_DAI
] = {
1119 .id
= MT8192_MEMIF_MOD_DAI
,
1120 .reg_ofs_base
= AFE_MOD_DAI_BASE
,
1121 .reg_ofs_cur
= AFE_MOD_DAI_CUR
,
1122 .reg_ofs_end
= AFE_MOD_DAI_END
,
1123 .reg_ofs_base_msb
= AFE_MOD_DAI_BASE_MSB
,
1124 .reg_ofs_cur_msb
= AFE_MOD_DAI_CUR_MSB
,
1125 .reg_ofs_end_msb
= AFE_MOD_DAI_END_MSB
,
1126 .fs_reg
= AFE_MOD_DAI_CON0
,
1127 .fs_shift
= MOD_DAI_MODE_SFT
,
1128 .fs_maskbit
= MOD_DAI_MODE_MASK
,
1129 .mono_reg
= AFE_MOD_DAI_CON0
,
1130 .mono_shift
= MOD_DAI_DUPLICATE_WR_SFT
,
1132 .enable_reg
= AFE_DAC_CON0
,
1133 .enable_shift
= MOD_DAI_ON_SFT
,
1134 .hd_reg
= AFE_MOD_DAI_CON0
,
1135 .hd_shift
= MOD_DAI_HD_MODE_SFT
,
1136 .hd_align_reg
= AFE_MOD_DAI_CON0
,
1137 .hd_align_mshift
= MOD_DAI_HALIGN_SFT
,
1139 [MT8192_MEMIF_DAI2
] = {
1141 .id
= MT8192_MEMIF_DAI2
,
1142 .reg_ofs_base
= AFE_DAI2_BASE
,
1143 .reg_ofs_cur
= AFE_DAI2_CUR
,
1144 .reg_ofs_end
= AFE_DAI2_END
,
1145 .reg_ofs_base_msb
= AFE_DAI2_BASE_MSB
,
1146 .reg_ofs_cur_msb
= AFE_DAI2_CUR_MSB
,
1147 .reg_ofs_end_msb
= AFE_DAI2_END_MSB
,
1148 .fs_reg
= AFE_DAI2_CON0
,
1149 .fs_shift
= DAI2_MODE_SFT
,
1150 .fs_maskbit
= DAI2_MODE_MASK
,
1151 .mono_reg
= AFE_DAI2_CON0
,
1152 .mono_shift
= DAI2_DUPLICATE_WR_SFT
,
1154 .enable_reg
= AFE_DAC_CON0
,
1155 .enable_shift
= DAI2_ON_SFT
,
1156 .hd_reg
= AFE_DAI2_CON0
,
1157 .hd_shift
= DAI2_HD_MODE_SFT
,
1158 .hd_align_reg
= AFE_DAI2_CON0
,
1159 .hd_align_mshift
= DAI2_HALIGN_SFT
,
1161 [MT8192_MEMIF_VUL12
] = {
1163 .id
= MT8192_MEMIF_VUL12
,
1164 .reg_ofs_base
= AFE_VUL12_BASE
,
1165 .reg_ofs_cur
= AFE_VUL12_CUR
,
1166 .reg_ofs_end
= AFE_VUL12_END
,
1167 .reg_ofs_base_msb
= AFE_VUL12_BASE_MSB
,
1168 .reg_ofs_cur_msb
= AFE_VUL12_CUR_MSB
,
1169 .reg_ofs_end_msb
= AFE_VUL12_END_MSB
,
1170 .fs_reg
= AFE_VUL12_CON0
,
1171 .fs_shift
= VUL12_MODE_SFT
,
1172 .fs_maskbit
= VUL12_MODE_MASK
,
1173 .mono_reg
= AFE_VUL12_CON0
,
1174 .mono_shift
= VUL12_MONO_SFT
,
1175 .quad_ch_reg
= AFE_VUL12_CON0
,
1176 .quad_ch_shift
= VUL12_4CH_EN_SFT
,
1177 .quad_ch_mask
= VUL12_4CH_EN_MASK
,
1178 .enable_reg
= AFE_DAC_CON0
,
1179 .enable_shift
= VUL12_ON_SFT
,
1180 .hd_reg
= AFE_VUL12_CON0
,
1181 .hd_shift
= VUL12_HD_MODE_SFT
,
1182 .hd_align_reg
= AFE_VUL12_CON0
,
1183 .hd_align_mshift
= VUL12_HALIGN_SFT
,
1185 [MT8192_MEMIF_VUL2
] = {
1187 .id
= MT8192_MEMIF_VUL2
,
1188 .reg_ofs_base
= AFE_VUL2_BASE
,
1189 .reg_ofs_cur
= AFE_VUL2_CUR
,
1190 .reg_ofs_end
= AFE_VUL2_END
,
1191 .reg_ofs_base_msb
= AFE_VUL2_BASE_MSB
,
1192 .reg_ofs_cur_msb
= AFE_VUL2_CUR_MSB
,
1193 .reg_ofs_end_msb
= AFE_VUL2_END_MSB
,
1194 .fs_reg
= AFE_VUL2_CON0
,
1195 .fs_shift
= VUL2_MODE_SFT
,
1196 .fs_maskbit
= VUL2_MODE_MASK
,
1197 .mono_reg
= AFE_VUL2_CON0
,
1198 .mono_shift
= VUL2_MONO_SFT
,
1199 .enable_reg
= AFE_DAC_CON0
,
1200 .enable_shift
= VUL2_ON_SFT
,
1201 .hd_reg
= AFE_VUL2_CON0
,
1202 .hd_shift
= VUL2_HD_MODE_SFT
,
1203 .hd_align_reg
= AFE_VUL2_CON0
,
1204 .hd_align_mshift
= VUL2_HALIGN_SFT
,
1206 [MT8192_MEMIF_AWB
] = {
1208 .id
= MT8192_MEMIF_AWB
,
1209 .reg_ofs_base
= AFE_AWB_BASE
,
1210 .reg_ofs_cur
= AFE_AWB_CUR
,
1211 .reg_ofs_end
= AFE_AWB_END
,
1212 .reg_ofs_base_msb
= AFE_AWB_BASE_MSB
,
1213 .reg_ofs_cur_msb
= AFE_AWB_CUR_MSB
,
1214 .reg_ofs_end_msb
= AFE_AWB_END_MSB
,
1215 .fs_reg
= AFE_AWB_CON0
,
1216 .fs_shift
= AWB_MODE_SFT
,
1217 .fs_maskbit
= AWB_MODE_MASK
,
1218 .mono_reg
= AFE_AWB_CON0
,
1219 .mono_shift
= AWB_MONO_SFT
,
1220 .enable_reg
= AFE_DAC_CON0
,
1221 .enable_shift
= AWB_ON_SFT
,
1222 .hd_reg
= AFE_AWB_CON0
,
1223 .hd_shift
= AWB_HD_MODE_SFT
,
1224 .hd_align_reg
= AFE_AWB_CON0
,
1225 .hd_align_mshift
= AWB_HALIGN_SFT
,
1227 [MT8192_MEMIF_AWB2
] = {
1229 .id
= MT8192_MEMIF_AWB2
,
1230 .reg_ofs_base
= AFE_AWB2_BASE
,
1231 .reg_ofs_cur
= AFE_AWB2_CUR
,
1232 .reg_ofs_end
= AFE_AWB2_END
,
1233 .reg_ofs_base_msb
= AFE_AWB2_BASE_MSB
,
1234 .reg_ofs_cur_msb
= AFE_AWB2_CUR_MSB
,
1235 .reg_ofs_end_msb
= AFE_AWB2_END_MSB
,
1236 .fs_reg
= AFE_AWB2_CON0
,
1237 .fs_shift
= AWB2_MODE_SFT
,
1238 .fs_maskbit
= AWB2_MODE_MASK
,
1239 .mono_reg
= AFE_AWB2_CON0
,
1240 .mono_shift
= AWB2_MONO_SFT
,
1241 .enable_reg
= AFE_DAC_CON0
,
1242 .enable_shift
= AWB2_ON_SFT
,
1243 .hd_reg
= AFE_AWB2_CON0
,
1244 .hd_shift
= AWB2_HD_MODE_SFT
,
1245 .hd_align_reg
= AFE_AWB2_CON0
,
1246 .hd_align_mshift
= AWB2_HALIGN_SFT
,
1248 [MT8192_MEMIF_VUL3
] = {
1250 .id
= MT8192_MEMIF_VUL3
,
1251 .reg_ofs_base
= AFE_VUL3_BASE
,
1252 .reg_ofs_cur
= AFE_VUL3_CUR
,
1253 .reg_ofs_end
= AFE_VUL3_END
,
1254 .reg_ofs_base_msb
= AFE_VUL3_BASE_MSB
,
1255 .reg_ofs_cur_msb
= AFE_VUL3_CUR_MSB
,
1256 .reg_ofs_end_msb
= AFE_VUL3_END_MSB
,
1257 .fs_reg
= AFE_VUL3_CON0
,
1258 .fs_shift
= VUL3_MODE_SFT
,
1259 .fs_maskbit
= VUL3_MODE_MASK
,
1260 .mono_reg
= AFE_VUL3_CON0
,
1261 .mono_shift
= VUL3_MONO_SFT
,
1262 .enable_reg
= AFE_DAC_CON0
,
1263 .enable_shift
= VUL3_ON_SFT
,
1264 .hd_reg
= AFE_VUL3_CON0
,
1265 .hd_shift
= VUL3_HD_MODE_SFT
,
1266 .hd_align_reg
= AFE_VUL3_CON0
,
1267 .hd_align_mshift
= VUL3_HALIGN_SFT
,
1269 [MT8192_MEMIF_VUL4
] = {
1271 .id
= MT8192_MEMIF_VUL4
,
1272 .reg_ofs_base
= AFE_VUL4_BASE
,
1273 .reg_ofs_cur
= AFE_VUL4_CUR
,
1274 .reg_ofs_end
= AFE_VUL4_END
,
1275 .reg_ofs_base_msb
= AFE_VUL4_BASE_MSB
,
1276 .reg_ofs_cur_msb
= AFE_VUL4_CUR_MSB
,
1277 .reg_ofs_end_msb
= AFE_VUL4_END_MSB
,
1278 .fs_reg
= AFE_VUL4_CON0
,
1279 .fs_shift
= VUL4_MODE_SFT
,
1280 .fs_maskbit
= VUL4_MODE_MASK
,
1281 .mono_reg
= AFE_VUL4_CON0
,
1282 .mono_shift
= VUL4_MONO_SFT
,
1283 .enable_reg
= AFE_DAC_CON0
,
1284 .enable_shift
= VUL4_ON_SFT
,
1285 .hd_reg
= AFE_VUL4_CON0
,
1286 .hd_shift
= VUL4_HD_MODE_SFT
,
1287 .hd_align_reg
= AFE_VUL4_CON0
,
1288 .hd_align_mshift
= VUL4_HALIGN_SFT
,
1290 [MT8192_MEMIF_VUL5
] = {
1292 .id
= MT8192_MEMIF_VUL5
,
1293 .reg_ofs_base
= AFE_VUL5_BASE
,
1294 .reg_ofs_cur
= AFE_VUL5_CUR
,
1295 .reg_ofs_end
= AFE_VUL5_END
,
1296 .reg_ofs_base_msb
= AFE_VUL5_BASE_MSB
,
1297 .reg_ofs_cur_msb
= AFE_VUL5_CUR_MSB
,
1298 .reg_ofs_end_msb
= AFE_VUL5_END_MSB
,
1299 .fs_reg
= AFE_VUL5_CON0
,
1300 .fs_shift
= VUL5_MODE_SFT
,
1301 .fs_maskbit
= VUL5_MODE_MASK
,
1302 .mono_reg
= AFE_VUL5_CON0
,
1303 .mono_shift
= VUL5_MONO_SFT
,
1304 .enable_reg
= AFE_DAC_CON0
,
1305 .enable_shift
= VUL5_ON_SFT
,
1306 .hd_reg
= AFE_VUL5_CON0
,
1307 .hd_shift
= VUL5_HD_MODE_SFT
,
1308 .hd_align_reg
= AFE_VUL5_CON0
,
1309 .hd_align_mshift
= VUL5_HALIGN_SFT
,
1311 [MT8192_MEMIF_VUL6
] = {
1313 .id
= MT8192_MEMIF_VUL6
,
1314 .reg_ofs_base
= AFE_VUL6_BASE
,
1315 .reg_ofs_cur
= AFE_VUL6_CUR
,
1316 .reg_ofs_end
= AFE_VUL6_END
,
1317 .reg_ofs_base_msb
= AFE_VUL6_BASE_MSB
,
1318 .reg_ofs_cur_msb
= AFE_VUL6_CUR_MSB
,
1319 .reg_ofs_end_msb
= AFE_VUL6_END_MSB
,
1320 .fs_reg
= AFE_VUL6_CON0
,
1321 .fs_shift
= VUL6_MODE_SFT
,
1322 .fs_maskbit
= VUL6_MODE_MASK
,
1323 .mono_reg
= AFE_VUL6_CON0
,
1324 .mono_shift
= VUL6_MONO_SFT
,
1325 .enable_reg
= AFE_DAC_CON0
,
1326 .enable_shift
= VUL6_ON_SFT
,
1327 .hd_reg
= AFE_VUL6_CON0
,
1328 .hd_shift
= VUL6_HD_MODE_SFT
,
1329 .hd_align_reg
= AFE_VUL6_CON0
,
1330 .hd_align_mshift
= VUL6_HALIGN_SFT
,
1332 [MT8192_MEMIF_HDMI
] = {
1334 .id
= MT8192_MEMIF_HDMI
,
1335 .reg_ofs_base
= AFE_HDMI_OUT_BASE
,
1336 .reg_ofs_cur
= AFE_HDMI_OUT_CUR
,
1337 .reg_ofs_end
= AFE_HDMI_OUT_END
,
1338 .reg_ofs_base_msb
= AFE_HDMI_OUT_BASE_MSB
,
1339 .reg_ofs_cur_msb
= AFE_HDMI_OUT_CUR_MSB
,
1340 .reg_ofs_end_msb
= AFE_HDMI_OUT_END_MSB
,
1346 .enable_reg
= AFE_DAC_CON0
,
1347 .enable_shift
= HDMI_OUT_ON_SFT
,
1348 .hd_reg
= AFE_HDMI_OUT_CON0
,
1349 .hd_shift
= HDMI_OUT_HD_MODE_SFT
,
1350 .hd_align_reg
= AFE_HDMI_OUT_CON0
,
1351 .hd_align_mshift
= HDMI_OUT_HALIGN_SFT
,
1352 .pbuf_reg
= AFE_HDMI_OUT_CON0
,
1353 .minlen_reg
= AFE_HDMI_OUT_CON0
,
1354 .minlen_shift
= HDMI_OUT_MINLEN_SFT
,
1358 static const struct mtk_base_irq_data irq_data
[MT8192_IRQ_NUM
] = {
1361 .irq_cnt_reg
= AFE_IRQ_MCU_CNT0
,
1362 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1363 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1364 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1365 .irq_fs_shift
= IRQ0_MCU_MODE_SFT
,
1366 .irq_fs_maskbit
= IRQ0_MCU_MODE_MASK
,
1367 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1368 .irq_en_shift
= IRQ0_MCU_ON_SFT
,
1369 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1370 .irq_clr_shift
= IRQ0_MCU_CLR_SFT
,
1374 .irq_cnt_reg
= AFE_IRQ_MCU_CNT1
,
1375 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1376 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1377 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1378 .irq_fs_shift
= IRQ1_MCU_MODE_SFT
,
1379 .irq_fs_maskbit
= IRQ1_MCU_MODE_MASK
,
1380 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1381 .irq_en_shift
= IRQ1_MCU_ON_SFT
,
1382 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1383 .irq_clr_shift
= IRQ1_MCU_CLR_SFT
,
1387 .irq_cnt_reg
= AFE_IRQ_MCU_CNT2
,
1388 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1389 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1390 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1391 .irq_fs_shift
= IRQ2_MCU_MODE_SFT
,
1392 .irq_fs_maskbit
= IRQ2_MCU_MODE_MASK
,
1393 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1394 .irq_en_shift
= IRQ2_MCU_ON_SFT
,
1395 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1396 .irq_clr_shift
= IRQ2_MCU_CLR_SFT
,
1400 .irq_cnt_reg
= AFE_IRQ_MCU_CNT3
,
1401 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1402 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1403 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1404 .irq_fs_shift
= IRQ3_MCU_MODE_SFT
,
1405 .irq_fs_maskbit
= IRQ3_MCU_MODE_MASK
,
1406 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1407 .irq_en_shift
= IRQ3_MCU_ON_SFT
,
1408 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1409 .irq_clr_shift
= IRQ3_MCU_CLR_SFT
,
1413 .irq_cnt_reg
= AFE_IRQ_MCU_CNT4
,
1414 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1415 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1416 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1417 .irq_fs_shift
= IRQ4_MCU_MODE_SFT
,
1418 .irq_fs_maskbit
= IRQ4_MCU_MODE_MASK
,
1419 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1420 .irq_en_shift
= IRQ4_MCU_ON_SFT
,
1421 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1422 .irq_clr_shift
= IRQ4_MCU_CLR_SFT
,
1426 .irq_cnt_reg
= AFE_IRQ_MCU_CNT5
,
1427 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1428 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1429 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1430 .irq_fs_shift
= IRQ5_MCU_MODE_SFT
,
1431 .irq_fs_maskbit
= IRQ5_MCU_MODE_MASK
,
1432 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1433 .irq_en_shift
= IRQ5_MCU_ON_SFT
,
1434 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1435 .irq_clr_shift
= IRQ5_MCU_CLR_SFT
,
1439 .irq_cnt_reg
= AFE_IRQ_MCU_CNT6
,
1440 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1441 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1442 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1443 .irq_fs_shift
= IRQ6_MCU_MODE_SFT
,
1444 .irq_fs_maskbit
= IRQ6_MCU_MODE_MASK
,
1445 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1446 .irq_en_shift
= IRQ6_MCU_ON_SFT
,
1447 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1448 .irq_clr_shift
= IRQ6_MCU_CLR_SFT
,
1452 .irq_cnt_reg
= AFE_IRQ_MCU_CNT7
,
1453 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1454 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1455 .irq_fs_reg
= AFE_IRQ_MCU_CON1
,
1456 .irq_fs_shift
= IRQ7_MCU_MODE_SFT
,
1457 .irq_fs_maskbit
= IRQ7_MCU_MODE_MASK
,
1458 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1459 .irq_en_shift
= IRQ7_MCU_ON_SFT
,
1460 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1461 .irq_clr_shift
= IRQ7_MCU_CLR_SFT
,
1465 .irq_cnt_reg
= AFE_IRQ_MCU_CNT8
,
1466 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1467 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1468 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1469 .irq_fs_shift
= IRQ8_MCU_MODE_SFT
,
1470 .irq_fs_maskbit
= IRQ8_MCU_MODE_MASK
,
1471 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1472 .irq_en_shift
= IRQ8_MCU_ON_SFT
,
1473 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1474 .irq_clr_shift
= IRQ8_MCU_CLR_SFT
,
1478 .irq_cnt_reg
= AFE_IRQ_MCU_CNT9
,
1479 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1480 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1481 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1482 .irq_fs_shift
= IRQ9_MCU_MODE_SFT
,
1483 .irq_fs_maskbit
= IRQ9_MCU_MODE_MASK
,
1484 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1485 .irq_en_shift
= IRQ9_MCU_ON_SFT
,
1486 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1487 .irq_clr_shift
= IRQ9_MCU_CLR_SFT
,
1490 .id
= MT8192_IRQ_10
,
1491 .irq_cnt_reg
= AFE_IRQ_MCU_CNT10
,
1492 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1493 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1494 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1495 .irq_fs_shift
= IRQ10_MCU_MODE_SFT
,
1496 .irq_fs_maskbit
= IRQ10_MCU_MODE_MASK
,
1497 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1498 .irq_en_shift
= IRQ10_MCU_ON_SFT
,
1499 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1500 .irq_clr_shift
= IRQ10_MCU_CLR_SFT
,
1503 .id
= MT8192_IRQ_11
,
1504 .irq_cnt_reg
= AFE_IRQ_MCU_CNT11
,
1505 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1506 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1507 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1508 .irq_fs_shift
= IRQ11_MCU_MODE_SFT
,
1509 .irq_fs_maskbit
= IRQ11_MCU_MODE_MASK
,
1510 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1511 .irq_en_shift
= IRQ11_MCU_ON_SFT
,
1512 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1513 .irq_clr_shift
= IRQ11_MCU_CLR_SFT
,
1516 .id
= MT8192_IRQ_12
,
1517 .irq_cnt_reg
= AFE_IRQ_MCU_CNT12
,
1518 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1519 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1520 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1521 .irq_fs_shift
= IRQ12_MCU_MODE_SFT
,
1522 .irq_fs_maskbit
= IRQ12_MCU_MODE_MASK
,
1523 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1524 .irq_en_shift
= IRQ12_MCU_ON_SFT
,
1525 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1526 .irq_clr_shift
= IRQ12_MCU_CLR_SFT
,
1529 .id
= MT8192_IRQ_13
,
1530 .irq_cnt_reg
= AFE_IRQ_MCU_CNT13
,
1531 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1532 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1533 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1534 .irq_fs_shift
= IRQ13_MCU_MODE_SFT
,
1535 .irq_fs_maskbit
= IRQ13_MCU_MODE_MASK
,
1536 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1537 .irq_en_shift
= IRQ13_MCU_ON_SFT
,
1538 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1539 .irq_clr_shift
= IRQ13_MCU_CLR_SFT
,
1542 .id
= MT8192_IRQ_14
,
1543 .irq_cnt_reg
= AFE_IRQ_MCU_CNT14
,
1544 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1545 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1546 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1547 .irq_fs_shift
= IRQ14_MCU_MODE_SFT
,
1548 .irq_fs_maskbit
= IRQ14_MCU_MODE_MASK
,
1549 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1550 .irq_en_shift
= IRQ14_MCU_ON_SFT
,
1551 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1552 .irq_clr_shift
= IRQ14_MCU_CLR_SFT
,
1555 .id
= MT8192_IRQ_15
,
1556 .irq_cnt_reg
= AFE_IRQ_MCU_CNT15
,
1557 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1558 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1559 .irq_fs_reg
= AFE_IRQ_MCU_CON2
,
1560 .irq_fs_shift
= IRQ15_MCU_MODE_SFT
,
1561 .irq_fs_maskbit
= IRQ15_MCU_MODE_MASK
,
1562 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1563 .irq_en_shift
= IRQ15_MCU_ON_SFT
,
1564 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1565 .irq_clr_shift
= IRQ15_MCU_CLR_SFT
,
1568 .id
= MT8192_IRQ_16
,
1569 .irq_cnt_reg
= AFE_IRQ_MCU_CNT16
,
1570 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1571 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1572 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1573 .irq_fs_shift
= IRQ16_MCU_MODE_SFT
,
1574 .irq_fs_maskbit
= IRQ16_MCU_MODE_MASK
,
1575 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1576 .irq_en_shift
= IRQ16_MCU_ON_SFT
,
1577 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1578 .irq_clr_shift
= IRQ16_MCU_CLR_SFT
,
1581 .id
= MT8192_IRQ_17
,
1582 .irq_cnt_reg
= AFE_IRQ_MCU_CNT17
,
1583 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1584 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1585 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1586 .irq_fs_shift
= IRQ17_MCU_MODE_SFT
,
1587 .irq_fs_maskbit
= IRQ17_MCU_MODE_MASK
,
1588 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1589 .irq_en_shift
= IRQ17_MCU_ON_SFT
,
1590 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1591 .irq_clr_shift
= IRQ17_MCU_CLR_SFT
,
1594 .id
= MT8192_IRQ_18
,
1595 .irq_cnt_reg
= AFE_IRQ_MCU_CNT18
,
1596 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1597 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1598 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1599 .irq_fs_shift
= IRQ18_MCU_MODE_SFT
,
1600 .irq_fs_maskbit
= IRQ18_MCU_MODE_MASK
,
1601 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1602 .irq_en_shift
= IRQ18_MCU_ON_SFT
,
1603 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1604 .irq_clr_shift
= IRQ18_MCU_CLR_SFT
,
1607 .id
= MT8192_IRQ_19
,
1608 .irq_cnt_reg
= AFE_IRQ_MCU_CNT19
,
1609 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1610 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1611 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1612 .irq_fs_shift
= IRQ19_MCU_MODE_SFT
,
1613 .irq_fs_maskbit
= IRQ19_MCU_MODE_MASK
,
1614 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1615 .irq_en_shift
= IRQ19_MCU_ON_SFT
,
1616 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1617 .irq_clr_shift
= IRQ19_MCU_CLR_SFT
,
1620 .id
= MT8192_IRQ_20
,
1621 .irq_cnt_reg
= AFE_IRQ_MCU_CNT20
,
1622 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1623 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1624 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1625 .irq_fs_shift
= IRQ20_MCU_MODE_SFT
,
1626 .irq_fs_maskbit
= IRQ20_MCU_MODE_MASK
,
1627 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1628 .irq_en_shift
= IRQ20_MCU_ON_SFT
,
1629 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1630 .irq_clr_shift
= IRQ20_MCU_CLR_SFT
,
1633 .id
= MT8192_IRQ_21
,
1634 .irq_cnt_reg
= AFE_IRQ_MCU_CNT21
,
1635 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1636 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1637 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1638 .irq_fs_shift
= IRQ21_MCU_MODE_SFT
,
1639 .irq_fs_maskbit
= IRQ21_MCU_MODE_MASK
,
1640 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1641 .irq_en_shift
= IRQ21_MCU_ON_SFT
,
1642 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1643 .irq_clr_shift
= IRQ21_MCU_CLR_SFT
,
1646 .id
= MT8192_IRQ_22
,
1647 .irq_cnt_reg
= AFE_IRQ_MCU_CNT22
,
1648 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1649 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1650 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1651 .irq_fs_shift
= IRQ22_MCU_MODE_SFT
,
1652 .irq_fs_maskbit
= IRQ22_MCU_MODE_MASK
,
1653 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1654 .irq_en_shift
= IRQ22_MCU_ON_SFT
,
1655 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1656 .irq_clr_shift
= IRQ22_MCU_CLR_SFT
,
1659 .id
= MT8192_IRQ_23
,
1660 .irq_cnt_reg
= AFE_IRQ_MCU_CNT23
,
1661 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1662 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1663 .irq_fs_reg
= AFE_IRQ_MCU_CON3
,
1664 .irq_fs_shift
= IRQ23_MCU_MODE_SFT
,
1665 .irq_fs_maskbit
= IRQ23_MCU_MODE_MASK
,
1666 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1667 .irq_en_shift
= IRQ23_MCU_ON_SFT
,
1668 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1669 .irq_clr_shift
= IRQ23_MCU_CLR_SFT
,
1672 .id
= MT8192_IRQ_24
,
1673 .irq_cnt_reg
= AFE_IRQ_MCU_CNT24
,
1674 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1675 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1676 .irq_fs_reg
= AFE_IRQ_MCU_CON4
,
1677 .irq_fs_shift
= IRQ24_MCU_MODE_SFT
,
1678 .irq_fs_maskbit
= IRQ24_MCU_MODE_MASK
,
1679 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1680 .irq_en_shift
= IRQ24_MCU_ON_SFT
,
1681 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1682 .irq_clr_shift
= IRQ24_MCU_CLR_SFT
,
1685 .id
= MT8192_IRQ_25
,
1686 .irq_cnt_reg
= AFE_IRQ_MCU_CNT25
,
1687 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1688 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1689 .irq_fs_reg
= AFE_IRQ_MCU_CON4
,
1690 .irq_fs_shift
= IRQ25_MCU_MODE_SFT
,
1691 .irq_fs_maskbit
= IRQ25_MCU_MODE_MASK
,
1692 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1693 .irq_en_shift
= IRQ25_MCU_ON_SFT
,
1694 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1695 .irq_clr_shift
= IRQ25_MCU_CLR_SFT
,
1698 .id
= MT8192_IRQ_26
,
1699 .irq_cnt_reg
= AFE_IRQ_MCU_CNT26
,
1700 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1701 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1702 .irq_fs_reg
= AFE_IRQ_MCU_CON4
,
1703 .irq_fs_shift
= IRQ26_MCU_MODE_SFT
,
1704 .irq_fs_maskbit
= IRQ26_MCU_MODE_MASK
,
1705 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1706 .irq_en_shift
= IRQ26_MCU_ON_SFT
,
1707 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1708 .irq_clr_shift
= IRQ26_MCU_CLR_SFT
,
1711 .id
= MT8192_IRQ_31
,
1712 .irq_cnt_reg
= AFE_IRQ_MCU_CNT31
,
1713 .irq_cnt_shift
= AFE_IRQ_CNT_SHIFT
,
1714 .irq_cnt_maskbit
= AFE_IRQ_CNT_MASK
,
1717 .irq_fs_maskbit
= -1,
1718 .irq_en_reg
= AFE_IRQ_MCU_CON0
,
1719 .irq_en_shift
= IRQ31_MCU_ON_SFT
,
1720 .irq_clr_reg
= AFE_IRQ_MCU_CLR
,
1721 .irq_clr_shift
= IRQ31_MCU_CLR_SFT
,
1725 static const int memif_irq_usage
[MT8192_MEMIF_NUM
] = {
1726 [MT8192_MEMIF_DL1
] = MT8192_IRQ_0
,
1727 [MT8192_MEMIF_DL2
] = MT8192_IRQ_1
,
1728 [MT8192_MEMIF_DL3
] = MT8192_IRQ_2
,
1729 [MT8192_MEMIF_DL4
] = MT8192_IRQ_3
,
1730 [MT8192_MEMIF_DL5
] = MT8192_IRQ_4
,
1731 [MT8192_MEMIF_DL6
] = MT8192_IRQ_5
,
1732 [MT8192_MEMIF_DL7
] = MT8192_IRQ_6
,
1733 [MT8192_MEMIF_DL8
] = MT8192_IRQ_7
,
1734 [MT8192_MEMIF_DL9
] = MT8192_IRQ_8
,
1735 [MT8192_MEMIF_DL12
] = MT8192_IRQ_9
,
1736 [MT8192_MEMIF_DAI
] = MT8192_IRQ_10
,
1737 [MT8192_MEMIF_MOD_DAI
] = MT8192_IRQ_11
,
1738 [MT8192_MEMIF_DAI2
] = MT8192_IRQ_12
,
1739 [MT8192_MEMIF_VUL12
] = MT8192_IRQ_13
,
1740 [MT8192_MEMIF_VUL2
] = MT8192_IRQ_14
,
1741 [MT8192_MEMIF_AWB
] = MT8192_IRQ_15
,
1742 [MT8192_MEMIF_AWB2
] = MT8192_IRQ_16
,
1743 [MT8192_MEMIF_VUL3
] = MT8192_IRQ_17
,
1744 [MT8192_MEMIF_VUL4
] = MT8192_IRQ_18
,
1745 [MT8192_MEMIF_VUL5
] = MT8192_IRQ_19
,
1746 [MT8192_MEMIF_VUL6
] = MT8192_IRQ_20
,
1747 [MT8192_MEMIF_HDMI
] = MT8192_IRQ_31
,
1750 static bool mt8192_is_volatile_reg(struct device
*dev
, unsigned int reg
)
1752 /* these auto-gen reg has read-only bit, so put it as volatile */
1753 /* volatile reg cannot be cached, so cannot be set when power off */
1755 case AUDIO_TOP_CON0
: /* reg bit controlled by CCF */
1756 case AUDIO_TOP_CON1
: /* reg bit controlled by CCF */
1757 case AUDIO_TOP_CON2
:
1758 case AUDIO_TOP_CON3
:
1759 case AFE_DL1_CUR_MSB
:
1762 case AFE_DL2_CUR_MSB
:
1765 case AFE_DL3_CUR_MSB
:
1768 case AFE_DL4_CUR_MSB
:
1771 case AFE_DL12_CUR_MSB
:
1774 case AFE_ADDA_SRC_DEBUG_MON0
:
1775 case AFE_ADDA_SRC_DEBUG_MON1
:
1776 case AFE_ADDA_UL_SRC_MON0
:
1777 case AFE_ADDA_UL_SRC_MON1
:
1778 case AFE_SECURE_CON0
:
1779 case AFE_SRAM_BOUND
:
1780 case AFE_SECURE_CON1
:
1781 case AFE_VUL_CUR_MSB
:
1784 case AFE_ADDA_3RD_DAC_DL_SDM_FIFO_MON
:
1785 case AFE_ADDA_3RD_DAC_DL_SRC_LCH_MON
:
1786 case AFE_ADDA_3RD_DAC_DL_SRC_RCH_MON
:
1787 case AFE_ADDA_3RD_DAC_DL_SDM_OUT_MON
:
1788 case AFE_SIDETONE_MON
:
1789 case AFE_SIDETONE_CON0
:
1790 case AFE_SIDETONE_COEFF
:
1791 case AFE_VUL2_CUR_MSB
:
1794 case AFE_VUL3_CUR_MSB
:
1799 case AFE_IRQ0_MCU_CNT_MON
:
1800 case AFE_IRQ6_MCU_CNT_MON
:
1801 case AFE_VUL4_CUR_MSB
:
1804 case AFE_VUL12_CUR_MSB
:
1807 case AFE_IRQ3_MCU_CNT_MON
:
1808 case AFE_IRQ4_MCU_CNT_MON
:
1809 case AFE_IRQ_MCU_STATUS
:
1810 case AFE_IRQ_MCU_CLR
:
1811 case AFE_IRQ_MCU_MON2
:
1812 case AFE_IRQ1_MCU_CNT_MON
:
1813 case AFE_IRQ2_MCU_CNT_MON
:
1814 case AFE_IRQ5_MCU_CNT_MON
:
1815 case AFE_IRQ7_MCU_CNT_MON
:
1816 case AFE_IRQ_MCU_MISS_CLR
:
1819 case AFE_SRAM_DELSEL_CON1
:
1825 case AUDIO_TOP_DBG_MON0
:
1826 case AUDIO_TOP_DBG_MON1
:
1827 case AFE_IRQ8_MCU_CNT_MON
:
1828 case AFE_IRQ11_MCU_CNT_MON
:
1829 case AFE_IRQ12_MCU_CNT_MON
:
1830 case AFE_IRQ9_MCU_CNT_MON
:
1831 case AFE_IRQ10_MCU_CNT_MON
:
1832 case AFE_IRQ13_MCU_CNT_MON
:
1833 case AFE_IRQ14_MCU_CNT_MON
:
1834 case AFE_IRQ15_MCU_CNT_MON
:
1835 case AFE_IRQ16_MCU_CNT_MON
:
1836 case AFE_IRQ17_MCU_CNT_MON
:
1837 case AFE_IRQ18_MCU_CNT_MON
:
1838 case AFE_IRQ19_MCU_CNT_MON
:
1839 case AFE_IRQ20_MCU_CNT_MON
:
1840 case AFE_IRQ21_MCU_CNT_MON
:
1841 case AFE_IRQ22_MCU_CNT_MON
:
1842 case AFE_IRQ23_MCU_CNT_MON
:
1843 case AFE_IRQ24_MCU_CNT_MON
:
1844 case AFE_IRQ25_MCU_CNT_MON
:
1845 case AFE_IRQ26_MCU_CNT_MON
:
1846 case AFE_IRQ31_MCU_CNT_MON
:
1848 case AFE_CBIP_SLV_MUX_MON0
:
1849 case AFE_CBIP_SLV_DECODER_MON0
:
1850 case AFE_ADDA6_MTKAIF_MON0
:
1851 case AFE_ADDA6_MTKAIF_MON1
:
1852 case AFE_AWB_CUR_MSB
:
1855 case AFE_AWB2_CUR_MSB
:
1858 case AFE_DAI_CUR_MSB
:
1861 case AFE_DAI2_CUR_MSB
:
1864 case AFE_ADDA6_SRC_DEBUG_MON0
:
1865 case AFE_ADD6A_UL_SRC_MON0
:
1866 case AFE_ADDA6_UL_SRC_MON1
:
1867 case AFE_MOD_DAI_CUR_MSB
:
1868 case AFE_MOD_DAI_CUR
:
1869 case AFE_MOD_DAI_END
:
1870 case AFE_HDMI_OUT_CUR_MSB
:
1871 case AFE_HDMI_OUT_CUR
:
1872 case AFE_HDMI_OUT_END
:
1873 case AFE_AWB_RCH_MON
:
1874 case AFE_AWB_LCH_MON
:
1875 case AFE_VUL_RCH_MON
:
1876 case AFE_VUL_LCH_MON
:
1877 case AFE_VUL12_RCH_MON
:
1878 case AFE_VUL12_LCH_MON
:
1879 case AFE_VUL2_RCH_MON
:
1880 case AFE_VUL2_LCH_MON
:
1881 case AFE_DAI_DATA_MON
:
1882 case AFE_MOD_DAI_DATA_MON
:
1883 case AFE_DAI2_DATA_MON
:
1884 case AFE_AWB2_RCH_MON
:
1885 case AFE_AWB2_LCH_MON
:
1886 case AFE_VUL3_RCH_MON
:
1887 case AFE_VUL3_LCH_MON
:
1888 case AFE_VUL4_RCH_MON
:
1889 case AFE_VUL4_LCH_MON
:
1890 case AFE_VUL5_RCH_MON
:
1891 case AFE_VUL5_LCH_MON
:
1892 case AFE_VUL6_RCH_MON
:
1893 case AFE_VUL6_LCH_MON
:
1894 case AFE_DL1_RCH_MON
:
1895 case AFE_DL1_LCH_MON
:
1896 case AFE_DL2_RCH_MON
:
1897 case AFE_DL2_LCH_MON
:
1898 case AFE_DL12_RCH1_MON
:
1899 case AFE_DL12_LCH1_MON
:
1900 case AFE_DL12_RCH2_MON
:
1901 case AFE_DL12_LCH2_MON
:
1902 case AFE_DL3_RCH_MON
:
1903 case AFE_DL3_LCH_MON
:
1904 case AFE_DL4_RCH_MON
:
1905 case AFE_DL4_LCH_MON
:
1906 case AFE_DL5_RCH_MON
:
1907 case AFE_DL5_LCH_MON
:
1908 case AFE_DL6_RCH_MON
:
1909 case AFE_DL6_LCH_MON
:
1910 case AFE_DL7_RCH_MON
:
1911 case AFE_DL7_LCH_MON
:
1912 case AFE_DL8_RCH_MON
:
1913 case AFE_DL8_LCH_MON
:
1914 case AFE_VUL5_CUR_MSB
:
1917 case AFE_VUL6_CUR_MSB
:
1920 case AFE_ADDA_DL_SDM_FIFO_MON
:
1921 case AFE_ADDA_DL_SRC_LCH_MON
:
1922 case AFE_ADDA_DL_SRC_RCH_MON
:
1923 case AFE_ADDA_DL_SDM_OUT_MON
:
1924 case AFE_CONNSYS_I2S_MON
:
1925 case AFE_ASRC_2CH_CON0
:
1926 case AFE_ASRC_2CH_CON2
:
1927 case AFE_ASRC_2CH_CON3
:
1928 case AFE_ASRC_2CH_CON4
:
1929 case AFE_ASRC_2CH_CON5
:
1930 case AFE_ASRC_2CH_CON7
:
1931 case AFE_ASRC_2CH_CON8
:
1932 case AFE_ASRC_2CH_CON12
:
1933 case AFE_ASRC_2CH_CON13
:
1934 case AFE_DL9_CUR_MSB
:
1937 case AFE_ADDA_MTKAIF_MON0
:
1938 case AFE_ADDA_MTKAIF_MON1
:
1939 case AFE_DL_NLE_R_MON0
:
1940 case AFE_DL_NLE_R_MON1
:
1941 case AFE_DL_NLE_R_MON2
:
1942 case AFE_DL_NLE_L_MON0
:
1943 case AFE_DL_NLE_L_MON1
:
1944 case AFE_DL_NLE_L_MON2
:
1945 case AFE_GENERAL1_ASRC_2CH_CON0
:
1946 case AFE_GENERAL1_ASRC_2CH_CON2
:
1947 case AFE_GENERAL1_ASRC_2CH_CON3
:
1948 case AFE_GENERAL1_ASRC_2CH_CON4
:
1949 case AFE_GENERAL1_ASRC_2CH_CON5
:
1950 case AFE_GENERAL1_ASRC_2CH_CON7
:
1951 case AFE_GENERAL1_ASRC_2CH_CON8
:
1952 case AFE_GENERAL1_ASRC_2CH_CON12
:
1953 case AFE_GENERAL1_ASRC_2CH_CON13
:
1954 case AFE_GENERAL2_ASRC_2CH_CON0
:
1955 case AFE_GENERAL2_ASRC_2CH_CON2
:
1956 case AFE_GENERAL2_ASRC_2CH_CON3
:
1957 case AFE_GENERAL2_ASRC_2CH_CON4
:
1958 case AFE_GENERAL2_ASRC_2CH_CON5
:
1959 case AFE_GENERAL2_ASRC_2CH_CON7
:
1960 case AFE_GENERAL2_ASRC_2CH_CON8
:
1961 case AFE_GENERAL2_ASRC_2CH_CON12
:
1962 case AFE_GENERAL2_ASRC_2CH_CON13
:
1963 case AFE_DL9_RCH_MON
:
1964 case AFE_DL9_LCH_MON
:
1965 case AFE_DL5_CUR_MSB
:
1968 case AFE_DL6_CUR_MSB
:
1971 case AFE_DL7_CUR_MSB
:
1974 case AFE_DL8_CUR_MSB
:
1977 case AFE_PROT_SIDEBAND_MON
:
1978 case AFE_DOMAIN_SIDEBAND0_MON
:
1979 case AFE_DOMAIN_SIDEBAND1_MON
:
1980 case AFE_DOMAIN_SIDEBAND2_MON
:
1981 case AFE_DOMAIN_SIDEBAND3_MON
:
1982 case AFE_APLL1_TUNER_CFG
: /* [20:31] is monitor */
1983 case AFE_APLL2_TUNER_CFG
: /* [20:31] is monitor */
1985 case AFE_IRQ_MCU_CON0
:
1986 case AFE_IRQ_MCU_EN
:
1993 static const struct regmap_config mt8192_afe_regmap_config
= {
1997 .volatile_reg
= mt8192_is_volatile_reg
,
1998 .max_register
= AFE_MAX_REGISTER
,
1999 .num_reg_defaults_raw
= AFE_MAX_REGISTER
,
2000 .cache_type
= REGCACHE_FLAT
,
2003 static irqreturn_t
mt8192_afe_irq_handler(int irq_id
, void *dev
)
2005 struct mtk_base_afe
*afe
= dev
;
2006 struct mtk_base_afe_irq
*irq
;
2007 unsigned int status
;
2008 unsigned int status_mcu
;
2009 unsigned int mcu_en
;
2013 /* get irq that is sent to MCU */
2014 regmap_read(afe
->regmap
, AFE_IRQ_MCU_EN
, &mcu_en
);
2016 ret
= regmap_read(afe
->regmap
, AFE_IRQ_MCU_STATUS
, &status
);
2017 /* only care IRQ which is sent to MCU */
2018 status_mcu
= status
& mcu_en
& AFE_IRQ_STATUS_BITS
;
2020 if (ret
|| status_mcu
== 0) {
2021 dev_err(afe
->dev
, "%s(), irq status err, ret %d, status 0x%x, mcu_en 0x%x\n",
2022 __func__
, ret
, status
, mcu_en
);
2027 for (i
= 0; i
< MT8192_MEMIF_NUM
; i
++) {
2028 struct mtk_base_afe_memif
*memif
= &afe
->memif
[i
];
2030 if (!memif
->substream
)
2033 if (memif
->irq_usage
< 0)
2036 irq
= &afe
->irqs
[memif
->irq_usage
];
2038 if (status_mcu
& (1 << irq
->irq_data
->irq_en_shift
))
2039 snd_pcm_period_elapsed(memif
->substream
);
2044 regmap_write(afe
->regmap
,
2051 static int mt8192_afe_runtime_suspend(struct device
*dev
)
2053 struct mtk_base_afe
*afe
= dev_get_drvdata(dev
);
2054 struct mt8192_afe_private
*afe_priv
= afe
->platform_priv
;
2058 dev_info(afe
->dev
, "%s()\n", __func__
);
2060 if (!afe
->regmap
|| afe_priv
->pm_runtime_bypass_reg_ctl
)
2064 regmap_update_bits(afe
->regmap
, AFE_DAC_CON0
, AFE_ON_MASK_SFT
, 0x0);
2066 ret
= regmap_read_poll_timeout(afe
->regmap
,
2069 (value
& AFE_ON_RETM_MASK_SFT
) == 0,
2073 dev_warn(afe
->dev
, "%s(), ret %d\n", __func__
, ret
);
2075 /* make sure all irq status are cleared */
2076 regmap_write(afe
->regmap
, AFE_IRQ_MCU_CLR
, 0xffffffff);
2077 regmap_write(afe
->regmap
, AFE_IRQ_MCU_CLR
, 0xffffffff);
2080 regmap_write(afe
->regmap
, AFE_SINEGEN_CON0
, 0x0);
2081 regmap_update_bits(afe
->regmap
, AFE_SINEGEN_CON2
,
2082 INNER_LOOP_BACK_MODE_MASK_SFT
,
2083 0x3f << INNER_LOOP_BACK_MODE_SFT
);
2086 regcache_cache_only(afe
->regmap
, true);
2087 regcache_mark_dirty(afe
->regmap
);
2090 mt8192_afe_disable_clock(afe
);
2094 static int mt8192_afe_runtime_resume(struct device
*dev
)
2096 struct mtk_base_afe
*afe
= dev_get_drvdata(dev
);
2097 struct mt8192_afe_private
*afe_priv
= afe
->platform_priv
;
2100 dev_info(afe
->dev
, "%s()\n", __func__
);
2102 ret
= mt8192_afe_enable_clock(afe
);
2106 if (!afe
->regmap
|| afe_priv
->pm_runtime_bypass_reg_ctl
)
2109 regcache_cache_only(afe
->regmap
, false);
2110 regcache_sync(afe
->regmap
);
2112 /* enable audio sys DCM for power saving */
2113 regmap_update_bits(afe_priv
->infracfg
,
2114 PERI_BUS_DCM_CTRL
, 0x1 << 29, 0x1 << 29);
2115 regmap_update_bits(afe
->regmap
, AUDIO_TOP_CON0
, 0x1 << 29, 0x1 << 29);
2117 /* force cpu use 8_24 format when writing 32bit data */
2118 regmap_update_bits(afe
->regmap
, AFE_MEMIF_CON0
,
2119 CPU_HD_ALIGN_MASK_SFT
, 0 << CPU_HD_ALIGN_SFT
);
2121 /* set all output port to 24bit */
2122 regmap_write(afe
->regmap
, AFE_CONN_24BIT
, 0xffffffff);
2123 regmap_write(afe
->regmap
, AFE_CONN_24BIT_1
, 0xffffffff);
2126 regmap_update_bits(afe
->regmap
, AFE_DAC_CON0
, AFE_ON_MASK_SFT
, 0x1);
2132 static int mt8192_afe_component_probe(struct snd_soc_component
*component
)
2134 return mtk_afe_add_sub_dai_control(component
);
2137 static const struct snd_soc_component_driver mt8192_afe_component
= {
2138 .name
= AFE_PCM_NAME
,
2139 .probe
= mt8192_afe_component_probe
,
2140 .pointer
= mtk_afe_pcm_pointer
,
2141 .pcm_construct
= mtk_afe_pcm_new
,
2144 static const struct snd_soc_component_driver mt8192_afe_pcm_component
= {
2145 .name
= "mt8192-afe-pcm-dai",
2148 static int mt8192_dai_memif_register(struct mtk_base_afe
*afe
)
2150 struct mtk_base_afe_dai
*dai
;
2152 dai
= devm_kzalloc(afe
->dev
, sizeof(*dai
), GFP_KERNEL
);
2156 list_add(&dai
->list
, &afe
->sub_dais
);
2158 dai
->dai_drivers
= mt8192_memif_dai_driver
;
2159 dai
->num_dai_drivers
= ARRAY_SIZE(mt8192_memif_dai_driver
);
2161 dai
->dapm_widgets
= mt8192_memif_widgets
;
2162 dai
->num_dapm_widgets
= ARRAY_SIZE(mt8192_memif_widgets
);
2163 dai
->dapm_routes
= mt8192_memif_routes
;
2164 dai
->num_dapm_routes
= ARRAY_SIZE(mt8192_memif_routes
);
2168 typedef int (*dai_register_cb
)(struct mtk_base_afe
*);
2169 static const dai_register_cb dai_register_cbs
[] = {
2170 mt8192_dai_adda_register
,
2171 mt8192_dai_i2s_register
,
2172 mt8192_dai_pcm_register
,
2173 mt8192_dai_tdm_register
,
2174 mt8192_dai_memif_register
,
2177 static int mt8192_afe_pcm_dev_probe(struct platform_device
*pdev
)
2179 struct mtk_base_afe
*afe
;
2180 struct mt8192_afe_private
*afe_priv
;
2182 struct reset_control
*rstc
;
2185 ret
= dma_set_mask_and_coherent(&pdev
->dev
, DMA_BIT_MASK(34));
2189 afe
= devm_kzalloc(&pdev
->dev
, sizeof(*afe
), GFP_KERNEL
);
2192 platform_set_drvdata(pdev
, afe
);
2194 afe
->platform_priv
= devm_kzalloc(&pdev
->dev
, sizeof(*afe_priv
),
2196 if (!afe
->platform_priv
)
2198 afe_priv
= afe
->platform_priv
;
2200 afe
->dev
= &pdev
->dev
;
2203 /* init audio related clock */
2204 ret
= mt8192_init_clock(afe
);
2206 dev_err(dev
, "init clock error\n");
2210 /* reset controller to reset audio regs before regmap cache */
2211 rstc
= devm_reset_control_get_exclusive(dev
, "audiosys");
2213 ret
= PTR_ERR(rstc
);
2214 dev_err(dev
, "could not get audiosys reset:%d\n", ret
);
2218 ret
= reset_control_reset(rstc
);
2220 dev_err(dev
, "failed to trigger audio reset:%d\n", ret
);
2224 pm_runtime_enable(&pdev
->dev
);
2225 if (!pm_runtime_enabled(&pdev
->dev
))
2226 goto err_pm_disable
;
2229 afe
->regmap
= syscon_node_to_regmap(dev
->parent
->of_node
);
2230 if (IS_ERR(afe
->regmap
)) {
2231 dev_err(dev
, "could not get regmap from parent\n");
2232 return PTR_ERR(afe
->regmap
);
2234 ret
= regmap_attach_dev(dev
, afe
->regmap
, &mt8192_afe_regmap_config
);
2236 dev_warn(dev
, "regmap_attach_dev fail, ret %d\n", ret
);
2240 /* enable clock for regcache get default value from hw */
2241 afe_priv
->pm_runtime_bypass_reg_ctl
= true;
2242 pm_runtime_get_sync(&pdev
->dev
);
2244 ret
= regmap_reinit_cache(afe
->regmap
, &mt8192_afe_regmap_config
);
2246 dev_err(dev
, "regmap_reinit_cache fail, ret %d\n", ret
);
2250 pm_runtime_put_sync(&pdev
->dev
);
2251 afe_priv
->pm_runtime_bypass_reg_ctl
= false;
2253 regcache_cache_only(afe
->regmap
, true);
2254 regcache_mark_dirty(afe
->regmap
);
2257 afe
->memif_size
= MT8192_MEMIF_NUM
;
2258 afe
->memif
= devm_kcalloc(dev
, afe
->memif_size
, sizeof(*afe
->memif
),
2263 for (i
= 0; i
< afe
->memif_size
; i
++) {
2264 afe
->memif
[i
].data
= &memif_data
[i
];
2265 afe
->memif
[i
].irq_usage
= memif_irq_usage
[i
];
2266 afe
->memif
[i
].const_irq
= 1;
2269 mutex_init(&afe
->irq_alloc_lock
); /* needed when dynamic irq */
2272 afe
->irqs_size
= MT8192_IRQ_NUM
;
2273 afe
->irqs
= devm_kcalloc(dev
, afe
->irqs_size
, sizeof(*afe
->irqs
),
2278 for (i
= 0; i
< afe
->irqs_size
; i
++)
2279 afe
->irqs
[i
].irq_data
= &irq_data
[i
];
2282 irq_id
= platform_get_irq(pdev
, 0);
2286 ret
= devm_request_irq(dev
, irq_id
, mt8192_afe_irq_handler
,
2287 IRQF_TRIGGER_NONE
, "asys-isr", (void *)afe
);
2289 dev_err(dev
, "could not request_irq for Afe_ISR_Handle\n");
2294 INIT_LIST_HEAD(&afe
->sub_dais
);
2296 for (i
= 0; i
< ARRAY_SIZE(dai_register_cbs
); i
++) {
2297 ret
= dai_register_cbs
[i
](afe
);
2299 dev_warn(afe
->dev
, "dai register i %d fail, ret %d\n",
2301 goto err_pm_disable
;
2305 /* init dai_driver and component_driver */
2306 ret
= mtk_afe_combine_sub_dai(afe
);
2308 dev_warn(afe
->dev
, "mtk_afe_combine_sub_dai fail, ret %d\n",
2310 goto err_pm_disable
;
2314 afe
->mtk_afe_hardware
= &mt8192_afe_hardware
;
2315 afe
->memif_fs
= mt8192_memif_fs
;
2316 afe
->irq_fs
= mt8192_irq_fs
;
2317 afe
->get_dai_fs
= mt8192_get_dai_fs
;
2318 afe
->get_memif_pbuf_size
= mt8192_get_memif_pbuf_size
;
2319 afe
->memif_32bit_supported
= 1;
2321 afe
->runtime_resume
= mt8192_afe_runtime_resume
;
2322 afe
->runtime_suspend
= mt8192_afe_runtime_suspend
;
2324 /* register platform */
2325 ret
= devm_snd_soc_register_component(&pdev
->dev
,
2326 &mt8192_afe_component
, NULL
, 0);
2328 dev_warn(dev
, "err_platform\n");
2329 goto err_pm_disable
;
2332 ret
= devm_snd_soc_register_component(&pdev
->dev
,
2333 &mt8192_afe_pcm_component
,
2335 afe
->num_dai_drivers
);
2337 dev_warn(dev
, "err_dai_component\n");
2338 goto err_pm_disable
;
2344 pm_runtime_disable(&pdev
->dev
);
2349 static int mt8192_afe_pcm_dev_remove(struct platform_device
*pdev
)
2351 struct mtk_base_afe
*afe
= platform_get_drvdata(pdev
);
2353 pm_runtime_disable(&pdev
->dev
);
2354 if (!pm_runtime_status_suspended(&pdev
->dev
))
2355 mt8192_afe_runtime_suspend(&pdev
->dev
);
2357 /* disable afe clock */
2358 mt8192_afe_disable_clock(afe
);
2362 static const struct of_device_id mt8192_afe_pcm_dt_match
[] = {
2363 { .compatible
= "mediatek,mt8192-audio", },
2366 MODULE_DEVICE_TABLE(of
, mt8192_afe_pcm_dt_match
);
2368 static const struct dev_pm_ops mt8192_afe_pm_ops
= {
2369 SET_RUNTIME_PM_OPS(mt8192_afe_runtime_suspend
,
2370 mt8192_afe_runtime_resume
, NULL
)
2373 static struct platform_driver mt8192_afe_pcm_driver
= {
2375 .name
= "mt8192-audio",
2376 .of_match_table
= mt8192_afe_pcm_dt_match
,
2378 .pm
= &mt8192_afe_pm_ops
,
2381 .probe
= mt8192_afe_pcm_dev_probe
,
2382 .remove
= mt8192_afe_pcm_dev_remove
,
2385 module_platform_driver(mt8192_afe_pcm_driver
);
2387 MODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8192");
2388 MODULE_AUTHOR("Shane Chien <shane.chien@mediatek.com>");
2389 MODULE_LICENSE("GPL v2");