162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// Mediatek ALSA SoC AFE platform driver for 8192
462306a36Sopenharmony_ci//
562306a36Sopenharmony_ci// Copyright (c) 2020 MediaTek Inc.
662306a36Sopenharmony_ci// Author: Shane Chien <shane.chien@mediatek.com>
762306a36Sopenharmony_ci//
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/delay.h>
1062306a36Sopenharmony_ci#include <linux/dma-mapping.h>
1162306a36Sopenharmony_ci#include <linux/module.h>
1262306a36Sopenharmony_ci#include <linux/mfd/syscon.h>
1362306a36Sopenharmony_ci#include <linux/of.h>
1462306a36Sopenharmony_ci#include <linux/of_address.h>
1562306a36Sopenharmony_ci#include <linux/pm_runtime.h>
1662306a36Sopenharmony_ci#include <linux/reset.h>
1762306a36Sopenharmony_ci#include <sound/soc.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include "../common/mtk-afe-fe-dai.h"
2062306a36Sopenharmony_ci#include "../common/mtk-afe-platform-driver.h"
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#include "mt8192-afe-common.h"
2362306a36Sopenharmony_ci#include "mt8192-afe-clk.h"
2462306a36Sopenharmony_ci#include "mt8192-afe-gpio.h"
2562306a36Sopenharmony_ci#include "mt8192-interconnection.h"
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic const struct snd_pcm_hardware mt8192_afe_hardware = {
2862306a36Sopenharmony_ci	.info = (SNDRV_PCM_INFO_MMAP |
2962306a36Sopenharmony_ci		 SNDRV_PCM_INFO_INTERLEAVED |
3062306a36Sopenharmony_ci		 SNDRV_PCM_INFO_MMAP_VALID),
3162306a36Sopenharmony_ci	.formats = (SNDRV_PCM_FMTBIT_S16_LE |
3262306a36Sopenharmony_ci		    SNDRV_PCM_FMTBIT_S24_LE |
3362306a36Sopenharmony_ci		    SNDRV_PCM_FMTBIT_S32_LE),
3462306a36Sopenharmony_ci	.period_bytes_min = 96,
3562306a36Sopenharmony_ci	.period_bytes_max = 4 * 48 * 1024,
3662306a36Sopenharmony_ci	.periods_min = 2,
3762306a36Sopenharmony_ci	.periods_max = 256,
3862306a36Sopenharmony_ci	.buffer_bytes_max = 4 * 48 * 1024,
3962306a36Sopenharmony_ci	.fifo_size = 0,
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistatic int mt8192_memif_fs(struct snd_pcm_substream *substream,
4362306a36Sopenharmony_ci			   unsigned int rate)
4462306a36Sopenharmony_ci{
4562306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
4662306a36Sopenharmony_ci	struct snd_soc_component *component =
4762306a36Sopenharmony_ci		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
4862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
4962306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	return mt8192_rate_transform(afe->dev, rate, id);
5262306a36Sopenharmony_ci}
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistatic int mt8192_get_dai_fs(struct mtk_base_afe *afe,
5562306a36Sopenharmony_ci			     int dai_id, unsigned int rate)
5662306a36Sopenharmony_ci{
5762306a36Sopenharmony_ci	return mt8192_rate_transform(afe->dev, rate, dai_id);
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistatic int mt8192_irq_fs(struct snd_pcm_substream *substream, unsigned int rate)
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
6362306a36Sopenharmony_ci	struct snd_soc_component *component =
6462306a36Sopenharmony_ci		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
6562306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	return mt8192_general_rate_transform(afe->dev, rate);
6862306a36Sopenharmony_ci}
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cistatic int mt8192_get_memif_pbuf_size(struct snd_pcm_substream *substream)
7162306a36Sopenharmony_ci{
7262306a36Sopenharmony_ci	struct snd_pcm_runtime *runtime = substream->runtime;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci	if ((runtime->period_size * 1000) / runtime->rate > 10)
7562306a36Sopenharmony_ci		return MT8192_MEMIF_PBUF_SIZE_256_BYTES;
7662306a36Sopenharmony_ci	else
7762306a36Sopenharmony_ci		return MT8192_MEMIF_PBUF_SIZE_32_BYTES;
7862306a36Sopenharmony_ci}
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\
8162306a36Sopenharmony_ci		       SNDRV_PCM_RATE_88200 |\
8262306a36Sopenharmony_ci		       SNDRV_PCM_RATE_96000 |\
8362306a36Sopenharmony_ci		       SNDRV_PCM_RATE_176400 |\
8462306a36Sopenharmony_ci		       SNDRV_PCM_RATE_192000)
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci#define MTK_PCM_DAI_RATES (SNDRV_PCM_RATE_8000 |\
8762306a36Sopenharmony_ci			   SNDRV_PCM_RATE_16000 |\
8862306a36Sopenharmony_ci			   SNDRV_PCM_RATE_32000 |\
8962306a36Sopenharmony_ci			   SNDRV_PCM_RATE_48000)
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
9262306a36Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S24_LE |\
9362306a36Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S32_LE)
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistatic struct snd_soc_dai_driver mt8192_memif_dai_driver[] = {
9662306a36Sopenharmony_ci	/* FE DAIs: memory intefaces to CPU */
9762306a36Sopenharmony_ci	{
9862306a36Sopenharmony_ci		.name = "DL1",
9962306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL1,
10062306a36Sopenharmony_ci		.playback = {
10162306a36Sopenharmony_ci			.stream_name = "DL1",
10262306a36Sopenharmony_ci			.channels_min = 1,
10362306a36Sopenharmony_ci			.channels_max = 2,
10462306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
10562306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
10662306a36Sopenharmony_ci		},
10762306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
10862306a36Sopenharmony_ci	},
10962306a36Sopenharmony_ci	{
11062306a36Sopenharmony_ci		.name = "DL12",
11162306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL12,
11262306a36Sopenharmony_ci		.playback = {
11362306a36Sopenharmony_ci			.stream_name = "DL12",
11462306a36Sopenharmony_ci			.channels_min = 1,
11562306a36Sopenharmony_ci			.channels_max = 2,
11662306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
11762306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
11862306a36Sopenharmony_ci		},
11962306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
12062306a36Sopenharmony_ci	},
12162306a36Sopenharmony_ci	{
12262306a36Sopenharmony_ci		.name = "DL2",
12362306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL2,
12462306a36Sopenharmony_ci		.playback = {
12562306a36Sopenharmony_ci			.stream_name = "DL2",
12662306a36Sopenharmony_ci			.channels_min = 1,
12762306a36Sopenharmony_ci			.channels_max = 2,
12862306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
12962306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
13062306a36Sopenharmony_ci		},
13162306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
13262306a36Sopenharmony_ci	},
13362306a36Sopenharmony_ci	{
13462306a36Sopenharmony_ci		.name = "DL3",
13562306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL3,
13662306a36Sopenharmony_ci		.playback = {
13762306a36Sopenharmony_ci			.stream_name = "DL3",
13862306a36Sopenharmony_ci			.channels_min = 1,
13962306a36Sopenharmony_ci			.channels_max = 2,
14062306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
14162306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
14262306a36Sopenharmony_ci		},
14362306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
14462306a36Sopenharmony_ci	},
14562306a36Sopenharmony_ci	{
14662306a36Sopenharmony_ci		.name = "DL4",
14762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL4,
14862306a36Sopenharmony_ci		.playback = {
14962306a36Sopenharmony_ci			.stream_name = "DL4",
15062306a36Sopenharmony_ci			.channels_min = 1,
15162306a36Sopenharmony_ci			.channels_max = 2,
15262306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
15362306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
15462306a36Sopenharmony_ci		},
15562306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
15662306a36Sopenharmony_ci	},
15762306a36Sopenharmony_ci	{
15862306a36Sopenharmony_ci		.name = "DL5",
15962306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL5,
16062306a36Sopenharmony_ci		.playback = {
16162306a36Sopenharmony_ci			.stream_name = "DL5",
16262306a36Sopenharmony_ci			.channels_min = 1,
16362306a36Sopenharmony_ci			.channels_max = 2,
16462306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
16562306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
16662306a36Sopenharmony_ci		},
16762306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
16862306a36Sopenharmony_ci	},
16962306a36Sopenharmony_ci	{
17062306a36Sopenharmony_ci		.name = "DL6",
17162306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL6,
17262306a36Sopenharmony_ci		.playback = {
17362306a36Sopenharmony_ci			.stream_name = "DL6",
17462306a36Sopenharmony_ci			.channels_min = 1,
17562306a36Sopenharmony_ci			.channels_max = 2,
17662306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
17762306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
17862306a36Sopenharmony_ci		},
17962306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
18062306a36Sopenharmony_ci	},
18162306a36Sopenharmony_ci	{
18262306a36Sopenharmony_ci		.name = "DL7",
18362306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL7,
18462306a36Sopenharmony_ci		.playback = {
18562306a36Sopenharmony_ci			.stream_name = "DL7",
18662306a36Sopenharmony_ci			.channels_min = 1,
18762306a36Sopenharmony_ci			.channels_max = 2,
18862306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
18962306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
19062306a36Sopenharmony_ci		},
19162306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
19262306a36Sopenharmony_ci	},
19362306a36Sopenharmony_ci	{
19462306a36Sopenharmony_ci		.name = "DL8",
19562306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL8,
19662306a36Sopenharmony_ci		.playback = {
19762306a36Sopenharmony_ci			.stream_name = "DL8",
19862306a36Sopenharmony_ci			.channels_min = 1,
19962306a36Sopenharmony_ci			.channels_max = 2,
20062306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
20162306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
20262306a36Sopenharmony_ci		},
20362306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
20462306a36Sopenharmony_ci	},
20562306a36Sopenharmony_ci	{
20662306a36Sopenharmony_ci		.name = "DL9",
20762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL9,
20862306a36Sopenharmony_ci		.playback = {
20962306a36Sopenharmony_ci			.stream_name = "DL9",
21062306a36Sopenharmony_ci			.channels_min = 1,
21162306a36Sopenharmony_ci			.channels_max = 2,
21262306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
21362306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
21462306a36Sopenharmony_ci		},
21562306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
21662306a36Sopenharmony_ci	},
21762306a36Sopenharmony_ci	{
21862306a36Sopenharmony_ci		.name = "UL1",
21962306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL12,
22062306a36Sopenharmony_ci		.capture = {
22162306a36Sopenharmony_ci			.stream_name = "UL1",
22262306a36Sopenharmony_ci			.channels_min = 1,
22362306a36Sopenharmony_ci			.channels_max = 4,
22462306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
22562306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
22662306a36Sopenharmony_ci		},
22762306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
22862306a36Sopenharmony_ci	},
22962306a36Sopenharmony_ci	{
23062306a36Sopenharmony_ci		.name = "UL2",
23162306a36Sopenharmony_ci		.id = MT8192_MEMIF_AWB,
23262306a36Sopenharmony_ci		.capture = {
23362306a36Sopenharmony_ci			.stream_name = "UL2",
23462306a36Sopenharmony_ci			.channels_min = 1,
23562306a36Sopenharmony_ci			.channels_max = 2,
23662306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
23762306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
23862306a36Sopenharmony_ci		},
23962306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
24062306a36Sopenharmony_ci	},
24162306a36Sopenharmony_ci	{
24262306a36Sopenharmony_ci		.name = "UL3",
24362306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL2,
24462306a36Sopenharmony_ci		.capture = {
24562306a36Sopenharmony_ci			.stream_name = "UL3",
24662306a36Sopenharmony_ci			.channels_min = 1,
24762306a36Sopenharmony_ci			.channels_max = 2,
24862306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
24962306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
25062306a36Sopenharmony_ci		},
25162306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
25262306a36Sopenharmony_ci	},
25362306a36Sopenharmony_ci	{
25462306a36Sopenharmony_ci		.name = "UL4",
25562306a36Sopenharmony_ci		.id = MT8192_MEMIF_AWB2,
25662306a36Sopenharmony_ci		.capture = {
25762306a36Sopenharmony_ci			.stream_name = "UL4",
25862306a36Sopenharmony_ci			.channels_min = 1,
25962306a36Sopenharmony_ci			.channels_max = 2,
26062306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
26162306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
26262306a36Sopenharmony_ci		},
26362306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
26462306a36Sopenharmony_ci	},
26562306a36Sopenharmony_ci	{
26662306a36Sopenharmony_ci		.name = "UL5",
26762306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL3,
26862306a36Sopenharmony_ci		.capture = {
26962306a36Sopenharmony_ci			.stream_name = "UL5",
27062306a36Sopenharmony_ci			.channels_min = 1,
27162306a36Sopenharmony_ci			.channels_max = 2,
27262306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
27362306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
27462306a36Sopenharmony_ci		},
27562306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
27662306a36Sopenharmony_ci	},
27762306a36Sopenharmony_ci	{
27862306a36Sopenharmony_ci		.name = "UL6",
27962306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL4,
28062306a36Sopenharmony_ci		.capture = {
28162306a36Sopenharmony_ci			.stream_name = "UL6",
28262306a36Sopenharmony_ci			.channels_min = 1,
28362306a36Sopenharmony_ci			.channels_max = 2,
28462306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
28562306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
28662306a36Sopenharmony_ci		},
28762306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
28862306a36Sopenharmony_ci	},
28962306a36Sopenharmony_ci	{
29062306a36Sopenharmony_ci		.name = "UL7",
29162306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL5,
29262306a36Sopenharmony_ci		.capture = {
29362306a36Sopenharmony_ci			.stream_name = "UL7",
29462306a36Sopenharmony_ci			.channels_min = 1,
29562306a36Sopenharmony_ci			.channels_max = 2,
29662306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
29762306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
29862306a36Sopenharmony_ci		},
29962306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
30062306a36Sopenharmony_ci	},
30162306a36Sopenharmony_ci	{
30262306a36Sopenharmony_ci		.name = "UL8",
30362306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL6,
30462306a36Sopenharmony_ci		.capture = {
30562306a36Sopenharmony_ci			.stream_name = "UL8",
30662306a36Sopenharmony_ci			.channels_min = 1,
30762306a36Sopenharmony_ci			.channels_max = 2,
30862306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
30962306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
31062306a36Sopenharmony_ci		},
31162306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
31262306a36Sopenharmony_ci	},
31362306a36Sopenharmony_ci	{
31462306a36Sopenharmony_ci		.name = "UL_MONO_1",
31562306a36Sopenharmony_ci		.id = MT8192_MEMIF_MOD_DAI,
31662306a36Sopenharmony_ci		.capture = {
31762306a36Sopenharmony_ci			.stream_name = "UL_MONO_1",
31862306a36Sopenharmony_ci			.channels_min = 1,
31962306a36Sopenharmony_ci			.channels_max = 2,
32062306a36Sopenharmony_ci			.rates = MTK_PCM_DAI_RATES,
32162306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
32262306a36Sopenharmony_ci		},
32362306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
32462306a36Sopenharmony_ci	},
32562306a36Sopenharmony_ci	{
32662306a36Sopenharmony_ci		.name = "UL_MONO_2",
32762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DAI,
32862306a36Sopenharmony_ci		.capture = {
32962306a36Sopenharmony_ci			.stream_name = "UL_MONO_2",
33062306a36Sopenharmony_ci			.channels_min = 1,
33162306a36Sopenharmony_ci			.channels_max = 2,
33262306a36Sopenharmony_ci			.rates = MTK_PCM_DAI_RATES,
33362306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
33462306a36Sopenharmony_ci		},
33562306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
33662306a36Sopenharmony_ci	},
33762306a36Sopenharmony_ci	{
33862306a36Sopenharmony_ci		.name = "UL_MONO_3",
33962306a36Sopenharmony_ci		.id = MT8192_MEMIF_DAI2,
34062306a36Sopenharmony_ci		.capture = {
34162306a36Sopenharmony_ci			.stream_name = "UL_MONO_3",
34262306a36Sopenharmony_ci			.channels_min = 1,
34362306a36Sopenharmony_ci			.channels_max = 2,
34462306a36Sopenharmony_ci			.rates = MTK_PCM_DAI_RATES,
34562306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
34662306a36Sopenharmony_ci		},
34762306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
34862306a36Sopenharmony_ci	},
34962306a36Sopenharmony_ci	{
35062306a36Sopenharmony_ci		.name = "HDMI",
35162306a36Sopenharmony_ci		.id = MT8192_MEMIF_HDMI,
35262306a36Sopenharmony_ci		.playback = {
35362306a36Sopenharmony_ci			.stream_name = "HDMI",
35462306a36Sopenharmony_ci			.channels_min = 2,
35562306a36Sopenharmony_ci			.channels_max = 8,
35662306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
35762306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
35862306a36Sopenharmony_ci		},
35962306a36Sopenharmony_ci		.ops = &mtk_afe_fe_ops,
36062306a36Sopenharmony_ci	},
36162306a36Sopenharmony_ci};
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_cistatic int ul_tinyconn_event(struct snd_soc_dapm_widget *w,
36462306a36Sopenharmony_ci			     struct snd_kcontrol *kcontrol,
36562306a36Sopenharmony_ci			     int event)
36662306a36Sopenharmony_ci{
36762306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
36862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
36962306a36Sopenharmony_ci	unsigned int reg_shift;
37062306a36Sopenharmony_ci	unsigned int reg_mask_shift;
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci	dev_dbg(afe->dev, "%s(), event 0x%x\n", __func__, event);
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci	if (strstr(w->name, "UL1")) {
37562306a36Sopenharmony_ci		reg_shift = VUL1_USE_TINY_SFT;
37662306a36Sopenharmony_ci		reg_mask_shift = VUL1_USE_TINY_MASK_SFT;
37762306a36Sopenharmony_ci	} else if (strstr(w->name, "UL2")) {
37862306a36Sopenharmony_ci		reg_shift = VUL2_USE_TINY_SFT;
37962306a36Sopenharmony_ci		reg_mask_shift = VUL2_USE_TINY_MASK_SFT;
38062306a36Sopenharmony_ci	} else if (strstr(w->name, "UL3")) {
38162306a36Sopenharmony_ci		reg_shift = VUL12_USE_TINY_SFT;
38262306a36Sopenharmony_ci		reg_mask_shift = VUL12_USE_TINY_MASK_SFT;
38362306a36Sopenharmony_ci	} else if (strstr(w->name, "UL4")) {
38462306a36Sopenharmony_ci		reg_shift = AWB2_USE_TINY_SFT;
38562306a36Sopenharmony_ci		reg_mask_shift = AWB2_USE_TINY_MASK_SFT;
38662306a36Sopenharmony_ci	} else {
38762306a36Sopenharmony_ci		reg_shift = AWB2_USE_TINY_SFT;
38862306a36Sopenharmony_ci		reg_mask_shift = AWB2_USE_TINY_MASK_SFT;
38962306a36Sopenharmony_ci		dev_warn(afe->dev, "%s(), err widget name %s, default use UL4",
39062306a36Sopenharmony_ci			 __func__, w->name);
39162306a36Sopenharmony_ci	}
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ci	switch (event) {
39462306a36Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
39562306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, AFE_MEMIF_CONN, reg_mask_shift,
39662306a36Sopenharmony_ci				   0x1 << reg_shift);
39762306a36Sopenharmony_ci		break;
39862306a36Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMD:
39962306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, AFE_MEMIF_CONN, reg_mask_shift,
40062306a36Sopenharmony_ci				   0x0 << reg_shift);
40162306a36Sopenharmony_ci		break;
40262306a36Sopenharmony_ci	default:
40362306a36Sopenharmony_ci		break;
40462306a36Sopenharmony_ci	}
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ci	return 0;
40762306a36Sopenharmony_ci}
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ci/* dma widget & routes*/
41062306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch1_mix[] = {
41162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN21,
41262306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
41362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN21,
41462306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
41562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN21,
41662306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
41762306a36Sopenharmony_ci};
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch2_mix[] = {
42062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN22,
42162306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
42262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN22,
42362306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
42462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN22,
42562306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
42662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4", AFE_CONN22,
42762306a36Sopenharmony_ci				    I_ADDA_UL_CH4, 1, 0),
42862306a36Sopenharmony_ci};
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch3_mix[] = {
43162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN9,
43262306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
43362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN9,
43462306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
43562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN9,
43662306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
43762306a36Sopenharmony_ci};
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch4_mix[] = {
44062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN10,
44162306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
44262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN10,
44362306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
44462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN10,
44562306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
44662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4", AFE_CONN10,
44762306a36Sopenharmony_ci				    I_ADDA_UL_CH4, 1, 0),
44862306a36Sopenharmony_ci};
44962306a36Sopenharmony_ci
45062306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul2_ch1_mix[] = {
45162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1", AFE_CONN5,
45262306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
45362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN5,
45462306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
45562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN5,
45662306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
45762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN5,
45862306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
45962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN5,
46062306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
46162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN5_1,
46262306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
46362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN5_1,
46462306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
46562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN5_1,
46662306a36Sopenharmony_ci				    I_DL6_CH1, 1, 0),
46762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN5,
46862306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
46962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN5,
47062306a36Sopenharmony_ci				    I_PCM_2_CAP_CH1, 1, 0),
47162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1", AFE_CONN5,
47262306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
47362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S6_CH1", AFE_CONN5_1,
47462306a36Sopenharmony_ci				    I_I2S6_CH1, 1, 0),
47562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S8_CH1", AFE_CONN5_1,
47662306a36Sopenharmony_ci				    I_I2S8_CH1, 1, 0),
47762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1", AFE_CONN5_1,
47862306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH1, 1, 0),
47962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH1", AFE_CONN5_1,
48062306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
48162306a36Sopenharmony_ci};
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul2_ch2_mix[] = {
48462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2", AFE_CONN6,
48562306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
48662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN6,
48762306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
48862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN6,
48962306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
49062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN6,
49162306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
49262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN6,
49362306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
49462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN6_1,
49562306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
49662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN6_1,
49762306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
49862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN6_1,
49962306a36Sopenharmony_ci				    I_DL6_CH2, 1, 0),
50062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN6,
50162306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
50262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN6,
50362306a36Sopenharmony_ci				    I_PCM_2_CAP_CH1, 1, 0),
50462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2", AFE_CONN6,
50562306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
50662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S6_CH2", AFE_CONN6_1,
50762306a36Sopenharmony_ci				    I_I2S6_CH2, 1, 0),
50862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S8_CH2", AFE_CONN6_1,
50962306a36Sopenharmony_ci				    I_I2S8_CH2, 1, 0),
51062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2", AFE_CONN6_1,
51162306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH2, 1, 0),
51262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH2", AFE_CONN6_1,
51362306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
51462306a36Sopenharmony_ci};
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul3_ch1_mix[] = {
51762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1", AFE_CONN32_1,
51862306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH1, 1, 0),
51962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN32,
52062306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
52162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN32,
52262306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
52362306a36Sopenharmony_ci};
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul3_ch2_mix[] = {
52662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2", AFE_CONN33_1,
52762306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH2, 1, 0),
52862306a36Sopenharmony_ci};
52962306a36Sopenharmony_ci
53062306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul4_ch1_mix[] = {
53162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN38,
53262306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
53362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1", AFE_CONN38,
53462306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
53562306a36Sopenharmony_ci};
53662306a36Sopenharmony_ci
53762306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul4_ch2_mix[] = {
53862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN39,
53962306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
54062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2", AFE_CONN39,
54162306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
54262306a36Sopenharmony_ci};
54362306a36Sopenharmony_ci
54462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul5_ch1_mix[] = {
54562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN44,
54662306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
54762306a36Sopenharmony_ci};
54862306a36Sopenharmony_ci
54962306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul5_ch2_mix[] = {
55062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN45,
55162306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
55262306a36Sopenharmony_ci};
55362306a36Sopenharmony_ci
55462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul6_ch1_mix[] = {
55562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN46,
55662306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
55762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN46,
55862306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
55962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN46,
56062306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
56162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN46_1,
56262306a36Sopenharmony_ci				    I_DL6_CH1, 1, 0),
56362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN46,
56462306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
56562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN46,
56662306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
56762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN46_1,
56862306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
56962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN46,
57062306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
57162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN46,
57262306a36Sopenharmony_ci				    I_PCM_2_CAP_CH1, 1, 0),
57362306a36Sopenharmony_ci};
57462306a36Sopenharmony_ci
57562306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul6_ch2_mix[] = {
57662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN47,
57762306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
57862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN47,
57962306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
58062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN47,
58162306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
58262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN47_1,
58362306a36Sopenharmony_ci				    I_DL6_CH2, 1, 0),
58462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN47,
58562306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
58662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN47,
58762306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
58862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN47_1,
58962306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
59062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN47,
59162306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
59262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN47,
59362306a36Sopenharmony_ci				    I_PCM_2_CAP_CH1, 1, 0),
59462306a36Sopenharmony_ci};
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul7_ch1_mix[] = {
59762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN48,
59862306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
59962306a36Sopenharmony_ci};
60062306a36Sopenharmony_ci
60162306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul7_ch2_mix[] = {
60262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN49,
60362306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
60462306a36Sopenharmony_ci};
60562306a36Sopenharmony_ci
60662306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul8_ch1_mix[] = {
60762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN50,
60862306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
60962306a36Sopenharmony_ci};
61062306a36Sopenharmony_ci
61162306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul8_ch2_mix[] = {
61262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN51,
61362306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
61462306a36Sopenharmony_ci};
61562306a36Sopenharmony_ci
61662306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul_mono_1_mix[] = {
61762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN12,
61862306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
61962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN12,
62062306a36Sopenharmony_ci				    I_PCM_2_CAP_CH1, 1, 0),
62162306a36Sopenharmony_ci};
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul_mono_2_mix[] = {
62462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN11,
62562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
62662306a36Sopenharmony_ci};
62762306a36Sopenharmony_ci
62862306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul_mono_3_mix[] = {
62962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN35,
63062306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
63162306a36Sopenharmony_ci};
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci/* TINYCONN MUX */
63462306a36Sopenharmony_cienum {
63562306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S0 = 0x14,
63662306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S0 = 0x15,
63762306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S6 = 0x1a,
63862306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S6 = 0x1b,
63962306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S8 = 0x1c,
64062306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S8 = 0x1d,
64162306a36Sopenharmony_ci	TINYCONN_MUX_NONE = 0x1f,
64262306a36Sopenharmony_ci};
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_cistatic const char * const tinyconn_mux_map[] = {
64562306a36Sopenharmony_ci	"NONE",
64662306a36Sopenharmony_ci	"I2S0_CH1",
64762306a36Sopenharmony_ci	"I2S0_CH2",
64862306a36Sopenharmony_ci	"I2S6_CH1",
64962306a36Sopenharmony_ci	"I2S6_CH2",
65062306a36Sopenharmony_ci	"I2S8_CH1",
65162306a36Sopenharmony_ci	"I2S8_CH2",
65262306a36Sopenharmony_ci};
65362306a36Sopenharmony_ci
65462306a36Sopenharmony_cistatic int tinyconn_mux_map_value[] = {
65562306a36Sopenharmony_ci	TINYCONN_MUX_NONE,
65662306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S0,
65762306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S0,
65862306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S6,
65962306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S6,
66062306a36Sopenharmony_ci	TINYCONN_CH1_MUX_I2S8,
66162306a36Sopenharmony_ci	TINYCONN_CH2_MUX_I2S8,
66262306a36Sopenharmony_ci};
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul4_tinyconn_ch1_mux_map_enum,
66562306a36Sopenharmony_ci				  AFE_TINY_CONN0,
66662306a36Sopenharmony_ci				  O_2_CFG_SFT,
66762306a36Sopenharmony_ci				  O_2_CFG_MASK,
66862306a36Sopenharmony_ci				  tinyconn_mux_map,
66962306a36Sopenharmony_ci				  tinyconn_mux_map_value);
67062306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul4_tinyconn_ch2_mux_map_enum,
67162306a36Sopenharmony_ci				  AFE_TINY_CONN0,
67262306a36Sopenharmony_ci				  O_3_CFG_SFT,
67362306a36Sopenharmony_ci				  O_3_CFG_MASK,
67462306a36Sopenharmony_ci				  tinyconn_mux_map,
67562306a36Sopenharmony_ci				  tinyconn_mux_map_value);
67662306a36Sopenharmony_ci
67762306a36Sopenharmony_cistatic const struct snd_kcontrol_new ul4_tinyconn_ch1_mux_control =
67862306a36Sopenharmony_ci	SOC_DAPM_ENUM("UL4_TINYCONN_CH1_MUX", ul4_tinyconn_ch1_mux_map_enum);
67962306a36Sopenharmony_cistatic const struct snd_kcontrol_new ul4_tinyconn_ch2_mux_control =
68062306a36Sopenharmony_ci	SOC_DAPM_ENUM("UL4_TINYCONN_CH2_MUX", ul4_tinyconn_ch2_mux_map_enum);
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget mt8192_memif_widgets[] = {
68362306a36Sopenharmony_ci	/* inter-connections */
68462306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH1", SND_SOC_NOPM, 0, 0,
68562306a36Sopenharmony_ci			   memif_ul1_ch1_mix, ARRAY_SIZE(memif_ul1_ch1_mix)),
68662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH2", SND_SOC_NOPM, 0, 0,
68762306a36Sopenharmony_ci			   memif_ul1_ch2_mix, ARRAY_SIZE(memif_ul1_ch2_mix)),
68862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH3", SND_SOC_NOPM, 0, 0,
68962306a36Sopenharmony_ci			   memif_ul1_ch3_mix, ARRAY_SIZE(memif_ul1_ch3_mix)),
69062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH4", SND_SOC_NOPM, 0, 0,
69162306a36Sopenharmony_ci			   memif_ul1_ch4_mix, ARRAY_SIZE(memif_ul1_ch4_mix)),
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL2_CH1", SND_SOC_NOPM, 0, 0,
69462306a36Sopenharmony_ci			   memif_ul2_ch1_mix, ARRAY_SIZE(memif_ul2_ch1_mix)),
69562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL2_CH2", SND_SOC_NOPM, 0, 0,
69662306a36Sopenharmony_ci			   memif_ul2_ch2_mix, ARRAY_SIZE(memif_ul2_ch2_mix)),
69762306a36Sopenharmony_ci
69862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL3_CH1", SND_SOC_NOPM, 0, 0,
69962306a36Sopenharmony_ci			   memif_ul3_ch1_mix, ARRAY_SIZE(memif_ul3_ch1_mix)),
70062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL3_CH2", SND_SOC_NOPM, 0, 0,
70162306a36Sopenharmony_ci			   memif_ul3_ch2_mix, ARRAY_SIZE(memif_ul3_ch2_mix)),
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL4_CH1", SND_SOC_NOPM, 0, 0,
70462306a36Sopenharmony_ci			   memif_ul4_ch1_mix, ARRAY_SIZE(memif_ul4_ch1_mix)),
70562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL4_CH2", SND_SOC_NOPM, 0, 0,
70662306a36Sopenharmony_ci			   memif_ul4_ch2_mix, ARRAY_SIZE(memif_ul4_ch2_mix)),
70762306a36Sopenharmony_ci	SND_SOC_DAPM_MUX_E("UL4_TINYCONN_CH1_MUX", SND_SOC_NOPM, 0, 0,
70862306a36Sopenharmony_ci			   &ul4_tinyconn_ch1_mux_control,
70962306a36Sopenharmony_ci			   ul_tinyconn_event,
71062306a36Sopenharmony_ci			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
71162306a36Sopenharmony_ci	SND_SOC_DAPM_MUX_E("UL4_TINYCONN_CH2_MUX", SND_SOC_NOPM, 0, 0,
71262306a36Sopenharmony_ci			   &ul4_tinyconn_ch2_mux_control,
71362306a36Sopenharmony_ci			   ul_tinyconn_event,
71462306a36Sopenharmony_ci			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL5_CH1", SND_SOC_NOPM, 0, 0,
71762306a36Sopenharmony_ci			   memif_ul5_ch1_mix, ARRAY_SIZE(memif_ul5_ch1_mix)),
71862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL5_CH2", SND_SOC_NOPM, 0, 0,
71962306a36Sopenharmony_ci			   memif_ul5_ch2_mix, ARRAY_SIZE(memif_ul5_ch2_mix)),
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL6_CH1", SND_SOC_NOPM, 0, 0,
72262306a36Sopenharmony_ci			   memif_ul6_ch1_mix, ARRAY_SIZE(memif_ul6_ch1_mix)),
72362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL6_CH2", SND_SOC_NOPM, 0, 0,
72462306a36Sopenharmony_ci			   memif_ul6_ch2_mix, ARRAY_SIZE(memif_ul6_ch2_mix)),
72562306a36Sopenharmony_ci
72662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL7_CH1", SND_SOC_NOPM, 0, 0,
72762306a36Sopenharmony_ci			   memif_ul7_ch1_mix, ARRAY_SIZE(memif_ul7_ch1_mix)),
72862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL7_CH2", SND_SOC_NOPM, 0, 0,
72962306a36Sopenharmony_ci			   memif_ul7_ch2_mix, ARRAY_SIZE(memif_ul7_ch2_mix)),
73062306a36Sopenharmony_ci
73162306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL8_CH1", SND_SOC_NOPM, 0, 0,
73262306a36Sopenharmony_ci			   memif_ul8_ch1_mix, ARRAY_SIZE(memif_ul8_ch1_mix)),
73362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL8_CH2", SND_SOC_NOPM, 0, 0,
73462306a36Sopenharmony_ci			   memif_ul8_ch2_mix, ARRAY_SIZE(memif_ul8_ch2_mix)),
73562306a36Sopenharmony_ci
73662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL_MONO_1_CH1", SND_SOC_NOPM, 0, 0,
73762306a36Sopenharmony_ci			   memif_ul_mono_1_mix,
73862306a36Sopenharmony_ci			   ARRAY_SIZE(memif_ul_mono_1_mix)),
73962306a36Sopenharmony_ci
74062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL_MONO_2_CH1", SND_SOC_NOPM, 0, 0,
74162306a36Sopenharmony_ci			   memif_ul_mono_2_mix,
74262306a36Sopenharmony_ci			   ARRAY_SIZE(memif_ul_mono_2_mix)),
74362306a36Sopenharmony_ci
74462306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL_MONO_3_CH1", SND_SOC_NOPM, 0, 0,
74562306a36Sopenharmony_ci			   memif_ul_mono_3_mix,
74662306a36Sopenharmony_ci			   ARRAY_SIZE(memif_ul_mono_3_mix)),
74762306a36Sopenharmony_ci
74862306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL1_VIRTUAL_INPUT"),
74962306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL2_VIRTUAL_INPUT"),
75062306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL6_VIRTUAL_INPUT"),
75162306a36Sopenharmony_ci};
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_cistatic const struct snd_soc_dapm_route mt8192_memif_routes[] = {
75462306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH1"},
75562306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH2"},
75662306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH3"},
75762306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH4"},
75862306a36Sopenharmony_ci	{"UL1_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
75962306a36Sopenharmony_ci	{"UL1_CH1", "ADDA_UL_CH2", "ADDA_UL_Mux"},
76062306a36Sopenharmony_ci	{"UL1_CH1", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
76162306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH1", "ADDA_UL_Mux"},
76262306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
76362306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
76462306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH4", "ADDA_CH34_UL_Mux"},
76562306a36Sopenharmony_ci	{"UL1_CH3", "ADDA_UL_CH1", "ADDA_UL_Mux"},
76662306a36Sopenharmony_ci	{"UL1_CH3", "ADDA_UL_CH2", "ADDA_UL_Mux"},
76762306a36Sopenharmony_ci	{"UL1_CH3", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
76862306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH1", "ADDA_UL_Mux"},
76962306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH2", "ADDA_UL_Mux"},
77062306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH3", "ADDA_CH34_UL_Mux"},
77162306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH4", "ADDA_CH34_UL_Mux"},
77262306a36Sopenharmony_ci
77362306a36Sopenharmony_ci	{"UL2", NULL, "UL2_CH1"},
77462306a36Sopenharmony_ci	{"UL2", NULL, "UL2_CH2"},
77562306a36Sopenharmony_ci	{"UL2_CH1", "I2S0_CH1", "I2S0"},
77662306a36Sopenharmony_ci	{"UL2_CH2", "I2S0_CH2", "I2S0"},
77762306a36Sopenharmony_ci	{"UL2_CH1", "I2S2_CH1", "I2S2"},
77862306a36Sopenharmony_ci	{"UL2_CH2", "I2S2_CH2", "I2S2"},
77962306a36Sopenharmony_ci	{"UL2_CH1", "I2S6_CH1", "I2S6"},
78062306a36Sopenharmony_ci	{"UL2_CH2", "I2S6_CH2", "I2S6"},
78162306a36Sopenharmony_ci	{"UL2_CH1", "I2S8_CH1", "I2S8"},
78262306a36Sopenharmony_ci	{"UL2_CH2", "I2S8_CH2", "I2S8"},
78362306a36Sopenharmony_ci
78462306a36Sopenharmony_ci	{"UL2_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
78562306a36Sopenharmony_ci	{"UL2_CH2", "PCM_1_CAP_CH1", "PCM 1 Capture"},
78662306a36Sopenharmony_ci	{"UL2_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
78762306a36Sopenharmony_ci	{"UL2_CH2", "PCM_2_CAP_CH1", "PCM 2 Capture"},
78862306a36Sopenharmony_ci
78962306a36Sopenharmony_ci	{"UL_MONO_1", NULL, "UL_MONO_1_CH1"},
79062306a36Sopenharmony_ci	{"UL_MONO_1_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
79162306a36Sopenharmony_ci	{"UL_MONO_1_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ci	{"UL_MONO_2", NULL, "UL_MONO_2_CH1"},
79462306a36Sopenharmony_ci	{"UL_MONO_2_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
79562306a36Sopenharmony_ci
79662306a36Sopenharmony_ci	{"UL_MONO_3", NULL, "UL_MONO_3_CH1"},
79762306a36Sopenharmony_ci	{"UL_MONO_3_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
79862306a36Sopenharmony_ci
79962306a36Sopenharmony_ci	{"UL2_CH1", "CONNSYS_I2S_CH1", "Connsys I2S"},
80062306a36Sopenharmony_ci	{"UL2_CH2", "CONNSYS_I2S_CH2", "Connsys I2S"},
80162306a36Sopenharmony_ci
80262306a36Sopenharmony_ci	{"UL3", NULL, "UL3_CH1"},
80362306a36Sopenharmony_ci	{"UL3", NULL, "UL3_CH2"},
80462306a36Sopenharmony_ci	{"UL3_CH1", "CONNSYS_I2S_CH1", "Connsys I2S"},
80562306a36Sopenharmony_ci	{"UL3_CH2", "CONNSYS_I2S_CH2", "Connsys I2S"},
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_ci	{"UL4", NULL, "UL4_CH1"},
80862306a36Sopenharmony_ci	{"UL4", NULL, "UL4_CH2"},
80962306a36Sopenharmony_ci	{"UL4", NULL, "UL4_TINYCONN_CH1_MUX"},
81062306a36Sopenharmony_ci	{"UL4", NULL, "UL4_TINYCONN_CH2_MUX"},
81162306a36Sopenharmony_ci	{"UL4_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
81262306a36Sopenharmony_ci	{"UL4_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
81362306a36Sopenharmony_ci	{"UL4_CH1", "I2S0_CH1", "I2S0"},
81462306a36Sopenharmony_ci	{"UL4_CH2", "I2S0_CH2", "I2S0"},
81562306a36Sopenharmony_ci	{"UL4_TINYCONN_CH1_MUX", "I2S0_CH1", "I2S0"},
81662306a36Sopenharmony_ci	{"UL4_TINYCONN_CH2_MUX", "I2S0_CH2", "I2S0"},
81762306a36Sopenharmony_ci
81862306a36Sopenharmony_ci	{"UL5", NULL, "UL5_CH1"},
81962306a36Sopenharmony_ci	{"UL5", NULL, "UL5_CH2"},
82062306a36Sopenharmony_ci	{"UL5_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
82162306a36Sopenharmony_ci	{"UL5_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
82262306a36Sopenharmony_ci
82362306a36Sopenharmony_ci	{"UL6", NULL, "UL6_CH1"},
82462306a36Sopenharmony_ci	{"UL6", NULL, "UL6_CH2"},
82562306a36Sopenharmony_ci
82662306a36Sopenharmony_ci	{"UL6_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
82762306a36Sopenharmony_ci	{"UL6_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
82862306a36Sopenharmony_ci	{"UL6_CH1", "PCM_1_CAP_CH1", "PCM 1 Capture"},
82962306a36Sopenharmony_ci	{"UL6_CH2", "PCM_1_CAP_CH1", "PCM 1 Capture"},
83062306a36Sopenharmony_ci	{"UL6_CH1", "PCM_2_CAP_CH1", "PCM 2 Capture"},
83162306a36Sopenharmony_ci	{"UL6_CH2", "PCM_2_CAP_CH1", "PCM 2 Capture"},
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_ci	{"UL7", NULL, "UL7_CH1"},
83462306a36Sopenharmony_ci	{"UL7", NULL, "UL7_CH2"},
83562306a36Sopenharmony_ci	{"UL7_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
83662306a36Sopenharmony_ci	{"UL7_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
83762306a36Sopenharmony_ci
83862306a36Sopenharmony_ci	{"UL8", NULL, "UL8_CH1"},
83962306a36Sopenharmony_ci	{"UL8", NULL, "UL8_CH2"},
84062306a36Sopenharmony_ci	{"UL8_CH1", "ADDA_UL_CH1", "ADDA_UL_Mux"},
84162306a36Sopenharmony_ci	{"UL8_CH2", "ADDA_UL_CH2", "ADDA_UL_Mux"},
84262306a36Sopenharmony_ci};
84362306a36Sopenharmony_ci
84462306a36Sopenharmony_cistatic const struct mtk_base_memif_data memif_data[MT8192_MEMIF_NUM] = {
84562306a36Sopenharmony_ci	[MT8192_MEMIF_DL1] = {
84662306a36Sopenharmony_ci		.name = "DL1",
84762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL1,
84862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL1_BASE,
84962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL1_CUR,
85062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL1_END,
85162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL1_BASE_MSB,
85262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL1_CUR_MSB,
85362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL1_END_MSB,
85462306a36Sopenharmony_ci		.fs_reg = AFE_DL1_CON0,
85562306a36Sopenharmony_ci		.fs_shift = DL1_MODE_SFT,
85662306a36Sopenharmony_ci		.fs_maskbit = DL1_MODE_MASK,
85762306a36Sopenharmony_ci		.mono_reg = AFE_DL1_CON0,
85862306a36Sopenharmony_ci		.mono_shift = DL1_MONO_SFT,
85962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
86062306a36Sopenharmony_ci		.enable_shift = DL1_ON_SFT,
86162306a36Sopenharmony_ci		.hd_reg = AFE_DL1_CON0,
86262306a36Sopenharmony_ci		.hd_shift = DL1_HD_MODE_SFT,
86362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL1_CON0,
86462306a36Sopenharmony_ci		.hd_align_mshift = DL1_HALIGN_SFT,
86562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL1_CON0,
86662306a36Sopenharmony_ci		.pbuf_shift = DL1_PBUF_SIZE_SFT,
86762306a36Sopenharmony_ci		.minlen_reg = AFE_DL1_CON0,
86862306a36Sopenharmony_ci		.minlen_shift = DL1_MINLEN_SFT,
86962306a36Sopenharmony_ci	},
87062306a36Sopenharmony_ci	[MT8192_MEMIF_DL12] = {
87162306a36Sopenharmony_ci		.name = "DL12",
87262306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL12,
87362306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL12_BASE,
87462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL12_CUR,
87562306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL12_END,
87662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL12_BASE_MSB,
87762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL12_CUR_MSB,
87862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL12_END_MSB,
87962306a36Sopenharmony_ci		.fs_reg = AFE_DL12_CON0,
88062306a36Sopenharmony_ci		.fs_shift = DL12_MODE_SFT,
88162306a36Sopenharmony_ci		.fs_maskbit = DL12_MODE_MASK,
88262306a36Sopenharmony_ci		.mono_reg = AFE_DL12_CON0,
88362306a36Sopenharmony_ci		.mono_shift = DL12_MONO_SFT,
88462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
88562306a36Sopenharmony_ci		.enable_shift = DL12_ON_SFT,
88662306a36Sopenharmony_ci		.hd_reg = AFE_DL12_CON0,
88762306a36Sopenharmony_ci		.hd_shift = DL12_HD_MODE_SFT,
88862306a36Sopenharmony_ci		.hd_align_reg = AFE_DL12_CON0,
88962306a36Sopenharmony_ci		.hd_align_mshift = DL12_HALIGN_SFT,
89062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL12_CON0,
89162306a36Sopenharmony_ci		.pbuf_shift = DL12_PBUF_SIZE_SFT,
89262306a36Sopenharmony_ci		.minlen_reg = AFE_DL12_CON0,
89362306a36Sopenharmony_ci		.minlen_shift = DL12_MINLEN_SFT,
89462306a36Sopenharmony_ci	},
89562306a36Sopenharmony_ci	[MT8192_MEMIF_DL2] = {
89662306a36Sopenharmony_ci		.name = "DL2",
89762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL2,
89862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL2_BASE,
89962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL2_CUR,
90062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL2_END,
90162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL2_BASE_MSB,
90262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL2_CUR_MSB,
90362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL2_END_MSB,
90462306a36Sopenharmony_ci		.fs_reg = AFE_DL2_CON0,
90562306a36Sopenharmony_ci		.fs_shift = DL2_MODE_SFT,
90662306a36Sopenharmony_ci		.fs_maskbit = DL2_MODE_MASK,
90762306a36Sopenharmony_ci		.mono_reg = AFE_DL2_CON0,
90862306a36Sopenharmony_ci		.mono_shift = DL2_MONO_SFT,
90962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
91062306a36Sopenharmony_ci		.enable_shift = DL2_ON_SFT,
91162306a36Sopenharmony_ci		.hd_reg = AFE_DL2_CON0,
91262306a36Sopenharmony_ci		.hd_shift = DL2_HD_MODE_SFT,
91362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL2_CON0,
91462306a36Sopenharmony_ci		.hd_align_mshift = DL2_HALIGN_SFT,
91562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL2_CON0,
91662306a36Sopenharmony_ci		.pbuf_shift = DL2_PBUF_SIZE_SFT,
91762306a36Sopenharmony_ci		.minlen_reg = AFE_DL2_CON0,
91862306a36Sopenharmony_ci		.minlen_shift = DL2_MINLEN_SFT,
91962306a36Sopenharmony_ci	},
92062306a36Sopenharmony_ci	[MT8192_MEMIF_DL3] = {
92162306a36Sopenharmony_ci		.name = "DL3",
92262306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL3,
92362306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL3_BASE,
92462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL3_CUR,
92562306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL3_END,
92662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL3_BASE_MSB,
92762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL3_CUR_MSB,
92862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL3_END_MSB,
92962306a36Sopenharmony_ci		.fs_reg = AFE_DL3_CON0,
93062306a36Sopenharmony_ci		.fs_shift = DL3_MODE_SFT,
93162306a36Sopenharmony_ci		.fs_maskbit = DL3_MODE_MASK,
93262306a36Sopenharmony_ci		.mono_reg = AFE_DL3_CON0,
93362306a36Sopenharmony_ci		.mono_shift = DL3_MONO_SFT,
93462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
93562306a36Sopenharmony_ci		.enable_shift = DL3_ON_SFT,
93662306a36Sopenharmony_ci		.hd_reg = AFE_DL3_CON0,
93762306a36Sopenharmony_ci		.hd_shift = DL3_HD_MODE_SFT,
93862306a36Sopenharmony_ci		.hd_align_reg = AFE_DL3_CON0,
93962306a36Sopenharmony_ci		.hd_align_mshift = DL3_HALIGN_SFT,
94062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL3_CON0,
94162306a36Sopenharmony_ci		.pbuf_shift = DL3_PBUF_SIZE_SFT,
94262306a36Sopenharmony_ci		.minlen_reg = AFE_DL3_CON0,
94362306a36Sopenharmony_ci		.minlen_shift = DL3_MINLEN_SFT,
94462306a36Sopenharmony_ci	},
94562306a36Sopenharmony_ci	[MT8192_MEMIF_DL4] = {
94662306a36Sopenharmony_ci		.name = "DL4",
94762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL4,
94862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL4_BASE,
94962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL4_CUR,
95062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL4_END,
95162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL4_BASE_MSB,
95262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL4_CUR_MSB,
95362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL4_END_MSB,
95462306a36Sopenharmony_ci		.fs_reg = AFE_DL4_CON0,
95562306a36Sopenharmony_ci		.fs_shift = DL4_MODE_SFT,
95662306a36Sopenharmony_ci		.fs_maskbit = DL4_MODE_MASK,
95762306a36Sopenharmony_ci		.mono_reg = AFE_DL4_CON0,
95862306a36Sopenharmony_ci		.mono_shift = DL4_MONO_SFT,
95962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
96062306a36Sopenharmony_ci		.enable_shift = DL4_ON_SFT,
96162306a36Sopenharmony_ci		.hd_reg = AFE_DL4_CON0,
96262306a36Sopenharmony_ci		.hd_shift = DL4_HD_MODE_SFT,
96362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL4_CON0,
96462306a36Sopenharmony_ci		.hd_align_mshift = DL4_HALIGN_SFT,
96562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL4_CON0,
96662306a36Sopenharmony_ci		.pbuf_shift = DL4_PBUF_SIZE_SFT,
96762306a36Sopenharmony_ci		.minlen_reg = AFE_DL4_CON0,
96862306a36Sopenharmony_ci		.minlen_shift = DL4_MINLEN_SFT,
96962306a36Sopenharmony_ci	},
97062306a36Sopenharmony_ci	[MT8192_MEMIF_DL5] = {
97162306a36Sopenharmony_ci		.name = "DL5",
97262306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL5,
97362306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL5_BASE,
97462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL5_CUR,
97562306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL5_END,
97662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL5_BASE_MSB,
97762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL5_CUR_MSB,
97862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL5_END_MSB,
97962306a36Sopenharmony_ci		.fs_reg = AFE_DL5_CON0,
98062306a36Sopenharmony_ci		.fs_shift = DL5_MODE_SFT,
98162306a36Sopenharmony_ci		.fs_maskbit = DL5_MODE_MASK,
98262306a36Sopenharmony_ci		.mono_reg = AFE_DL5_CON0,
98362306a36Sopenharmony_ci		.mono_shift = DL5_MONO_SFT,
98462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
98562306a36Sopenharmony_ci		.enable_shift = DL5_ON_SFT,
98662306a36Sopenharmony_ci		.hd_reg = AFE_DL5_CON0,
98762306a36Sopenharmony_ci		.hd_shift = DL5_HD_MODE_SFT,
98862306a36Sopenharmony_ci		.hd_align_reg = AFE_DL5_CON0,
98962306a36Sopenharmony_ci		.hd_align_mshift = DL5_HALIGN_SFT,
99062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL5_CON0,
99162306a36Sopenharmony_ci		.pbuf_shift = DL5_PBUF_SIZE_SFT,
99262306a36Sopenharmony_ci		.minlen_reg = AFE_DL5_CON0,
99362306a36Sopenharmony_ci		.minlen_shift = DL5_MINLEN_SFT,
99462306a36Sopenharmony_ci	},
99562306a36Sopenharmony_ci	[MT8192_MEMIF_DL6] = {
99662306a36Sopenharmony_ci		.name = "DL6",
99762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL6,
99862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL6_BASE,
99962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL6_CUR,
100062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL6_END,
100162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL6_BASE_MSB,
100262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL6_CUR_MSB,
100362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL6_END_MSB,
100462306a36Sopenharmony_ci		.fs_reg = AFE_DL6_CON0,
100562306a36Sopenharmony_ci		.fs_shift = DL6_MODE_SFT,
100662306a36Sopenharmony_ci		.fs_maskbit = DL6_MODE_MASK,
100762306a36Sopenharmony_ci		.mono_reg = AFE_DL6_CON0,
100862306a36Sopenharmony_ci		.mono_shift = DL6_MONO_SFT,
100962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
101062306a36Sopenharmony_ci		.enable_shift = DL6_ON_SFT,
101162306a36Sopenharmony_ci		.hd_reg = AFE_DL6_CON0,
101262306a36Sopenharmony_ci		.hd_shift = DL6_HD_MODE_SFT,
101362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL6_CON0,
101462306a36Sopenharmony_ci		.hd_align_mshift = DL6_HALIGN_SFT,
101562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL6_CON0,
101662306a36Sopenharmony_ci		.pbuf_shift = DL6_PBUF_SIZE_SFT,
101762306a36Sopenharmony_ci		.minlen_reg = AFE_DL6_CON0,
101862306a36Sopenharmony_ci		.minlen_shift = DL6_MINLEN_SFT,
101962306a36Sopenharmony_ci	},
102062306a36Sopenharmony_ci	[MT8192_MEMIF_DL7] = {
102162306a36Sopenharmony_ci		.name = "DL7",
102262306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL7,
102362306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL7_BASE,
102462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL7_CUR,
102562306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL7_END,
102662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL7_BASE_MSB,
102762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL7_CUR_MSB,
102862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL7_END_MSB,
102962306a36Sopenharmony_ci		.fs_reg = AFE_DL7_CON0,
103062306a36Sopenharmony_ci		.fs_shift = DL7_MODE_SFT,
103162306a36Sopenharmony_ci		.fs_maskbit = DL7_MODE_MASK,
103262306a36Sopenharmony_ci		.mono_reg = AFE_DL7_CON0,
103362306a36Sopenharmony_ci		.mono_shift = DL7_MONO_SFT,
103462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
103562306a36Sopenharmony_ci		.enable_shift = DL7_ON_SFT,
103662306a36Sopenharmony_ci		.hd_reg = AFE_DL7_CON0,
103762306a36Sopenharmony_ci		.hd_shift = DL7_HD_MODE_SFT,
103862306a36Sopenharmony_ci		.hd_align_reg = AFE_DL7_CON0,
103962306a36Sopenharmony_ci		.hd_align_mshift = DL7_HALIGN_SFT,
104062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL7_CON0,
104162306a36Sopenharmony_ci		.pbuf_shift = DL7_PBUF_SIZE_SFT,
104262306a36Sopenharmony_ci		.minlen_reg = AFE_DL7_CON0,
104362306a36Sopenharmony_ci		.minlen_shift = DL7_MINLEN_SFT,
104462306a36Sopenharmony_ci	},
104562306a36Sopenharmony_ci	[MT8192_MEMIF_DL8] = {
104662306a36Sopenharmony_ci		.name = "DL8",
104762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL8,
104862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL8_BASE,
104962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL8_CUR,
105062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL8_END,
105162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL8_BASE_MSB,
105262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL8_CUR_MSB,
105362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL8_END_MSB,
105462306a36Sopenharmony_ci		.fs_reg = AFE_DL8_CON0,
105562306a36Sopenharmony_ci		.fs_shift = DL8_MODE_SFT,
105662306a36Sopenharmony_ci		.fs_maskbit = DL8_MODE_MASK,
105762306a36Sopenharmony_ci		.mono_reg = AFE_DL8_CON0,
105862306a36Sopenharmony_ci		.mono_shift = DL8_MONO_SFT,
105962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
106062306a36Sopenharmony_ci		.enable_shift = DL8_ON_SFT,
106162306a36Sopenharmony_ci		.hd_reg = AFE_DL8_CON0,
106262306a36Sopenharmony_ci		.hd_shift = DL8_HD_MODE_SFT,
106362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL8_CON0,
106462306a36Sopenharmony_ci		.hd_align_mshift = DL8_HALIGN_SFT,
106562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL8_CON0,
106662306a36Sopenharmony_ci		.pbuf_shift = DL8_PBUF_SIZE_SFT,
106762306a36Sopenharmony_ci		.minlen_reg = AFE_DL8_CON0,
106862306a36Sopenharmony_ci		.minlen_shift = DL8_MINLEN_SFT,
106962306a36Sopenharmony_ci	},
107062306a36Sopenharmony_ci	[MT8192_MEMIF_DL9] = {
107162306a36Sopenharmony_ci		.name = "DL9",
107262306a36Sopenharmony_ci		.id = MT8192_MEMIF_DL9,
107362306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL9_BASE,
107462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL9_CUR,
107562306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL9_END,
107662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL9_BASE_MSB,
107762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL9_CUR_MSB,
107862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL9_END_MSB,
107962306a36Sopenharmony_ci		.fs_reg = AFE_DL9_CON0,
108062306a36Sopenharmony_ci		.fs_shift = DL9_MODE_SFT,
108162306a36Sopenharmony_ci		.fs_maskbit = DL9_MODE_MASK,
108262306a36Sopenharmony_ci		.mono_reg = AFE_DL9_CON0,
108362306a36Sopenharmony_ci		.mono_shift = DL9_MONO_SFT,
108462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
108562306a36Sopenharmony_ci		.enable_shift = DL9_ON_SFT,
108662306a36Sopenharmony_ci		.hd_reg = AFE_DL9_CON0,
108762306a36Sopenharmony_ci		.hd_shift = DL9_HD_MODE_SFT,
108862306a36Sopenharmony_ci		.hd_align_reg = AFE_DL9_CON0,
108962306a36Sopenharmony_ci		.hd_align_mshift = DL9_HALIGN_SFT,
109062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL9_CON0,
109162306a36Sopenharmony_ci		.pbuf_shift = DL9_PBUF_SIZE_SFT,
109262306a36Sopenharmony_ci		.minlen_reg = AFE_DL9_CON0,
109362306a36Sopenharmony_ci		.minlen_shift = DL9_MINLEN_SFT,
109462306a36Sopenharmony_ci	},
109562306a36Sopenharmony_ci	[MT8192_MEMIF_DAI] = {
109662306a36Sopenharmony_ci		.name = "DAI",
109762306a36Sopenharmony_ci		.id = MT8192_MEMIF_DAI,
109862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DAI_BASE,
109962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DAI_CUR,
110062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DAI_END,
110162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DAI_BASE_MSB,
110262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DAI_CUR_MSB,
110362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DAI_END_MSB,
110462306a36Sopenharmony_ci		.fs_reg = AFE_DAI_CON0,
110562306a36Sopenharmony_ci		.fs_shift = DAI_MODE_SFT,
110662306a36Sopenharmony_ci		.fs_maskbit = DAI_MODE_MASK,
110762306a36Sopenharmony_ci		.mono_reg = AFE_DAI_CON0,
110862306a36Sopenharmony_ci		.mono_shift = DAI_DUPLICATE_WR_SFT,
110962306a36Sopenharmony_ci		.mono_invert = 1,
111062306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
111162306a36Sopenharmony_ci		.enable_shift = DAI_ON_SFT,
111262306a36Sopenharmony_ci		.hd_reg = AFE_DAI_CON0,
111362306a36Sopenharmony_ci		.hd_shift = DAI_HD_MODE_SFT,
111462306a36Sopenharmony_ci		.hd_align_reg = AFE_DAI_CON0,
111562306a36Sopenharmony_ci		.hd_align_mshift = DAI_HALIGN_SFT,
111662306a36Sopenharmony_ci	},
111762306a36Sopenharmony_ci	[MT8192_MEMIF_MOD_DAI] = {
111862306a36Sopenharmony_ci		.name = "MOD_DAI",
111962306a36Sopenharmony_ci		.id = MT8192_MEMIF_MOD_DAI,
112062306a36Sopenharmony_ci		.reg_ofs_base = AFE_MOD_DAI_BASE,
112162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_MOD_DAI_CUR,
112262306a36Sopenharmony_ci		.reg_ofs_end = AFE_MOD_DAI_END,
112362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_MOD_DAI_BASE_MSB,
112462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_MOD_DAI_CUR_MSB,
112562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_MOD_DAI_END_MSB,
112662306a36Sopenharmony_ci		.fs_reg = AFE_MOD_DAI_CON0,
112762306a36Sopenharmony_ci		.fs_shift = MOD_DAI_MODE_SFT,
112862306a36Sopenharmony_ci		.fs_maskbit = MOD_DAI_MODE_MASK,
112962306a36Sopenharmony_ci		.mono_reg = AFE_MOD_DAI_CON0,
113062306a36Sopenharmony_ci		.mono_shift = MOD_DAI_DUPLICATE_WR_SFT,
113162306a36Sopenharmony_ci		.mono_invert = 1,
113262306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
113362306a36Sopenharmony_ci		.enable_shift = MOD_DAI_ON_SFT,
113462306a36Sopenharmony_ci		.hd_reg = AFE_MOD_DAI_CON0,
113562306a36Sopenharmony_ci		.hd_shift = MOD_DAI_HD_MODE_SFT,
113662306a36Sopenharmony_ci		.hd_align_reg = AFE_MOD_DAI_CON0,
113762306a36Sopenharmony_ci		.hd_align_mshift = MOD_DAI_HALIGN_SFT,
113862306a36Sopenharmony_ci	},
113962306a36Sopenharmony_ci	[MT8192_MEMIF_DAI2] = {
114062306a36Sopenharmony_ci		.name = "DAI2",
114162306a36Sopenharmony_ci		.id = MT8192_MEMIF_DAI2,
114262306a36Sopenharmony_ci		.reg_ofs_base = AFE_DAI2_BASE,
114362306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DAI2_CUR,
114462306a36Sopenharmony_ci		.reg_ofs_end = AFE_DAI2_END,
114562306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DAI2_BASE_MSB,
114662306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DAI2_CUR_MSB,
114762306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DAI2_END_MSB,
114862306a36Sopenharmony_ci		.fs_reg = AFE_DAI2_CON0,
114962306a36Sopenharmony_ci		.fs_shift = DAI2_MODE_SFT,
115062306a36Sopenharmony_ci		.fs_maskbit = DAI2_MODE_MASK,
115162306a36Sopenharmony_ci		.mono_reg = AFE_DAI2_CON0,
115262306a36Sopenharmony_ci		.mono_shift = DAI2_DUPLICATE_WR_SFT,
115362306a36Sopenharmony_ci		.mono_invert = 1,
115462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
115562306a36Sopenharmony_ci		.enable_shift = DAI2_ON_SFT,
115662306a36Sopenharmony_ci		.hd_reg = AFE_DAI2_CON0,
115762306a36Sopenharmony_ci		.hd_shift = DAI2_HD_MODE_SFT,
115862306a36Sopenharmony_ci		.hd_align_reg = AFE_DAI2_CON0,
115962306a36Sopenharmony_ci		.hd_align_mshift = DAI2_HALIGN_SFT,
116062306a36Sopenharmony_ci	},
116162306a36Sopenharmony_ci	[MT8192_MEMIF_VUL12] = {
116262306a36Sopenharmony_ci		.name = "VUL12",
116362306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL12,
116462306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL12_BASE,
116562306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL12_CUR,
116662306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL12_END,
116762306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL12_BASE_MSB,
116862306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL12_CUR_MSB,
116962306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL12_END_MSB,
117062306a36Sopenharmony_ci		.fs_reg = AFE_VUL12_CON0,
117162306a36Sopenharmony_ci		.fs_shift = VUL12_MODE_SFT,
117262306a36Sopenharmony_ci		.fs_maskbit = VUL12_MODE_MASK,
117362306a36Sopenharmony_ci		.mono_reg = AFE_VUL12_CON0,
117462306a36Sopenharmony_ci		.mono_shift = VUL12_MONO_SFT,
117562306a36Sopenharmony_ci		.quad_ch_reg = AFE_VUL12_CON0,
117662306a36Sopenharmony_ci		.quad_ch_shift = VUL12_4CH_EN_SFT,
117762306a36Sopenharmony_ci		.quad_ch_mask = VUL12_4CH_EN_MASK,
117862306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
117962306a36Sopenharmony_ci		.enable_shift = VUL12_ON_SFT,
118062306a36Sopenharmony_ci		.hd_reg = AFE_VUL12_CON0,
118162306a36Sopenharmony_ci		.hd_shift = VUL12_HD_MODE_SFT,
118262306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL12_CON0,
118362306a36Sopenharmony_ci		.hd_align_mshift = VUL12_HALIGN_SFT,
118462306a36Sopenharmony_ci	},
118562306a36Sopenharmony_ci	[MT8192_MEMIF_VUL2] = {
118662306a36Sopenharmony_ci		.name = "VUL2",
118762306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL2,
118862306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL2_BASE,
118962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL2_CUR,
119062306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL2_END,
119162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL2_BASE_MSB,
119262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL2_CUR_MSB,
119362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL2_END_MSB,
119462306a36Sopenharmony_ci		.fs_reg = AFE_VUL2_CON0,
119562306a36Sopenharmony_ci		.fs_shift = VUL2_MODE_SFT,
119662306a36Sopenharmony_ci		.fs_maskbit = VUL2_MODE_MASK,
119762306a36Sopenharmony_ci		.mono_reg = AFE_VUL2_CON0,
119862306a36Sopenharmony_ci		.mono_shift = VUL2_MONO_SFT,
119962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
120062306a36Sopenharmony_ci		.enable_shift = VUL2_ON_SFT,
120162306a36Sopenharmony_ci		.hd_reg = AFE_VUL2_CON0,
120262306a36Sopenharmony_ci		.hd_shift = VUL2_HD_MODE_SFT,
120362306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL2_CON0,
120462306a36Sopenharmony_ci		.hd_align_mshift = VUL2_HALIGN_SFT,
120562306a36Sopenharmony_ci	},
120662306a36Sopenharmony_ci	[MT8192_MEMIF_AWB] = {
120762306a36Sopenharmony_ci		.name = "AWB",
120862306a36Sopenharmony_ci		.id = MT8192_MEMIF_AWB,
120962306a36Sopenharmony_ci		.reg_ofs_base = AFE_AWB_BASE,
121062306a36Sopenharmony_ci		.reg_ofs_cur = AFE_AWB_CUR,
121162306a36Sopenharmony_ci		.reg_ofs_end = AFE_AWB_END,
121262306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_AWB_BASE_MSB,
121362306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_AWB_CUR_MSB,
121462306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_AWB_END_MSB,
121562306a36Sopenharmony_ci		.fs_reg = AFE_AWB_CON0,
121662306a36Sopenharmony_ci		.fs_shift = AWB_MODE_SFT,
121762306a36Sopenharmony_ci		.fs_maskbit = AWB_MODE_MASK,
121862306a36Sopenharmony_ci		.mono_reg = AFE_AWB_CON0,
121962306a36Sopenharmony_ci		.mono_shift = AWB_MONO_SFT,
122062306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
122162306a36Sopenharmony_ci		.enable_shift = AWB_ON_SFT,
122262306a36Sopenharmony_ci		.hd_reg = AFE_AWB_CON0,
122362306a36Sopenharmony_ci		.hd_shift = AWB_HD_MODE_SFT,
122462306a36Sopenharmony_ci		.hd_align_reg = AFE_AWB_CON0,
122562306a36Sopenharmony_ci		.hd_align_mshift = AWB_HALIGN_SFT,
122662306a36Sopenharmony_ci	},
122762306a36Sopenharmony_ci	[MT8192_MEMIF_AWB2] = {
122862306a36Sopenharmony_ci		.name = "AWB2",
122962306a36Sopenharmony_ci		.id = MT8192_MEMIF_AWB2,
123062306a36Sopenharmony_ci		.reg_ofs_base = AFE_AWB2_BASE,
123162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_AWB2_CUR,
123262306a36Sopenharmony_ci		.reg_ofs_end = AFE_AWB2_END,
123362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_AWB2_BASE_MSB,
123462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_AWB2_CUR_MSB,
123562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_AWB2_END_MSB,
123662306a36Sopenharmony_ci		.fs_reg = AFE_AWB2_CON0,
123762306a36Sopenharmony_ci		.fs_shift = AWB2_MODE_SFT,
123862306a36Sopenharmony_ci		.fs_maskbit = AWB2_MODE_MASK,
123962306a36Sopenharmony_ci		.mono_reg = AFE_AWB2_CON0,
124062306a36Sopenharmony_ci		.mono_shift = AWB2_MONO_SFT,
124162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
124262306a36Sopenharmony_ci		.enable_shift = AWB2_ON_SFT,
124362306a36Sopenharmony_ci		.hd_reg = AFE_AWB2_CON0,
124462306a36Sopenharmony_ci		.hd_shift = AWB2_HD_MODE_SFT,
124562306a36Sopenharmony_ci		.hd_align_reg = AFE_AWB2_CON0,
124662306a36Sopenharmony_ci		.hd_align_mshift = AWB2_HALIGN_SFT,
124762306a36Sopenharmony_ci	},
124862306a36Sopenharmony_ci	[MT8192_MEMIF_VUL3] = {
124962306a36Sopenharmony_ci		.name = "VUL3",
125062306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL3,
125162306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL3_BASE,
125262306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL3_CUR,
125362306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL3_END,
125462306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL3_BASE_MSB,
125562306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL3_CUR_MSB,
125662306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL3_END_MSB,
125762306a36Sopenharmony_ci		.fs_reg = AFE_VUL3_CON0,
125862306a36Sopenharmony_ci		.fs_shift = VUL3_MODE_SFT,
125962306a36Sopenharmony_ci		.fs_maskbit = VUL3_MODE_MASK,
126062306a36Sopenharmony_ci		.mono_reg = AFE_VUL3_CON0,
126162306a36Sopenharmony_ci		.mono_shift = VUL3_MONO_SFT,
126262306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
126362306a36Sopenharmony_ci		.enable_shift = VUL3_ON_SFT,
126462306a36Sopenharmony_ci		.hd_reg = AFE_VUL3_CON0,
126562306a36Sopenharmony_ci		.hd_shift = VUL3_HD_MODE_SFT,
126662306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL3_CON0,
126762306a36Sopenharmony_ci		.hd_align_mshift = VUL3_HALIGN_SFT,
126862306a36Sopenharmony_ci	},
126962306a36Sopenharmony_ci	[MT8192_MEMIF_VUL4] = {
127062306a36Sopenharmony_ci		.name = "VUL4",
127162306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL4,
127262306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL4_BASE,
127362306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL4_CUR,
127462306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL4_END,
127562306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL4_BASE_MSB,
127662306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL4_CUR_MSB,
127762306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL4_END_MSB,
127862306a36Sopenharmony_ci		.fs_reg = AFE_VUL4_CON0,
127962306a36Sopenharmony_ci		.fs_shift = VUL4_MODE_SFT,
128062306a36Sopenharmony_ci		.fs_maskbit = VUL4_MODE_MASK,
128162306a36Sopenharmony_ci		.mono_reg = AFE_VUL4_CON0,
128262306a36Sopenharmony_ci		.mono_shift = VUL4_MONO_SFT,
128362306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
128462306a36Sopenharmony_ci		.enable_shift = VUL4_ON_SFT,
128562306a36Sopenharmony_ci		.hd_reg = AFE_VUL4_CON0,
128662306a36Sopenharmony_ci		.hd_shift = VUL4_HD_MODE_SFT,
128762306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL4_CON0,
128862306a36Sopenharmony_ci		.hd_align_mshift = VUL4_HALIGN_SFT,
128962306a36Sopenharmony_ci	},
129062306a36Sopenharmony_ci	[MT8192_MEMIF_VUL5] = {
129162306a36Sopenharmony_ci		.name = "VUL5",
129262306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL5,
129362306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL5_BASE,
129462306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL5_CUR,
129562306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL5_END,
129662306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL5_BASE_MSB,
129762306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL5_CUR_MSB,
129862306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL5_END_MSB,
129962306a36Sopenharmony_ci		.fs_reg = AFE_VUL5_CON0,
130062306a36Sopenharmony_ci		.fs_shift = VUL5_MODE_SFT,
130162306a36Sopenharmony_ci		.fs_maskbit = VUL5_MODE_MASK,
130262306a36Sopenharmony_ci		.mono_reg = AFE_VUL5_CON0,
130362306a36Sopenharmony_ci		.mono_shift = VUL5_MONO_SFT,
130462306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
130562306a36Sopenharmony_ci		.enable_shift = VUL5_ON_SFT,
130662306a36Sopenharmony_ci		.hd_reg = AFE_VUL5_CON0,
130762306a36Sopenharmony_ci		.hd_shift = VUL5_HD_MODE_SFT,
130862306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL5_CON0,
130962306a36Sopenharmony_ci		.hd_align_mshift = VUL5_HALIGN_SFT,
131062306a36Sopenharmony_ci	},
131162306a36Sopenharmony_ci	[MT8192_MEMIF_VUL6] = {
131262306a36Sopenharmony_ci		.name = "VUL6",
131362306a36Sopenharmony_ci		.id = MT8192_MEMIF_VUL6,
131462306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL6_BASE,
131562306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL6_CUR,
131662306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL6_END,
131762306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL6_BASE_MSB,
131862306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL6_CUR_MSB,
131962306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL6_END_MSB,
132062306a36Sopenharmony_ci		.fs_reg = AFE_VUL6_CON0,
132162306a36Sopenharmony_ci		.fs_shift = VUL6_MODE_SFT,
132262306a36Sopenharmony_ci		.fs_maskbit = VUL6_MODE_MASK,
132362306a36Sopenharmony_ci		.mono_reg = AFE_VUL6_CON0,
132462306a36Sopenharmony_ci		.mono_shift = VUL6_MONO_SFT,
132562306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
132662306a36Sopenharmony_ci		.enable_shift = VUL6_ON_SFT,
132762306a36Sopenharmony_ci		.hd_reg = AFE_VUL6_CON0,
132862306a36Sopenharmony_ci		.hd_shift = VUL6_HD_MODE_SFT,
132962306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL6_CON0,
133062306a36Sopenharmony_ci		.hd_align_mshift = VUL6_HALIGN_SFT,
133162306a36Sopenharmony_ci	},
133262306a36Sopenharmony_ci	[MT8192_MEMIF_HDMI] = {
133362306a36Sopenharmony_ci		.name = "HDMI",
133462306a36Sopenharmony_ci		.id = MT8192_MEMIF_HDMI,
133562306a36Sopenharmony_ci		.reg_ofs_base = AFE_HDMI_OUT_BASE,
133662306a36Sopenharmony_ci		.reg_ofs_cur = AFE_HDMI_OUT_CUR,
133762306a36Sopenharmony_ci		.reg_ofs_end = AFE_HDMI_OUT_END,
133862306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_HDMI_OUT_BASE_MSB,
133962306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_HDMI_OUT_CUR_MSB,
134062306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_HDMI_OUT_END_MSB,
134162306a36Sopenharmony_ci		.fs_reg = -1,
134262306a36Sopenharmony_ci		.fs_shift = -1,
134362306a36Sopenharmony_ci		.fs_maskbit = -1,
134462306a36Sopenharmony_ci		.mono_reg = -1,
134562306a36Sopenharmony_ci		.mono_shift = -1,
134662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
134762306a36Sopenharmony_ci		.enable_shift = HDMI_OUT_ON_SFT,
134862306a36Sopenharmony_ci		.hd_reg = AFE_HDMI_OUT_CON0,
134962306a36Sopenharmony_ci		.hd_shift = HDMI_OUT_HD_MODE_SFT,
135062306a36Sopenharmony_ci		.hd_align_reg = AFE_HDMI_OUT_CON0,
135162306a36Sopenharmony_ci		.hd_align_mshift = HDMI_OUT_HALIGN_SFT,
135262306a36Sopenharmony_ci		.pbuf_reg = AFE_HDMI_OUT_CON0,
135362306a36Sopenharmony_ci		.minlen_reg = AFE_HDMI_OUT_CON0,
135462306a36Sopenharmony_ci		.minlen_shift = HDMI_OUT_MINLEN_SFT,
135562306a36Sopenharmony_ci	},
135662306a36Sopenharmony_ci};
135762306a36Sopenharmony_ci
135862306a36Sopenharmony_cistatic const struct mtk_base_irq_data irq_data[MT8192_IRQ_NUM] = {
135962306a36Sopenharmony_ci	[MT8192_IRQ_0] = {
136062306a36Sopenharmony_ci		.id = MT8192_IRQ_0,
136162306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT0,
136262306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
136362306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
136462306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
136562306a36Sopenharmony_ci		.irq_fs_shift = IRQ0_MCU_MODE_SFT,
136662306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ0_MCU_MODE_MASK,
136762306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
136862306a36Sopenharmony_ci		.irq_en_shift = IRQ0_MCU_ON_SFT,
136962306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
137062306a36Sopenharmony_ci		.irq_clr_shift = IRQ0_MCU_CLR_SFT,
137162306a36Sopenharmony_ci	},
137262306a36Sopenharmony_ci	[MT8192_IRQ_1] = {
137362306a36Sopenharmony_ci		.id = MT8192_IRQ_1,
137462306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT1,
137562306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
137662306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
137762306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
137862306a36Sopenharmony_ci		.irq_fs_shift = IRQ1_MCU_MODE_SFT,
137962306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ1_MCU_MODE_MASK,
138062306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
138162306a36Sopenharmony_ci		.irq_en_shift = IRQ1_MCU_ON_SFT,
138262306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
138362306a36Sopenharmony_ci		.irq_clr_shift = IRQ1_MCU_CLR_SFT,
138462306a36Sopenharmony_ci	},
138562306a36Sopenharmony_ci	[MT8192_IRQ_2] = {
138662306a36Sopenharmony_ci		.id = MT8192_IRQ_2,
138762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT2,
138862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
138962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
139062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
139162306a36Sopenharmony_ci		.irq_fs_shift = IRQ2_MCU_MODE_SFT,
139262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ2_MCU_MODE_MASK,
139362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
139462306a36Sopenharmony_ci		.irq_en_shift = IRQ2_MCU_ON_SFT,
139562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
139662306a36Sopenharmony_ci		.irq_clr_shift = IRQ2_MCU_CLR_SFT,
139762306a36Sopenharmony_ci	},
139862306a36Sopenharmony_ci	[MT8192_IRQ_3] = {
139962306a36Sopenharmony_ci		.id = MT8192_IRQ_3,
140062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT3,
140162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
140262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
140362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
140462306a36Sopenharmony_ci		.irq_fs_shift = IRQ3_MCU_MODE_SFT,
140562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ3_MCU_MODE_MASK,
140662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
140762306a36Sopenharmony_ci		.irq_en_shift = IRQ3_MCU_ON_SFT,
140862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
140962306a36Sopenharmony_ci		.irq_clr_shift = IRQ3_MCU_CLR_SFT,
141062306a36Sopenharmony_ci	},
141162306a36Sopenharmony_ci	[MT8192_IRQ_4] = {
141262306a36Sopenharmony_ci		.id = MT8192_IRQ_4,
141362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT4,
141462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
141562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
141662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
141762306a36Sopenharmony_ci		.irq_fs_shift = IRQ4_MCU_MODE_SFT,
141862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ4_MCU_MODE_MASK,
141962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
142062306a36Sopenharmony_ci		.irq_en_shift = IRQ4_MCU_ON_SFT,
142162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
142262306a36Sopenharmony_ci		.irq_clr_shift = IRQ4_MCU_CLR_SFT,
142362306a36Sopenharmony_ci	},
142462306a36Sopenharmony_ci	[MT8192_IRQ_5] = {
142562306a36Sopenharmony_ci		.id = MT8192_IRQ_5,
142662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT5,
142762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
142862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
142962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
143062306a36Sopenharmony_ci		.irq_fs_shift = IRQ5_MCU_MODE_SFT,
143162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ5_MCU_MODE_MASK,
143262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
143362306a36Sopenharmony_ci		.irq_en_shift = IRQ5_MCU_ON_SFT,
143462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
143562306a36Sopenharmony_ci		.irq_clr_shift = IRQ5_MCU_CLR_SFT,
143662306a36Sopenharmony_ci	},
143762306a36Sopenharmony_ci	[MT8192_IRQ_6] = {
143862306a36Sopenharmony_ci		.id = MT8192_IRQ_6,
143962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT6,
144062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
144162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
144262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
144362306a36Sopenharmony_ci		.irq_fs_shift = IRQ6_MCU_MODE_SFT,
144462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ6_MCU_MODE_MASK,
144562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
144662306a36Sopenharmony_ci		.irq_en_shift = IRQ6_MCU_ON_SFT,
144762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
144862306a36Sopenharmony_ci		.irq_clr_shift = IRQ6_MCU_CLR_SFT,
144962306a36Sopenharmony_ci	},
145062306a36Sopenharmony_ci	[MT8192_IRQ_7] = {
145162306a36Sopenharmony_ci		.id = MT8192_IRQ_7,
145262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT7,
145362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
145462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
145562306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
145662306a36Sopenharmony_ci		.irq_fs_shift = IRQ7_MCU_MODE_SFT,
145762306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ7_MCU_MODE_MASK,
145862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
145962306a36Sopenharmony_ci		.irq_en_shift = IRQ7_MCU_ON_SFT,
146062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
146162306a36Sopenharmony_ci		.irq_clr_shift = IRQ7_MCU_CLR_SFT,
146262306a36Sopenharmony_ci	},
146362306a36Sopenharmony_ci	[MT8192_IRQ_8] = {
146462306a36Sopenharmony_ci		.id = MT8192_IRQ_8,
146562306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT8,
146662306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
146762306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
146862306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
146962306a36Sopenharmony_ci		.irq_fs_shift = IRQ8_MCU_MODE_SFT,
147062306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ8_MCU_MODE_MASK,
147162306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
147262306a36Sopenharmony_ci		.irq_en_shift = IRQ8_MCU_ON_SFT,
147362306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
147462306a36Sopenharmony_ci		.irq_clr_shift = IRQ8_MCU_CLR_SFT,
147562306a36Sopenharmony_ci	},
147662306a36Sopenharmony_ci	[MT8192_IRQ_9] = {
147762306a36Sopenharmony_ci		.id = MT8192_IRQ_9,
147862306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT9,
147962306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
148062306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
148162306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
148262306a36Sopenharmony_ci		.irq_fs_shift = IRQ9_MCU_MODE_SFT,
148362306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ9_MCU_MODE_MASK,
148462306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
148562306a36Sopenharmony_ci		.irq_en_shift = IRQ9_MCU_ON_SFT,
148662306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
148762306a36Sopenharmony_ci		.irq_clr_shift = IRQ9_MCU_CLR_SFT,
148862306a36Sopenharmony_ci	},
148962306a36Sopenharmony_ci	[MT8192_IRQ_10] = {
149062306a36Sopenharmony_ci		.id = MT8192_IRQ_10,
149162306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT10,
149262306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
149362306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
149462306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
149562306a36Sopenharmony_ci		.irq_fs_shift = IRQ10_MCU_MODE_SFT,
149662306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ10_MCU_MODE_MASK,
149762306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
149862306a36Sopenharmony_ci		.irq_en_shift = IRQ10_MCU_ON_SFT,
149962306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
150062306a36Sopenharmony_ci		.irq_clr_shift = IRQ10_MCU_CLR_SFT,
150162306a36Sopenharmony_ci	},
150262306a36Sopenharmony_ci	[MT8192_IRQ_11] = {
150362306a36Sopenharmony_ci		.id = MT8192_IRQ_11,
150462306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT11,
150562306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
150662306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
150762306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
150862306a36Sopenharmony_ci		.irq_fs_shift = IRQ11_MCU_MODE_SFT,
150962306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ11_MCU_MODE_MASK,
151062306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
151162306a36Sopenharmony_ci		.irq_en_shift = IRQ11_MCU_ON_SFT,
151262306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
151362306a36Sopenharmony_ci		.irq_clr_shift = IRQ11_MCU_CLR_SFT,
151462306a36Sopenharmony_ci	},
151562306a36Sopenharmony_ci	[MT8192_IRQ_12] = {
151662306a36Sopenharmony_ci		.id = MT8192_IRQ_12,
151762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT12,
151862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
151962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
152062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
152162306a36Sopenharmony_ci		.irq_fs_shift = IRQ12_MCU_MODE_SFT,
152262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ12_MCU_MODE_MASK,
152362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
152462306a36Sopenharmony_ci		.irq_en_shift = IRQ12_MCU_ON_SFT,
152562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
152662306a36Sopenharmony_ci		.irq_clr_shift = IRQ12_MCU_CLR_SFT,
152762306a36Sopenharmony_ci	},
152862306a36Sopenharmony_ci	[MT8192_IRQ_13] = {
152962306a36Sopenharmony_ci		.id = MT8192_IRQ_13,
153062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT13,
153162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
153262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
153362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
153462306a36Sopenharmony_ci		.irq_fs_shift = IRQ13_MCU_MODE_SFT,
153562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ13_MCU_MODE_MASK,
153662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
153762306a36Sopenharmony_ci		.irq_en_shift = IRQ13_MCU_ON_SFT,
153862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
153962306a36Sopenharmony_ci		.irq_clr_shift = IRQ13_MCU_CLR_SFT,
154062306a36Sopenharmony_ci	},
154162306a36Sopenharmony_ci	[MT8192_IRQ_14] = {
154262306a36Sopenharmony_ci		.id = MT8192_IRQ_14,
154362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT14,
154462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
154562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
154662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
154762306a36Sopenharmony_ci		.irq_fs_shift = IRQ14_MCU_MODE_SFT,
154862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ14_MCU_MODE_MASK,
154962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
155062306a36Sopenharmony_ci		.irq_en_shift = IRQ14_MCU_ON_SFT,
155162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
155262306a36Sopenharmony_ci		.irq_clr_shift = IRQ14_MCU_CLR_SFT,
155362306a36Sopenharmony_ci	},
155462306a36Sopenharmony_ci	[MT8192_IRQ_15] = {
155562306a36Sopenharmony_ci		.id = MT8192_IRQ_15,
155662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT15,
155762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
155862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
155962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
156062306a36Sopenharmony_ci		.irq_fs_shift = IRQ15_MCU_MODE_SFT,
156162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ15_MCU_MODE_MASK,
156262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
156362306a36Sopenharmony_ci		.irq_en_shift = IRQ15_MCU_ON_SFT,
156462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
156562306a36Sopenharmony_ci		.irq_clr_shift = IRQ15_MCU_CLR_SFT,
156662306a36Sopenharmony_ci	},
156762306a36Sopenharmony_ci	[MT8192_IRQ_16] = {
156862306a36Sopenharmony_ci		.id = MT8192_IRQ_16,
156962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT16,
157062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
157162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
157262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
157362306a36Sopenharmony_ci		.irq_fs_shift = IRQ16_MCU_MODE_SFT,
157462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ16_MCU_MODE_MASK,
157562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
157662306a36Sopenharmony_ci		.irq_en_shift = IRQ16_MCU_ON_SFT,
157762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
157862306a36Sopenharmony_ci		.irq_clr_shift = IRQ16_MCU_CLR_SFT,
157962306a36Sopenharmony_ci	},
158062306a36Sopenharmony_ci	[MT8192_IRQ_17] = {
158162306a36Sopenharmony_ci		.id = MT8192_IRQ_17,
158262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT17,
158362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
158462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
158562306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
158662306a36Sopenharmony_ci		.irq_fs_shift = IRQ17_MCU_MODE_SFT,
158762306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ17_MCU_MODE_MASK,
158862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
158962306a36Sopenharmony_ci		.irq_en_shift = IRQ17_MCU_ON_SFT,
159062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
159162306a36Sopenharmony_ci		.irq_clr_shift = IRQ17_MCU_CLR_SFT,
159262306a36Sopenharmony_ci	},
159362306a36Sopenharmony_ci	[MT8192_IRQ_18] = {
159462306a36Sopenharmony_ci		.id = MT8192_IRQ_18,
159562306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT18,
159662306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
159762306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
159862306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
159962306a36Sopenharmony_ci		.irq_fs_shift = IRQ18_MCU_MODE_SFT,
160062306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ18_MCU_MODE_MASK,
160162306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
160262306a36Sopenharmony_ci		.irq_en_shift = IRQ18_MCU_ON_SFT,
160362306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
160462306a36Sopenharmony_ci		.irq_clr_shift = IRQ18_MCU_CLR_SFT,
160562306a36Sopenharmony_ci	},
160662306a36Sopenharmony_ci	[MT8192_IRQ_19] = {
160762306a36Sopenharmony_ci		.id = MT8192_IRQ_19,
160862306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT19,
160962306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
161062306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
161162306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
161262306a36Sopenharmony_ci		.irq_fs_shift = IRQ19_MCU_MODE_SFT,
161362306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ19_MCU_MODE_MASK,
161462306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
161562306a36Sopenharmony_ci		.irq_en_shift = IRQ19_MCU_ON_SFT,
161662306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
161762306a36Sopenharmony_ci		.irq_clr_shift = IRQ19_MCU_CLR_SFT,
161862306a36Sopenharmony_ci	},
161962306a36Sopenharmony_ci	[MT8192_IRQ_20] = {
162062306a36Sopenharmony_ci		.id = MT8192_IRQ_20,
162162306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT20,
162262306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
162362306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
162462306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
162562306a36Sopenharmony_ci		.irq_fs_shift = IRQ20_MCU_MODE_SFT,
162662306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ20_MCU_MODE_MASK,
162762306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
162862306a36Sopenharmony_ci		.irq_en_shift = IRQ20_MCU_ON_SFT,
162962306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
163062306a36Sopenharmony_ci		.irq_clr_shift = IRQ20_MCU_CLR_SFT,
163162306a36Sopenharmony_ci	},
163262306a36Sopenharmony_ci	[MT8192_IRQ_21] = {
163362306a36Sopenharmony_ci		.id = MT8192_IRQ_21,
163462306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT21,
163562306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
163662306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
163762306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
163862306a36Sopenharmony_ci		.irq_fs_shift = IRQ21_MCU_MODE_SFT,
163962306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ21_MCU_MODE_MASK,
164062306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
164162306a36Sopenharmony_ci		.irq_en_shift = IRQ21_MCU_ON_SFT,
164262306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
164362306a36Sopenharmony_ci		.irq_clr_shift = IRQ21_MCU_CLR_SFT,
164462306a36Sopenharmony_ci	},
164562306a36Sopenharmony_ci	[MT8192_IRQ_22] = {
164662306a36Sopenharmony_ci		.id = MT8192_IRQ_22,
164762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT22,
164862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
164962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
165062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
165162306a36Sopenharmony_ci		.irq_fs_shift = IRQ22_MCU_MODE_SFT,
165262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ22_MCU_MODE_MASK,
165362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
165462306a36Sopenharmony_ci		.irq_en_shift = IRQ22_MCU_ON_SFT,
165562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
165662306a36Sopenharmony_ci		.irq_clr_shift = IRQ22_MCU_CLR_SFT,
165762306a36Sopenharmony_ci	},
165862306a36Sopenharmony_ci	[MT8192_IRQ_23] = {
165962306a36Sopenharmony_ci		.id = MT8192_IRQ_23,
166062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT23,
166162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
166262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
166362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
166462306a36Sopenharmony_ci		.irq_fs_shift = IRQ23_MCU_MODE_SFT,
166562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ23_MCU_MODE_MASK,
166662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
166762306a36Sopenharmony_ci		.irq_en_shift = IRQ23_MCU_ON_SFT,
166862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
166962306a36Sopenharmony_ci		.irq_clr_shift = IRQ23_MCU_CLR_SFT,
167062306a36Sopenharmony_ci	},
167162306a36Sopenharmony_ci	[MT8192_IRQ_24] = {
167262306a36Sopenharmony_ci		.id = MT8192_IRQ_24,
167362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT24,
167462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
167562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
167662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
167762306a36Sopenharmony_ci		.irq_fs_shift = IRQ24_MCU_MODE_SFT,
167862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ24_MCU_MODE_MASK,
167962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
168062306a36Sopenharmony_ci		.irq_en_shift = IRQ24_MCU_ON_SFT,
168162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
168262306a36Sopenharmony_ci		.irq_clr_shift = IRQ24_MCU_CLR_SFT,
168362306a36Sopenharmony_ci	},
168462306a36Sopenharmony_ci	[MT8192_IRQ_25] = {
168562306a36Sopenharmony_ci		.id = MT8192_IRQ_25,
168662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT25,
168762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
168862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
168962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
169062306a36Sopenharmony_ci		.irq_fs_shift = IRQ25_MCU_MODE_SFT,
169162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ25_MCU_MODE_MASK,
169262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
169362306a36Sopenharmony_ci		.irq_en_shift = IRQ25_MCU_ON_SFT,
169462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
169562306a36Sopenharmony_ci		.irq_clr_shift = IRQ25_MCU_CLR_SFT,
169662306a36Sopenharmony_ci	},
169762306a36Sopenharmony_ci	[MT8192_IRQ_26] = {
169862306a36Sopenharmony_ci		.id = MT8192_IRQ_26,
169962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT26,
170062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
170162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
170262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
170362306a36Sopenharmony_ci		.irq_fs_shift = IRQ26_MCU_MODE_SFT,
170462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ26_MCU_MODE_MASK,
170562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
170662306a36Sopenharmony_ci		.irq_en_shift = IRQ26_MCU_ON_SFT,
170762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
170862306a36Sopenharmony_ci		.irq_clr_shift = IRQ26_MCU_CLR_SFT,
170962306a36Sopenharmony_ci	},
171062306a36Sopenharmony_ci	[MT8192_IRQ_31] = {
171162306a36Sopenharmony_ci		.id = MT8192_IRQ_31,
171262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT31,
171362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
171462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
171562306a36Sopenharmony_ci		.irq_fs_reg = -1,
171662306a36Sopenharmony_ci		.irq_fs_shift = -1,
171762306a36Sopenharmony_ci		.irq_fs_maskbit = -1,
171862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
171962306a36Sopenharmony_ci		.irq_en_shift = IRQ31_MCU_ON_SFT,
172062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
172162306a36Sopenharmony_ci		.irq_clr_shift = IRQ31_MCU_CLR_SFT,
172262306a36Sopenharmony_ci	},
172362306a36Sopenharmony_ci};
172462306a36Sopenharmony_ci
172562306a36Sopenharmony_cistatic const int memif_irq_usage[MT8192_MEMIF_NUM] = {
172662306a36Sopenharmony_ci	[MT8192_MEMIF_DL1] = MT8192_IRQ_0,
172762306a36Sopenharmony_ci	[MT8192_MEMIF_DL2] = MT8192_IRQ_1,
172862306a36Sopenharmony_ci	[MT8192_MEMIF_DL3] = MT8192_IRQ_2,
172962306a36Sopenharmony_ci	[MT8192_MEMIF_DL4] = MT8192_IRQ_3,
173062306a36Sopenharmony_ci	[MT8192_MEMIF_DL5] = MT8192_IRQ_4,
173162306a36Sopenharmony_ci	[MT8192_MEMIF_DL6] = MT8192_IRQ_5,
173262306a36Sopenharmony_ci	[MT8192_MEMIF_DL7] = MT8192_IRQ_6,
173362306a36Sopenharmony_ci	[MT8192_MEMIF_DL8] = MT8192_IRQ_7,
173462306a36Sopenharmony_ci	[MT8192_MEMIF_DL9] = MT8192_IRQ_8,
173562306a36Sopenharmony_ci	[MT8192_MEMIF_DL12] = MT8192_IRQ_9,
173662306a36Sopenharmony_ci	[MT8192_MEMIF_DAI] = MT8192_IRQ_10,
173762306a36Sopenharmony_ci	[MT8192_MEMIF_MOD_DAI] = MT8192_IRQ_11,
173862306a36Sopenharmony_ci	[MT8192_MEMIF_DAI2] = MT8192_IRQ_12,
173962306a36Sopenharmony_ci	[MT8192_MEMIF_VUL12] = MT8192_IRQ_13,
174062306a36Sopenharmony_ci	[MT8192_MEMIF_VUL2] = MT8192_IRQ_14,
174162306a36Sopenharmony_ci	[MT8192_MEMIF_AWB] = MT8192_IRQ_15,
174262306a36Sopenharmony_ci	[MT8192_MEMIF_AWB2] = MT8192_IRQ_16,
174362306a36Sopenharmony_ci	[MT8192_MEMIF_VUL3] = MT8192_IRQ_17,
174462306a36Sopenharmony_ci	[MT8192_MEMIF_VUL4] = MT8192_IRQ_18,
174562306a36Sopenharmony_ci	[MT8192_MEMIF_VUL5] = MT8192_IRQ_19,
174662306a36Sopenharmony_ci	[MT8192_MEMIF_VUL6] = MT8192_IRQ_20,
174762306a36Sopenharmony_ci	[MT8192_MEMIF_HDMI] = MT8192_IRQ_31,
174862306a36Sopenharmony_ci};
174962306a36Sopenharmony_ci
175062306a36Sopenharmony_cistatic bool mt8192_is_volatile_reg(struct device *dev, unsigned int reg)
175162306a36Sopenharmony_ci{
175262306a36Sopenharmony_ci	/* these auto-gen reg has read-only bit, so put it as volatile */
175362306a36Sopenharmony_ci	/* volatile reg cannot be cached, so cannot be set when power off */
175462306a36Sopenharmony_ci	switch (reg) {
175562306a36Sopenharmony_ci	case AUDIO_TOP_CON0:	/* reg bit controlled by CCF */
175662306a36Sopenharmony_ci	case AUDIO_TOP_CON1:	/* reg bit controlled by CCF */
175762306a36Sopenharmony_ci	case AUDIO_TOP_CON2:
175862306a36Sopenharmony_ci	case AUDIO_TOP_CON3:
175962306a36Sopenharmony_ci	case AFE_DL1_CUR_MSB:
176062306a36Sopenharmony_ci	case AFE_DL1_CUR:
176162306a36Sopenharmony_ci	case AFE_DL1_END:
176262306a36Sopenharmony_ci	case AFE_DL2_CUR_MSB:
176362306a36Sopenharmony_ci	case AFE_DL2_CUR:
176462306a36Sopenharmony_ci	case AFE_DL2_END:
176562306a36Sopenharmony_ci	case AFE_DL3_CUR_MSB:
176662306a36Sopenharmony_ci	case AFE_DL3_CUR:
176762306a36Sopenharmony_ci	case AFE_DL3_END:
176862306a36Sopenharmony_ci	case AFE_DL4_CUR_MSB:
176962306a36Sopenharmony_ci	case AFE_DL4_CUR:
177062306a36Sopenharmony_ci	case AFE_DL4_END:
177162306a36Sopenharmony_ci	case AFE_DL12_CUR_MSB:
177262306a36Sopenharmony_ci	case AFE_DL12_CUR:
177362306a36Sopenharmony_ci	case AFE_DL12_END:
177462306a36Sopenharmony_ci	case AFE_ADDA_SRC_DEBUG_MON0:
177562306a36Sopenharmony_ci	case AFE_ADDA_SRC_DEBUG_MON1:
177662306a36Sopenharmony_ci	case AFE_ADDA_UL_SRC_MON0:
177762306a36Sopenharmony_ci	case AFE_ADDA_UL_SRC_MON1:
177862306a36Sopenharmony_ci	case AFE_SECURE_CON0:
177962306a36Sopenharmony_ci	case AFE_SRAM_BOUND:
178062306a36Sopenharmony_ci	case AFE_SECURE_CON1:
178162306a36Sopenharmony_ci	case AFE_VUL_CUR_MSB:
178262306a36Sopenharmony_ci	case AFE_VUL_CUR:
178362306a36Sopenharmony_ci	case AFE_VUL_END:
178462306a36Sopenharmony_ci	case AFE_ADDA_3RD_DAC_DL_SDM_FIFO_MON:
178562306a36Sopenharmony_ci	case AFE_ADDA_3RD_DAC_DL_SRC_LCH_MON:
178662306a36Sopenharmony_ci	case AFE_ADDA_3RD_DAC_DL_SRC_RCH_MON:
178762306a36Sopenharmony_ci	case AFE_ADDA_3RD_DAC_DL_SDM_OUT_MON:
178862306a36Sopenharmony_ci	case AFE_SIDETONE_MON:
178962306a36Sopenharmony_ci	case AFE_SIDETONE_CON0:
179062306a36Sopenharmony_ci	case AFE_SIDETONE_COEFF:
179162306a36Sopenharmony_ci	case AFE_VUL2_CUR_MSB:
179262306a36Sopenharmony_ci	case AFE_VUL2_CUR:
179362306a36Sopenharmony_ci	case AFE_VUL2_END:
179462306a36Sopenharmony_ci	case AFE_VUL3_CUR_MSB:
179562306a36Sopenharmony_ci	case AFE_VUL3_CUR:
179662306a36Sopenharmony_ci	case AFE_VUL3_END:
179762306a36Sopenharmony_ci	case AFE_I2S_MON:
179862306a36Sopenharmony_ci	case AFE_DAC_MON:
179962306a36Sopenharmony_ci	case AFE_IRQ0_MCU_CNT_MON:
180062306a36Sopenharmony_ci	case AFE_IRQ6_MCU_CNT_MON:
180162306a36Sopenharmony_ci	case AFE_VUL4_CUR_MSB:
180262306a36Sopenharmony_ci	case AFE_VUL4_CUR:
180362306a36Sopenharmony_ci	case AFE_VUL4_END:
180462306a36Sopenharmony_ci	case AFE_VUL12_CUR_MSB:
180562306a36Sopenharmony_ci	case AFE_VUL12_CUR:
180662306a36Sopenharmony_ci	case AFE_VUL12_END:
180762306a36Sopenharmony_ci	case AFE_IRQ3_MCU_CNT_MON:
180862306a36Sopenharmony_ci	case AFE_IRQ4_MCU_CNT_MON:
180962306a36Sopenharmony_ci	case AFE_IRQ_MCU_STATUS:
181062306a36Sopenharmony_ci	case AFE_IRQ_MCU_CLR:
181162306a36Sopenharmony_ci	case AFE_IRQ_MCU_MON2:
181262306a36Sopenharmony_ci	case AFE_IRQ1_MCU_CNT_MON:
181362306a36Sopenharmony_ci	case AFE_IRQ2_MCU_CNT_MON:
181462306a36Sopenharmony_ci	case AFE_IRQ5_MCU_CNT_MON:
181562306a36Sopenharmony_ci	case AFE_IRQ7_MCU_CNT_MON:
181662306a36Sopenharmony_ci	case AFE_IRQ_MCU_MISS_CLR:
181762306a36Sopenharmony_ci	case AFE_GAIN1_CUR:
181862306a36Sopenharmony_ci	case AFE_GAIN2_CUR:
181962306a36Sopenharmony_ci	case AFE_SRAM_DELSEL_CON1:
182062306a36Sopenharmony_ci	case PCM_INTF_CON2:
182162306a36Sopenharmony_ci	case FPGA_CFG0:
182262306a36Sopenharmony_ci	case FPGA_CFG1:
182362306a36Sopenharmony_ci	case FPGA_CFG2:
182462306a36Sopenharmony_ci	case FPGA_CFG3:
182562306a36Sopenharmony_ci	case AUDIO_TOP_DBG_MON0:
182662306a36Sopenharmony_ci	case AUDIO_TOP_DBG_MON1:
182762306a36Sopenharmony_ci	case AFE_IRQ8_MCU_CNT_MON:
182862306a36Sopenharmony_ci	case AFE_IRQ11_MCU_CNT_MON:
182962306a36Sopenharmony_ci	case AFE_IRQ12_MCU_CNT_MON:
183062306a36Sopenharmony_ci	case AFE_IRQ9_MCU_CNT_MON:
183162306a36Sopenharmony_ci	case AFE_IRQ10_MCU_CNT_MON:
183262306a36Sopenharmony_ci	case AFE_IRQ13_MCU_CNT_MON:
183362306a36Sopenharmony_ci	case AFE_IRQ14_MCU_CNT_MON:
183462306a36Sopenharmony_ci	case AFE_IRQ15_MCU_CNT_MON:
183562306a36Sopenharmony_ci	case AFE_IRQ16_MCU_CNT_MON:
183662306a36Sopenharmony_ci	case AFE_IRQ17_MCU_CNT_MON:
183762306a36Sopenharmony_ci	case AFE_IRQ18_MCU_CNT_MON:
183862306a36Sopenharmony_ci	case AFE_IRQ19_MCU_CNT_MON:
183962306a36Sopenharmony_ci	case AFE_IRQ20_MCU_CNT_MON:
184062306a36Sopenharmony_ci	case AFE_IRQ21_MCU_CNT_MON:
184162306a36Sopenharmony_ci	case AFE_IRQ22_MCU_CNT_MON:
184262306a36Sopenharmony_ci	case AFE_IRQ23_MCU_CNT_MON:
184362306a36Sopenharmony_ci	case AFE_IRQ24_MCU_CNT_MON:
184462306a36Sopenharmony_ci	case AFE_IRQ25_MCU_CNT_MON:
184562306a36Sopenharmony_ci	case AFE_IRQ26_MCU_CNT_MON:
184662306a36Sopenharmony_ci	case AFE_IRQ31_MCU_CNT_MON:
184762306a36Sopenharmony_ci	case AFE_CBIP_MON0:
184862306a36Sopenharmony_ci	case AFE_CBIP_SLV_MUX_MON0:
184962306a36Sopenharmony_ci	case AFE_CBIP_SLV_DECODER_MON0:
185062306a36Sopenharmony_ci	case AFE_ADDA6_MTKAIF_MON0:
185162306a36Sopenharmony_ci	case AFE_ADDA6_MTKAIF_MON1:
185262306a36Sopenharmony_ci	case AFE_AWB_CUR_MSB:
185362306a36Sopenharmony_ci	case AFE_AWB_CUR:
185462306a36Sopenharmony_ci	case AFE_AWB_END:
185562306a36Sopenharmony_ci	case AFE_AWB2_CUR_MSB:
185662306a36Sopenharmony_ci	case AFE_AWB2_CUR:
185762306a36Sopenharmony_ci	case AFE_AWB2_END:
185862306a36Sopenharmony_ci	case AFE_DAI_CUR_MSB:
185962306a36Sopenharmony_ci	case AFE_DAI_CUR:
186062306a36Sopenharmony_ci	case AFE_DAI_END:
186162306a36Sopenharmony_ci	case AFE_DAI2_CUR_MSB:
186262306a36Sopenharmony_ci	case AFE_DAI2_CUR:
186362306a36Sopenharmony_ci	case AFE_DAI2_END:
186462306a36Sopenharmony_ci	case AFE_ADDA6_SRC_DEBUG_MON0:
186562306a36Sopenharmony_ci	case AFE_ADD6A_UL_SRC_MON0:
186662306a36Sopenharmony_ci	case AFE_ADDA6_UL_SRC_MON1:
186762306a36Sopenharmony_ci	case AFE_MOD_DAI_CUR_MSB:
186862306a36Sopenharmony_ci	case AFE_MOD_DAI_CUR:
186962306a36Sopenharmony_ci	case AFE_MOD_DAI_END:
187062306a36Sopenharmony_ci	case AFE_HDMI_OUT_CUR_MSB:
187162306a36Sopenharmony_ci	case AFE_HDMI_OUT_CUR:
187262306a36Sopenharmony_ci	case AFE_HDMI_OUT_END:
187362306a36Sopenharmony_ci	case AFE_AWB_RCH_MON:
187462306a36Sopenharmony_ci	case AFE_AWB_LCH_MON:
187562306a36Sopenharmony_ci	case AFE_VUL_RCH_MON:
187662306a36Sopenharmony_ci	case AFE_VUL_LCH_MON:
187762306a36Sopenharmony_ci	case AFE_VUL12_RCH_MON:
187862306a36Sopenharmony_ci	case AFE_VUL12_LCH_MON:
187962306a36Sopenharmony_ci	case AFE_VUL2_RCH_MON:
188062306a36Sopenharmony_ci	case AFE_VUL2_LCH_MON:
188162306a36Sopenharmony_ci	case AFE_DAI_DATA_MON:
188262306a36Sopenharmony_ci	case AFE_MOD_DAI_DATA_MON:
188362306a36Sopenharmony_ci	case AFE_DAI2_DATA_MON:
188462306a36Sopenharmony_ci	case AFE_AWB2_RCH_MON:
188562306a36Sopenharmony_ci	case AFE_AWB2_LCH_MON:
188662306a36Sopenharmony_ci	case AFE_VUL3_RCH_MON:
188762306a36Sopenharmony_ci	case AFE_VUL3_LCH_MON:
188862306a36Sopenharmony_ci	case AFE_VUL4_RCH_MON:
188962306a36Sopenharmony_ci	case AFE_VUL4_LCH_MON:
189062306a36Sopenharmony_ci	case AFE_VUL5_RCH_MON:
189162306a36Sopenharmony_ci	case AFE_VUL5_LCH_MON:
189262306a36Sopenharmony_ci	case AFE_VUL6_RCH_MON:
189362306a36Sopenharmony_ci	case AFE_VUL6_LCH_MON:
189462306a36Sopenharmony_ci	case AFE_DL1_RCH_MON:
189562306a36Sopenharmony_ci	case AFE_DL1_LCH_MON:
189662306a36Sopenharmony_ci	case AFE_DL2_RCH_MON:
189762306a36Sopenharmony_ci	case AFE_DL2_LCH_MON:
189862306a36Sopenharmony_ci	case AFE_DL12_RCH1_MON:
189962306a36Sopenharmony_ci	case AFE_DL12_LCH1_MON:
190062306a36Sopenharmony_ci	case AFE_DL12_RCH2_MON:
190162306a36Sopenharmony_ci	case AFE_DL12_LCH2_MON:
190262306a36Sopenharmony_ci	case AFE_DL3_RCH_MON:
190362306a36Sopenharmony_ci	case AFE_DL3_LCH_MON:
190462306a36Sopenharmony_ci	case AFE_DL4_RCH_MON:
190562306a36Sopenharmony_ci	case AFE_DL4_LCH_MON:
190662306a36Sopenharmony_ci	case AFE_DL5_RCH_MON:
190762306a36Sopenharmony_ci	case AFE_DL5_LCH_MON:
190862306a36Sopenharmony_ci	case AFE_DL6_RCH_MON:
190962306a36Sopenharmony_ci	case AFE_DL6_LCH_MON:
191062306a36Sopenharmony_ci	case AFE_DL7_RCH_MON:
191162306a36Sopenharmony_ci	case AFE_DL7_LCH_MON:
191262306a36Sopenharmony_ci	case AFE_DL8_RCH_MON:
191362306a36Sopenharmony_ci	case AFE_DL8_LCH_MON:
191462306a36Sopenharmony_ci	case AFE_VUL5_CUR_MSB:
191562306a36Sopenharmony_ci	case AFE_VUL5_CUR:
191662306a36Sopenharmony_ci	case AFE_VUL5_END:
191762306a36Sopenharmony_ci	case AFE_VUL6_CUR_MSB:
191862306a36Sopenharmony_ci	case AFE_VUL6_CUR:
191962306a36Sopenharmony_ci	case AFE_VUL6_END:
192062306a36Sopenharmony_ci	case AFE_ADDA_DL_SDM_FIFO_MON:
192162306a36Sopenharmony_ci	case AFE_ADDA_DL_SRC_LCH_MON:
192262306a36Sopenharmony_ci	case AFE_ADDA_DL_SRC_RCH_MON:
192362306a36Sopenharmony_ci	case AFE_ADDA_DL_SDM_OUT_MON:
192462306a36Sopenharmony_ci	case AFE_CONNSYS_I2S_MON:
192562306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON0:
192662306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON2:
192762306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON3:
192862306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON4:
192962306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON5:
193062306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON7:
193162306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON8:
193262306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON12:
193362306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON13:
193462306a36Sopenharmony_ci	case AFE_DL9_CUR_MSB:
193562306a36Sopenharmony_ci	case AFE_DL9_CUR:
193662306a36Sopenharmony_ci	case AFE_DL9_END:
193762306a36Sopenharmony_ci	case AFE_ADDA_MTKAIF_MON0:
193862306a36Sopenharmony_ci	case AFE_ADDA_MTKAIF_MON1:
193962306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON0:
194062306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON1:
194162306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON2:
194262306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON0:
194362306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON1:
194462306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON2:
194562306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON0:
194662306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON2:
194762306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON3:
194862306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON4:
194962306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON5:
195062306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON7:
195162306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON8:
195262306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON12:
195362306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON13:
195462306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON0:
195562306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON2:
195662306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON3:
195762306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON4:
195862306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON5:
195962306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON7:
196062306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON8:
196162306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON12:
196262306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON13:
196362306a36Sopenharmony_ci	case AFE_DL9_RCH_MON:
196462306a36Sopenharmony_ci	case AFE_DL9_LCH_MON:
196562306a36Sopenharmony_ci	case AFE_DL5_CUR_MSB:
196662306a36Sopenharmony_ci	case AFE_DL5_CUR:
196762306a36Sopenharmony_ci	case AFE_DL5_END:
196862306a36Sopenharmony_ci	case AFE_DL6_CUR_MSB:
196962306a36Sopenharmony_ci	case AFE_DL6_CUR:
197062306a36Sopenharmony_ci	case AFE_DL6_END:
197162306a36Sopenharmony_ci	case AFE_DL7_CUR_MSB:
197262306a36Sopenharmony_ci	case AFE_DL7_CUR:
197362306a36Sopenharmony_ci	case AFE_DL7_END:
197462306a36Sopenharmony_ci	case AFE_DL8_CUR_MSB:
197562306a36Sopenharmony_ci	case AFE_DL8_CUR:
197662306a36Sopenharmony_ci	case AFE_DL8_END:
197762306a36Sopenharmony_ci	case AFE_PROT_SIDEBAND_MON:
197862306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND0_MON:
197962306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND1_MON:
198062306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND2_MON:
198162306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND3_MON:
198262306a36Sopenharmony_ci	case AFE_APLL1_TUNER_CFG:	/* [20:31] is monitor */
198362306a36Sopenharmony_ci	case AFE_APLL2_TUNER_CFG:	/* [20:31] is monitor */
198462306a36Sopenharmony_ci	case AFE_DAC_CON0:
198562306a36Sopenharmony_ci	case AFE_IRQ_MCU_CON0:
198662306a36Sopenharmony_ci	case AFE_IRQ_MCU_EN:
198762306a36Sopenharmony_ci		return true;
198862306a36Sopenharmony_ci	default:
198962306a36Sopenharmony_ci		return false;
199062306a36Sopenharmony_ci	};
199162306a36Sopenharmony_ci}
199262306a36Sopenharmony_ci
199362306a36Sopenharmony_cistatic const struct regmap_config mt8192_afe_regmap_config = {
199462306a36Sopenharmony_ci	.reg_bits = 32,
199562306a36Sopenharmony_ci	.reg_stride = 4,
199662306a36Sopenharmony_ci	.val_bits = 32,
199762306a36Sopenharmony_ci	.volatile_reg = mt8192_is_volatile_reg,
199862306a36Sopenharmony_ci	.max_register = AFE_MAX_REGISTER,
199962306a36Sopenharmony_ci	.num_reg_defaults_raw = AFE_MAX_REGISTER,
200062306a36Sopenharmony_ci	.cache_type = REGCACHE_FLAT,
200162306a36Sopenharmony_ci};
200262306a36Sopenharmony_ci
200362306a36Sopenharmony_cistatic irqreturn_t mt8192_afe_irq_handler(int irq_id, void *dev)
200462306a36Sopenharmony_ci{
200562306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev;
200662306a36Sopenharmony_ci	struct mtk_base_afe_irq *irq;
200762306a36Sopenharmony_ci	unsigned int status;
200862306a36Sopenharmony_ci	unsigned int status_mcu;
200962306a36Sopenharmony_ci	unsigned int mcu_en;
201062306a36Sopenharmony_ci	int ret;
201162306a36Sopenharmony_ci	int i;
201262306a36Sopenharmony_ci
201362306a36Sopenharmony_ci	/* get irq that is sent to MCU */
201462306a36Sopenharmony_ci	regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &mcu_en);
201562306a36Sopenharmony_ci
201662306a36Sopenharmony_ci	ret = regmap_read(afe->regmap, AFE_IRQ_MCU_STATUS, &status);
201762306a36Sopenharmony_ci	/* only care IRQ which is sent to MCU */
201862306a36Sopenharmony_ci	status_mcu = status & mcu_en & AFE_IRQ_STATUS_BITS;
201962306a36Sopenharmony_ci
202062306a36Sopenharmony_ci	if (ret || status_mcu == 0) {
202162306a36Sopenharmony_ci		dev_err(afe->dev, "%s(), irq status err, ret %d, status 0x%x, mcu_en 0x%x\n",
202262306a36Sopenharmony_ci			__func__, ret, status, mcu_en);
202362306a36Sopenharmony_ci
202462306a36Sopenharmony_ci		goto err_irq;
202562306a36Sopenharmony_ci	}
202662306a36Sopenharmony_ci
202762306a36Sopenharmony_ci	for (i = 0; i < MT8192_MEMIF_NUM; i++) {
202862306a36Sopenharmony_ci		struct mtk_base_afe_memif *memif = &afe->memif[i];
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_ci		if (!memif->substream)
203162306a36Sopenharmony_ci			continue;
203262306a36Sopenharmony_ci
203362306a36Sopenharmony_ci		if (memif->irq_usage < 0)
203462306a36Sopenharmony_ci			continue;
203562306a36Sopenharmony_ci
203662306a36Sopenharmony_ci		irq = &afe->irqs[memif->irq_usage];
203762306a36Sopenharmony_ci
203862306a36Sopenharmony_ci		if (status_mcu & (1 << irq->irq_data->irq_en_shift))
203962306a36Sopenharmony_ci			snd_pcm_period_elapsed(memif->substream);
204062306a36Sopenharmony_ci	}
204162306a36Sopenharmony_ci
204262306a36Sopenharmony_cierr_irq:
204362306a36Sopenharmony_ci	/* clear irq */
204462306a36Sopenharmony_ci	regmap_write(afe->regmap,
204562306a36Sopenharmony_ci		     AFE_IRQ_MCU_CLR,
204662306a36Sopenharmony_ci		     status_mcu);
204762306a36Sopenharmony_ci
204862306a36Sopenharmony_ci	return IRQ_HANDLED;
204962306a36Sopenharmony_ci}
205062306a36Sopenharmony_ci
205162306a36Sopenharmony_cistatic int mt8192_afe_runtime_suspend(struct device *dev)
205262306a36Sopenharmony_ci{
205362306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev_get_drvdata(dev);
205462306a36Sopenharmony_ci	struct mt8192_afe_private *afe_priv = afe->platform_priv;
205562306a36Sopenharmony_ci	unsigned int value;
205662306a36Sopenharmony_ci	int ret;
205762306a36Sopenharmony_ci
205862306a36Sopenharmony_ci	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
205962306a36Sopenharmony_ci		goto skip_regmap;
206062306a36Sopenharmony_ci
206162306a36Sopenharmony_ci	/* disable AFE */
206262306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_DAC_CON0, AFE_ON_MASK_SFT, 0x0);
206362306a36Sopenharmony_ci
206462306a36Sopenharmony_ci	ret = regmap_read_poll_timeout(afe->regmap,
206562306a36Sopenharmony_ci				       AFE_DAC_MON,
206662306a36Sopenharmony_ci				       value,
206762306a36Sopenharmony_ci				       (value & AFE_ON_RETM_MASK_SFT) == 0,
206862306a36Sopenharmony_ci				       20,
206962306a36Sopenharmony_ci				       1 * 1000 * 1000);
207062306a36Sopenharmony_ci	if (ret)
207162306a36Sopenharmony_ci		dev_warn(afe->dev, "%s(), ret %d\n", __func__, ret);
207262306a36Sopenharmony_ci
207362306a36Sopenharmony_ci	/* make sure all irq status are cleared */
207462306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff);
207562306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff);
207662306a36Sopenharmony_ci
207762306a36Sopenharmony_ci	/* reset sgen */
207862306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_SINEGEN_CON0, 0x0);
207962306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_SINEGEN_CON2,
208062306a36Sopenharmony_ci			   INNER_LOOP_BACK_MODE_MASK_SFT,
208162306a36Sopenharmony_ci			   0x3f << INNER_LOOP_BACK_MODE_SFT);
208262306a36Sopenharmony_ci
208362306a36Sopenharmony_ci	/* cache only */
208462306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, true);
208562306a36Sopenharmony_ci	regcache_mark_dirty(afe->regmap);
208662306a36Sopenharmony_ci
208762306a36Sopenharmony_ciskip_regmap:
208862306a36Sopenharmony_ci	mt8192_afe_disable_clock(afe);
208962306a36Sopenharmony_ci	return 0;
209062306a36Sopenharmony_ci}
209162306a36Sopenharmony_ci
209262306a36Sopenharmony_cistatic int mt8192_afe_runtime_resume(struct device *dev)
209362306a36Sopenharmony_ci{
209462306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev_get_drvdata(dev);
209562306a36Sopenharmony_ci	struct mt8192_afe_private *afe_priv = afe->platform_priv;
209662306a36Sopenharmony_ci	int ret;
209762306a36Sopenharmony_ci
209862306a36Sopenharmony_ci	ret = mt8192_afe_enable_clock(afe);
209962306a36Sopenharmony_ci	if (ret)
210062306a36Sopenharmony_ci		return ret;
210162306a36Sopenharmony_ci
210262306a36Sopenharmony_ci	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
210362306a36Sopenharmony_ci		goto skip_regmap;
210462306a36Sopenharmony_ci
210562306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, false);
210662306a36Sopenharmony_ci	regcache_sync(afe->regmap);
210762306a36Sopenharmony_ci
210862306a36Sopenharmony_ci	/* enable audio sys DCM for power saving */
210962306a36Sopenharmony_ci	regmap_update_bits(afe_priv->infracfg,
211062306a36Sopenharmony_ci			   PERI_BUS_DCM_CTRL, 0x1 << 29, 0x1 << 29);
211162306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, 0x1 << 29, 0x1 << 29);
211262306a36Sopenharmony_ci
211362306a36Sopenharmony_ci	/* force cpu use 8_24 format when writing 32bit data */
211462306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_MEMIF_CON0,
211562306a36Sopenharmony_ci			   CPU_HD_ALIGN_MASK_SFT, 0 << CPU_HD_ALIGN_SFT);
211662306a36Sopenharmony_ci
211762306a36Sopenharmony_ci	/* set all output port to 24bit */
211862306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_CONN_24BIT, 0xffffffff);
211962306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_CONN_24BIT_1, 0xffffffff);
212062306a36Sopenharmony_ci
212162306a36Sopenharmony_ci	/* enable AFE */
212262306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_DAC_CON0, AFE_ON_MASK_SFT, 0x1);
212362306a36Sopenharmony_ci
212462306a36Sopenharmony_ciskip_regmap:
212562306a36Sopenharmony_ci	return 0;
212662306a36Sopenharmony_ci}
212762306a36Sopenharmony_ci
212862306a36Sopenharmony_cistatic int mt8192_afe_component_probe(struct snd_soc_component *component)
212962306a36Sopenharmony_ci{
213062306a36Sopenharmony_ci	return mtk_afe_add_sub_dai_control(component);
213162306a36Sopenharmony_ci}
213262306a36Sopenharmony_ci
213362306a36Sopenharmony_cistatic const struct snd_soc_component_driver mt8192_afe_component = {
213462306a36Sopenharmony_ci	.name = AFE_PCM_NAME,
213562306a36Sopenharmony_ci	.probe = mt8192_afe_component_probe,
213662306a36Sopenharmony_ci	.pointer = mtk_afe_pcm_pointer,
213762306a36Sopenharmony_ci	.pcm_construct = mtk_afe_pcm_new,
213862306a36Sopenharmony_ci};
213962306a36Sopenharmony_ci
214062306a36Sopenharmony_cistatic const struct snd_soc_component_driver mt8192_afe_pcm_component = {
214162306a36Sopenharmony_ci	.name = "mt8192-afe-pcm-dai",
214262306a36Sopenharmony_ci};
214362306a36Sopenharmony_ci
214462306a36Sopenharmony_cistatic int mt8192_dai_memif_register(struct mtk_base_afe *afe)
214562306a36Sopenharmony_ci{
214662306a36Sopenharmony_ci	struct mtk_base_afe_dai *dai;
214762306a36Sopenharmony_ci
214862306a36Sopenharmony_ci	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
214962306a36Sopenharmony_ci	if (!dai)
215062306a36Sopenharmony_ci		return -ENOMEM;
215162306a36Sopenharmony_ci
215262306a36Sopenharmony_ci	list_add(&dai->list, &afe->sub_dais);
215362306a36Sopenharmony_ci
215462306a36Sopenharmony_ci	dai->dai_drivers = mt8192_memif_dai_driver;
215562306a36Sopenharmony_ci	dai->num_dai_drivers = ARRAY_SIZE(mt8192_memif_dai_driver);
215662306a36Sopenharmony_ci
215762306a36Sopenharmony_ci	dai->dapm_widgets = mt8192_memif_widgets;
215862306a36Sopenharmony_ci	dai->num_dapm_widgets = ARRAY_SIZE(mt8192_memif_widgets);
215962306a36Sopenharmony_ci	dai->dapm_routes = mt8192_memif_routes;
216062306a36Sopenharmony_ci	dai->num_dapm_routes = ARRAY_SIZE(mt8192_memif_routes);
216162306a36Sopenharmony_ci	return 0;
216262306a36Sopenharmony_ci}
216362306a36Sopenharmony_ci
216462306a36Sopenharmony_citypedef int (*dai_register_cb)(struct mtk_base_afe *);
216562306a36Sopenharmony_cistatic const dai_register_cb dai_register_cbs[] = {
216662306a36Sopenharmony_ci	mt8192_dai_adda_register,
216762306a36Sopenharmony_ci	mt8192_dai_i2s_register,
216862306a36Sopenharmony_ci	mt8192_dai_pcm_register,
216962306a36Sopenharmony_ci	mt8192_dai_tdm_register,
217062306a36Sopenharmony_ci	mt8192_dai_memif_register,
217162306a36Sopenharmony_ci};
217262306a36Sopenharmony_ci
217362306a36Sopenharmony_cistatic int mt8192_afe_pcm_dev_probe(struct platform_device *pdev)
217462306a36Sopenharmony_ci{
217562306a36Sopenharmony_ci	struct mtk_base_afe *afe;
217662306a36Sopenharmony_ci	struct mt8192_afe_private *afe_priv;
217762306a36Sopenharmony_ci	struct device *dev;
217862306a36Sopenharmony_ci	struct reset_control *rstc;
217962306a36Sopenharmony_ci	int i, ret, irq_id;
218062306a36Sopenharmony_ci
218162306a36Sopenharmony_ci	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(34));
218262306a36Sopenharmony_ci	if (ret)
218362306a36Sopenharmony_ci		return ret;
218462306a36Sopenharmony_ci
218562306a36Sopenharmony_ci	afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);
218662306a36Sopenharmony_ci	if (!afe)
218762306a36Sopenharmony_ci		return -ENOMEM;
218862306a36Sopenharmony_ci	platform_set_drvdata(pdev, afe);
218962306a36Sopenharmony_ci
219062306a36Sopenharmony_ci	afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv),
219162306a36Sopenharmony_ci					  GFP_KERNEL);
219262306a36Sopenharmony_ci	if (!afe->platform_priv)
219362306a36Sopenharmony_ci		return -ENOMEM;
219462306a36Sopenharmony_ci	afe_priv = afe->platform_priv;
219562306a36Sopenharmony_ci
219662306a36Sopenharmony_ci	afe->dev = &pdev->dev;
219762306a36Sopenharmony_ci	dev = afe->dev;
219862306a36Sopenharmony_ci
219962306a36Sopenharmony_ci	/* init audio related clock */
220062306a36Sopenharmony_ci	ret = mt8192_init_clock(afe);
220162306a36Sopenharmony_ci	if (ret) {
220262306a36Sopenharmony_ci		dev_err(dev, "init clock error\n");
220362306a36Sopenharmony_ci		return ret;
220462306a36Sopenharmony_ci	}
220562306a36Sopenharmony_ci
220662306a36Sopenharmony_ci	/* reset controller to reset audio regs before regmap cache */
220762306a36Sopenharmony_ci	rstc = devm_reset_control_get_exclusive(dev, "audiosys");
220862306a36Sopenharmony_ci	if (IS_ERR(rstc)) {
220962306a36Sopenharmony_ci		ret = PTR_ERR(rstc);
221062306a36Sopenharmony_ci		dev_err(dev, "could not get audiosys reset:%d\n", ret);
221162306a36Sopenharmony_ci		return ret;
221262306a36Sopenharmony_ci	}
221362306a36Sopenharmony_ci
221462306a36Sopenharmony_ci	ret = reset_control_reset(rstc);
221562306a36Sopenharmony_ci	if (ret) {
221662306a36Sopenharmony_ci		dev_err(dev, "failed to trigger audio reset:%d\n", ret);
221762306a36Sopenharmony_ci		return ret;
221862306a36Sopenharmony_ci	}
221962306a36Sopenharmony_ci
222062306a36Sopenharmony_ci	pm_runtime_enable(&pdev->dev);
222162306a36Sopenharmony_ci	if (!pm_runtime_enabled(&pdev->dev))
222262306a36Sopenharmony_ci		goto err_pm_disable;
222362306a36Sopenharmony_ci
222462306a36Sopenharmony_ci	/* regmap init */
222562306a36Sopenharmony_ci	afe->regmap = syscon_node_to_regmap(dev->parent->of_node);
222662306a36Sopenharmony_ci	if (IS_ERR(afe->regmap)) {
222762306a36Sopenharmony_ci		dev_err(dev, "could not get regmap from parent\n");
222862306a36Sopenharmony_ci		ret = PTR_ERR(afe->regmap);
222962306a36Sopenharmony_ci		goto err_pm_disable;
223062306a36Sopenharmony_ci	}
223162306a36Sopenharmony_ci	ret = regmap_attach_dev(dev, afe->regmap, &mt8192_afe_regmap_config);
223262306a36Sopenharmony_ci	if (ret) {
223362306a36Sopenharmony_ci		dev_warn(dev, "regmap_attach_dev fail, ret %d\n", ret);
223462306a36Sopenharmony_ci		goto err_pm_disable;
223562306a36Sopenharmony_ci	}
223662306a36Sopenharmony_ci
223762306a36Sopenharmony_ci	/* enable clock for regcache get default value from hw */
223862306a36Sopenharmony_ci	afe_priv->pm_runtime_bypass_reg_ctl = true;
223962306a36Sopenharmony_ci	pm_runtime_get_sync(&pdev->dev);
224062306a36Sopenharmony_ci
224162306a36Sopenharmony_ci	ret = regmap_reinit_cache(afe->regmap, &mt8192_afe_regmap_config);
224262306a36Sopenharmony_ci	if (ret) {
224362306a36Sopenharmony_ci		dev_err(dev, "regmap_reinit_cache fail, ret %d\n", ret);
224462306a36Sopenharmony_ci		goto err_pm_disable;
224562306a36Sopenharmony_ci	}
224662306a36Sopenharmony_ci
224762306a36Sopenharmony_ci	pm_runtime_put_sync(&pdev->dev);
224862306a36Sopenharmony_ci	afe_priv->pm_runtime_bypass_reg_ctl = false;
224962306a36Sopenharmony_ci
225062306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, true);
225162306a36Sopenharmony_ci	regcache_mark_dirty(afe->regmap);
225262306a36Sopenharmony_ci
225362306a36Sopenharmony_ci	/* init memif */
225462306a36Sopenharmony_ci	afe->memif_size = MT8192_MEMIF_NUM;
225562306a36Sopenharmony_ci	afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),
225662306a36Sopenharmony_ci				  GFP_KERNEL);
225762306a36Sopenharmony_ci	if (!afe->memif) {
225862306a36Sopenharmony_ci		ret = -ENOMEM;
225962306a36Sopenharmony_ci		goto err_pm_disable;
226062306a36Sopenharmony_ci	}
226162306a36Sopenharmony_ci
226262306a36Sopenharmony_ci	for (i = 0; i < afe->memif_size; i++) {
226362306a36Sopenharmony_ci		afe->memif[i].data = &memif_data[i];
226462306a36Sopenharmony_ci		afe->memif[i].irq_usage = memif_irq_usage[i];
226562306a36Sopenharmony_ci		afe->memif[i].const_irq = 1;
226662306a36Sopenharmony_ci	}
226762306a36Sopenharmony_ci
226862306a36Sopenharmony_ci	mutex_init(&afe->irq_alloc_lock);	/* needed when dynamic irq */
226962306a36Sopenharmony_ci
227062306a36Sopenharmony_ci	/* init irq */
227162306a36Sopenharmony_ci	afe->irqs_size = MT8192_IRQ_NUM;
227262306a36Sopenharmony_ci	afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),
227362306a36Sopenharmony_ci				 GFP_KERNEL);
227462306a36Sopenharmony_ci	if (!afe->irqs) {
227562306a36Sopenharmony_ci		ret = -ENOMEM;
227662306a36Sopenharmony_ci		goto err_pm_disable;
227762306a36Sopenharmony_ci	}
227862306a36Sopenharmony_ci
227962306a36Sopenharmony_ci	for (i = 0; i < afe->irqs_size; i++)
228062306a36Sopenharmony_ci		afe->irqs[i].irq_data = &irq_data[i];
228162306a36Sopenharmony_ci
228262306a36Sopenharmony_ci	/* request irq */
228362306a36Sopenharmony_ci	irq_id = platform_get_irq(pdev, 0);
228462306a36Sopenharmony_ci	if (irq_id < 0) {
228562306a36Sopenharmony_ci		ret = irq_id;
228662306a36Sopenharmony_ci		goto err_pm_disable;
228762306a36Sopenharmony_ci	}
228862306a36Sopenharmony_ci
228962306a36Sopenharmony_ci	ret = devm_request_irq(dev, irq_id, mt8192_afe_irq_handler,
229062306a36Sopenharmony_ci			       IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
229162306a36Sopenharmony_ci	if (ret) {
229262306a36Sopenharmony_ci		dev_err(dev, "could not request_irq for Afe_ISR_Handle\n");
229362306a36Sopenharmony_ci		goto err_pm_disable;
229462306a36Sopenharmony_ci	}
229562306a36Sopenharmony_ci
229662306a36Sopenharmony_ci	/* init sub_dais */
229762306a36Sopenharmony_ci	INIT_LIST_HEAD(&afe->sub_dais);
229862306a36Sopenharmony_ci
229962306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
230062306a36Sopenharmony_ci		ret = dai_register_cbs[i](afe);
230162306a36Sopenharmony_ci		if (ret) {
230262306a36Sopenharmony_ci			dev_warn(afe->dev, "dai register i %d fail, ret %d\n",
230362306a36Sopenharmony_ci				 i, ret);
230462306a36Sopenharmony_ci			goto err_pm_disable;
230562306a36Sopenharmony_ci		}
230662306a36Sopenharmony_ci	}
230762306a36Sopenharmony_ci
230862306a36Sopenharmony_ci	/* init dai_driver and component_driver */
230962306a36Sopenharmony_ci	ret = mtk_afe_combine_sub_dai(afe);
231062306a36Sopenharmony_ci	if (ret) {
231162306a36Sopenharmony_ci		dev_warn(afe->dev, "mtk_afe_combine_sub_dai fail, ret %d\n",
231262306a36Sopenharmony_ci			 ret);
231362306a36Sopenharmony_ci		goto err_pm_disable;
231462306a36Sopenharmony_ci	}
231562306a36Sopenharmony_ci
231662306a36Sopenharmony_ci	/* others */
231762306a36Sopenharmony_ci	afe->mtk_afe_hardware = &mt8192_afe_hardware;
231862306a36Sopenharmony_ci	afe->memif_fs = mt8192_memif_fs;
231962306a36Sopenharmony_ci	afe->irq_fs = mt8192_irq_fs;
232062306a36Sopenharmony_ci	afe->get_dai_fs = mt8192_get_dai_fs;
232162306a36Sopenharmony_ci	afe->get_memif_pbuf_size = mt8192_get_memif_pbuf_size;
232262306a36Sopenharmony_ci	afe->memif_32bit_supported = 1;
232362306a36Sopenharmony_ci
232462306a36Sopenharmony_ci	afe->runtime_resume = mt8192_afe_runtime_resume;
232562306a36Sopenharmony_ci	afe->runtime_suspend = mt8192_afe_runtime_suspend;
232662306a36Sopenharmony_ci
232762306a36Sopenharmony_ci	/* register platform */
232862306a36Sopenharmony_ci	ret = devm_snd_soc_register_component(&pdev->dev,
232962306a36Sopenharmony_ci					      &mt8192_afe_component, NULL, 0);
233062306a36Sopenharmony_ci	if (ret) {
233162306a36Sopenharmony_ci		dev_warn(dev, "err_platform\n");
233262306a36Sopenharmony_ci		goto err_pm_disable;
233362306a36Sopenharmony_ci	}
233462306a36Sopenharmony_ci
233562306a36Sopenharmony_ci	ret = devm_snd_soc_register_component(&pdev->dev,
233662306a36Sopenharmony_ci					      &mt8192_afe_pcm_component,
233762306a36Sopenharmony_ci					      afe->dai_drivers,
233862306a36Sopenharmony_ci					      afe->num_dai_drivers);
233962306a36Sopenharmony_ci	if (ret) {
234062306a36Sopenharmony_ci		dev_warn(dev, "err_dai_component\n");
234162306a36Sopenharmony_ci		goto err_pm_disable;
234262306a36Sopenharmony_ci	}
234362306a36Sopenharmony_ci
234462306a36Sopenharmony_ci	return 0;
234562306a36Sopenharmony_ci
234662306a36Sopenharmony_cierr_pm_disable:
234762306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
234862306a36Sopenharmony_ci
234962306a36Sopenharmony_ci	return ret;
235062306a36Sopenharmony_ci}
235162306a36Sopenharmony_ci
235262306a36Sopenharmony_cistatic void mt8192_afe_pcm_dev_remove(struct platform_device *pdev)
235362306a36Sopenharmony_ci{
235462306a36Sopenharmony_ci	struct mtk_base_afe *afe = platform_get_drvdata(pdev);
235562306a36Sopenharmony_ci
235662306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
235762306a36Sopenharmony_ci	if (!pm_runtime_status_suspended(&pdev->dev))
235862306a36Sopenharmony_ci		mt8192_afe_runtime_suspend(&pdev->dev);
235962306a36Sopenharmony_ci
236062306a36Sopenharmony_ci	/* disable afe clock */
236162306a36Sopenharmony_ci	mt8192_afe_disable_clock(afe);
236262306a36Sopenharmony_ci}
236362306a36Sopenharmony_ci
236462306a36Sopenharmony_cistatic const struct of_device_id mt8192_afe_pcm_dt_match[] = {
236562306a36Sopenharmony_ci	{ .compatible = "mediatek,mt8192-audio", },
236662306a36Sopenharmony_ci	{},
236762306a36Sopenharmony_ci};
236862306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, mt8192_afe_pcm_dt_match);
236962306a36Sopenharmony_ci
237062306a36Sopenharmony_cistatic const struct dev_pm_ops mt8192_afe_pm_ops = {
237162306a36Sopenharmony_ci	SET_RUNTIME_PM_OPS(mt8192_afe_runtime_suspend,
237262306a36Sopenharmony_ci			   mt8192_afe_runtime_resume, NULL)
237362306a36Sopenharmony_ci};
237462306a36Sopenharmony_ci
237562306a36Sopenharmony_cistatic struct platform_driver mt8192_afe_pcm_driver = {
237662306a36Sopenharmony_ci	.driver = {
237762306a36Sopenharmony_ci		   .name = "mt8192-audio",
237862306a36Sopenharmony_ci		   .of_match_table = mt8192_afe_pcm_dt_match,
237962306a36Sopenharmony_ci		   .pm = &mt8192_afe_pm_ops,
238062306a36Sopenharmony_ci	},
238162306a36Sopenharmony_ci	.probe = mt8192_afe_pcm_dev_probe,
238262306a36Sopenharmony_ci	.remove_new = mt8192_afe_pcm_dev_remove,
238362306a36Sopenharmony_ci};
238462306a36Sopenharmony_ci
238562306a36Sopenharmony_cimodule_platform_driver(mt8192_afe_pcm_driver);
238662306a36Sopenharmony_ci
238762306a36Sopenharmony_ciMODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8192");
238862306a36Sopenharmony_ciMODULE_AUTHOR("Shane Chien <shane.chien@mediatek.com>");
238962306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
2390