162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// Mediatek ALSA SoC AFE platform driver for 8186
462306a36Sopenharmony_ci//
562306a36Sopenharmony_ci// Copyright (c) 2022 MediaTek Inc.
662306a36Sopenharmony_ci// Author: Jiaxin Yu <jiaxin.yu@mediatek.com>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/delay.h>
962306a36Sopenharmony_ci#include <linux/dma-mapping.h>
1062306a36Sopenharmony_ci#include <linux/module.h>
1162306a36Sopenharmony_ci#include <linux/of.h>
1262306a36Sopenharmony_ci#include <linux/of_address.h>
1362306a36Sopenharmony_ci#include <linux/pm_runtime.h>
1462306a36Sopenharmony_ci#include <linux/reset.h>
1562306a36Sopenharmony_ci#include <sound/soc.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#include "../common/mtk-afe-platform-driver.h"
1862306a36Sopenharmony_ci#include "../common/mtk-afe-fe-dai.h"
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#include "mt8186-afe-common.h"
2162306a36Sopenharmony_ci#include "mt8186-afe-clk.h"
2262306a36Sopenharmony_ci#include "mt8186-afe-gpio.h"
2362306a36Sopenharmony_ci#include "mt8186-interconnection.h"
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic const struct snd_pcm_hardware mt8186_afe_hardware = {
2662306a36Sopenharmony_ci	.info = (SNDRV_PCM_INFO_MMAP |
2762306a36Sopenharmony_ci		 SNDRV_PCM_INFO_INTERLEAVED |
2862306a36Sopenharmony_ci		 SNDRV_PCM_INFO_MMAP_VALID),
2962306a36Sopenharmony_ci	.formats = (SNDRV_PCM_FMTBIT_S16_LE |
3062306a36Sopenharmony_ci		    SNDRV_PCM_FMTBIT_S24_LE |
3162306a36Sopenharmony_ci		    SNDRV_PCM_FMTBIT_S32_LE),
3262306a36Sopenharmony_ci	.period_bytes_min = 96,
3362306a36Sopenharmony_ci	.period_bytes_max = 4 * 48 * 1024,
3462306a36Sopenharmony_ci	.periods_min = 2,
3562306a36Sopenharmony_ci	.periods_max = 256,
3662306a36Sopenharmony_ci	.buffer_bytes_max = 4 * 48 * 1024,
3762306a36Sopenharmony_ci	.fifo_size = 0,
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistatic int mt8186_fe_startup(struct snd_pcm_substream *substream,
4162306a36Sopenharmony_ci			     struct snd_soc_dai *dai)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
4462306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
4562306a36Sopenharmony_ci	struct snd_pcm_runtime *runtime = substream->runtime;
4662306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
4762306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[id];
4862306a36Sopenharmony_ci	const struct snd_pcm_hardware *mtk_afe_hardware = afe->mtk_afe_hardware;
4962306a36Sopenharmony_ci	int ret;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	memif->substream = substream;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	snd_pcm_hw_constraint_step(substream->runtime, 0,
5462306a36Sopenharmony_ci				   SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 16);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci	snd_soc_set_runtime_hwparams(substream, mtk_afe_hardware);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci	ret = snd_pcm_hw_constraint_integer(runtime,
5962306a36Sopenharmony_ci					    SNDRV_PCM_HW_PARAM_PERIODS);
6062306a36Sopenharmony_ci	if (ret < 0) {
6162306a36Sopenharmony_ci		dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n");
6262306a36Sopenharmony_ci		return ret;
6362306a36Sopenharmony_ci	}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	/* dynamic allocate irq to memif */
6662306a36Sopenharmony_ci	if (memif->irq_usage < 0) {
6762306a36Sopenharmony_ci		int irq_id = mtk_dynamic_irq_acquire(afe);
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci		if (irq_id != afe->irqs_size) {
7062306a36Sopenharmony_ci			/* link */
7162306a36Sopenharmony_ci			memif->irq_usage = irq_id;
7262306a36Sopenharmony_ci		} else {
7362306a36Sopenharmony_ci			dev_err(afe->dev, "%s() error: no more asys irq\n",
7462306a36Sopenharmony_ci				__func__);
7562306a36Sopenharmony_ci			return -EBUSY;
7662306a36Sopenharmony_ci		}
7762306a36Sopenharmony_ci	}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci	return 0;
8062306a36Sopenharmony_ci}
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_cistatic void mt8186_fe_shutdown(struct snd_pcm_substream *substream,
8362306a36Sopenharmony_ci			       struct snd_soc_dai *dai)
8462306a36Sopenharmony_ci{
8562306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
8662306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
8762306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
8862306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
8962306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[id];
9062306a36Sopenharmony_ci	int irq_id = memif->irq_usage;
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	memif->substream = NULL;
9362306a36Sopenharmony_ci	afe_priv->irq_cnt[id] = 0;
9462306a36Sopenharmony_ci	afe_priv->xrun_assert[id] = 0;
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci	if (!memif->const_irq) {
9762306a36Sopenharmony_ci		mtk_dynamic_irq_release(afe, irq_id);
9862306a36Sopenharmony_ci		memif->irq_usage = -1;
9962306a36Sopenharmony_ci		memif->substream = NULL;
10062306a36Sopenharmony_ci	}
10162306a36Sopenharmony_ci}
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cistatic int mt8186_fe_hw_params(struct snd_pcm_substream *substream,
10462306a36Sopenharmony_ci			       struct snd_pcm_hw_params *params,
10562306a36Sopenharmony_ci			       struct snd_soc_dai *dai)
10662306a36Sopenharmony_ci{
10762306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
10862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
10962306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
11062306a36Sopenharmony_ci	unsigned int channels = params_channels(params);
11162306a36Sopenharmony_ci	unsigned int rate = params_rate(params);
11262306a36Sopenharmony_ci	int ret;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci	ret = mtk_afe_fe_hw_params(substream, params, dai);
11562306a36Sopenharmony_ci	if (ret)
11662306a36Sopenharmony_ci		return ret;
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci	/* channel merge configuration, enable control is in UL5_IN_MUX */
11962306a36Sopenharmony_ci	if (id == MT8186_MEMIF_VUL3) {
12062306a36Sopenharmony_ci		int update_cnt = 8;
12162306a36Sopenharmony_ci		unsigned int val = 0;
12262306a36Sopenharmony_ci		unsigned int mask = 0;
12362306a36Sopenharmony_ci		int fs_mode = mt8186_rate_transform(afe->dev, rate, id);
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci		/* set rate, channel, update cnt, disable sgen */
12662306a36Sopenharmony_ci		val = fs_mode << CM1_FS_SELECT_SFT |
12762306a36Sopenharmony_ci			(channels - 1) << CHANNEL_MERGE0_CHNUM_SFT |
12862306a36Sopenharmony_ci			update_cnt << CHANNEL_MERGE0_UPDATE_CNT_SFT;
12962306a36Sopenharmony_ci		mask = CM1_FS_SELECT_MASK_SFT |
13062306a36Sopenharmony_ci			CHANNEL_MERGE0_CHNUM_MASK_SFT |
13162306a36Sopenharmony_ci			CHANNEL_MERGE0_UPDATE_CNT_MASK_SFT;
13262306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, AFE_CM1_CON, mask, val);
13362306a36Sopenharmony_ci	}
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	return 0;
13662306a36Sopenharmony_ci}
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_cistatic int mt8186_fe_hw_free(struct snd_pcm_substream *substream,
13962306a36Sopenharmony_ci			     struct snd_soc_dai *dai)
14062306a36Sopenharmony_ci{
14162306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
14262306a36Sopenharmony_ci	int ret;
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci	ret = mtk_afe_fe_hw_free(substream, dai);
14562306a36Sopenharmony_ci	if (ret) {
14662306a36Sopenharmony_ci		dev_err(afe->dev, "%s failed\n", __func__);
14762306a36Sopenharmony_ci		return ret;
14862306a36Sopenharmony_ci	}
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci	return 0;
15162306a36Sopenharmony_ci}
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_cistatic int mt8186_fe_trigger(struct snd_pcm_substream *substream, int cmd,
15462306a36Sopenharmony_ci			     struct snd_soc_dai *dai)
15562306a36Sopenharmony_ci{
15662306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
15762306a36Sopenharmony_ci	struct snd_pcm_runtime * const runtime = substream->runtime;
15862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
15962306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
16062306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
16162306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[id];
16262306a36Sopenharmony_ci	int irq_id = memif->irq_usage;
16362306a36Sopenharmony_ci	struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id];
16462306a36Sopenharmony_ci	const struct mtk_base_irq_data *irq_data = irqs->irq_data;
16562306a36Sopenharmony_ci	unsigned int rate = runtime->rate;
16662306a36Sopenharmony_ci	unsigned int counter;
16762306a36Sopenharmony_ci	int fs;
16862306a36Sopenharmony_ci	int ret;
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci	dev_dbg(afe->dev, "%s(), %s cmd %d, irq_id %d\n",
17162306a36Sopenharmony_ci		__func__, memif->data->name, cmd, irq_id);
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci	switch (cmd) {
17462306a36Sopenharmony_ci	case SNDRV_PCM_TRIGGER_START:
17562306a36Sopenharmony_ci	case SNDRV_PCM_TRIGGER_RESUME:
17662306a36Sopenharmony_ci		ret = mtk_memif_set_enable(afe, id);
17762306a36Sopenharmony_ci		if (ret) {
17862306a36Sopenharmony_ci			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
17962306a36Sopenharmony_ci				__func__, id, ret);
18062306a36Sopenharmony_ci			return ret;
18162306a36Sopenharmony_ci		}
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci		/*
18462306a36Sopenharmony_ci		 * for small latency record
18562306a36Sopenharmony_ci		 * ul memif need read some data before irq enable
18662306a36Sopenharmony_ci		 */
18762306a36Sopenharmony_ci		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE &&
18862306a36Sopenharmony_ci		    ((runtime->period_size * 1000) / rate <= 10))
18962306a36Sopenharmony_ci			udelay(300);
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci		/* set irq counter */
19262306a36Sopenharmony_ci		if (afe_priv->irq_cnt[id] > 0)
19362306a36Sopenharmony_ci			counter = afe_priv->irq_cnt[id];
19462306a36Sopenharmony_ci		else
19562306a36Sopenharmony_ci			counter = runtime->period_size;
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
19862306a36Sopenharmony_ci				   irq_data->irq_cnt_maskbit
19962306a36Sopenharmony_ci				   << irq_data->irq_cnt_shift,
20062306a36Sopenharmony_ci				   counter << irq_data->irq_cnt_shift);
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci		/* set irq fs */
20362306a36Sopenharmony_ci		fs = afe->irq_fs(substream, runtime->rate);
20462306a36Sopenharmony_ci		if (fs < 0)
20562306a36Sopenharmony_ci			return -EINVAL;
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,
20862306a36Sopenharmony_ci				   irq_data->irq_fs_maskbit
20962306a36Sopenharmony_ci				   << irq_data->irq_fs_shift,
21062306a36Sopenharmony_ci				   fs << irq_data->irq_fs_shift);
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci		/* enable interrupt */
21362306a36Sopenharmony_ci		if (runtime->stop_threshold != ~(0U))
21462306a36Sopenharmony_ci			regmap_update_bits(afe->regmap,
21562306a36Sopenharmony_ci					   irq_data->irq_en_reg,
21662306a36Sopenharmony_ci					   1 << irq_data->irq_en_shift,
21762306a36Sopenharmony_ci					   1 << irq_data->irq_en_shift);
21862306a36Sopenharmony_ci		return 0;
21962306a36Sopenharmony_ci	case SNDRV_PCM_TRIGGER_STOP:
22062306a36Sopenharmony_ci	case SNDRV_PCM_TRIGGER_SUSPEND:
22162306a36Sopenharmony_ci		if (afe_priv->xrun_assert[id] > 0) {
22262306a36Sopenharmony_ci			if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
22362306a36Sopenharmony_ci				int avail = snd_pcm_capture_avail(runtime);
22462306a36Sopenharmony_ci				/* alsa can trigger stop/start when occur xrun */
22562306a36Sopenharmony_ci				if (avail >= runtime->buffer_size)
22662306a36Sopenharmony_ci					dev_dbg(afe->dev, "%s(), id %d, xrun assert\n",
22762306a36Sopenharmony_ci						__func__, id);
22862306a36Sopenharmony_ci			}
22962306a36Sopenharmony_ci		}
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci		ret = mtk_memif_set_disable(afe, id);
23262306a36Sopenharmony_ci		if (ret)
23362306a36Sopenharmony_ci			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",
23462306a36Sopenharmony_ci				__func__, id, ret);
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci		/* disable interrupt */
23762306a36Sopenharmony_ci		if (runtime->stop_threshold != ~(0U))
23862306a36Sopenharmony_ci			regmap_update_bits(afe->regmap,
23962306a36Sopenharmony_ci					   irq_data->irq_en_reg,
24062306a36Sopenharmony_ci					   1 << irq_data->irq_en_shift,
24162306a36Sopenharmony_ci					   0 << irq_data->irq_en_shift);
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci		/* clear pending IRQ */
24462306a36Sopenharmony_ci		regmap_write(afe->regmap, irq_data->irq_clr_reg,
24562306a36Sopenharmony_ci			     1 << irq_data->irq_clr_shift);
24662306a36Sopenharmony_ci		return ret;
24762306a36Sopenharmony_ci	default:
24862306a36Sopenharmony_ci		return -EINVAL;
24962306a36Sopenharmony_ci	}
25062306a36Sopenharmony_ci}
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_cistatic int mt8186_memif_fs(struct snd_pcm_substream *substream,
25362306a36Sopenharmony_ci			   unsigned int rate)
25462306a36Sopenharmony_ci{
25562306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
25662306a36Sopenharmony_ci	struct snd_soc_component *component =
25762306a36Sopenharmony_ci		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
25862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
25962306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	return mt8186_rate_transform(afe->dev, rate, id);
26262306a36Sopenharmony_ci}
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_cistatic int mt8186_get_dai_fs(struct mtk_base_afe *afe,
26562306a36Sopenharmony_ci			     int dai_id, unsigned int rate)
26662306a36Sopenharmony_ci{
26762306a36Sopenharmony_ci	return mt8186_rate_transform(afe->dev, rate, dai_id);
26862306a36Sopenharmony_ci}
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_cistatic int mt8186_irq_fs(struct snd_pcm_substream *substream, unsigned int rate)
27162306a36Sopenharmony_ci{
27262306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
27362306a36Sopenharmony_ci	struct snd_soc_component *component =
27462306a36Sopenharmony_ci		snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
27562306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
27662306a36Sopenharmony_ci
27762306a36Sopenharmony_ci	return mt8186_general_rate_transform(afe->dev, rate);
27862306a36Sopenharmony_ci}
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_cistatic int mt8186_get_memif_pbuf_size(struct snd_pcm_substream *substream)
28162306a36Sopenharmony_ci{
28262306a36Sopenharmony_ci	struct snd_pcm_runtime *runtime = substream->runtime;
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci	if ((runtime->period_size * 1000) / runtime->rate > 10)
28562306a36Sopenharmony_ci		return MT8186_MEMIF_PBUF_SIZE_256_BYTES;
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci	return MT8186_MEMIF_PBUF_SIZE_32_BYTES;
28862306a36Sopenharmony_ci}
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_cistatic int mt8186_fe_prepare(struct snd_pcm_substream *substream,
29162306a36Sopenharmony_ci			     struct snd_soc_dai *dai)
29262306a36Sopenharmony_ci{
29362306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = substream->private_data;
29462306a36Sopenharmony_ci	struct snd_pcm_runtime * const runtime = substream->runtime;
29562306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
29662306a36Sopenharmony_ci	int id = asoc_rtd_to_cpu(rtd, 0)->id;
29762306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[id];
29862306a36Sopenharmony_ci	int irq_id = memif->irq_usage;
29962306a36Sopenharmony_ci	struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id];
30062306a36Sopenharmony_ci	const struct mtk_base_irq_data *irq_data = irqs->irq_data;
30162306a36Sopenharmony_ci	unsigned int counter = runtime->period_size;
30262306a36Sopenharmony_ci	int fs;
30362306a36Sopenharmony_ci	int ret;
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci	ret = mtk_afe_fe_prepare(substream, dai);
30662306a36Sopenharmony_ci	if (ret)
30762306a36Sopenharmony_ci		return ret;
30862306a36Sopenharmony_ci
30962306a36Sopenharmony_ci	/* set irq counter */
31062306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
31162306a36Sopenharmony_ci			   irq_data->irq_cnt_maskbit
31262306a36Sopenharmony_ci			   << irq_data->irq_cnt_shift,
31362306a36Sopenharmony_ci			   counter << irq_data->irq_cnt_shift);
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci	/* set irq fs */
31662306a36Sopenharmony_ci	fs = afe->irq_fs(substream, runtime->rate);
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci	if (fs < 0)
31962306a36Sopenharmony_ci		return -EINVAL;
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,
32262306a36Sopenharmony_ci			   irq_data->irq_fs_maskbit
32362306a36Sopenharmony_ci			   << irq_data->irq_fs_shift,
32462306a36Sopenharmony_ci			   fs << irq_data->irq_fs_shift);
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci	return 0;
32762306a36Sopenharmony_ci}
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci/* FE DAIs */
33062306a36Sopenharmony_cistatic const struct snd_soc_dai_ops mt8186_memif_dai_ops = {
33162306a36Sopenharmony_ci	.startup	= mt8186_fe_startup,
33262306a36Sopenharmony_ci	.shutdown	= mt8186_fe_shutdown,
33362306a36Sopenharmony_ci	.hw_params	= mt8186_fe_hw_params,
33462306a36Sopenharmony_ci	.hw_free	= mt8186_fe_hw_free,
33562306a36Sopenharmony_ci	.prepare	= mt8186_fe_prepare,
33662306a36Sopenharmony_ci	.trigger	= mt8186_fe_trigger,
33762306a36Sopenharmony_ci};
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\
34062306a36Sopenharmony_ci		       SNDRV_PCM_RATE_88200 |\
34162306a36Sopenharmony_ci		       SNDRV_PCM_RATE_96000 |\
34262306a36Sopenharmony_ci		       SNDRV_PCM_RATE_176400 |\
34362306a36Sopenharmony_ci		       SNDRV_PCM_RATE_192000)
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci#define MTK_PCM_DAI_RATES (SNDRV_PCM_RATE_8000 |\
34662306a36Sopenharmony_ci			   SNDRV_PCM_RATE_16000 |\
34762306a36Sopenharmony_ci			   SNDRV_PCM_RATE_32000 |\
34862306a36Sopenharmony_ci			   SNDRV_PCM_RATE_48000)
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
35162306a36Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S24_LE |\
35262306a36Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S32_LE)
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_cistatic struct snd_soc_dai_driver mt8186_memif_dai_driver[] = {
35562306a36Sopenharmony_ci	/* FE DAIs: memory intefaces to CPU */
35662306a36Sopenharmony_ci	{
35762306a36Sopenharmony_ci		.name = "DL1",
35862306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL1,
35962306a36Sopenharmony_ci		.playback = {
36062306a36Sopenharmony_ci			.stream_name = "DL1",
36162306a36Sopenharmony_ci			.channels_min = 1,
36262306a36Sopenharmony_ci			.channels_max = 2,
36362306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
36462306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
36562306a36Sopenharmony_ci		},
36662306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
36762306a36Sopenharmony_ci	},
36862306a36Sopenharmony_ci	{
36962306a36Sopenharmony_ci		.name = "DL12",
37062306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL12,
37162306a36Sopenharmony_ci		.playback = {
37262306a36Sopenharmony_ci			.stream_name = "DL12",
37362306a36Sopenharmony_ci			.channels_min = 1,
37462306a36Sopenharmony_ci			.channels_max = 4,
37562306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
37662306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
37762306a36Sopenharmony_ci		},
37862306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
37962306a36Sopenharmony_ci	},
38062306a36Sopenharmony_ci	{
38162306a36Sopenharmony_ci		.name = "DL2",
38262306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL2,
38362306a36Sopenharmony_ci		.playback = {
38462306a36Sopenharmony_ci			.stream_name = "DL2",
38562306a36Sopenharmony_ci			.channels_min = 1,
38662306a36Sopenharmony_ci			.channels_max = 2,
38762306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
38862306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
38962306a36Sopenharmony_ci		},
39062306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
39162306a36Sopenharmony_ci	},
39262306a36Sopenharmony_ci	{
39362306a36Sopenharmony_ci		.name = "DL3",
39462306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL3,
39562306a36Sopenharmony_ci		.playback = {
39662306a36Sopenharmony_ci			.stream_name = "DL3",
39762306a36Sopenharmony_ci			.channels_min = 1,
39862306a36Sopenharmony_ci			.channels_max = 2,
39962306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
40062306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
40162306a36Sopenharmony_ci		},
40262306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
40362306a36Sopenharmony_ci	},
40462306a36Sopenharmony_ci	{
40562306a36Sopenharmony_ci		.name = "DL4",
40662306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL4,
40762306a36Sopenharmony_ci		.playback = {
40862306a36Sopenharmony_ci			.stream_name = "DL4",
40962306a36Sopenharmony_ci			.channels_min = 1,
41062306a36Sopenharmony_ci			.channels_max = 2,
41162306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
41262306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
41362306a36Sopenharmony_ci		},
41462306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
41562306a36Sopenharmony_ci	},
41662306a36Sopenharmony_ci	{
41762306a36Sopenharmony_ci		.name = "DL5",
41862306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL5,
41962306a36Sopenharmony_ci		.playback = {
42062306a36Sopenharmony_ci			.stream_name = "DL5",
42162306a36Sopenharmony_ci			.channels_min = 1,
42262306a36Sopenharmony_ci			.channels_max = 2,
42362306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
42462306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
42562306a36Sopenharmony_ci		},
42662306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
42762306a36Sopenharmony_ci	},
42862306a36Sopenharmony_ci	{
42962306a36Sopenharmony_ci		.name = "DL6",
43062306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL6,
43162306a36Sopenharmony_ci		.playback = {
43262306a36Sopenharmony_ci			.stream_name = "DL6",
43362306a36Sopenharmony_ci			.channels_min = 1,
43462306a36Sopenharmony_ci			.channels_max = 2,
43562306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
43662306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
43762306a36Sopenharmony_ci		},
43862306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
43962306a36Sopenharmony_ci	},
44062306a36Sopenharmony_ci	{
44162306a36Sopenharmony_ci		.name = "DL7",
44262306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL7,
44362306a36Sopenharmony_ci		.playback = {
44462306a36Sopenharmony_ci			.stream_name = "DL7",
44562306a36Sopenharmony_ci			.channels_min = 1,
44662306a36Sopenharmony_ci			.channels_max = 2,
44762306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
44862306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
44962306a36Sopenharmony_ci		},
45062306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
45162306a36Sopenharmony_ci	},
45262306a36Sopenharmony_ci	{
45362306a36Sopenharmony_ci		.name = "DL8",
45462306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL8,
45562306a36Sopenharmony_ci		.playback = {
45662306a36Sopenharmony_ci			.stream_name = "DL8",
45762306a36Sopenharmony_ci			.channels_min = 1,
45862306a36Sopenharmony_ci			.channels_max = 2,
45962306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
46062306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
46162306a36Sopenharmony_ci		},
46262306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
46362306a36Sopenharmony_ci	},
46462306a36Sopenharmony_ci	{
46562306a36Sopenharmony_ci		.name = "UL1",
46662306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL12,
46762306a36Sopenharmony_ci		.capture = {
46862306a36Sopenharmony_ci			.stream_name = "UL1",
46962306a36Sopenharmony_ci			.channels_min = 1,
47062306a36Sopenharmony_ci			.channels_max = 4,
47162306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
47262306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
47362306a36Sopenharmony_ci		},
47462306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
47562306a36Sopenharmony_ci	},
47662306a36Sopenharmony_ci	{
47762306a36Sopenharmony_ci		.name = "UL2",
47862306a36Sopenharmony_ci		.id = MT8186_MEMIF_AWB,
47962306a36Sopenharmony_ci		.capture = {
48062306a36Sopenharmony_ci			.stream_name = "UL2",
48162306a36Sopenharmony_ci			.channels_min = 1,
48262306a36Sopenharmony_ci			.channels_max = 2,
48362306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
48462306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
48562306a36Sopenharmony_ci		},
48662306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
48762306a36Sopenharmony_ci	},
48862306a36Sopenharmony_ci	{
48962306a36Sopenharmony_ci		.name = "UL3",
49062306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL2,
49162306a36Sopenharmony_ci		.capture = {
49262306a36Sopenharmony_ci			.stream_name = "UL3",
49362306a36Sopenharmony_ci			.channels_min = 1,
49462306a36Sopenharmony_ci			.channels_max = 2,
49562306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
49662306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
49762306a36Sopenharmony_ci		},
49862306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
49962306a36Sopenharmony_ci	},
50062306a36Sopenharmony_ci	{
50162306a36Sopenharmony_ci		.name = "UL4",
50262306a36Sopenharmony_ci		.id = MT8186_MEMIF_AWB2,
50362306a36Sopenharmony_ci		.capture = {
50462306a36Sopenharmony_ci			.stream_name = "UL4",
50562306a36Sopenharmony_ci			.channels_min = 1,
50662306a36Sopenharmony_ci			.channels_max = 2,
50762306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
50862306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
50962306a36Sopenharmony_ci		},
51062306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
51162306a36Sopenharmony_ci	},
51262306a36Sopenharmony_ci	{
51362306a36Sopenharmony_ci		.name = "UL5",
51462306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL3,
51562306a36Sopenharmony_ci		.capture = {
51662306a36Sopenharmony_ci			.stream_name = "UL5",
51762306a36Sopenharmony_ci			.channels_min = 1,
51862306a36Sopenharmony_ci			.channels_max = 12,
51962306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
52062306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
52162306a36Sopenharmony_ci		},
52262306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
52362306a36Sopenharmony_ci	},
52462306a36Sopenharmony_ci	{
52562306a36Sopenharmony_ci		.name = "UL6",
52662306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL4,
52762306a36Sopenharmony_ci		.capture = {
52862306a36Sopenharmony_ci			.stream_name = "UL6",
52962306a36Sopenharmony_ci			.channels_min = 1,
53062306a36Sopenharmony_ci			.channels_max = 2,
53162306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
53262306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
53362306a36Sopenharmony_ci		},
53462306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
53562306a36Sopenharmony_ci	},
53662306a36Sopenharmony_ci	{
53762306a36Sopenharmony_ci		.name = "UL7",
53862306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL5,
53962306a36Sopenharmony_ci		.capture = {
54062306a36Sopenharmony_ci			.stream_name = "UL7",
54162306a36Sopenharmony_ci			.channels_min = 1,
54262306a36Sopenharmony_ci			.channels_max = 2,
54362306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
54462306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
54562306a36Sopenharmony_ci		},
54662306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
54762306a36Sopenharmony_ci	},
54862306a36Sopenharmony_ci	{
54962306a36Sopenharmony_ci		.name = "UL8",
55062306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL6,
55162306a36Sopenharmony_ci		.capture = {
55262306a36Sopenharmony_ci			.stream_name = "UL8",
55362306a36Sopenharmony_ci			.channels_min = 1,
55462306a36Sopenharmony_ci			.channels_max = 2,
55562306a36Sopenharmony_ci			.rates = MTK_PCM_RATES,
55662306a36Sopenharmony_ci			.formats = MTK_PCM_FORMATS,
55762306a36Sopenharmony_ci		},
55862306a36Sopenharmony_ci		.ops = &mt8186_memif_dai_ops,
55962306a36Sopenharmony_ci	}
56062306a36Sopenharmony_ci};
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_ci/* kcontrol */
56362306a36Sopenharmony_cistatic int mt8186_irq_cnt1_get(struct snd_kcontrol *kcontrol,
56462306a36Sopenharmony_ci			       struct snd_ctl_elem_value *ucontrol)
56562306a36Sopenharmony_ci{
56662306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
56762306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
56862306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
56962306a36Sopenharmony_ci
57062306a36Sopenharmony_ci	ucontrol->value.integer.value[0] =
57162306a36Sopenharmony_ci		afe_priv->irq_cnt[MT8186_PRIMARY_MEMIF];
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_ci	return 0;
57462306a36Sopenharmony_ci}
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_cistatic int mt8186_irq_cnt1_set(struct snd_kcontrol *kcontrol,
57762306a36Sopenharmony_ci			       struct snd_ctl_elem_value *ucontrol)
57862306a36Sopenharmony_ci{
57962306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
58062306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
58162306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
58262306a36Sopenharmony_ci	int memif_num = MT8186_PRIMARY_MEMIF;
58362306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[memif_num];
58462306a36Sopenharmony_ci	int irq_id = memif->irq_usage;
58562306a36Sopenharmony_ci	int irq_cnt = afe_priv->irq_cnt[memif_num];
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ci	dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n",
58862306a36Sopenharmony_ci		__func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]);
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ci	if (irq_cnt == ucontrol->value.integer.value[0])
59162306a36Sopenharmony_ci		return 0;
59262306a36Sopenharmony_ci
59362306a36Sopenharmony_ci	irq_cnt = ucontrol->value.integer.value[0];
59462306a36Sopenharmony_ci	afe_priv->irq_cnt[memif_num] = irq_cnt;
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_ci	if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) {
59762306a36Sopenharmony_ci		struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id];
59862306a36Sopenharmony_ci		const struct mtk_base_irq_data *irq_data = irqs->irq_data;
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
60162306a36Sopenharmony_ci				   irq_data->irq_cnt_maskbit
60262306a36Sopenharmony_ci				   << irq_data->irq_cnt_shift,
60362306a36Sopenharmony_ci				   irq_cnt << irq_data->irq_cnt_shift);
60462306a36Sopenharmony_ci	} else {
60562306a36Sopenharmony_ci		dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n",
60662306a36Sopenharmony_ci			__func__, irq_id);
60762306a36Sopenharmony_ci	}
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_ci	return 1;
61062306a36Sopenharmony_ci}
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_cistatic int mt8186_irq_cnt2_get(struct snd_kcontrol *kcontrol,
61362306a36Sopenharmony_ci			       struct snd_ctl_elem_value *ucontrol)
61462306a36Sopenharmony_ci{
61562306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
61662306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
61762306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
61862306a36Sopenharmony_ci
61962306a36Sopenharmony_ci	ucontrol->value.integer.value[0] =
62062306a36Sopenharmony_ci		afe_priv->irq_cnt[MT8186_RECORD_MEMIF];
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_ci	return 0;
62362306a36Sopenharmony_ci}
62462306a36Sopenharmony_ci
62562306a36Sopenharmony_cistatic int mt8186_irq_cnt2_set(struct snd_kcontrol *kcontrol,
62662306a36Sopenharmony_ci			       struct snd_ctl_elem_value *ucontrol)
62762306a36Sopenharmony_ci{
62862306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
62962306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
63062306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
63162306a36Sopenharmony_ci	int memif_num = MT8186_RECORD_MEMIF;
63262306a36Sopenharmony_ci	struct mtk_base_afe_memif *memif = &afe->memif[memif_num];
63362306a36Sopenharmony_ci	int irq_id = memif->irq_usage;
63462306a36Sopenharmony_ci	int irq_cnt = afe_priv->irq_cnt[memif_num];
63562306a36Sopenharmony_ci
63662306a36Sopenharmony_ci	dev_dbg(afe->dev, "%s(), irq_id %d, irq_cnt = %d, value = %ld\n",
63762306a36Sopenharmony_ci		__func__, irq_id, irq_cnt, ucontrol->value.integer.value[0]);
63862306a36Sopenharmony_ci
63962306a36Sopenharmony_ci	if (irq_cnt == ucontrol->value.integer.value[0])
64062306a36Sopenharmony_ci		return 0;
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ci	irq_cnt = ucontrol->value.integer.value[0];
64362306a36Sopenharmony_ci	afe_priv->irq_cnt[memif_num] = irq_cnt;
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ci	if (!pm_runtime_status_suspended(afe->dev) && irq_id >= 0) {
64662306a36Sopenharmony_ci		struct mtk_base_afe_irq *irqs = &afe->irqs[irq_id];
64762306a36Sopenharmony_ci		const struct mtk_base_irq_data *irq_data = irqs->irq_data;
64862306a36Sopenharmony_ci
64962306a36Sopenharmony_ci		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,
65062306a36Sopenharmony_ci				   irq_data->irq_cnt_maskbit
65162306a36Sopenharmony_ci				   << irq_data->irq_cnt_shift,
65262306a36Sopenharmony_ci				   irq_cnt << irq_data->irq_cnt_shift);
65362306a36Sopenharmony_ci	} else {
65462306a36Sopenharmony_ci		dev_dbg(afe->dev, "%s(), suspended || irq_id %d, not set\n",
65562306a36Sopenharmony_ci			__func__, irq_id);
65662306a36Sopenharmony_ci	}
65762306a36Sopenharmony_ci
65862306a36Sopenharmony_ci	return 1;
65962306a36Sopenharmony_ci}
66062306a36Sopenharmony_ci
66162306a36Sopenharmony_cistatic int mt8186_record_xrun_assert_get(struct snd_kcontrol *kcontrol,
66262306a36Sopenharmony_ci					 struct snd_ctl_elem_value *ucontrol)
66362306a36Sopenharmony_ci{
66462306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
66562306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
66662306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
66762306a36Sopenharmony_ci	int xrun_assert = afe_priv->xrun_assert[MT8186_RECORD_MEMIF];
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci	ucontrol->value.integer.value[0] = xrun_assert;
67062306a36Sopenharmony_ci
67162306a36Sopenharmony_ci	return 0;
67262306a36Sopenharmony_ci}
67362306a36Sopenharmony_ci
67462306a36Sopenharmony_cistatic int mt8186_record_xrun_assert_set(struct snd_kcontrol *kcontrol,
67562306a36Sopenharmony_ci					 struct snd_ctl_elem_value *ucontrol)
67662306a36Sopenharmony_ci{
67762306a36Sopenharmony_ci	struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
67862306a36Sopenharmony_ci	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt);
67962306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
68062306a36Sopenharmony_ci	int xrun_assert = ucontrol->value.integer.value[0];
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_ci	dev_dbg(afe->dev, "%s(), xrun_assert %d\n", __func__, xrun_assert);
68362306a36Sopenharmony_ci
68462306a36Sopenharmony_ci	if (xrun_assert == afe_priv->xrun_assert[MT8186_RECORD_MEMIF])
68562306a36Sopenharmony_ci		return 0;
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_ci	afe_priv->xrun_assert[MT8186_RECORD_MEMIF] = xrun_assert;
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_ci	return 1;
69062306a36Sopenharmony_ci}
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_cistatic const struct snd_kcontrol_new mt8186_pcm_kcontrols[] = {
69362306a36Sopenharmony_ci	SOC_SINGLE_EXT("Audio IRQ1 CNT", SND_SOC_NOPM, 0, 0x3ffff, 0,
69462306a36Sopenharmony_ci		       mt8186_irq_cnt1_get, mt8186_irq_cnt1_set),
69562306a36Sopenharmony_ci	SOC_SINGLE_EXT("Audio IRQ2 CNT", SND_SOC_NOPM, 0, 0x3ffff, 0,
69662306a36Sopenharmony_ci		       mt8186_irq_cnt2_get, mt8186_irq_cnt2_set),
69762306a36Sopenharmony_ci	SOC_SINGLE_EXT("record_xrun_assert", SND_SOC_NOPM, 0, 0x1, 0,
69862306a36Sopenharmony_ci		       mt8186_record_xrun_assert_get,
69962306a36Sopenharmony_ci		       mt8186_record_xrun_assert_set),
70062306a36Sopenharmony_ci};
70162306a36Sopenharmony_ci
70262306a36Sopenharmony_ci/* dma widget & routes*/
70362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch1_mix[] = {
70462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN21,
70562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
70662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN21,
70762306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
70862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3 Switch", AFE_CONN21,
70962306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
71062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH1 Switch", AFE_CONN21_1,
71162306a36Sopenharmony_ci				    I_TDM_IN_CH1, 1, 0),
71262306a36Sopenharmony_ci};
71362306a36Sopenharmony_ci
71462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch2_mix[] = {
71562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN22,
71662306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
71762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN22,
71862306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
71962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3 Switch", AFE_CONN22,
72062306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
72162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4 Switch", AFE_CONN22,
72262306a36Sopenharmony_ci				    I_ADDA_UL_CH4, 1, 0),
72362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH2 Switch", AFE_CONN22_1,
72462306a36Sopenharmony_ci				    I_TDM_IN_CH2, 1, 0),
72562306a36Sopenharmony_ci};
72662306a36Sopenharmony_ci
72762306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch3_mix[] = {
72862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN9,
72962306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
73062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN9,
73162306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
73262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3 Switch", AFE_CONN9,
73362306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
73462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH3 Switch", AFE_CONN9_1,
73562306a36Sopenharmony_ci				    I_TDM_IN_CH3, 1, 0),
73662306a36Sopenharmony_ci};
73762306a36Sopenharmony_ci
73862306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul1_ch4_mix[] = {
73962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN10,
74062306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
74162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN10,
74262306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
74362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3 Switch", AFE_CONN10,
74462306a36Sopenharmony_ci				    I_ADDA_UL_CH3, 1, 0),
74562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH4 Switch", AFE_CONN10,
74662306a36Sopenharmony_ci				    I_ADDA_UL_CH4, 1, 0),
74762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH4 Switch", AFE_CONN10_1,
74862306a36Sopenharmony_ci				    I_TDM_IN_CH4, 1, 0),
74962306a36Sopenharmony_ci};
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul2_ch1_mix[] = {
75262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN5,
75362306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
75462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN5,
75562306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
75662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN5,
75762306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
75862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN5,
75962306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
76062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN5,
76162306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
76262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN5_1,
76362306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
76462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN5_1,
76562306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
76662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1 Switch", AFE_CONN5_1,
76762306a36Sopenharmony_ci				    I_DL6_CH1, 1, 0),
76862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1 Switch", AFE_CONN5,
76962306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
77062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN5,
77162306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
77262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1 Switch", AFE_CONN5_1,
77362306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH1, 1, 0),
77462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH1 Switch", AFE_CONN5_1,
77562306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
77662306a36Sopenharmony_ci};
77762306a36Sopenharmony_ci
77862306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul2_ch2_mix[] = {
77962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN6,
78062306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
78162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN6,
78262306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
78362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN6,
78462306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
78562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN6,
78662306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
78762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN6,
78862306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
78962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN6_1,
79062306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
79162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN6_1,
79262306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
79362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2 Switch", AFE_CONN6_1,
79462306a36Sopenharmony_ci				    I_DL6_CH2, 1, 0),
79562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2 Switch", AFE_CONN6,
79662306a36Sopenharmony_ci				    I_PCM_1_CAP_CH2, 1, 0),
79762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN6,
79862306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
79962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2 Switch", AFE_CONN6_1,
80062306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH2, 1, 0),
80162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("SRC_1_OUT_CH2 Switch", AFE_CONN6_1,
80262306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
80362306a36Sopenharmony_ci};
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul3_ch1_mix[] = {
80662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH1 Switch", AFE_CONN32_1,
80762306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH1, 1, 0),
80862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN32,
80962306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
81062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN32,
81162306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
81262306a36Sopenharmony_ci};
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul3_ch2_mix[] = {
81562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("CONNSYS_I2S_CH2 Switch", AFE_CONN33_1,
81662306a36Sopenharmony_ci				    I_CONNSYS_I2S_CH2, 1, 0),
81762306a36Sopenharmony_ci};
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul4_ch1_mix[] = {
82062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN38,
82162306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
82262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN38,
82362306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
82462306a36Sopenharmony_ci};
82562306a36Sopenharmony_ci
82662306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul4_ch2_mix[] = {
82762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN39,
82862306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
82962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN39,
83062306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
83162306a36Sopenharmony_ci};
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul5_ch1_mix[] = {
83462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN44,
83562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
83662306a36Sopenharmony_ci};
83762306a36Sopenharmony_ci
83862306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul5_ch2_mix[] = {
83962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN45,
84062306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
84162306a36Sopenharmony_ci};
84262306a36Sopenharmony_ci
84362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul6_ch1_mix[] = {
84462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN46,
84562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
84662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN46,
84762306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
84862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN46,
84962306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
85062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1 Switch", AFE_CONN46_1,
85162306a36Sopenharmony_ci				    I_DL6_CH1, 1, 0),
85262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN46,
85362306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
85462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN46,
85562306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
85662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN46_1,
85762306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
85862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1 Switch", AFE_CONN46,
85962306a36Sopenharmony_ci				    I_PCM_1_CAP_CH1, 1, 0),
86062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1 Switch", AFE_CONN46,
86162306a36Sopenharmony_ci				    I_GAIN1_OUT_CH1, 1, 0),
86262306a36Sopenharmony_ci};
86362306a36Sopenharmony_ci
86462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul6_ch2_mix[] = {
86562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN47,
86662306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
86762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN47,
86862306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
86962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN47,
87062306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
87162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2 Switch", AFE_CONN47_1,
87262306a36Sopenharmony_ci				    I_DL6_CH2, 1, 0),
87362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN47,
87462306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
87562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN47,
87662306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
87762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN47_1,
87862306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
87962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2 Switch", AFE_CONN47,
88062306a36Sopenharmony_ci				    I_PCM_1_CAP_CH2, 1, 0),
88162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2 Switch", AFE_CONN47,
88262306a36Sopenharmony_ci				    I_GAIN1_OUT_CH2, 1, 0),
88362306a36Sopenharmony_ci};
88462306a36Sopenharmony_ci
88562306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul7_ch1_mix[] = {
88662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN48,
88762306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
88862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_GAIN2_OUT_CH1 Switch", AFE_CONN48,
88962306a36Sopenharmony_ci				    I_GAIN2_OUT_CH1, 1, 0),
89062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC_2_OUT_CH1 Switch", AFE_CONN48_1,
89162306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
89262306a36Sopenharmony_ci};
89362306a36Sopenharmony_ci
89462306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul7_ch2_mix[] = {
89562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN49,
89662306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
89762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_GAIN2_OUT_CH2 Switch", AFE_CONN49,
89862306a36Sopenharmony_ci				    I_GAIN2_OUT_CH2, 1, 0),
89962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC_2_OUT_CH2 Switch", AFE_CONN49_1,
90062306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
90162306a36Sopenharmony_ci};
90262306a36Sopenharmony_ci
90362306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul8_ch1_mix[] = {
90462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN50,
90562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
90662306a36Sopenharmony_ci};
90762306a36Sopenharmony_ci
90862306a36Sopenharmony_cistatic const struct snd_kcontrol_new memif_ul8_ch2_mix[] = {
90962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN51,
91062306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
91162306a36Sopenharmony_ci};
91262306a36Sopenharmony_ci
91362306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch1_mix[] = {
91462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH1 Switch", AFE_CONN58_1,
91562306a36Sopenharmony_ci				    I_TDM_IN_CH1, 1, 0),
91662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN58,
91762306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
91862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN58,
91962306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
92062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN58,
92162306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
92262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN58,
92362306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
92462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN58,
92562306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
92662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN58,
92762306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
92862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN58,
92962306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
93062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN58,
93162306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
93262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN58_1,
93362306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
93462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN58_1,
93562306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
93662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN58_1,
93762306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
93862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN58_1,
93962306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
94062306a36Sopenharmony_ci};
94162306a36Sopenharmony_ci
94262306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch2_mix[] = {
94362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH2 Switch", AFE_CONN59_1,
94462306a36Sopenharmony_ci				    I_TDM_IN_CH2, 1, 0),
94562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN59,
94662306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
94762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN59,
94862306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
94962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN59,
95062306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
95162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN59,
95262306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
95362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN59,
95462306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
95562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN59,
95662306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
95762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN59,
95862306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
95962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN59,
96062306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
96162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN59_1,
96262306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
96362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN59_1,
96462306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
96562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN59_1,
96662306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
96762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN59_1,
96862306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
96962306a36Sopenharmony_ci};
97062306a36Sopenharmony_ci
97162306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch3_mix[] = {
97262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH3 Switch", AFE_CONN60_1,
97362306a36Sopenharmony_ci				    I_TDM_IN_CH3, 1, 0),
97462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN60,
97562306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
97662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN60,
97762306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
97862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN60,
97962306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
98062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN60,
98162306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
98262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN60,
98362306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
98462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN60,
98562306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
98662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN60,
98762306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
98862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN60,
98962306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
99062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN60_1,
99162306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
99262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN60_1,
99362306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
99462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN60_1,
99562306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
99662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN60_1,
99762306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
99862306a36Sopenharmony_ci};
99962306a36Sopenharmony_ci
100062306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch4_mix[] = {
100162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH4 Switch", AFE_CONN61_1,
100262306a36Sopenharmony_ci				    I_TDM_IN_CH4, 1, 0),
100362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN61,
100462306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
100562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN61,
100662306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
100762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN61,
100862306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
100962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN61,
101062306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
101162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN61,
101262306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
101362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN61,
101462306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
101562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN61,
101662306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
101762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN61,
101862306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
101962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN61_1,
102062306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
102162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN61_1,
102262306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
102362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN61_1,
102462306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
102562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN61_1,
102662306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
102762306a36Sopenharmony_ci};
102862306a36Sopenharmony_ci
102962306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch5_mix[] = {
103062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH5 Switch", AFE_CONN62_1,
103162306a36Sopenharmony_ci				    I_TDM_IN_CH5, 1, 0),
103262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN62,
103362306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
103462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN62,
103562306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
103662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN62,
103762306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
103862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN62,
103962306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
104062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN62,
104162306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
104262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN62,
104362306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
104462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN62,
104562306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
104662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN62,
104762306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
104862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN62_1,
104962306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
105062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN62_1,
105162306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
105262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN62_1,
105362306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
105462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN62_1,
105562306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
105662306a36Sopenharmony_ci};
105762306a36Sopenharmony_ci
105862306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch6_mix[] = {
105962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH6 Switch", AFE_CONN63_1,
106062306a36Sopenharmony_ci				    I_TDM_IN_CH6, 1, 0),
106162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN63,
106262306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
106362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN63,
106462306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
106562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN63,
106662306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
106762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN63,
106862306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
106962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN63,
107062306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
107162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN63,
107262306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
107362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN63,
107462306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
107562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN63,
107662306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
107762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN63_1,
107862306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
107962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN63_1,
108062306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
108162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN63_1,
108262306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
108362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN63_1,
108462306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
108562306a36Sopenharmony_ci};
108662306a36Sopenharmony_ci
108762306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch7_mix[] = {
108862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH7 Switch", AFE_CONN64_1,
108962306a36Sopenharmony_ci				    I_TDM_IN_CH7, 1, 0),
109062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN64,
109162306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
109262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN64,
109362306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
109462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN64,
109562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
109662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN64,
109762306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
109862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1v", AFE_CONN64,
109962306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
110062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN64,
110162306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
110262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN64,
110362306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
110462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN64,
110562306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
110662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN64_1,
110762306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
110862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN64_1,
110962306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
111062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN64_1,
111162306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
111262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN64_1,
111362306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
111462306a36Sopenharmony_ci};
111562306a36Sopenharmony_ci
111662306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch8_mix[] = {
111762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("TDM_IN_CH8 Switch", AFE_CONN65_1,
111862306a36Sopenharmony_ci				    I_TDM_IN_CH8, 1, 0),
111962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN65,
112062306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
112162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN65,
112262306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
112362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN65,
112462306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
112562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN65,
112662306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
112762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN65,
112862306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
112962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN65,
113062306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
113162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN65,
113262306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
113362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN65,
113462306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
113562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN65_1,
113662306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
113762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN65_1,
113862306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
113962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN65_1,
114062306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
114162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN65_1,
114262306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
114362306a36Sopenharmony_ci};
114462306a36Sopenharmony_ci
114562306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch9_mix[] = {
114662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN66,
114762306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
114862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN66,
114962306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
115062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN66,
115162306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
115262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN66,
115362306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
115462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN66,
115562306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
115662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN66,
115762306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
115862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN66,
115962306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
116062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN66,
116162306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
116262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN66_1,
116362306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
116462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN66_1,
116562306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
116662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN66_1,
116762306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
116862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN66_1,
116962306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
117062306a36Sopenharmony_ci};
117162306a36Sopenharmony_ci
117262306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch10_mix[] = {
117362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN67,
117462306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
117562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN67,
117662306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
117762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN67,
117862306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
117962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN67,
118062306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
118162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN67,
118262306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
118362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN67,
118462306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
118562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN67,
118662306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
118762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN67,
118862306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
118962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN67_1,
119062306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
119162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN67_1,
119262306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
119362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN67_1,
119462306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
119562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN67_1,
119662306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
119762306a36Sopenharmony_ci};
119862306a36Sopenharmony_ci
119962306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch11_mix[] = {
120062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH1 Switch", AFE_CONN68,
120162306a36Sopenharmony_ci				    I_I2S0_CH1, 1, 0),
120262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH1 Switch", AFE_CONN68,
120362306a36Sopenharmony_ci				    I_I2S2_CH1, 1, 0),
120462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1 Switch", AFE_CONN68,
120562306a36Sopenharmony_ci				    I_ADDA_UL_CH1, 1, 0),
120662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1 Switch", AFE_CONN68,
120762306a36Sopenharmony_ci				    I_DL1_CH1, 1, 0),
120862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1 Switch", AFE_CONN68,
120962306a36Sopenharmony_ci				    I_DL12_CH1, 1, 0),
121062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH3 Switch", AFE_CONN68,
121162306a36Sopenharmony_ci				    I_DL12_CH3, 1, 0),
121262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1 Switch", AFE_CONN68,
121362306a36Sopenharmony_ci				    I_DL2_CH1, 1, 0),
121462306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1 Switch", AFE_CONN68,
121562306a36Sopenharmony_ci				    I_DL3_CH1, 1, 0),
121662306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1 Switch", AFE_CONN68_1,
121762306a36Sopenharmony_ci				    I_DL4_CH1, 1, 0),
121862306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1 Switch", AFE_CONN68_1,
121962306a36Sopenharmony_ci				    I_DL5_CH1, 1, 0),
122062306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH1 Switch", AFE_CONN68_1,
122162306a36Sopenharmony_ci				    I_SRC_1_OUT_CH1, 1, 0),
122262306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH1 Switch", AFE_CONN68_1,
122362306a36Sopenharmony_ci				    I_SRC_2_OUT_CH1, 1, 0),
122462306a36Sopenharmony_ci};
122562306a36Sopenharmony_ci
122662306a36Sopenharmony_cistatic const struct snd_kcontrol_new hw_cm1_ch12_mix[] = {
122762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S0_CH2 Switch", AFE_CONN69,
122862306a36Sopenharmony_ci				    I_I2S0_CH2, 1, 0),
122962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("I2S2_CH2 Switch", AFE_CONN69,
123062306a36Sopenharmony_ci				    I_I2S2_CH2, 1, 0),
123162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2 Switch", AFE_CONN69,
123262306a36Sopenharmony_ci				    I_ADDA_UL_CH2, 1, 0),
123362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2 Switch", AFE_CONN69,
123462306a36Sopenharmony_ci				    I_DL1_CH2, 1, 0),
123562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2 Switch", AFE_CONN69,
123662306a36Sopenharmony_ci				    I_DL12_CH2, 1, 0),
123762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH4 Switch", AFE_CONN69,
123862306a36Sopenharmony_ci				    I_DL12_CH4, 1, 0),
123962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2 Switch", AFE_CONN69,
124062306a36Sopenharmony_ci				    I_DL2_CH2, 1, 0),
124162306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2 Switch", AFE_CONN69,
124262306a36Sopenharmony_ci				    I_DL3_CH2, 1, 0),
124362306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2 Switch", AFE_CONN69_1,
124462306a36Sopenharmony_ci				    I_DL4_CH2, 1, 0),
124562306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2 Switch", AFE_CONN69_1,
124662306a36Sopenharmony_ci				    I_DL5_CH2, 1, 0),
124762306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC1_OUT_CH2 Switch", AFE_CONN69_1,
124862306a36Sopenharmony_ci				    I_SRC_1_OUT_CH2, 1, 0),
124962306a36Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("HW_SRC2_OUT_CH2 Switch", AFE_CONN69_1,
125062306a36Sopenharmony_ci				    I_SRC_2_OUT_CH2, 1, 0),
125162306a36Sopenharmony_ci};
125262306a36Sopenharmony_ci
125362306a36Sopenharmony_ci/* ADDA UL MUX */
125462306a36Sopenharmony_cienum {
125562306a36Sopenharmony_ci	UL5_IN_MUX_CM1 = 0,
125662306a36Sopenharmony_ci	UL5_IN_MUX_NORMAL,
125762306a36Sopenharmony_ci	UL5_IN_MUX_MASK = 0x1,
125862306a36Sopenharmony_ci};
125962306a36Sopenharmony_ci
126062306a36Sopenharmony_cistatic const char * const ul5_in_mux_map[] = {
126162306a36Sopenharmony_ci	"UL5_IN_FROM_CM1", "UL5_IN_FROM_Normal"
126262306a36Sopenharmony_ci};
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_cistatic int ul5_in_map_value[] = {
126562306a36Sopenharmony_ci	UL5_IN_MUX_CM1,
126662306a36Sopenharmony_ci	UL5_IN_MUX_NORMAL,
126762306a36Sopenharmony_ci};
126862306a36Sopenharmony_ci
126962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul5_in_mux_map_enum,
127062306a36Sopenharmony_ci				  AFE_CM1_CON,
127162306a36Sopenharmony_ci				  VUL3_BYPASS_CM_SFT,
127262306a36Sopenharmony_ci				  VUL3_BYPASS_CM_MASK,
127362306a36Sopenharmony_ci				  ul5_in_mux_map,
127462306a36Sopenharmony_ci				  ul5_in_map_value);
127562306a36Sopenharmony_ci
127662306a36Sopenharmony_cistatic const struct snd_kcontrol_new ul5_in_mux_control =
127762306a36Sopenharmony_ci	SOC_DAPM_ENUM("UL5_IN_MUX Select", ul5_in_mux_map_enum);
127862306a36Sopenharmony_ci
127962306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget mt8186_memif_widgets[] = {
128062306a36Sopenharmony_ci	/* inter-connections */
128162306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH1", SND_SOC_NOPM, 0, 0,
128262306a36Sopenharmony_ci			   memif_ul1_ch1_mix, ARRAY_SIZE(memif_ul1_ch1_mix)),
128362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH2", SND_SOC_NOPM, 0, 0,
128462306a36Sopenharmony_ci			   memif_ul1_ch2_mix, ARRAY_SIZE(memif_ul1_ch2_mix)),
128562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH3", SND_SOC_NOPM, 0, 0,
128662306a36Sopenharmony_ci			   memif_ul1_ch3_mix, ARRAY_SIZE(memif_ul1_ch3_mix)),
128762306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL1_CH4", SND_SOC_NOPM, 0, 0,
128862306a36Sopenharmony_ci			   memif_ul1_ch4_mix, ARRAY_SIZE(memif_ul1_ch4_mix)),
128962306a36Sopenharmony_ci
129062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL2_CH1", SND_SOC_NOPM, 0, 0,
129162306a36Sopenharmony_ci			   memif_ul2_ch1_mix, ARRAY_SIZE(memif_ul2_ch1_mix)),
129262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL2_CH2", SND_SOC_NOPM, 0, 0,
129362306a36Sopenharmony_ci			   memif_ul2_ch2_mix, ARRAY_SIZE(memif_ul2_ch2_mix)),
129462306a36Sopenharmony_ci
129562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL3_CH1", SND_SOC_NOPM, 0, 0,
129662306a36Sopenharmony_ci			   memif_ul3_ch1_mix, ARRAY_SIZE(memif_ul3_ch1_mix)),
129762306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL3_CH2", SND_SOC_NOPM, 0, 0,
129862306a36Sopenharmony_ci			   memif_ul3_ch2_mix, ARRAY_SIZE(memif_ul3_ch2_mix)),
129962306a36Sopenharmony_ci
130062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL4_CH1", SND_SOC_NOPM, 0, 0,
130162306a36Sopenharmony_ci			   memif_ul4_ch1_mix, ARRAY_SIZE(memif_ul4_ch1_mix)),
130262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL4_CH2", SND_SOC_NOPM, 0, 0,
130362306a36Sopenharmony_ci			   memif_ul4_ch2_mix, ARRAY_SIZE(memif_ul4_ch2_mix)),
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL5_CH1", SND_SOC_NOPM, 0, 0,
130662306a36Sopenharmony_ci			   memif_ul5_ch1_mix, ARRAY_SIZE(memif_ul5_ch1_mix)),
130762306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL5_CH2", SND_SOC_NOPM, 0, 0,
130862306a36Sopenharmony_ci			   memif_ul5_ch2_mix, ARRAY_SIZE(memif_ul5_ch2_mix)),
130962306a36Sopenharmony_ci
131062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL6_CH1", SND_SOC_NOPM, 0, 0,
131162306a36Sopenharmony_ci			   memif_ul6_ch1_mix, ARRAY_SIZE(memif_ul6_ch1_mix)),
131262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL6_CH2", SND_SOC_NOPM, 0, 0,
131362306a36Sopenharmony_ci			   memif_ul6_ch2_mix, ARRAY_SIZE(memif_ul6_ch2_mix)),
131462306a36Sopenharmony_ci
131562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL7_CH1", SND_SOC_NOPM, 0, 0,
131662306a36Sopenharmony_ci			   memif_ul7_ch1_mix, ARRAY_SIZE(memif_ul7_ch1_mix)),
131762306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL7_CH2", SND_SOC_NOPM, 0, 0,
131862306a36Sopenharmony_ci			   memif_ul7_ch2_mix, ARRAY_SIZE(memif_ul7_ch2_mix)),
131962306a36Sopenharmony_ci
132062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL8_CH1", SND_SOC_NOPM, 0, 0,
132162306a36Sopenharmony_ci			   memif_ul8_ch1_mix, ARRAY_SIZE(memif_ul8_ch1_mix)),
132262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL8_CH2", SND_SOC_NOPM, 0, 0,
132362306a36Sopenharmony_ci			   memif_ul8_ch2_mix, ARRAY_SIZE(memif_ul8_ch2_mix)),
132462306a36Sopenharmony_ci
132562306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("UL5_2CH", SND_SOC_NOPM, 0, 0, NULL, 0),
132662306a36Sopenharmony_ci
132762306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1", SND_SOC_NOPM, 0, 0, NULL, 0),
132862306a36Sopenharmony_ci
132962306a36Sopenharmony_ci	/* CM1 en*/
133062306a36Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("CM1_EN", 0, AFE_CM1_CON,
133162306a36Sopenharmony_ci			      CHANNEL_MERGE0_EN_SFT, 0, NULL,
133262306a36Sopenharmony_ci			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
133362306a36Sopenharmony_ci
133462306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH1", SND_SOC_NOPM, 0, 0,
133562306a36Sopenharmony_ci			   hw_cm1_ch1_mix, ARRAY_SIZE(hw_cm1_ch1_mix)),
133662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH2", SND_SOC_NOPM, 0, 0,
133762306a36Sopenharmony_ci			   hw_cm1_ch2_mix, ARRAY_SIZE(hw_cm1_ch2_mix)),
133862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH3", SND_SOC_NOPM, 0, 0,
133962306a36Sopenharmony_ci			   hw_cm1_ch3_mix, ARRAY_SIZE(hw_cm1_ch3_mix)),
134062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH4", SND_SOC_NOPM, 0, 0,
134162306a36Sopenharmony_ci			   hw_cm1_ch4_mix, ARRAY_SIZE(hw_cm1_ch4_mix)),
134262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH5", SND_SOC_NOPM, 0, 0,
134362306a36Sopenharmony_ci			   hw_cm1_ch5_mix, ARRAY_SIZE(hw_cm1_ch5_mix)),
134462306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH6", SND_SOC_NOPM, 0, 0,
134562306a36Sopenharmony_ci			   hw_cm1_ch6_mix, ARRAY_SIZE(hw_cm1_ch6_mix)),
134662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH7", SND_SOC_NOPM, 0, 0,
134762306a36Sopenharmony_ci			   hw_cm1_ch7_mix, ARRAY_SIZE(hw_cm1_ch7_mix)),
134862306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH8", SND_SOC_NOPM, 0, 0,
134962306a36Sopenharmony_ci			   hw_cm1_ch8_mix, ARRAY_SIZE(hw_cm1_ch8_mix)),
135062306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH9", SND_SOC_NOPM, 0, 0,
135162306a36Sopenharmony_ci			   hw_cm1_ch9_mix, ARRAY_SIZE(hw_cm1_ch9_mix)),
135262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH10", SND_SOC_NOPM, 0, 0,
135362306a36Sopenharmony_ci			   hw_cm1_ch10_mix, ARRAY_SIZE(hw_cm1_ch10_mix)),
135462306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH11", SND_SOC_NOPM, 0, 0,
135562306a36Sopenharmony_ci			   hw_cm1_ch11_mix, ARRAY_SIZE(hw_cm1_ch11_mix)),
135662306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("HW_CM1_CH12", SND_SOC_NOPM, 0, 0,
135762306a36Sopenharmony_ci			   hw_cm1_ch12_mix, ARRAY_SIZE(hw_cm1_ch12_mix)),
135862306a36Sopenharmony_ci
135962306a36Sopenharmony_ci	SND_SOC_DAPM_MUX("UL5_IN_MUX", SND_SOC_NOPM, 0, 0,
136062306a36Sopenharmony_ci			 &ul5_in_mux_control),
136162306a36Sopenharmony_ci
136262306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("DSP_DL1_VIRT", SND_SOC_NOPM, 0, 0, NULL, 0),
136362306a36Sopenharmony_ci	SND_SOC_DAPM_MIXER("DSP_DL2_VIRT", SND_SOC_NOPM, 0, 0, NULL, 0),
136462306a36Sopenharmony_ci
136562306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL1_VIRTUAL_INPUT"),
136662306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL2_VIRTUAL_INPUT"),
136762306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL3_VIRTUAL_INPUT"),
136862306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL4_VIRTUAL_INPUT"),
136962306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL5_VIRTUAL_INPUT"),
137062306a36Sopenharmony_ci	SND_SOC_DAPM_INPUT("UL6_VIRTUAL_INPUT"),
137162306a36Sopenharmony_ci};
137262306a36Sopenharmony_ci
137362306a36Sopenharmony_cistatic const struct snd_soc_dapm_route mt8186_memif_routes[] = {
137462306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH1"},
137562306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH2"},
137662306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH3"},
137762306a36Sopenharmony_ci	{"UL1", NULL, "UL1_CH4"},
137862306a36Sopenharmony_ci	{"UL1_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
137962306a36Sopenharmony_ci	{"UL1_CH1", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
138062306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
138162306a36Sopenharmony_ci	{"UL1_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
138262306a36Sopenharmony_ci	{"UL1_CH3", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
138362306a36Sopenharmony_ci	{"UL1_CH3", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
138462306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
138562306a36Sopenharmony_ci	{"UL1_CH4", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
138662306a36Sopenharmony_ci	{"UL1_CH1", "TDM_IN_CH1 Switch", "TDM IN"},
138762306a36Sopenharmony_ci	{"UL1_CH2", "TDM_IN_CH2 Switch", "TDM IN"},
138862306a36Sopenharmony_ci	{"UL1_CH3", "TDM_IN_CH3 Switch", "TDM IN"},
138962306a36Sopenharmony_ci	{"UL1_CH4", "TDM_IN_CH4 Switch", "TDM IN"},
139062306a36Sopenharmony_ci
139162306a36Sopenharmony_ci	{"UL2", NULL, "UL2_CH1"},
139262306a36Sopenharmony_ci	{"UL2", NULL, "UL2_CH2"},
139362306a36Sopenharmony_ci
139462306a36Sopenharmony_ci	/* cannot connect FE to FE directly */
139562306a36Sopenharmony_ci	{"UL2_CH1", "DL1_CH1 Switch", "Hostless_UL2 UL"},
139662306a36Sopenharmony_ci	{"UL2_CH2", "DL1_CH2 Switch", "Hostless_UL2 UL"},
139762306a36Sopenharmony_ci	{"UL2_CH1", "DL12_CH1 Switch", "Hostless_UL2 UL"},
139862306a36Sopenharmony_ci	{"UL2_CH2", "DL12_CH2 Switch", "Hostless_UL2 UL"},
139962306a36Sopenharmony_ci	{"UL2_CH1", "DL6_CH1 Switch", "Hostless_UL2 UL"},
140062306a36Sopenharmony_ci	{"UL2_CH2", "DL6_CH2 Switch", "Hostless_UL2 UL"},
140162306a36Sopenharmony_ci	{"UL2_CH1", "DL2_CH1 Switch", "Hostless_UL2 UL"},
140262306a36Sopenharmony_ci	{"UL2_CH2", "DL2_CH2 Switch", "Hostless_UL2 UL"},
140362306a36Sopenharmony_ci	{"UL2_CH1", "DL3_CH1 Switch", "Hostless_UL2 UL"},
140462306a36Sopenharmony_ci	{"UL2_CH2", "DL3_CH2 Switch", "Hostless_UL2 UL"},
140562306a36Sopenharmony_ci	{"UL2_CH1", "DL4_CH1 Switch", "Hostless_UL2 UL"},
140662306a36Sopenharmony_ci	{"UL2_CH2", "DL4_CH2 Switch", "Hostless_UL2 UL"},
140762306a36Sopenharmony_ci	{"UL2_CH1", "DL5_CH1 Switch", "Hostless_UL2 UL"},
140862306a36Sopenharmony_ci	{"UL2_CH2", "DL5_CH2 Switch", "Hostless_UL2 UL"},
140962306a36Sopenharmony_ci
141062306a36Sopenharmony_ci	{"Hostless_UL2 UL", NULL, "UL2_VIRTUAL_INPUT"},
141162306a36Sopenharmony_ci
141262306a36Sopenharmony_ci	{"UL2_CH1", "I2S0_CH1 Switch", "I2S0"},
141362306a36Sopenharmony_ci	{"UL2_CH2", "I2S0_CH2 Switch", "I2S0"},
141462306a36Sopenharmony_ci	{"UL2_CH1", "I2S2_CH1 Switch", "I2S2"},
141562306a36Sopenharmony_ci	{"UL2_CH2", "I2S2_CH2 Switch", "I2S2"},
141662306a36Sopenharmony_ci
141762306a36Sopenharmony_ci	{"UL2_CH1", "PCM_1_CAP_CH1 Switch", "PCM 1 Capture"},
141862306a36Sopenharmony_ci	{"UL2_CH2", "PCM_1_CAP_CH2 Switch", "PCM 1 Capture"},
141962306a36Sopenharmony_ci
142062306a36Sopenharmony_ci	{"UL2_CH1", "CONNSYS_I2S_CH1 Switch", "Connsys I2S"},
142162306a36Sopenharmony_ci	{"UL2_CH2", "CONNSYS_I2S_CH2 Switch", "Connsys I2S"},
142262306a36Sopenharmony_ci
142362306a36Sopenharmony_ci	{"UL2_CH1", "SRC_1_OUT_CH1 Switch", "HW_SRC_1_Out"},
142462306a36Sopenharmony_ci	{"UL2_CH2", "SRC_1_OUT_CH2 Switch", "HW_SRC_1_Out"},
142562306a36Sopenharmony_ci
142662306a36Sopenharmony_ci	{"UL3", NULL, "UL3_CH1"},
142762306a36Sopenharmony_ci	{"UL3", NULL, "UL3_CH2"},
142862306a36Sopenharmony_ci	{"UL3_CH1", "CONNSYS_I2S_CH1 Switch", "Connsys I2S"},
142962306a36Sopenharmony_ci	{"UL3_CH2", "CONNSYS_I2S_CH2 Switch", "Connsys I2S"},
143062306a36Sopenharmony_ci
143162306a36Sopenharmony_ci	{"UL4", NULL, "UL4_CH1"},
143262306a36Sopenharmony_ci	{"UL4", NULL, "UL4_CH2"},
143362306a36Sopenharmony_ci	{"UL4_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
143462306a36Sopenharmony_ci	{"UL4_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
143562306a36Sopenharmony_ci	{"UL4_CH1", "I2S0_CH1 Switch", "I2S0"},
143662306a36Sopenharmony_ci	{"UL4_CH2", "I2S0_CH2 Switch", "I2S0"},
143762306a36Sopenharmony_ci
143862306a36Sopenharmony_ci	{"UL5", NULL, "UL5_IN_MUX"},
143962306a36Sopenharmony_ci	{"UL5_IN_MUX", "UL5_IN_FROM_Normal", "UL5_2CH"},
144062306a36Sopenharmony_ci	{"UL5_IN_MUX", "UL5_IN_FROM_CM1", "HW_CM1"},
144162306a36Sopenharmony_ci	{"UL5_2CH", NULL, "UL5_CH1"},
144262306a36Sopenharmony_ci	{"UL5_2CH", NULL, "UL5_CH2"},
144362306a36Sopenharmony_ci	{"UL5_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
144462306a36Sopenharmony_ci	{"UL5_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
144562306a36Sopenharmony_ci	{"HW_CM1", NULL, "CM1_EN"},
144662306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH1"},
144762306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH2"},
144862306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH3"},
144962306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH4"},
145062306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH5"},
145162306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH6"},
145262306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH7"},
145362306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH8"},
145462306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH9"},
145562306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH10"},
145662306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH11"},
145762306a36Sopenharmony_ci	{"HW_CM1", NULL, "HW_CM1_CH12"},
145862306a36Sopenharmony_ci	{"HW_CM1_CH1", "TDM_IN_CH1 Switch", "TDM IN"},
145962306a36Sopenharmony_ci	{"HW_CM1_CH2", "TDM_IN_CH2 Switch", "TDM IN"},
146062306a36Sopenharmony_ci	{"HW_CM1_CH3", "TDM_IN_CH3 Switch", "TDM IN"},
146162306a36Sopenharmony_ci	{"HW_CM1_CH4", "TDM_IN_CH4 Switch", "TDM IN"},
146262306a36Sopenharmony_ci	{"HW_CM1_CH5", "TDM_IN_CH5 Switch", "TDM IN"},
146362306a36Sopenharmony_ci	{"HW_CM1_CH6", "TDM_IN_CH6 Switch", "TDM IN"},
146462306a36Sopenharmony_ci	{"HW_CM1_CH7", "TDM_IN_CH7 Switch", "TDM IN"},
146562306a36Sopenharmony_ci	{"HW_CM1_CH8", "TDM_IN_CH8 Switch", "TDM IN"},
146662306a36Sopenharmony_ci	{"HW_CM1_CH9", "DL1_CH1 Switch", "Hostless_UL5 UL"},
146762306a36Sopenharmony_ci	{"HW_CM1_CH10", "DL1_CH2 Switch", "Hostless_UL5 UL"},
146862306a36Sopenharmony_ci
146962306a36Sopenharmony_ci	{"HW_CM1_CH3", "DL1_CH1 Switch", "Hostless_UL5 UL"},
147062306a36Sopenharmony_ci	{"HW_CM1_CH4", "DL1_CH2 Switch", "Hostless_UL5 UL"},
147162306a36Sopenharmony_ci
147262306a36Sopenharmony_ci	{"HW_CM1_CH3", "DL3_CH1 Switch", "Hostless_UL5 UL"},
147362306a36Sopenharmony_ci	{"HW_CM1_CH4", "DL3_CH2 Switch", "Hostless_UL5 UL"},
147462306a36Sopenharmony_ci
147562306a36Sopenharmony_ci	{"HW_CM1_CH5", "HW_SRC1_OUT_CH1 Switch", "HW_SRC_1_Out"},
147662306a36Sopenharmony_ci	{"HW_CM1_CH6", "HW_SRC1_OUT_CH2 Switch", "HW_SRC_1_Out"},
147762306a36Sopenharmony_ci
147862306a36Sopenharmony_ci	{"HW_CM1_CH9", "DL12_CH1 Switch", "Hostless_UL5 UL"},
147962306a36Sopenharmony_ci	{"HW_CM1_CH10", "DL12_CH2 Switch", "Hostless_UL5 UL"},
148062306a36Sopenharmony_ci	{"HW_CM1_CH11", "DL12_CH3 Switch", "Hostless_UL5 UL"},
148162306a36Sopenharmony_ci	{"HW_CM1_CH12", "DL12_CH4 Switch", "Hostless_UL5 UL"},
148262306a36Sopenharmony_ci
148362306a36Sopenharmony_ci	{"Hostless_UL5 UL", NULL, "UL5_VIRTUAL_INPUT"},
148462306a36Sopenharmony_ci
148562306a36Sopenharmony_ci	{"UL6", NULL, "UL6_CH1"},
148662306a36Sopenharmony_ci	{"UL6", NULL, "UL6_CH2"},
148762306a36Sopenharmony_ci
148862306a36Sopenharmony_ci	{"UL6_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
148962306a36Sopenharmony_ci	{"UL6_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
149062306a36Sopenharmony_ci	{"UL6_CH1", "DL1_CH1 Switch", "Hostless_UL6 UL"},
149162306a36Sopenharmony_ci	{"UL6_CH2", "DL1_CH2 Switch", "Hostless_UL6 UL"},
149262306a36Sopenharmony_ci	{"UL6_CH1", "DL2_CH1 Switch", "Hostless_UL6 UL"},
149362306a36Sopenharmony_ci	{"UL6_CH2", "DL2_CH2 Switch", "Hostless_UL6 UL"},
149462306a36Sopenharmony_ci	{"UL6_CH1", "DL12_CH1 Switch", "Hostless_UL6 UL"},
149562306a36Sopenharmony_ci	{"UL6_CH2", "DL12_CH2 Switch", "Hostless_UL6 UL"},
149662306a36Sopenharmony_ci	{"UL6_CH1", "DL6_CH1 Switch", "Hostless_UL6 UL"},
149762306a36Sopenharmony_ci	{"UL6_CH2", "DL6_CH2 Switch", "Hostless_UL6 UL"},
149862306a36Sopenharmony_ci	{"UL6_CH1", "DL3_CH1 Switch", "Hostless_UL6 UL"},
149962306a36Sopenharmony_ci	{"UL6_CH2", "DL3_CH2 Switch", "Hostless_UL6 UL"},
150062306a36Sopenharmony_ci	{"UL6_CH1", "DL4_CH1 Switch", "Hostless_UL6 UL"},
150162306a36Sopenharmony_ci	{"UL6_CH2", "DL4_CH2 Switch", "Hostless_UL6 UL"},
150262306a36Sopenharmony_ci	{"Hostless_UL6 UL", NULL, "UL6_VIRTUAL_INPUT"},
150362306a36Sopenharmony_ci	{"UL6_CH1", "PCM_1_CAP_CH1 Switch", "PCM 1 Capture"},
150462306a36Sopenharmony_ci	{"UL6_CH2", "PCM_1_CAP_CH2 Switch", "PCM 1 Capture"},
150562306a36Sopenharmony_ci	{"UL6_CH1", "GAIN1_OUT_CH1 Switch", "HW Gain 1 Out"},
150662306a36Sopenharmony_ci	{"UL6_CH2", "GAIN1_OUT_CH2 Switch", "HW Gain 1 Out"},
150762306a36Sopenharmony_ci
150862306a36Sopenharmony_ci	{"UL7", NULL, "UL7_CH1"},
150962306a36Sopenharmony_ci	{"UL7", NULL, "UL7_CH2"},
151062306a36Sopenharmony_ci	{"UL7_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
151162306a36Sopenharmony_ci	{"UL7_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
151262306a36Sopenharmony_ci	{"UL7_CH1", "HW_GAIN2_OUT_CH1 Switch", "HW Gain 2 Out"},
151362306a36Sopenharmony_ci	{"UL7_CH2", "HW_GAIN2_OUT_CH2 Switch", "HW Gain 2 Out"},
151462306a36Sopenharmony_ci	{"UL7_CH1", "HW_SRC_2_OUT_CH1 Switch", "HW_SRC_2_Out"},
151562306a36Sopenharmony_ci	{"UL7_CH2", "HW_SRC_2_OUT_CH2 Switch", "HW_SRC_2_Out"},
151662306a36Sopenharmony_ci
151762306a36Sopenharmony_ci	{"UL8", NULL, "UL8_CH1"},
151862306a36Sopenharmony_ci	{"UL8", NULL, "UL8_CH2"},
151962306a36Sopenharmony_ci	{"UL8_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
152062306a36Sopenharmony_ci	{"UL8_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
152162306a36Sopenharmony_ci
152262306a36Sopenharmony_ci	{"HW_GAIN2_IN_CH1", "ADDA_UL_CH1 Switch", "ADDA_UL_Mux"},
152362306a36Sopenharmony_ci	{"HW_GAIN2_IN_CH2", "ADDA_UL_CH2 Switch", "ADDA_UL_Mux"},
152462306a36Sopenharmony_ci};
152562306a36Sopenharmony_ci
152662306a36Sopenharmony_cistatic const struct mtk_base_memif_data memif_data[MT8186_MEMIF_NUM] = {
152762306a36Sopenharmony_ci	[MT8186_MEMIF_DL1] = {
152862306a36Sopenharmony_ci		.name = "DL1",
152962306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL1,
153062306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL1_BASE,
153162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL1_CUR,
153262306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL1_END,
153362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL1_BASE_MSB,
153462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL1_CUR_MSB,
153562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL1_END_MSB,
153662306a36Sopenharmony_ci		.fs_reg = AFE_DL1_CON0,
153762306a36Sopenharmony_ci		.fs_shift = DL1_MODE_SFT,
153862306a36Sopenharmony_ci		.fs_maskbit = DL1_MODE_MASK,
153962306a36Sopenharmony_ci		.mono_reg = AFE_DL1_CON0,
154062306a36Sopenharmony_ci		.mono_shift = DL1_MONO_SFT,
154162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
154262306a36Sopenharmony_ci		.enable_shift = DL1_ON_SFT,
154362306a36Sopenharmony_ci		.hd_reg = AFE_DL1_CON0,
154462306a36Sopenharmony_ci		.hd_shift = DL1_HD_MODE_SFT,
154562306a36Sopenharmony_ci		.hd_align_reg = AFE_DL1_CON0,
154662306a36Sopenharmony_ci		.hd_align_mshift = DL1_HALIGN_SFT,
154762306a36Sopenharmony_ci		.agent_disable_reg = -1,
154862306a36Sopenharmony_ci		.agent_disable_shift = -1,
154962306a36Sopenharmony_ci		.msb_reg = -1,
155062306a36Sopenharmony_ci		.msb_shift = -1,
155162306a36Sopenharmony_ci		.pbuf_reg = AFE_DL1_CON0,
155262306a36Sopenharmony_ci		.pbuf_mask = DL1_PBUF_SIZE_MASK,
155362306a36Sopenharmony_ci		.pbuf_shift = DL1_PBUF_SIZE_SFT,
155462306a36Sopenharmony_ci		.minlen_reg = AFE_DL1_CON0,
155562306a36Sopenharmony_ci		.minlen_mask = DL1_MINLEN_MASK,
155662306a36Sopenharmony_ci		.minlen_shift = DL1_MINLEN_SFT,
155762306a36Sopenharmony_ci	},
155862306a36Sopenharmony_ci	[MT8186_MEMIF_DL12] = {
155962306a36Sopenharmony_ci		.name = "DL12",
156062306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL12,
156162306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL12_BASE,
156262306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL12_CUR,
156362306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL12_END,
156462306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL12_BASE_MSB,
156562306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL12_CUR_MSB,
156662306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL12_END_MSB,
156762306a36Sopenharmony_ci		.fs_reg = AFE_DL12_CON0,
156862306a36Sopenharmony_ci		.fs_shift = DL12_MODE_SFT,
156962306a36Sopenharmony_ci		.fs_maskbit = DL12_MODE_MASK,
157062306a36Sopenharmony_ci		.mono_reg = AFE_DL12_CON0,
157162306a36Sopenharmony_ci		.mono_shift = DL12_MONO_SFT,
157262306a36Sopenharmony_ci		.quad_ch_reg = AFE_DL12_CON0,
157362306a36Sopenharmony_ci		.quad_ch_mask = DL12_4CH_EN_MASK,
157462306a36Sopenharmony_ci		.quad_ch_shift = DL12_4CH_EN_SFT,
157562306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
157662306a36Sopenharmony_ci		.enable_shift = DL12_ON_SFT,
157762306a36Sopenharmony_ci		.hd_reg = AFE_DL12_CON0,
157862306a36Sopenharmony_ci		.hd_shift = DL12_HD_MODE_SFT,
157962306a36Sopenharmony_ci		.hd_align_reg = AFE_DL12_CON0,
158062306a36Sopenharmony_ci		.hd_align_mshift = DL12_HALIGN_SFT,
158162306a36Sopenharmony_ci		.agent_disable_reg = -1,
158262306a36Sopenharmony_ci		.agent_disable_shift = -1,
158362306a36Sopenharmony_ci		.msb_reg = -1,
158462306a36Sopenharmony_ci		.msb_shift = -1,
158562306a36Sopenharmony_ci		.pbuf_reg = AFE_DL12_CON0,
158662306a36Sopenharmony_ci		.pbuf_mask = DL12_PBUF_SIZE_MASK,
158762306a36Sopenharmony_ci		.pbuf_shift = DL12_PBUF_SIZE_SFT,
158862306a36Sopenharmony_ci		.minlen_reg = AFE_DL12_CON0,
158962306a36Sopenharmony_ci		.minlen_mask = DL12_MINLEN_MASK,
159062306a36Sopenharmony_ci		.minlen_shift = DL12_MINLEN_SFT,
159162306a36Sopenharmony_ci	},
159262306a36Sopenharmony_ci	[MT8186_MEMIF_DL2] = {
159362306a36Sopenharmony_ci		.name = "DL2",
159462306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL2,
159562306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL2_BASE,
159662306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL2_CUR,
159762306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL2_END,
159862306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL2_BASE_MSB,
159962306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL2_CUR_MSB,
160062306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL2_END_MSB,
160162306a36Sopenharmony_ci		.fs_reg = AFE_DL2_CON0,
160262306a36Sopenharmony_ci		.fs_shift = DL2_MODE_SFT,
160362306a36Sopenharmony_ci		.fs_maskbit = DL2_MODE_MASK,
160462306a36Sopenharmony_ci		.mono_reg = AFE_DL2_CON0,
160562306a36Sopenharmony_ci		.mono_shift = DL2_MONO_SFT,
160662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
160762306a36Sopenharmony_ci		.enable_shift = DL2_ON_SFT,
160862306a36Sopenharmony_ci		.hd_reg = AFE_DL2_CON0,
160962306a36Sopenharmony_ci		.hd_shift = DL2_HD_MODE_SFT,
161062306a36Sopenharmony_ci		.hd_align_reg = AFE_DL2_CON0,
161162306a36Sopenharmony_ci		.hd_align_mshift = DL2_HALIGN_SFT,
161262306a36Sopenharmony_ci		.agent_disable_reg = -1,
161362306a36Sopenharmony_ci		.agent_disable_shift = -1,
161462306a36Sopenharmony_ci		.msb_reg = -1,
161562306a36Sopenharmony_ci		.msb_shift = -1,
161662306a36Sopenharmony_ci		.pbuf_reg = AFE_DL2_CON0,
161762306a36Sopenharmony_ci		.pbuf_mask = DL2_PBUF_SIZE_MASK,
161862306a36Sopenharmony_ci		.pbuf_shift = DL2_PBUF_SIZE_SFT,
161962306a36Sopenharmony_ci		.minlen_reg = AFE_DL2_CON0,
162062306a36Sopenharmony_ci		.minlen_mask = DL2_MINLEN_MASK,
162162306a36Sopenharmony_ci		.minlen_shift = DL2_MINLEN_SFT,
162262306a36Sopenharmony_ci	},
162362306a36Sopenharmony_ci	[MT8186_MEMIF_DL3] = {
162462306a36Sopenharmony_ci		.name = "DL3",
162562306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL3,
162662306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL3_BASE,
162762306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL3_CUR,
162862306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL3_END,
162962306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL3_BASE_MSB,
163062306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL3_CUR_MSB,
163162306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL3_END_MSB,
163262306a36Sopenharmony_ci		.fs_reg = AFE_DL3_CON0,
163362306a36Sopenharmony_ci		.fs_shift = DL3_MODE_SFT,
163462306a36Sopenharmony_ci		.fs_maskbit = DL3_MODE_MASK,
163562306a36Sopenharmony_ci		.mono_reg = AFE_DL3_CON0,
163662306a36Sopenharmony_ci		.mono_shift = DL3_MONO_SFT,
163762306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
163862306a36Sopenharmony_ci		.enable_shift = DL3_ON_SFT,
163962306a36Sopenharmony_ci		.hd_reg = AFE_DL3_CON0,
164062306a36Sopenharmony_ci		.hd_shift = DL3_HD_MODE_SFT,
164162306a36Sopenharmony_ci		.hd_align_reg = AFE_DL3_CON0,
164262306a36Sopenharmony_ci		.hd_align_mshift = DL3_HALIGN_SFT,
164362306a36Sopenharmony_ci		.agent_disable_reg = -1,
164462306a36Sopenharmony_ci		.agent_disable_shift = -1,
164562306a36Sopenharmony_ci		.msb_reg = -1,
164662306a36Sopenharmony_ci		.msb_shift = -1,
164762306a36Sopenharmony_ci		.pbuf_reg = AFE_DL3_CON0,
164862306a36Sopenharmony_ci		.pbuf_mask = DL3_PBUF_SIZE_MASK,
164962306a36Sopenharmony_ci		.pbuf_shift = DL3_PBUF_SIZE_SFT,
165062306a36Sopenharmony_ci		.minlen_reg = AFE_DL3_CON0,
165162306a36Sopenharmony_ci		.minlen_mask = DL3_MINLEN_MASK,
165262306a36Sopenharmony_ci		.minlen_shift = DL3_MINLEN_SFT,
165362306a36Sopenharmony_ci	},
165462306a36Sopenharmony_ci	[MT8186_MEMIF_DL4] = {
165562306a36Sopenharmony_ci		.name = "DL4",
165662306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL4,
165762306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL4_BASE,
165862306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL4_CUR,
165962306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL4_END,
166062306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL4_BASE_MSB,
166162306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL4_CUR_MSB,
166262306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL4_END_MSB,
166362306a36Sopenharmony_ci		.fs_reg = AFE_DL4_CON0,
166462306a36Sopenharmony_ci		.fs_shift = DL4_MODE_SFT,
166562306a36Sopenharmony_ci		.fs_maskbit = DL4_MODE_MASK,
166662306a36Sopenharmony_ci		.mono_reg = AFE_DL4_CON0,
166762306a36Sopenharmony_ci		.mono_shift = DL4_MONO_SFT,
166862306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
166962306a36Sopenharmony_ci		.enable_shift = DL4_ON_SFT,
167062306a36Sopenharmony_ci		.hd_reg = AFE_DL4_CON0,
167162306a36Sopenharmony_ci		.hd_shift = DL4_HD_MODE_SFT,
167262306a36Sopenharmony_ci		.hd_align_reg = AFE_DL4_CON0,
167362306a36Sopenharmony_ci		.hd_align_mshift = DL4_HALIGN_SFT,
167462306a36Sopenharmony_ci		.agent_disable_reg = -1,
167562306a36Sopenharmony_ci		.agent_disable_shift = -1,
167662306a36Sopenharmony_ci		.msb_reg = -1,
167762306a36Sopenharmony_ci		.msb_shift = -1,
167862306a36Sopenharmony_ci		.pbuf_reg = AFE_DL4_CON0,
167962306a36Sopenharmony_ci		.pbuf_mask = DL4_PBUF_SIZE_MASK,
168062306a36Sopenharmony_ci		.pbuf_shift = DL4_PBUF_SIZE_SFT,
168162306a36Sopenharmony_ci		.minlen_reg = AFE_DL4_CON0,
168262306a36Sopenharmony_ci		.minlen_mask = DL4_MINLEN_MASK,
168362306a36Sopenharmony_ci		.minlen_shift = DL4_MINLEN_SFT,
168462306a36Sopenharmony_ci	},
168562306a36Sopenharmony_ci	[MT8186_MEMIF_DL5] = {
168662306a36Sopenharmony_ci		.name = "DL5",
168762306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL5,
168862306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL5_BASE,
168962306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL5_CUR,
169062306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL5_END,
169162306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL5_BASE_MSB,
169262306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL5_CUR_MSB,
169362306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL5_END_MSB,
169462306a36Sopenharmony_ci		.fs_reg = AFE_DL5_CON0,
169562306a36Sopenharmony_ci		.fs_shift = DL5_MODE_SFT,
169662306a36Sopenharmony_ci		.fs_maskbit = DL5_MODE_MASK,
169762306a36Sopenharmony_ci		.mono_reg = AFE_DL5_CON0,
169862306a36Sopenharmony_ci		.mono_shift = DL5_MONO_SFT,
169962306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
170062306a36Sopenharmony_ci		.enable_shift = DL5_ON_SFT,
170162306a36Sopenharmony_ci		.hd_reg = AFE_DL5_CON0,
170262306a36Sopenharmony_ci		.hd_shift = DL5_HD_MODE_SFT,
170362306a36Sopenharmony_ci		.hd_align_reg = AFE_DL5_CON0,
170462306a36Sopenharmony_ci		.hd_align_mshift = DL5_HALIGN_SFT,
170562306a36Sopenharmony_ci		.agent_disable_reg = -1,
170662306a36Sopenharmony_ci		.agent_disable_shift = -1,
170762306a36Sopenharmony_ci		.msb_reg = -1,
170862306a36Sopenharmony_ci		.msb_shift = -1,
170962306a36Sopenharmony_ci		.pbuf_reg = AFE_DL5_CON0,
171062306a36Sopenharmony_ci		.pbuf_mask = DL5_PBUF_SIZE_MASK,
171162306a36Sopenharmony_ci		.pbuf_shift = DL5_PBUF_SIZE_SFT,
171262306a36Sopenharmony_ci		.minlen_reg = AFE_DL5_CON0,
171362306a36Sopenharmony_ci		.minlen_mask = DL5_MINLEN_MASK,
171462306a36Sopenharmony_ci		.minlen_shift = DL5_MINLEN_SFT,
171562306a36Sopenharmony_ci	},
171662306a36Sopenharmony_ci	[MT8186_MEMIF_DL6] = {
171762306a36Sopenharmony_ci		.name = "DL6",
171862306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL6,
171962306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL6_BASE,
172062306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL6_CUR,
172162306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL6_END,
172262306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL6_BASE_MSB,
172362306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL6_CUR_MSB,
172462306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL6_END_MSB,
172562306a36Sopenharmony_ci		.fs_reg = AFE_DL6_CON0,
172662306a36Sopenharmony_ci		.fs_shift = DL6_MODE_SFT,
172762306a36Sopenharmony_ci		.fs_maskbit = DL6_MODE_MASK,
172862306a36Sopenharmony_ci		.mono_reg = AFE_DL6_CON0,
172962306a36Sopenharmony_ci		.mono_shift = DL6_MONO_SFT,
173062306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
173162306a36Sopenharmony_ci		.enable_shift = DL6_ON_SFT,
173262306a36Sopenharmony_ci		.hd_reg = AFE_DL6_CON0,
173362306a36Sopenharmony_ci		.hd_shift = DL6_HD_MODE_SFT,
173462306a36Sopenharmony_ci		.hd_align_reg = AFE_DL6_CON0,
173562306a36Sopenharmony_ci		.hd_align_mshift = DL6_HALIGN_SFT,
173662306a36Sopenharmony_ci		.agent_disable_reg = -1,
173762306a36Sopenharmony_ci		.agent_disable_shift = -1,
173862306a36Sopenharmony_ci		.msb_reg = -1,
173962306a36Sopenharmony_ci		.msb_shift = -1,
174062306a36Sopenharmony_ci		.pbuf_reg = AFE_DL6_CON0,
174162306a36Sopenharmony_ci		.pbuf_mask = DL6_PBUF_SIZE_MASK,
174262306a36Sopenharmony_ci		.pbuf_shift = DL6_PBUF_SIZE_SFT,
174362306a36Sopenharmony_ci		.minlen_reg = AFE_DL6_CON0,
174462306a36Sopenharmony_ci		.minlen_mask = DL6_MINLEN_MASK,
174562306a36Sopenharmony_ci		.minlen_shift = DL6_MINLEN_SFT,
174662306a36Sopenharmony_ci	},
174762306a36Sopenharmony_ci	[MT8186_MEMIF_DL7] = {
174862306a36Sopenharmony_ci		.name = "DL7",
174962306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL7,
175062306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL7_BASE,
175162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL7_CUR,
175262306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL7_END,
175362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL7_BASE_MSB,
175462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL7_CUR_MSB,
175562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL7_END_MSB,
175662306a36Sopenharmony_ci		.fs_reg = AFE_DL7_CON0,
175762306a36Sopenharmony_ci		.fs_shift = DL7_MODE_SFT,
175862306a36Sopenharmony_ci		.fs_maskbit = DL7_MODE_MASK,
175962306a36Sopenharmony_ci		.mono_reg = AFE_DL7_CON0,
176062306a36Sopenharmony_ci		.mono_shift = DL7_MONO_SFT,
176162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
176262306a36Sopenharmony_ci		.enable_shift = DL7_ON_SFT,
176362306a36Sopenharmony_ci		.hd_reg = AFE_DL7_CON0,
176462306a36Sopenharmony_ci		.hd_shift = DL7_HD_MODE_SFT,
176562306a36Sopenharmony_ci		.hd_align_reg = AFE_DL7_CON0,
176662306a36Sopenharmony_ci		.hd_align_mshift = DL7_HALIGN_SFT,
176762306a36Sopenharmony_ci		.agent_disable_reg = -1,
176862306a36Sopenharmony_ci		.agent_disable_shift = -1,
176962306a36Sopenharmony_ci		.msb_reg = -1,
177062306a36Sopenharmony_ci		.msb_shift = -1,
177162306a36Sopenharmony_ci		.pbuf_reg = AFE_DL7_CON0,
177262306a36Sopenharmony_ci		.pbuf_mask = DL7_PBUF_SIZE_MASK,
177362306a36Sopenharmony_ci		.pbuf_shift = DL7_PBUF_SIZE_SFT,
177462306a36Sopenharmony_ci		.minlen_reg = AFE_DL7_CON0,
177562306a36Sopenharmony_ci		.minlen_mask = DL7_MINLEN_MASK,
177662306a36Sopenharmony_ci		.minlen_shift = DL7_MINLEN_SFT,
177762306a36Sopenharmony_ci	},
177862306a36Sopenharmony_ci	[MT8186_MEMIF_DL8] = {
177962306a36Sopenharmony_ci		.name = "DL8",
178062306a36Sopenharmony_ci		.id = MT8186_MEMIF_DL8,
178162306a36Sopenharmony_ci		.reg_ofs_base = AFE_DL8_BASE,
178262306a36Sopenharmony_ci		.reg_ofs_cur = AFE_DL8_CUR,
178362306a36Sopenharmony_ci		.reg_ofs_end = AFE_DL8_END,
178462306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_DL8_BASE_MSB,
178562306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_DL8_CUR_MSB,
178662306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_DL8_END_MSB,
178762306a36Sopenharmony_ci		.fs_reg = AFE_DL8_CON0,
178862306a36Sopenharmony_ci		.fs_shift = DL8_MODE_SFT,
178962306a36Sopenharmony_ci		.fs_maskbit = DL8_MODE_MASK,
179062306a36Sopenharmony_ci		.mono_reg = AFE_DL8_CON0,
179162306a36Sopenharmony_ci		.mono_shift = DL8_MONO_SFT,
179262306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
179362306a36Sopenharmony_ci		.enable_shift = DL8_ON_SFT,
179462306a36Sopenharmony_ci		.hd_reg = AFE_DL8_CON0,
179562306a36Sopenharmony_ci		.hd_shift = DL8_HD_MODE_SFT,
179662306a36Sopenharmony_ci		.hd_align_reg = AFE_DL8_CON0,
179762306a36Sopenharmony_ci		.hd_align_mshift = DL8_HALIGN_SFT,
179862306a36Sopenharmony_ci		.agent_disable_reg = -1,
179962306a36Sopenharmony_ci		.agent_disable_shift = -1,
180062306a36Sopenharmony_ci		.msb_reg = -1,
180162306a36Sopenharmony_ci		.msb_shift = -1,
180262306a36Sopenharmony_ci		.pbuf_reg = AFE_DL8_CON0,
180362306a36Sopenharmony_ci		.pbuf_mask = DL8_PBUF_SIZE_MASK,
180462306a36Sopenharmony_ci		.pbuf_shift = DL8_PBUF_SIZE_SFT,
180562306a36Sopenharmony_ci		.minlen_reg = AFE_DL8_CON0,
180662306a36Sopenharmony_ci		.minlen_mask = DL8_MINLEN_MASK,
180762306a36Sopenharmony_ci		.minlen_shift = DL8_MINLEN_SFT,
180862306a36Sopenharmony_ci	},
180962306a36Sopenharmony_ci	[MT8186_MEMIF_VUL12] = {
181062306a36Sopenharmony_ci		.name = "VUL12",
181162306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL12,
181262306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL12_BASE,
181362306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL12_CUR,
181462306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL12_END,
181562306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL12_BASE_MSB,
181662306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL12_CUR_MSB,
181762306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL12_END_MSB,
181862306a36Sopenharmony_ci		.fs_reg = AFE_VUL12_CON0,
181962306a36Sopenharmony_ci		.fs_shift = VUL12_MODE_SFT,
182062306a36Sopenharmony_ci		.fs_maskbit = VUL12_MODE_MASK,
182162306a36Sopenharmony_ci		.mono_reg = AFE_VUL12_CON0,
182262306a36Sopenharmony_ci		.mono_shift = VUL12_MONO_SFT,
182362306a36Sopenharmony_ci		.quad_ch_reg = AFE_VUL12_CON0,
182462306a36Sopenharmony_ci		.quad_ch_mask = VUL12_4CH_EN_MASK,
182562306a36Sopenharmony_ci		.quad_ch_shift = VUL12_4CH_EN_SFT,
182662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
182762306a36Sopenharmony_ci		.enable_shift = VUL12_ON_SFT,
182862306a36Sopenharmony_ci		.hd_reg = AFE_VUL12_CON0,
182962306a36Sopenharmony_ci		.hd_shift = VUL12_HD_MODE_SFT,
183062306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL12_CON0,
183162306a36Sopenharmony_ci		.hd_align_mshift = VUL12_HALIGN_SFT,
183262306a36Sopenharmony_ci		.agent_disable_reg = -1,
183362306a36Sopenharmony_ci		.agent_disable_shift = -1,
183462306a36Sopenharmony_ci		.msb_reg = -1,
183562306a36Sopenharmony_ci		.msb_shift = -1,
183662306a36Sopenharmony_ci	},
183762306a36Sopenharmony_ci	[MT8186_MEMIF_VUL2] = {
183862306a36Sopenharmony_ci		.name = "VUL2",
183962306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL2,
184062306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL2_BASE,
184162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL2_CUR,
184262306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL2_END,
184362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL2_BASE_MSB,
184462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL2_CUR_MSB,
184562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL2_END_MSB,
184662306a36Sopenharmony_ci		.fs_reg = AFE_VUL2_CON0,
184762306a36Sopenharmony_ci		.fs_shift = VUL2_MODE_SFT,
184862306a36Sopenharmony_ci		.fs_maskbit = VUL2_MODE_MASK,
184962306a36Sopenharmony_ci		.mono_reg = AFE_VUL2_CON0,
185062306a36Sopenharmony_ci		.mono_shift = VUL2_MONO_SFT,
185162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
185262306a36Sopenharmony_ci		.enable_shift = VUL2_ON_SFT,
185362306a36Sopenharmony_ci		.hd_reg = AFE_VUL2_CON0,
185462306a36Sopenharmony_ci		.hd_shift = VUL2_HD_MODE_SFT,
185562306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL2_CON0,
185662306a36Sopenharmony_ci		.hd_align_mshift = VUL2_HALIGN_SFT,
185762306a36Sopenharmony_ci		.agent_disable_reg = -1,
185862306a36Sopenharmony_ci		.agent_disable_shift = -1,
185962306a36Sopenharmony_ci		.msb_reg = -1,
186062306a36Sopenharmony_ci		.msb_shift = -1,
186162306a36Sopenharmony_ci	},
186262306a36Sopenharmony_ci	[MT8186_MEMIF_AWB] = {
186362306a36Sopenharmony_ci		.name = "AWB",
186462306a36Sopenharmony_ci		.id = MT8186_MEMIF_AWB,
186562306a36Sopenharmony_ci		.reg_ofs_base = AFE_AWB_BASE,
186662306a36Sopenharmony_ci		.reg_ofs_cur = AFE_AWB_CUR,
186762306a36Sopenharmony_ci		.reg_ofs_end = AFE_AWB_END,
186862306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_AWB_BASE_MSB,
186962306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_AWB_CUR_MSB,
187062306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_AWB_END_MSB,
187162306a36Sopenharmony_ci		.fs_reg = AFE_AWB_CON0,
187262306a36Sopenharmony_ci		.fs_shift = AWB_MODE_SFT,
187362306a36Sopenharmony_ci		.fs_maskbit = AWB_MODE_MASK,
187462306a36Sopenharmony_ci		.mono_reg = AFE_AWB_CON0,
187562306a36Sopenharmony_ci		.mono_shift = AWB_MONO_SFT,
187662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
187762306a36Sopenharmony_ci		.enable_shift = AWB_ON_SFT,
187862306a36Sopenharmony_ci		.hd_reg = AFE_AWB_CON0,
187962306a36Sopenharmony_ci		.hd_shift = AWB_HD_MODE_SFT,
188062306a36Sopenharmony_ci		.hd_align_reg = AFE_AWB_CON0,
188162306a36Sopenharmony_ci		.hd_align_mshift = AWB_HALIGN_SFT,
188262306a36Sopenharmony_ci		.agent_disable_reg = -1,
188362306a36Sopenharmony_ci		.agent_disable_shift = -1,
188462306a36Sopenharmony_ci		.msb_reg = -1,
188562306a36Sopenharmony_ci		.msb_shift = -1,
188662306a36Sopenharmony_ci	},
188762306a36Sopenharmony_ci	[MT8186_MEMIF_AWB2] = {
188862306a36Sopenharmony_ci		.name = "AWB2",
188962306a36Sopenharmony_ci		.id = MT8186_MEMIF_AWB2,
189062306a36Sopenharmony_ci		.reg_ofs_base = AFE_AWB2_BASE,
189162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_AWB2_CUR,
189262306a36Sopenharmony_ci		.reg_ofs_end = AFE_AWB2_END,
189362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_AWB2_BASE_MSB,
189462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_AWB2_CUR_MSB,
189562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_AWB2_END_MSB,
189662306a36Sopenharmony_ci		.fs_reg = AFE_AWB2_CON0,
189762306a36Sopenharmony_ci		.fs_shift = AWB2_MODE_SFT,
189862306a36Sopenharmony_ci		.fs_maskbit = AWB2_MODE_MASK,
189962306a36Sopenharmony_ci		.mono_reg = AFE_AWB2_CON0,
190062306a36Sopenharmony_ci		.mono_shift = AWB2_MONO_SFT,
190162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
190262306a36Sopenharmony_ci		.enable_shift = AWB2_ON_SFT,
190362306a36Sopenharmony_ci		.hd_reg = AFE_AWB2_CON0,
190462306a36Sopenharmony_ci		.hd_shift = AWB2_HD_MODE_SFT,
190562306a36Sopenharmony_ci		.hd_align_reg = AFE_AWB2_CON0,
190662306a36Sopenharmony_ci		.hd_align_mshift = AWB2_HALIGN_SFT,
190762306a36Sopenharmony_ci		.agent_disable_reg = -1,
190862306a36Sopenharmony_ci		.agent_disable_shift = -1,
190962306a36Sopenharmony_ci		.msb_reg = -1,
191062306a36Sopenharmony_ci		.msb_shift = -1,
191162306a36Sopenharmony_ci	},
191262306a36Sopenharmony_ci	[MT8186_MEMIF_VUL3] = {
191362306a36Sopenharmony_ci		.name = "VUL3",
191462306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL3,
191562306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL3_BASE,
191662306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL3_CUR,
191762306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL3_END,
191862306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL3_BASE_MSB,
191962306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL3_CUR_MSB,
192062306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL3_END_MSB,
192162306a36Sopenharmony_ci		.fs_reg = AFE_VUL3_CON0,
192262306a36Sopenharmony_ci		.fs_shift = VUL3_MODE_SFT,
192362306a36Sopenharmony_ci		.fs_maskbit = VUL3_MODE_MASK,
192462306a36Sopenharmony_ci		.mono_reg = AFE_VUL3_CON0,
192562306a36Sopenharmony_ci		.mono_shift = VUL3_MONO_SFT,
192662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
192762306a36Sopenharmony_ci		.enable_shift = VUL3_ON_SFT,
192862306a36Sopenharmony_ci		.hd_reg = AFE_VUL3_CON0,
192962306a36Sopenharmony_ci		.hd_shift = VUL3_HD_MODE_SFT,
193062306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL3_CON0,
193162306a36Sopenharmony_ci		.hd_align_mshift = VUL3_HALIGN_SFT,
193262306a36Sopenharmony_ci		.agent_disable_reg = -1,
193362306a36Sopenharmony_ci		.agent_disable_shift = -1,
193462306a36Sopenharmony_ci		.msb_reg = -1,
193562306a36Sopenharmony_ci		.msb_shift = -1,
193662306a36Sopenharmony_ci	},
193762306a36Sopenharmony_ci	[MT8186_MEMIF_VUL4] = {
193862306a36Sopenharmony_ci		.name = "VUL4",
193962306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL4,
194062306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL4_BASE,
194162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL4_CUR,
194262306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL4_END,
194362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL4_BASE_MSB,
194462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL4_CUR_MSB,
194562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL4_END_MSB,
194662306a36Sopenharmony_ci		.fs_reg = AFE_VUL4_CON0,
194762306a36Sopenharmony_ci		.fs_shift = VUL4_MODE_SFT,
194862306a36Sopenharmony_ci		.fs_maskbit = VUL4_MODE_MASK,
194962306a36Sopenharmony_ci		.mono_reg = AFE_VUL4_CON0,
195062306a36Sopenharmony_ci		.mono_shift = VUL4_MONO_SFT,
195162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
195262306a36Sopenharmony_ci		.enable_shift = VUL4_ON_SFT,
195362306a36Sopenharmony_ci		.hd_reg = AFE_VUL4_CON0,
195462306a36Sopenharmony_ci		.hd_shift = VUL4_HD_MODE_SFT,
195562306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL4_CON0,
195662306a36Sopenharmony_ci		.hd_align_mshift = VUL4_HALIGN_SFT,
195762306a36Sopenharmony_ci		.agent_disable_reg = -1,
195862306a36Sopenharmony_ci		.agent_disable_shift = -1,
195962306a36Sopenharmony_ci		.msb_reg = -1,
196062306a36Sopenharmony_ci		.msb_shift = -1,
196162306a36Sopenharmony_ci	},
196262306a36Sopenharmony_ci	[MT8186_MEMIF_VUL5] = {
196362306a36Sopenharmony_ci		.name = "VUL5",
196462306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL5,
196562306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL5_BASE,
196662306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL5_CUR,
196762306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL5_END,
196862306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL5_BASE_MSB,
196962306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL5_CUR_MSB,
197062306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL5_END_MSB,
197162306a36Sopenharmony_ci		.fs_reg = AFE_VUL5_CON0,
197262306a36Sopenharmony_ci		.fs_shift = VUL5_MODE_SFT,
197362306a36Sopenharmony_ci		.fs_maskbit = VUL5_MODE_MASK,
197462306a36Sopenharmony_ci		.mono_reg = AFE_VUL5_CON0,
197562306a36Sopenharmony_ci		.mono_shift = VUL5_MONO_SFT,
197662306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
197762306a36Sopenharmony_ci		.enable_shift = VUL5_ON_SFT,
197862306a36Sopenharmony_ci		.hd_reg = AFE_VUL5_CON0,
197962306a36Sopenharmony_ci		.hd_shift = VUL5_HD_MODE_SFT,
198062306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL5_CON0,
198162306a36Sopenharmony_ci		.hd_align_mshift = VUL5_HALIGN_SFT,
198262306a36Sopenharmony_ci		.agent_disable_reg = -1,
198362306a36Sopenharmony_ci		.agent_disable_shift = -1,
198462306a36Sopenharmony_ci		.msb_reg = -1,
198562306a36Sopenharmony_ci		.msb_shift = -1,
198662306a36Sopenharmony_ci	},
198762306a36Sopenharmony_ci	[MT8186_MEMIF_VUL6] = {
198862306a36Sopenharmony_ci		.name = "VUL6",
198962306a36Sopenharmony_ci		.id = MT8186_MEMIF_VUL6,
199062306a36Sopenharmony_ci		.reg_ofs_base = AFE_VUL6_BASE,
199162306a36Sopenharmony_ci		.reg_ofs_cur = AFE_VUL6_CUR,
199262306a36Sopenharmony_ci		.reg_ofs_end = AFE_VUL6_END,
199362306a36Sopenharmony_ci		.reg_ofs_base_msb = AFE_VUL6_BASE_MSB,
199462306a36Sopenharmony_ci		.reg_ofs_cur_msb = AFE_VUL6_CUR_MSB,
199562306a36Sopenharmony_ci		.reg_ofs_end_msb = AFE_VUL6_END_MSB,
199662306a36Sopenharmony_ci		.fs_reg = AFE_VUL6_CON0,
199762306a36Sopenharmony_ci		.fs_shift = VUL6_MODE_SFT,
199862306a36Sopenharmony_ci		.fs_maskbit = VUL6_MODE_MASK,
199962306a36Sopenharmony_ci		.mono_reg = AFE_VUL6_CON0,
200062306a36Sopenharmony_ci		.mono_shift = VUL6_MONO_SFT,
200162306a36Sopenharmony_ci		.enable_reg = AFE_DAC_CON0,
200262306a36Sopenharmony_ci		.enable_shift = VUL6_ON_SFT,
200362306a36Sopenharmony_ci		.hd_reg = AFE_VUL6_CON0,
200462306a36Sopenharmony_ci		.hd_shift = VUL6_HD_MODE_SFT,
200562306a36Sopenharmony_ci		.hd_align_reg = AFE_VUL6_CON0,
200662306a36Sopenharmony_ci		.hd_align_mshift = VUL6_HALIGN_SFT,
200762306a36Sopenharmony_ci		.agent_disable_reg = -1,
200862306a36Sopenharmony_ci		.agent_disable_shift = -1,
200962306a36Sopenharmony_ci		.msb_reg = -1,
201062306a36Sopenharmony_ci		.msb_shift = -1,
201162306a36Sopenharmony_ci	},
201262306a36Sopenharmony_ci};
201362306a36Sopenharmony_ci
201462306a36Sopenharmony_cistatic const struct mtk_base_irq_data irq_data[MT8186_IRQ_NUM] = {
201562306a36Sopenharmony_ci	[MT8186_IRQ_0] = {
201662306a36Sopenharmony_ci		.id = MT8186_IRQ_0,
201762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT0,
201862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
201962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
202062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
202162306a36Sopenharmony_ci		.irq_fs_shift = IRQ0_MCU_MODE_SFT,
202262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ0_MCU_MODE_MASK,
202362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
202462306a36Sopenharmony_ci		.irq_en_shift = IRQ0_MCU_ON_SFT,
202562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
202662306a36Sopenharmony_ci		.irq_clr_shift = IRQ0_MCU_CLR_SFT,
202762306a36Sopenharmony_ci	},
202862306a36Sopenharmony_ci	[MT8186_IRQ_1] = {
202962306a36Sopenharmony_ci		.id = MT8186_IRQ_1,
203062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT1,
203162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
203262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
203362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
203462306a36Sopenharmony_ci		.irq_fs_shift = IRQ1_MCU_MODE_SFT,
203562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ1_MCU_MODE_MASK,
203662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
203762306a36Sopenharmony_ci		.irq_en_shift = IRQ1_MCU_ON_SFT,
203862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
203962306a36Sopenharmony_ci		.irq_clr_shift = IRQ1_MCU_CLR_SFT,
204062306a36Sopenharmony_ci	},
204162306a36Sopenharmony_ci	[MT8186_IRQ_2] = {
204262306a36Sopenharmony_ci		.id = MT8186_IRQ_2,
204362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT2,
204462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
204562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
204662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
204762306a36Sopenharmony_ci		.irq_fs_shift = IRQ2_MCU_MODE_SFT,
204862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ2_MCU_MODE_MASK,
204962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
205062306a36Sopenharmony_ci		.irq_en_shift = IRQ2_MCU_ON_SFT,
205162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
205262306a36Sopenharmony_ci		.irq_clr_shift = IRQ2_MCU_CLR_SFT,
205362306a36Sopenharmony_ci	},
205462306a36Sopenharmony_ci	[MT8186_IRQ_3] = {
205562306a36Sopenharmony_ci		.id = MT8186_IRQ_3,
205662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT3,
205762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
205862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
205962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
206062306a36Sopenharmony_ci		.irq_fs_shift = IRQ3_MCU_MODE_SFT,
206162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ3_MCU_MODE_MASK,
206262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
206362306a36Sopenharmony_ci		.irq_en_shift = IRQ3_MCU_ON_SFT,
206462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
206562306a36Sopenharmony_ci		.irq_clr_shift = IRQ3_MCU_CLR_SFT,
206662306a36Sopenharmony_ci	},
206762306a36Sopenharmony_ci	[MT8186_IRQ_4] = {
206862306a36Sopenharmony_ci		.id = MT8186_IRQ_4,
206962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT4,
207062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
207162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
207262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
207362306a36Sopenharmony_ci		.irq_fs_shift = IRQ4_MCU_MODE_SFT,
207462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ4_MCU_MODE_MASK,
207562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
207662306a36Sopenharmony_ci		.irq_en_shift = IRQ4_MCU_ON_SFT,
207762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
207862306a36Sopenharmony_ci		.irq_clr_shift = IRQ4_MCU_CLR_SFT,
207962306a36Sopenharmony_ci	},
208062306a36Sopenharmony_ci	[MT8186_IRQ_5] = {
208162306a36Sopenharmony_ci		.id = MT8186_IRQ_5,
208262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT5,
208362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
208462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
208562306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
208662306a36Sopenharmony_ci		.irq_fs_shift = IRQ5_MCU_MODE_SFT,
208762306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ5_MCU_MODE_MASK,
208862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
208962306a36Sopenharmony_ci		.irq_en_shift = IRQ5_MCU_ON_SFT,
209062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
209162306a36Sopenharmony_ci		.irq_clr_shift = IRQ5_MCU_CLR_SFT,
209262306a36Sopenharmony_ci	},
209362306a36Sopenharmony_ci	[MT8186_IRQ_6] = {
209462306a36Sopenharmony_ci		.id = MT8186_IRQ_6,
209562306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT6,
209662306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
209762306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
209862306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
209962306a36Sopenharmony_ci		.irq_fs_shift = IRQ6_MCU_MODE_SFT,
210062306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ6_MCU_MODE_MASK,
210162306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
210262306a36Sopenharmony_ci		.irq_en_shift = IRQ6_MCU_ON_SFT,
210362306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
210462306a36Sopenharmony_ci		.irq_clr_shift = IRQ6_MCU_CLR_SFT,
210562306a36Sopenharmony_ci	},
210662306a36Sopenharmony_ci	[MT8186_IRQ_7] = {
210762306a36Sopenharmony_ci		.id = MT8186_IRQ_7,
210862306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT7,
210962306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
211062306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
211162306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON1,
211262306a36Sopenharmony_ci		.irq_fs_shift = IRQ7_MCU_MODE_SFT,
211362306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ7_MCU_MODE_MASK,
211462306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
211562306a36Sopenharmony_ci		.irq_en_shift = IRQ7_MCU_ON_SFT,
211662306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
211762306a36Sopenharmony_ci		.irq_clr_shift = IRQ7_MCU_CLR_SFT,
211862306a36Sopenharmony_ci	},
211962306a36Sopenharmony_ci	[MT8186_IRQ_8] = {
212062306a36Sopenharmony_ci		.id = MT8186_IRQ_8,
212162306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT8,
212262306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
212362306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
212462306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
212562306a36Sopenharmony_ci		.irq_fs_shift = IRQ8_MCU_MODE_SFT,
212662306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ8_MCU_MODE_MASK,
212762306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
212862306a36Sopenharmony_ci		.irq_en_shift = IRQ8_MCU_ON_SFT,
212962306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
213062306a36Sopenharmony_ci		.irq_clr_shift = IRQ8_MCU_CLR_SFT,
213162306a36Sopenharmony_ci	},
213262306a36Sopenharmony_ci	[MT8186_IRQ_9] = {
213362306a36Sopenharmony_ci		.id = MT8186_IRQ_9,
213462306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT9,
213562306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
213662306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
213762306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
213862306a36Sopenharmony_ci		.irq_fs_shift = IRQ9_MCU_MODE_SFT,
213962306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ9_MCU_MODE_MASK,
214062306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
214162306a36Sopenharmony_ci		.irq_en_shift = IRQ9_MCU_ON_SFT,
214262306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
214362306a36Sopenharmony_ci		.irq_clr_shift = IRQ9_MCU_CLR_SFT,
214462306a36Sopenharmony_ci	},
214562306a36Sopenharmony_ci	[MT8186_IRQ_10] = {
214662306a36Sopenharmony_ci		.id = MT8186_IRQ_10,
214762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT10,
214862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
214962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
215062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
215162306a36Sopenharmony_ci		.irq_fs_shift = IRQ10_MCU_MODE_SFT,
215262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ10_MCU_MODE_MASK,
215362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
215462306a36Sopenharmony_ci		.irq_en_shift = IRQ10_MCU_ON_SFT,
215562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
215662306a36Sopenharmony_ci		.irq_clr_shift = IRQ10_MCU_CLR_SFT,
215762306a36Sopenharmony_ci	},
215862306a36Sopenharmony_ci	[MT8186_IRQ_11] = {
215962306a36Sopenharmony_ci		.id = MT8186_IRQ_11,
216062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT11,
216162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
216262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
216362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
216462306a36Sopenharmony_ci		.irq_fs_shift = IRQ11_MCU_MODE_SFT,
216562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ11_MCU_MODE_MASK,
216662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
216762306a36Sopenharmony_ci		.irq_en_shift = IRQ11_MCU_ON_SFT,
216862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
216962306a36Sopenharmony_ci		.irq_clr_shift = IRQ11_MCU_CLR_SFT,
217062306a36Sopenharmony_ci	},
217162306a36Sopenharmony_ci	[MT8186_IRQ_12] = {
217262306a36Sopenharmony_ci		.id = MT8186_IRQ_12,
217362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT12,
217462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
217562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
217662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
217762306a36Sopenharmony_ci		.irq_fs_shift = IRQ12_MCU_MODE_SFT,
217862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ12_MCU_MODE_MASK,
217962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
218062306a36Sopenharmony_ci		.irq_en_shift = IRQ12_MCU_ON_SFT,
218162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
218262306a36Sopenharmony_ci		.irq_clr_shift = IRQ12_MCU_CLR_SFT,
218362306a36Sopenharmony_ci	},
218462306a36Sopenharmony_ci	[MT8186_IRQ_13] = {
218562306a36Sopenharmony_ci		.id = MT8186_IRQ_13,
218662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT13,
218762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
218862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
218962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
219062306a36Sopenharmony_ci		.irq_fs_shift = IRQ13_MCU_MODE_SFT,
219162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ13_MCU_MODE_MASK,
219262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
219362306a36Sopenharmony_ci		.irq_en_shift = IRQ13_MCU_ON_SFT,
219462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
219562306a36Sopenharmony_ci		.irq_clr_shift = IRQ13_MCU_CLR_SFT,
219662306a36Sopenharmony_ci	},
219762306a36Sopenharmony_ci	[MT8186_IRQ_14] = {
219862306a36Sopenharmony_ci		.id = MT8186_IRQ_14,
219962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT14,
220062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
220162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
220262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
220362306a36Sopenharmony_ci		.irq_fs_shift = IRQ14_MCU_MODE_SFT,
220462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ14_MCU_MODE_MASK,
220562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
220662306a36Sopenharmony_ci		.irq_en_shift = IRQ14_MCU_ON_SFT,
220762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
220862306a36Sopenharmony_ci		.irq_clr_shift = IRQ14_MCU_CLR_SFT,
220962306a36Sopenharmony_ci	},
221062306a36Sopenharmony_ci	[MT8186_IRQ_15] = {
221162306a36Sopenharmony_ci		.id = MT8186_IRQ_15,
221262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT15,
221362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
221462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
221562306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON2,
221662306a36Sopenharmony_ci		.irq_fs_shift = IRQ15_MCU_MODE_SFT,
221762306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ15_MCU_MODE_MASK,
221862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
221962306a36Sopenharmony_ci		.irq_en_shift = IRQ15_MCU_ON_SFT,
222062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
222162306a36Sopenharmony_ci		.irq_clr_shift = IRQ15_MCU_CLR_SFT,
222262306a36Sopenharmony_ci	},
222362306a36Sopenharmony_ci	[MT8186_IRQ_16] = {
222462306a36Sopenharmony_ci		.id = MT8186_IRQ_16,
222562306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT16,
222662306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
222762306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
222862306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
222962306a36Sopenharmony_ci		.irq_fs_shift = IRQ16_MCU_MODE_SFT,
223062306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ16_MCU_MODE_MASK,
223162306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
223262306a36Sopenharmony_ci		.irq_en_shift = IRQ16_MCU_ON_SFT,
223362306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
223462306a36Sopenharmony_ci		.irq_clr_shift = IRQ16_MCU_CLR_SFT,
223562306a36Sopenharmony_ci	},
223662306a36Sopenharmony_ci	[MT8186_IRQ_17] = {
223762306a36Sopenharmony_ci		.id = MT8186_IRQ_17,
223862306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT17,
223962306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
224062306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
224162306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
224262306a36Sopenharmony_ci		.irq_fs_shift = IRQ17_MCU_MODE_SFT,
224362306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ17_MCU_MODE_MASK,
224462306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
224562306a36Sopenharmony_ci		.irq_en_shift = IRQ17_MCU_ON_SFT,
224662306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
224762306a36Sopenharmony_ci		.irq_clr_shift = IRQ17_MCU_CLR_SFT,
224862306a36Sopenharmony_ci	},
224962306a36Sopenharmony_ci	[MT8186_IRQ_18] = {
225062306a36Sopenharmony_ci		.id = MT8186_IRQ_18,
225162306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT18,
225262306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
225362306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
225462306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
225562306a36Sopenharmony_ci		.irq_fs_shift = IRQ18_MCU_MODE_SFT,
225662306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ18_MCU_MODE_MASK,
225762306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
225862306a36Sopenharmony_ci		.irq_en_shift = IRQ18_MCU_ON_SFT,
225962306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
226062306a36Sopenharmony_ci		.irq_clr_shift = IRQ18_MCU_CLR_SFT,
226162306a36Sopenharmony_ci	},
226262306a36Sopenharmony_ci	[MT8186_IRQ_19] = {
226362306a36Sopenharmony_ci		.id = MT8186_IRQ_19,
226462306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT19,
226562306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
226662306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
226762306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
226862306a36Sopenharmony_ci		.irq_fs_shift = IRQ19_MCU_MODE_SFT,
226962306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ19_MCU_MODE_MASK,
227062306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
227162306a36Sopenharmony_ci		.irq_en_shift = IRQ19_MCU_ON_SFT,
227262306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
227362306a36Sopenharmony_ci		.irq_clr_shift = IRQ19_MCU_CLR_SFT,
227462306a36Sopenharmony_ci	},
227562306a36Sopenharmony_ci	[MT8186_IRQ_20] = {
227662306a36Sopenharmony_ci		.id = MT8186_IRQ_20,
227762306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT20,
227862306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
227962306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
228062306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
228162306a36Sopenharmony_ci		.irq_fs_shift = IRQ20_MCU_MODE_SFT,
228262306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ20_MCU_MODE_MASK,
228362306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
228462306a36Sopenharmony_ci		.irq_en_shift = IRQ20_MCU_ON_SFT,
228562306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
228662306a36Sopenharmony_ci		.irq_clr_shift = IRQ20_MCU_CLR_SFT,
228762306a36Sopenharmony_ci	},
228862306a36Sopenharmony_ci	[MT8186_IRQ_21] = {
228962306a36Sopenharmony_ci		.id = MT8186_IRQ_21,
229062306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT21,
229162306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
229262306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
229362306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
229462306a36Sopenharmony_ci		.irq_fs_shift = IRQ21_MCU_MODE_SFT,
229562306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ21_MCU_MODE_MASK,
229662306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
229762306a36Sopenharmony_ci		.irq_en_shift = IRQ21_MCU_ON_SFT,
229862306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
229962306a36Sopenharmony_ci		.irq_clr_shift = IRQ21_MCU_CLR_SFT,
230062306a36Sopenharmony_ci	},
230162306a36Sopenharmony_ci	[MT8186_IRQ_22] = {
230262306a36Sopenharmony_ci		.id = MT8186_IRQ_22,
230362306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT22,
230462306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
230562306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
230662306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
230762306a36Sopenharmony_ci		.irq_fs_shift = IRQ22_MCU_MODE_SFT,
230862306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ22_MCU_MODE_MASK,
230962306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
231062306a36Sopenharmony_ci		.irq_en_shift = IRQ22_MCU_ON_SFT,
231162306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
231262306a36Sopenharmony_ci		.irq_clr_shift = IRQ22_MCU_CLR_SFT,
231362306a36Sopenharmony_ci	},
231462306a36Sopenharmony_ci	[MT8186_IRQ_23] = {
231562306a36Sopenharmony_ci		.id = MT8186_IRQ_23,
231662306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT23,
231762306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
231862306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
231962306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON3,
232062306a36Sopenharmony_ci		.irq_fs_shift = IRQ23_MCU_MODE_SFT,
232162306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ23_MCU_MODE_MASK,
232262306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
232362306a36Sopenharmony_ci		.irq_en_shift = IRQ23_MCU_ON_SFT,
232462306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
232562306a36Sopenharmony_ci		.irq_clr_shift = IRQ23_MCU_CLR_SFT,
232662306a36Sopenharmony_ci	},
232762306a36Sopenharmony_ci	[MT8186_IRQ_24] = {
232862306a36Sopenharmony_ci		.id = MT8186_IRQ_24,
232962306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT24,
233062306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
233162306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
233262306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
233362306a36Sopenharmony_ci		.irq_fs_shift = IRQ24_MCU_MODE_SFT,
233462306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ24_MCU_MODE_MASK,
233562306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
233662306a36Sopenharmony_ci		.irq_en_shift = IRQ24_MCU_ON_SFT,
233762306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
233862306a36Sopenharmony_ci		.irq_clr_shift = IRQ24_MCU_CLR_SFT,
233962306a36Sopenharmony_ci	},
234062306a36Sopenharmony_ci	[MT8186_IRQ_25] = {
234162306a36Sopenharmony_ci		.id = MT8186_IRQ_25,
234262306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT25,
234362306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
234462306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
234562306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
234662306a36Sopenharmony_ci		.irq_fs_shift = IRQ25_MCU_MODE_SFT,
234762306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ25_MCU_MODE_MASK,
234862306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
234962306a36Sopenharmony_ci		.irq_en_shift = IRQ25_MCU_ON_SFT,
235062306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
235162306a36Sopenharmony_ci		.irq_clr_shift = IRQ25_MCU_CLR_SFT,
235262306a36Sopenharmony_ci	},
235362306a36Sopenharmony_ci	[MT8186_IRQ_26] = {
235462306a36Sopenharmony_ci		.id = MT8186_IRQ_26,
235562306a36Sopenharmony_ci		.irq_cnt_reg = AFE_IRQ_MCU_CNT26,
235662306a36Sopenharmony_ci		.irq_cnt_shift = AFE_IRQ_CNT_SHIFT,
235762306a36Sopenharmony_ci		.irq_cnt_maskbit = AFE_IRQ_CNT_MASK,
235862306a36Sopenharmony_ci		.irq_fs_reg = AFE_IRQ_MCU_CON4,
235962306a36Sopenharmony_ci		.irq_fs_shift = IRQ26_MCU_MODE_SFT,
236062306a36Sopenharmony_ci		.irq_fs_maskbit = IRQ26_MCU_MODE_MASK,
236162306a36Sopenharmony_ci		.irq_en_reg = AFE_IRQ_MCU_CON0,
236262306a36Sopenharmony_ci		.irq_en_shift = IRQ26_MCU_ON_SFT,
236362306a36Sopenharmony_ci		.irq_clr_reg = AFE_IRQ_MCU_CLR,
236462306a36Sopenharmony_ci		.irq_clr_shift = IRQ26_MCU_CLR_SFT,
236562306a36Sopenharmony_ci	},
236662306a36Sopenharmony_ci};
236762306a36Sopenharmony_ci
236862306a36Sopenharmony_cistatic const int memif_irq_usage[MT8186_MEMIF_NUM] = {
236962306a36Sopenharmony_ci	/* TODO: verify each memif & irq */
237062306a36Sopenharmony_ci	[MT8186_MEMIF_DL1] = MT8186_IRQ_0,
237162306a36Sopenharmony_ci	[MT8186_MEMIF_DL2] = MT8186_IRQ_1,
237262306a36Sopenharmony_ci	[MT8186_MEMIF_DL3] = MT8186_IRQ_2,
237362306a36Sopenharmony_ci	[MT8186_MEMIF_DL4] = MT8186_IRQ_3,
237462306a36Sopenharmony_ci	[MT8186_MEMIF_DL5] = MT8186_IRQ_4,
237562306a36Sopenharmony_ci	[MT8186_MEMIF_DL6] = MT8186_IRQ_5,
237662306a36Sopenharmony_ci	[MT8186_MEMIF_DL7] = MT8186_IRQ_6,
237762306a36Sopenharmony_ci	[MT8186_MEMIF_DL8] = MT8186_IRQ_7,
237862306a36Sopenharmony_ci	[MT8186_MEMIF_DL12] = MT8186_IRQ_9,
237962306a36Sopenharmony_ci	[MT8186_MEMIF_VUL12] = MT8186_IRQ_10,
238062306a36Sopenharmony_ci	[MT8186_MEMIF_VUL2] = MT8186_IRQ_11,
238162306a36Sopenharmony_ci	[MT8186_MEMIF_AWB] = MT8186_IRQ_12,
238262306a36Sopenharmony_ci	[MT8186_MEMIF_AWB2] = MT8186_IRQ_13,
238362306a36Sopenharmony_ci	[MT8186_MEMIF_VUL3] = MT8186_IRQ_14,
238462306a36Sopenharmony_ci	[MT8186_MEMIF_VUL4] = MT8186_IRQ_15,
238562306a36Sopenharmony_ci	[MT8186_MEMIF_VUL5] = MT8186_IRQ_16,
238662306a36Sopenharmony_ci	[MT8186_MEMIF_VUL6] = MT8186_IRQ_17,
238762306a36Sopenharmony_ci};
238862306a36Sopenharmony_ci
238962306a36Sopenharmony_cistatic bool mt8186_is_volatile_reg(struct device *dev, unsigned int reg)
239062306a36Sopenharmony_ci{
239162306a36Sopenharmony_ci	/* these auto-gen reg has read-only bit, so put it as volatile */
239262306a36Sopenharmony_ci	/* volatile reg cannot be cached, so cannot be set when power off */
239362306a36Sopenharmony_ci	switch (reg) {
239462306a36Sopenharmony_ci	case AUDIO_TOP_CON0:	/* reg bit controlled by CCF */
239562306a36Sopenharmony_ci	case AUDIO_TOP_CON1:	/* reg bit controlled by CCF */
239662306a36Sopenharmony_ci	case AUDIO_TOP_CON2:
239762306a36Sopenharmony_ci	case AUDIO_TOP_CON3:
239862306a36Sopenharmony_ci	case AFE_DAC_CON0:
239962306a36Sopenharmony_ci	case AFE_DL1_CUR_MSB:
240062306a36Sopenharmony_ci	case AFE_DL1_CUR:
240162306a36Sopenharmony_ci	case AFE_DL1_END:
240262306a36Sopenharmony_ci	case AFE_DL2_CUR_MSB:
240362306a36Sopenharmony_ci	case AFE_DL2_CUR:
240462306a36Sopenharmony_ci	case AFE_DL2_END:
240562306a36Sopenharmony_ci	case AFE_DL3_CUR_MSB:
240662306a36Sopenharmony_ci	case AFE_DL3_CUR:
240762306a36Sopenharmony_ci	case AFE_DL3_END:
240862306a36Sopenharmony_ci	case AFE_DL4_CUR_MSB:
240962306a36Sopenharmony_ci	case AFE_DL4_CUR:
241062306a36Sopenharmony_ci	case AFE_DL4_END:
241162306a36Sopenharmony_ci	case AFE_DL12_CUR_MSB:
241262306a36Sopenharmony_ci	case AFE_DL12_CUR:
241362306a36Sopenharmony_ci	case AFE_DL12_END:
241462306a36Sopenharmony_ci	case AFE_ADDA_SRC_DEBUG_MON0:
241562306a36Sopenharmony_ci	case AFE_ADDA_SRC_DEBUG_MON1:
241662306a36Sopenharmony_ci	case AFE_ADDA_UL_SRC_MON0:
241762306a36Sopenharmony_ci	case AFE_ADDA_UL_SRC_MON1:
241862306a36Sopenharmony_ci	case AFE_SECURE_CON0:
241962306a36Sopenharmony_ci	case AFE_SRAM_BOUND:
242062306a36Sopenharmony_ci	case AFE_SECURE_CON1:
242162306a36Sopenharmony_ci	case AFE_VUL_CUR_MSB:
242262306a36Sopenharmony_ci	case AFE_VUL_CUR:
242362306a36Sopenharmony_ci	case AFE_VUL_END:
242462306a36Sopenharmony_ci	case AFE_SIDETONE_MON:
242562306a36Sopenharmony_ci	case AFE_SIDETONE_CON0:
242662306a36Sopenharmony_ci	case AFE_SIDETONE_COEFF:
242762306a36Sopenharmony_ci	case AFE_VUL2_CUR_MSB:
242862306a36Sopenharmony_ci	case AFE_VUL2_CUR:
242962306a36Sopenharmony_ci	case AFE_VUL2_END:
243062306a36Sopenharmony_ci	case AFE_VUL3_CUR_MSB:
243162306a36Sopenharmony_ci	case AFE_VUL3_CUR:
243262306a36Sopenharmony_ci	case AFE_VUL3_END:
243362306a36Sopenharmony_ci	case AFE_I2S_MON:
243462306a36Sopenharmony_ci	case AFE_DAC_MON:
243562306a36Sopenharmony_ci	case AFE_IRQ0_MCU_CNT_MON:
243662306a36Sopenharmony_ci	case AFE_IRQ6_MCU_CNT_MON:
243762306a36Sopenharmony_ci	case AFE_VUL4_CUR_MSB:
243862306a36Sopenharmony_ci	case AFE_VUL4_CUR:
243962306a36Sopenharmony_ci	case AFE_VUL4_END:
244062306a36Sopenharmony_ci	case AFE_VUL12_CUR_MSB:
244162306a36Sopenharmony_ci	case AFE_VUL12_CUR:
244262306a36Sopenharmony_ci	case AFE_VUL12_END:
244362306a36Sopenharmony_ci	case AFE_IRQ3_MCU_CNT_MON:
244462306a36Sopenharmony_ci	case AFE_IRQ4_MCU_CNT_MON:
244562306a36Sopenharmony_ci	case AFE_IRQ_MCU_STATUS:
244662306a36Sopenharmony_ci	case AFE_IRQ_MCU_CLR:
244762306a36Sopenharmony_ci	case AFE_IRQ_MCU_MON2:
244862306a36Sopenharmony_ci	case AFE_IRQ1_MCU_CNT_MON:
244962306a36Sopenharmony_ci	case AFE_IRQ2_MCU_CNT_MON:
245062306a36Sopenharmony_ci	case AFE_IRQ5_MCU_CNT_MON:
245162306a36Sopenharmony_ci	case AFE_IRQ7_MCU_CNT_MON:
245262306a36Sopenharmony_ci	case AFE_IRQ_MCU_MISS_CLR:
245362306a36Sopenharmony_ci	case AFE_GAIN1_CUR:
245462306a36Sopenharmony_ci	case AFE_GAIN2_CUR:
245562306a36Sopenharmony_ci	case AFE_SRAM_DELSEL_CON1:
245662306a36Sopenharmony_ci	case PCM_INTF_CON2:
245762306a36Sopenharmony_ci	case FPGA_CFG0:
245862306a36Sopenharmony_ci	case FPGA_CFG1:
245962306a36Sopenharmony_ci	case FPGA_CFG2:
246062306a36Sopenharmony_ci	case FPGA_CFG3:
246162306a36Sopenharmony_ci	case AUDIO_TOP_DBG_MON0:
246262306a36Sopenharmony_ci	case AUDIO_TOP_DBG_MON1:
246362306a36Sopenharmony_ci	case AFE_IRQ8_MCU_CNT_MON:
246462306a36Sopenharmony_ci	case AFE_IRQ11_MCU_CNT_MON:
246562306a36Sopenharmony_ci	case AFE_IRQ12_MCU_CNT_MON:
246662306a36Sopenharmony_ci	case AFE_IRQ9_MCU_CNT_MON:
246762306a36Sopenharmony_ci	case AFE_IRQ10_MCU_CNT_MON:
246862306a36Sopenharmony_ci	case AFE_IRQ13_MCU_CNT_MON:
246962306a36Sopenharmony_ci	case AFE_IRQ14_MCU_CNT_MON:
247062306a36Sopenharmony_ci	case AFE_IRQ15_MCU_CNT_MON:
247162306a36Sopenharmony_ci	case AFE_IRQ16_MCU_CNT_MON:
247262306a36Sopenharmony_ci	case AFE_IRQ17_MCU_CNT_MON:
247362306a36Sopenharmony_ci	case AFE_IRQ18_MCU_CNT_MON:
247462306a36Sopenharmony_ci	case AFE_IRQ19_MCU_CNT_MON:
247562306a36Sopenharmony_ci	case AFE_IRQ20_MCU_CNT_MON:
247662306a36Sopenharmony_ci	case AFE_IRQ21_MCU_CNT_MON:
247762306a36Sopenharmony_ci	case AFE_IRQ22_MCU_CNT_MON:
247862306a36Sopenharmony_ci	case AFE_IRQ23_MCU_CNT_MON:
247962306a36Sopenharmony_ci	case AFE_IRQ24_MCU_CNT_MON:
248062306a36Sopenharmony_ci	case AFE_IRQ25_MCU_CNT_MON:
248162306a36Sopenharmony_ci	case AFE_IRQ26_MCU_CNT_MON:
248262306a36Sopenharmony_ci	case AFE_IRQ31_MCU_CNT_MON:
248362306a36Sopenharmony_ci	case AFE_CBIP_MON0:
248462306a36Sopenharmony_ci	case AFE_CBIP_SLV_MUX_MON0:
248562306a36Sopenharmony_ci	case AFE_CBIP_SLV_DECODER_MON0:
248662306a36Sopenharmony_ci	case AFE_ADDA6_MTKAIF_MON0:
248762306a36Sopenharmony_ci	case AFE_ADDA6_MTKAIF_MON1:
248862306a36Sopenharmony_ci	case AFE_AWB_CUR_MSB:
248962306a36Sopenharmony_ci	case AFE_AWB_CUR:
249062306a36Sopenharmony_ci	case AFE_AWB_END:
249162306a36Sopenharmony_ci	case AFE_AWB2_CUR_MSB:
249262306a36Sopenharmony_ci	case AFE_AWB2_CUR:
249362306a36Sopenharmony_ci	case AFE_AWB2_END:
249462306a36Sopenharmony_ci	case AFE_DAI_CUR_MSB:
249562306a36Sopenharmony_ci	case AFE_DAI_CUR:
249662306a36Sopenharmony_ci	case AFE_DAI_END:
249762306a36Sopenharmony_ci	case AFE_DAI2_CUR_MSB:
249862306a36Sopenharmony_ci	case AFE_DAI2_CUR:
249962306a36Sopenharmony_ci	case AFE_DAI2_END:
250062306a36Sopenharmony_ci	case AFE_ADDA6_SRC_DEBUG_MON0:
250162306a36Sopenharmony_ci	case AFE_ADD6A_UL_SRC_MON0:
250262306a36Sopenharmony_ci	case AFE_ADDA6_UL_SRC_MON1:
250362306a36Sopenharmony_ci	case AFE_MOD_DAI_CUR_MSB:
250462306a36Sopenharmony_ci	case AFE_MOD_DAI_CUR:
250562306a36Sopenharmony_ci	case AFE_MOD_DAI_END:
250662306a36Sopenharmony_ci	case AFE_AWB_RCH_MON:
250762306a36Sopenharmony_ci	case AFE_AWB_LCH_MON:
250862306a36Sopenharmony_ci	case AFE_VUL_RCH_MON:
250962306a36Sopenharmony_ci	case AFE_VUL_LCH_MON:
251062306a36Sopenharmony_ci	case AFE_VUL12_RCH_MON:
251162306a36Sopenharmony_ci	case AFE_VUL12_LCH_MON:
251262306a36Sopenharmony_ci	case AFE_VUL2_RCH_MON:
251362306a36Sopenharmony_ci	case AFE_VUL2_LCH_MON:
251462306a36Sopenharmony_ci	case AFE_DAI_DATA_MON:
251562306a36Sopenharmony_ci	case AFE_MOD_DAI_DATA_MON:
251662306a36Sopenharmony_ci	case AFE_DAI2_DATA_MON:
251762306a36Sopenharmony_ci	case AFE_AWB2_RCH_MON:
251862306a36Sopenharmony_ci	case AFE_AWB2_LCH_MON:
251962306a36Sopenharmony_ci	case AFE_VUL3_RCH_MON:
252062306a36Sopenharmony_ci	case AFE_VUL3_LCH_MON:
252162306a36Sopenharmony_ci	case AFE_VUL4_RCH_MON:
252262306a36Sopenharmony_ci	case AFE_VUL4_LCH_MON:
252362306a36Sopenharmony_ci	case AFE_VUL5_RCH_MON:
252462306a36Sopenharmony_ci	case AFE_VUL5_LCH_MON:
252562306a36Sopenharmony_ci	case AFE_VUL6_RCH_MON:
252662306a36Sopenharmony_ci	case AFE_VUL6_LCH_MON:
252762306a36Sopenharmony_ci	case AFE_DL1_RCH_MON:
252862306a36Sopenharmony_ci	case AFE_DL1_LCH_MON:
252962306a36Sopenharmony_ci	case AFE_DL2_RCH_MON:
253062306a36Sopenharmony_ci	case AFE_DL2_LCH_MON:
253162306a36Sopenharmony_ci	case AFE_DL12_RCH1_MON:
253262306a36Sopenharmony_ci	case AFE_DL12_LCH1_MON:
253362306a36Sopenharmony_ci	case AFE_DL12_RCH2_MON:
253462306a36Sopenharmony_ci	case AFE_DL12_LCH2_MON:
253562306a36Sopenharmony_ci	case AFE_DL3_RCH_MON:
253662306a36Sopenharmony_ci	case AFE_DL3_LCH_MON:
253762306a36Sopenharmony_ci	case AFE_DL4_RCH_MON:
253862306a36Sopenharmony_ci	case AFE_DL4_LCH_MON:
253962306a36Sopenharmony_ci	case AFE_DL5_RCH_MON:
254062306a36Sopenharmony_ci	case AFE_DL5_LCH_MON:
254162306a36Sopenharmony_ci	case AFE_DL6_RCH_MON:
254262306a36Sopenharmony_ci	case AFE_DL6_LCH_MON:
254362306a36Sopenharmony_ci	case AFE_DL7_RCH_MON:
254462306a36Sopenharmony_ci	case AFE_DL7_LCH_MON:
254562306a36Sopenharmony_ci	case AFE_DL8_RCH_MON:
254662306a36Sopenharmony_ci	case AFE_DL8_LCH_MON:
254762306a36Sopenharmony_ci	case AFE_VUL5_CUR_MSB:
254862306a36Sopenharmony_ci	case AFE_VUL5_CUR:
254962306a36Sopenharmony_ci	case AFE_VUL5_END:
255062306a36Sopenharmony_ci	case AFE_VUL6_CUR_MSB:
255162306a36Sopenharmony_ci	case AFE_VUL6_CUR:
255262306a36Sopenharmony_ci	case AFE_VUL6_END:
255362306a36Sopenharmony_ci	case AFE_ADDA_DL_SDM_FIFO_MON:
255462306a36Sopenharmony_ci	case AFE_ADDA_DL_SRC_LCH_MON:
255562306a36Sopenharmony_ci	case AFE_ADDA_DL_SRC_RCH_MON:
255662306a36Sopenharmony_ci	case AFE_ADDA_DL_SDM_OUT_MON:
255762306a36Sopenharmony_ci	case AFE_CONNSYS_I2S_MON:
255862306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON0:
255962306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON2:
256062306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON3:
256162306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON4:
256262306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON5:
256362306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON7:
256462306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON8:
256562306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON12:
256662306a36Sopenharmony_ci	case AFE_ASRC_2CH_CON13:
256762306a36Sopenharmony_ci	case AFE_ADDA_MTKAIF_MON0:
256862306a36Sopenharmony_ci	case AFE_ADDA_MTKAIF_MON1:
256962306a36Sopenharmony_ci	case AFE_AUD_PAD_TOP:
257062306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON0:
257162306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON1:
257262306a36Sopenharmony_ci	case AFE_DL_NLE_R_MON2:
257362306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON0:
257462306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON1:
257562306a36Sopenharmony_ci	case AFE_DL_NLE_L_MON2:
257662306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON0:
257762306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON2:
257862306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON3:
257962306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON4:
258062306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON5:
258162306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON7:
258262306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON8:
258362306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON12:
258462306a36Sopenharmony_ci	case AFE_GENERAL1_ASRC_2CH_CON13:
258562306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON0:
258662306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON2:
258762306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON3:
258862306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON4:
258962306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON5:
259062306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON7:
259162306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON8:
259262306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON12:
259362306a36Sopenharmony_ci	case AFE_GENERAL2_ASRC_2CH_CON13:
259462306a36Sopenharmony_ci	case AFE_DL5_CUR_MSB:
259562306a36Sopenharmony_ci	case AFE_DL5_CUR:
259662306a36Sopenharmony_ci	case AFE_DL5_END:
259762306a36Sopenharmony_ci	case AFE_DL6_CUR_MSB:
259862306a36Sopenharmony_ci	case AFE_DL6_CUR:
259962306a36Sopenharmony_ci	case AFE_DL6_END:
260062306a36Sopenharmony_ci	case AFE_DL7_CUR_MSB:
260162306a36Sopenharmony_ci	case AFE_DL7_CUR:
260262306a36Sopenharmony_ci	case AFE_DL7_END:
260362306a36Sopenharmony_ci	case AFE_DL8_CUR_MSB:
260462306a36Sopenharmony_ci	case AFE_DL8_CUR:
260562306a36Sopenharmony_ci	case AFE_DL8_END:
260662306a36Sopenharmony_ci	case AFE_PROT_SIDEBAND_MON:
260762306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND0_MON:
260862306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND1_MON:
260962306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND2_MON:
261062306a36Sopenharmony_ci	case AFE_DOMAIN_SIDEBAND3_MON:
261162306a36Sopenharmony_ci	case AFE_APLL1_TUNER_CFG:	/* [20:31] is monitor */
261262306a36Sopenharmony_ci	case AFE_APLL2_TUNER_CFG:	/* [20:31] is monitor */
261362306a36Sopenharmony_ci		return true;
261462306a36Sopenharmony_ci	default:
261562306a36Sopenharmony_ci		return false;
261662306a36Sopenharmony_ci	};
261762306a36Sopenharmony_ci}
261862306a36Sopenharmony_ci
261962306a36Sopenharmony_cistatic const struct regmap_config mt8186_afe_regmap_config = {
262062306a36Sopenharmony_ci	.reg_bits = 32,
262162306a36Sopenharmony_ci	.reg_stride = 4,
262262306a36Sopenharmony_ci	.val_bits = 32,
262362306a36Sopenharmony_ci
262462306a36Sopenharmony_ci	.volatile_reg = mt8186_is_volatile_reg,
262562306a36Sopenharmony_ci
262662306a36Sopenharmony_ci	.max_register = AFE_MAX_REGISTER,
262762306a36Sopenharmony_ci	.num_reg_defaults_raw = AFE_MAX_REGISTER,
262862306a36Sopenharmony_ci
262962306a36Sopenharmony_ci	.cache_type = REGCACHE_FLAT,
263062306a36Sopenharmony_ci};
263162306a36Sopenharmony_ci
263262306a36Sopenharmony_cistatic irqreturn_t mt8186_afe_irq_handler(int irq_id, void *dev)
263362306a36Sopenharmony_ci{
263462306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev;
263562306a36Sopenharmony_ci	struct mtk_base_afe_irq *irq;
263662306a36Sopenharmony_ci	unsigned int status;
263762306a36Sopenharmony_ci	unsigned int status_mcu;
263862306a36Sopenharmony_ci	unsigned int mcu_en;
263962306a36Sopenharmony_ci	int ret;
264062306a36Sopenharmony_ci	int i;
264162306a36Sopenharmony_ci
264262306a36Sopenharmony_ci	/* get irq that is sent to MCU */
264362306a36Sopenharmony_ci	ret = regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &mcu_en);
264462306a36Sopenharmony_ci	if (ret) {
264562306a36Sopenharmony_ci		dev_err(afe->dev, "%s, get irq direction fail, ret %d", __func__, ret);
264662306a36Sopenharmony_ci		return ret;
264762306a36Sopenharmony_ci	}
264862306a36Sopenharmony_ci
264962306a36Sopenharmony_ci	ret = regmap_read(afe->regmap, AFE_IRQ_MCU_STATUS, &status);
265062306a36Sopenharmony_ci	/* only care IRQ which is sent to MCU */
265162306a36Sopenharmony_ci	status_mcu = status & mcu_en & AFE_IRQ_STATUS_BITS;
265262306a36Sopenharmony_ci
265362306a36Sopenharmony_ci	if (ret || status_mcu == 0) {
265462306a36Sopenharmony_ci		dev_err(afe->dev, "%s(), irq status err, ret %d, status 0x%x, mcu_en 0x%x\n",
265562306a36Sopenharmony_ci			__func__, ret, status, mcu_en);
265662306a36Sopenharmony_ci
265762306a36Sopenharmony_ci		goto err_irq;
265862306a36Sopenharmony_ci	}
265962306a36Sopenharmony_ci
266062306a36Sopenharmony_ci	for (i = 0; i < MT8186_MEMIF_NUM; i++) {
266162306a36Sopenharmony_ci		struct mtk_base_afe_memif *memif = &afe->memif[i];
266262306a36Sopenharmony_ci
266362306a36Sopenharmony_ci		if (!memif->substream)
266462306a36Sopenharmony_ci			continue;
266562306a36Sopenharmony_ci
266662306a36Sopenharmony_ci		if (memif->irq_usage < 0)
266762306a36Sopenharmony_ci			continue;
266862306a36Sopenharmony_ci
266962306a36Sopenharmony_ci		irq = &afe->irqs[memif->irq_usage];
267062306a36Sopenharmony_ci
267162306a36Sopenharmony_ci		if (status_mcu & (1 << irq->irq_data->irq_en_shift))
267262306a36Sopenharmony_ci			snd_pcm_period_elapsed(memif->substream);
267362306a36Sopenharmony_ci	}
267462306a36Sopenharmony_ci
267562306a36Sopenharmony_cierr_irq:
267662306a36Sopenharmony_ci	/* clear irq */
267762306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, status_mcu);
267862306a36Sopenharmony_ci
267962306a36Sopenharmony_ci	return IRQ_HANDLED;
268062306a36Sopenharmony_ci}
268162306a36Sopenharmony_ci
268262306a36Sopenharmony_cistatic int mt8186_afe_runtime_suspend(struct device *dev)
268362306a36Sopenharmony_ci{
268462306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev_get_drvdata(dev);
268562306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
268662306a36Sopenharmony_ci	unsigned int value = 0;
268762306a36Sopenharmony_ci	int ret;
268862306a36Sopenharmony_ci
268962306a36Sopenharmony_ci	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
269062306a36Sopenharmony_ci		goto skip_regmap;
269162306a36Sopenharmony_ci
269262306a36Sopenharmony_ci	/* disable AFE */
269362306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x0);
269462306a36Sopenharmony_ci
269562306a36Sopenharmony_ci	ret = regmap_read_poll_timeout(afe->regmap,
269662306a36Sopenharmony_ci				       AFE_DAC_MON,
269762306a36Sopenharmony_ci				       value,
269862306a36Sopenharmony_ci				       (value & AFE_ON_RETM_MASK_SFT) == 0,
269962306a36Sopenharmony_ci				       20,
270062306a36Sopenharmony_ci				       1 * 1000 * 1000);
270162306a36Sopenharmony_ci	if (ret) {
270262306a36Sopenharmony_ci		dev_err(afe->dev, "%s(), ret %d\n", __func__, ret);
270362306a36Sopenharmony_ci		return ret;
270462306a36Sopenharmony_ci	}
270562306a36Sopenharmony_ci
270662306a36Sopenharmony_ci	/* make sure all irq status are cleared */
270762306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff);
270862306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, 0xffffffff);
270962306a36Sopenharmony_ci
271062306a36Sopenharmony_ci	/* reset sgen */
271162306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_SINEGEN_CON0, 0x0);
271262306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_SINEGEN_CON2,
271362306a36Sopenharmony_ci			   INNER_LOOP_BACK_MODE_MASK_SFT,
271462306a36Sopenharmony_ci			   0x3f << INNER_LOOP_BACK_MODE_SFT);
271562306a36Sopenharmony_ci
271662306a36Sopenharmony_ci	/* cache only */
271762306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, true);
271862306a36Sopenharmony_ci	regcache_mark_dirty(afe->regmap);
271962306a36Sopenharmony_ci
272062306a36Sopenharmony_ciskip_regmap:
272162306a36Sopenharmony_ci	mt8186_afe_disable_cgs(afe);
272262306a36Sopenharmony_ci	mt8186_afe_disable_clock(afe);
272362306a36Sopenharmony_ci
272462306a36Sopenharmony_ci	return 0;
272562306a36Sopenharmony_ci}
272662306a36Sopenharmony_ci
272762306a36Sopenharmony_cistatic int mt8186_afe_runtime_resume(struct device *dev)
272862306a36Sopenharmony_ci{
272962306a36Sopenharmony_ci	struct mtk_base_afe *afe = dev_get_drvdata(dev);
273062306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv = afe->platform_priv;
273162306a36Sopenharmony_ci	int ret;
273262306a36Sopenharmony_ci
273362306a36Sopenharmony_ci	ret = mt8186_afe_enable_clock(afe);
273462306a36Sopenharmony_ci	if (ret)
273562306a36Sopenharmony_ci		return ret;
273662306a36Sopenharmony_ci
273762306a36Sopenharmony_ci	ret = mt8186_afe_enable_cgs(afe);
273862306a36Sopenharmony_ci	if (ret)
273962306a36Sopenharmony_ci		return ret;
274062306a36Sopenharmony_ci
274162306a36Sopenharmony_ci	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)
274262306a36Sopenharmony_ci		goto skip_regmap;
274362306a36Sopenharmony_ci
274462306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, false);
274562306a36Sopenharmony_ci	regcache_sync(afe->regmap);
274662306a36Sopenharmony_ci
274762306a36Sopenharmony_ci	/* enable audio sys DCM for power saving */
274862306a36Sopenharmony_ci	regmap_update_bits(afe_priv->infracfg, PERI_BUS_DCM_CTRL, BIT(29), BIT(29));
274962306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, BIT(29), BIT(29));
275062306a36Sopenharmony_ci
275162306a36Sopenharmony_ci	/* force cpu use 8_24 format when writing 32bit data */
275262306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_MEMIF_CON0, CPU_HD_ALIGN_MASK_SFT, 0);
275362306a36Sopenharmony_ci
275462306a36Sopenharmony_ci	/* set all output port to 24bit */
275562306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_CONN_24BIT, 0xffffffff);
275662306a36Sopenharmony_ci	regmap_write(afe->regmap, AFE_CONN_24BIT_1, 0xffffffff);
275762306a36Sopenharmony_ci
275862306a36Sopenharmony_ci	/* enable AFE */
275962306a36Sopenharmony_ci	regmap_update_bits(afe->regmap, AFE_DAC_CON0, AUDIO_AFE_ON_MASK_SFT, BIT(0));
276062306a36Sopenharmony_ci
276162306a36Sopenharmony_ciskip_regmap:
276262306a36Sopenharmony_ci	return 0;
276362306a36Sopenharmony_ci}
276462306a36Sopenharmony_ci
276562306a36Sopenharmony_cistatic int mt8186_afe_component_probe(struct snd_soc_component *component)
276662306a36Sopenharmony_ci{
276762306a36Sopenharmony_ci	mtk_afe_add_sub_dai_control(component);
276862306a36Sopenharmony_ci	mt8186_add_misc_control(component);
276962306a36Sopenharmony_ci
277062306a36Sopenharmony_ci	return 0;
277162306a36Sopenharmony_ci}
277262306a36Sopenharmony_ci
277362306a36Sopenharmony_cistatic const struct snd_soc_component_driver mt8186_afe_component = {
277462306a36Sopenharmony_ci	.name = AFE_PCM_NAME,
277562306a36Sopenharmony_ci	.pcm_construct = mtk_afe_pcm_new,
277662306a36Sopenharmony_ci	.pointer = mtk_afe_pcm_pointer,
277762306a36Sopenharmony_ci	.probe = mt8186_afe_component_probe,
277862306a36Sopenharmony_ci};
277962306a36Sopenharmony_ci
278062306a36Sopenharmony_cistatic int mt8186_dai_memif_register(struct mtk_base_afe *afe)
278162306a36Sopenharmony_ci{
278262306a36Sopenharmony_ci	struct mtk_base_afe_dai *dai;
278362306a36Sopenharmony_ci
278462306a36Sopenharmony_ci	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
278562306a36Sopenharmony_ci	if (!dai)
278662306a36Sopenharmony_ci		return -ENOMEM;
278762306a36Sopenharmony_ci
278862306a36Sopenharmony_ci	list_add(&dai->list, &afe->sub_dais);
278962306a36Sopenharmony_ci
279062306a36Sopenharmony_ci	dai->dai_drivers = mt8186_memif_dai_driver;
279162306a36Sopenharmony_ci	dai->num_dai_drivers = ARRAY_SIZE(mt8186_memif_dai_driver);
279262306a36Sopenharmony_ci
279362306a36Sopenharmony_ci	dai->controls = mt8186_pcm_kcontrols;
279462306a36Sopenharmony_ci	dai->num_controls = ARRAY_SIZE(mt8186_pcm_kcontrols);
279562306a36Sopenharmony_ci	dai->dapm_widgets = mt8186_memif_widgets;
279662306a36Sopenharmony_ci	dai->num_dapm_widgets = ARRAY_SIZE(mt8186_memif_widgets);
279762306a36Sopenharmony_ci	dai->dapm_routes = mt8186_memif_routes;
279862306a36Sopenharmony_ci	dai->num_dapm_routes = ARRAY_SIZE(mt8186_memif_routes);
279962306a36Sopenharmony_ci	return 0;
280062306a36Sopenharmony_ci}
280162306a36Sopenharmony_ci
280262306a36Sopenharmony_citypedef int (*dai_register_cb)(struct mtk_base_afe *);
280362306a36Sopenharmony_cistatic const dai_register_cb dai_register_cbs[] = {
280462306a36Sopenharmony_ci	mt8186_dai_adda_register,
280562306a36Sopenharmony_ci	mt8186_dai_i2s_register,
280662306a36Sopenharmony_ci	mt8186_dai_tdm_register,
280762306a36Sopenharmony_ci	mt8186_dai_hw_gain_register,
280862306a36Sopenharmony_ci	mt8186_dai_src_register,
280962306a36Sopenharmony_ci	mt8186_dai_pcm_register,
281062306a36Sopenharmony_ci	mt8186_dai_hostless_register,
281162306a36Sopenharmony_ci	mt8186_dai_memif_register,
281262306a36Sopenharmony_ci};
281362306a36Sopenharmony_ci
281462306a36Sopenharmony_cistatic int mt8186_afe_pcm_dev_probe(struct platform_device *pdev)
281562306a36Sopenharmony_ci{
281662306a36Sopenharmony_ci	struct mtk_base_afe *afe;
281762306a36Sopenharmony_ci	struct mt8186_afe_private *afe_priv;
281862306a36Sopenharmony_ci	struct reset_control *rstc;
281962306a36Sopenharmony_ci	struct device *dev = &pdev->dev;
282062306a36Sopenharmony_ci	int i, ret, irq_id;
282162306a36Sopenharmony_ci
282262306a36Sopenharmony_ci	ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(34));
282362306a36Sopenharmony_ci	if (ret)
282462306a36Sopenharmony_ci		return ret;
282562306a36Sopenharmony_ci
282662306a36Sopenharmony_ci	afe = devm_kzalloc(dev, sizeof(*afe), GFP_KERNEL);
282762306a36Sopenharmony_ci	if (!afe)
282862306a36Sopenharmony_ci		return -ENOMEM;
282962306a36Sopenharmony_ci	platform_set_drvdata(pdev, afe);
283062306a36Sopenharmony_ci
283162306a36Sopenharmony_ci	afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv), GFP_KERNEL);
283262306a36Sopenharmony_ci	if (!afe->platform_priv)
283362306a36Sopenharmony_ci		return -ENOMEM;
283462306a36Sopenharmony_ci
283562306a36Sopenharmony_ci	afe_priv = afe->platform_priv;
283662306a36Sopenharmony_ci	afe->dev = &pdev->dev;
283762306a36Sopenharmony_ci
283862306a36Sopenharmony_ci	afe->base_addr = devm_platform_ioremap_resource(pdev, 0);
283962306a36Sopenharmony_ci	if (IS_ERR(afe->base_addr))
284062306a36Sopenharmony_ci		return PTR_ERR(afe->base_addr);
284162306a36Sopenharmony_ci
284262306a36Sopenharmony_ci	/* init audio related clock */
284362306a36Sopenharmony_ci	ret = mt8186_init_clock(afe);
284462306a36Sopenharmony_ci	if (ret) {
284562306a36Sopenharmony_ci		dev_err(dev, "init clock error, ret %d\n", ret);
284662306a36Sopenharmony_ci		return ret;
284762306a36Sopenharmony_ci	}
284862306a36Sopenharmony_ci
284962306a36Sopenharmony_ci	/* init memif */
285062306a36Sopenharmony_ci	afe->memif_32bit_supported = 0;
285162306a36Sopenharmony_ci	afe->memif_size = MT8186_MEMIF_NUM;
285262306a36Sopenharmony_ci	afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif), GFP_KERNEL);
285362306a36Sopenharmony_ci	if (!afe->memif)
285462306a36Sopenharmony_ci		return -ENOMEM;
285562306a36Sopenharmony_ci
285662306a36Sopenharmony_ci	for (i = 0; i < afe->memif_size; i++) {
285762306a36Sopenharmony_ci		afe->memif[i].data = &memif_data[i];
285862306a36Sopenharmony_ci		afe->memif[i].irq_usage = memif_irq_usage[i];
285962306a36Sopenharmony_ci		afe->memif[i].const_irq = 1;
286062306a36Sopenharmony_ci	}
286162306a36Sopenharmony_ci
286262306a36Sopenharmony_ci	mutex_init(&afe->irq_alloc_lock);	/* needed when dynamic irq */
286362306a36Sopenharmony_ci
286462306a36Sopenharmony_ci	/* init irq */
286562306a36Sopenharmony_ci	afe->irqs_size = MT8186_IRQ_NUM;
286662306a36Sopenharmony_ci	afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),
286762306a36Sopenharmony_ci				 GFP_KERNEL);
286862306a36Sopenharmony_ci
286962306a36Sopenharmony_ci	if (!afe->irqs)
287062306a36Sopenharmony_ci		return -ENOMEM;
287162306a36Sopenharmony_ci
287262306a36Sopenharmony_ci	for (i = 0; i < afe->irqs_size; i++)
287362306a36Sopenharmony_ci		afe->irqs[i].irq_data = &irq_data[i];
287462306a36Sopenharmony_ci
287562306a36Sopenharmony_ci	/* request irq */
287662306a36Sopenharmony_ci	irq_id = platform_get_irq(pdev, 0);
287762306a36Sopenharmony_ci	if (irq_id <= 0)
287862306a36Sopenharmony_ci		return dev_err_probe(dev, irq_id < 0 ? irq_id : -ENXIO,
287962306a36Sopenharmony_ci				     "no irq found");
288062306a36Sopenharmony_ci
288162306a36Sopenharmony_ci	ret = devm_request_irq(dev, irq_id, mt8186_afe_irq_handler,
288262306a36Sopenharmony_ci			       IRQF_TRIGGER_NONE,
288362306a36Sopenharmony_ci			       "Afe_ISR_Handle", (void *)afe);
288462306a36Sopenharmony_ci	if (ret)
288562306a36Sopenharmony_ci		return dev_err_probe(dev, ret, "could not request_irq for Afe_ISR_Handle\n");
288662306a36Sopenharmony_ci
288762306a36Sopenharmony_ci	ret = enable_irq_wake(irq_id);
288862306a36Sopenharmony_ci	if (ret < 0)
288962306a36Sopenharmony_ci		return dev_err_probe(dev, ret, "enable_irq_wake %d\n", irq_id);
289062306a36Sopenharmony_ci
289162306a36Sopenharmony_ci	/* init sub_dais */
289262306a36Sopenharmony_ci	INIT_LIST_HEAD(&afe->sub_dais);
289362306a36Sopenharmony_ci
289462306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
289562306a36Sopenharmony_ci		ret = dai_register_cbs[i](afe);
289662306a36Sopenharmony_ci		if (ret)
289762306a36Sopenharmony_ci			return dev_err_probe(dev, ret, "dai register i %d fail\n", i);
289862306a36Sopenharmony_ci	}
289962306a36Sopenharmony_ci
290062306a36Sopenharmony_ci	/* init dai_driver and component_driver */
290162306a36Sopenharmony_ci	ret = mtk_afe_combine_sub_dai(afe);
290262306a36Sopenharmony_ci	if (ret)
290362306a36Sopenharmony_ci		return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");
290462306a36Sopenharmony_ci
290562306a36Sopenharmony_ci	/* reset controller to reset audio regs before regmap cache */
290662306a36Sopenharmony_ci	rstc = devm_reset_control_get_exclusive(dev, "audiosys");
290762306a36Sopenharmony_ci	if (IS_ERR(rstc))
290862306a36Sopenharmony_ci		return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n");
290962306a36Sopenharmony_ci
291062306a36Sopenharmony_ci	ret = reset_control_reset(rstc);
291162306a36Sopenharmony_ci	if (ret)
291262306a36Sopenharmony_ci		return dev_err_probe(dev, ret, "failed to trigger audio reset\n");
291362306a36Sopenharmony_ci
291462306a36Sopenharmony_ci	/* enable clock for regcache get default value from hw */
291562306a36Sopenharmony_ci	afe_priv->pm_runtime_bypass_reg_ctl = true;
291662306a36Sopenharmony_ci
291762306a36Sopenharmony_ci	ret = devm_pm_runtime_enable(dev);
291862306a36Sopenharmony_ci	if (ret)
291962306a36Sopenharmony_ci		return ret;
292062306a36Sopenharmony_ci
292162306a36Sopenharmony_ci	ret = pm_runtime_resume_and_get(dev);
292262306a36Sopenharmony_ci	if (ret)
292362306a36Sopenharmony_ci		return dev_err_probe(dev, ret, "failed to resume device\n");
292462306a36Sopenharmony_ci
292562306a36Sopenharmony_ci	afe->regmap = devm_regmap_init_mmio(dev, afe->base_addr,
292662306a36Sopenharmony_ci					    &mt8186_afe_regmap_config);
292762306a36Sopenharmony_ci	if (IS_ERR(afe->regmap)) {
292862306a36Sopenharmony_ci		ret = PTR_ERR(afe->regmap);
292962306a36Sopenharmony_ci		goto err_pm_disable;
293062306a36Sopenharmony_ci	}
293162306a36Sopenharmony_ci
293262306a36Sopenharmony_ci	/* others */
293362306a36Sopenharmony_ci	afe->mtk_afe_hardware = &mt8186_afe_hardware;
293462306a36Sopenharmony_ci	afe->memif_fs = mt8186_memif_fs;
293562306a36Sopenharmony_ci	afe->irq_fs = mt8186_irq_fs;
293662306a36Sopenharmony_ci	afe->get_dai_fs = mt8186_get_dai_fs;
293762306a36Sopenharmony_ci	afe->get_memif_pbuf_size = mt8186_get_memif_pbuf_size;
293862306a36Sopenharmony_ci
293962306a36Sopenharmony_ci	afe->runtime_resume = mt8186_afe_runtime_resume;
294062306a36Sopenharmony_ci	afe->runtime_suspend = mt8186_afe_runtime_suspend;
294162306a36Sopenharmony_ci
294262306a36Sopenharmony_ci	/* register platform */
294362306a36Sopenharmony_ci	dev_dbg(dev, "%s(), devm_snd_soc_register_component\n", __func__);
294462306a36Sopenharmony_ci
294562306a36Sopenharmony_ci	ret = devm_snd_soc_register_component(dev,
294662306a36Sopenharmony_ci					      &mt8186_afe_component,
294762306a36Sopenharmony_ci					      afe->dai_drivers,
294862306a36Sopenharmony_ci					      afe->num_dai_drivers);
294962306a36Sopenharmony_ci	if (ret) {
295062306a36Sopenharmony_ci		dev_err(dev, "err_dai_component\n");
295162306a36Sopenharmony_ci		goto err_pm_disable;
295262306a36Sopenharmony_ci	}
295362306a36Sopenharmony_ci
295462306a36Sopenharmony_ci	ret = pm_runtime_put_sync(dev);
295562306a36Sopenharmony_ci	if (ret) {
295662306a36Sopenharmony_ci		pm_runtime_get_noresume(dev);
295762306a36Sopenharmony_ci		dev_err(dev, "failed to suspend device: %d\n", ret);
295862306a36Sopenharmony_ci		goto err_pm_disable;
295962306a36Sopenharmony_ci	}
296062306a36Sopenharmony_ci	afe_priv->pm_runtime_bypass_reg_ctl = false;
296162306a36Sopenharmony_ci
296262306a36Sopenharmony_ci	regcache_cache_only(afe->regmap, true);
296362306a36Sopenharmony_ci	regcache_mark_dirty(afe->regmap);
296462306a36Sopenharmony_ci
296562306a36Sopenharmony_ci	return 0;
296662306a36Sopenharmony_ci
296762306a36Sopenharmony_cierr_pm_disable:
296862306a36Sopenharmony_ci	pm_runtime_put_noidle(dev);
296962306a36Sopenharmony_ci	pm_runtime_set_suspended(dev);
297062306a36Sopenharmony_ci
297162306a36Sopenharmony_ci	return ret;
297262306a36Sopenharmony_ci}
297362306a36Sopenharmony_ci
297462306a36Sopenharmony_cistatic const struct of_device_id mt8186_afe_pcm_dt_match[] = {
297562306a36Sopenharmony_ci	{ .compatible = "mediatek,mt8186-sound", },
297662306a36Sopenharmony_ci	{},
297762306a36Sopenharmony_ci};
297862306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, mt8186_afe_pcm_dt_match);
297962306a36Sopenharmony_ci
298062306a36Sopenharmony_cistatic const struct dev_pm_ops mt8186_afe_pm_ops = {
298162306a36Sopenharmony_ci	SET_RUNTIME_PM_OPS(mt8186_afe_runtime_suspend,
298262306a36Sopenharmony_ci			   mt8186_afe_runtime_resume, NULL)
298362306a36Sopenharmony_ci};
298462306a36Sopenharmony_ci
298562306a36Sopenharmony_cistatic struct platform_driver mt8186_afe_pcm_driver = {
298662306a36Sopenharmony_ci	.driver = {
298762306a36Sopenharmony_ci		   .name = "mt8186-audio",
298862306a36Sopenharmony_ci		   .of_match_table = mt8186_afe_pcm_dt_match,
298962306a36Sopenharmony_ci		   .pm = &mt8186_afe_pm_ops,
299062306a36Sopenharmony_ci	},
299162306a36Sopenharmony_ci	.probe = mt8186_afe_pcm_dev_probe,
299262306a36Sopenharmony_ci};
299362306a36Sopenharmony_ci
299462306a36Sopenharmony_cimodule_platform_driver(mt8186_afe_pcm_driver);
299562306a36Sopenharmony_ci
299662306a36Sopenharmony_ciMODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8186");
299762306a36Sopenharmony_ciMODULE_AUTHOR("Jiaxin Yu <jiaxin.yu@mediatek.com>");
299862306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
2999