brintos

brintos / linux-shallow public Read only

0
0
Text · 96.7 KiB · 73e5c63 Raw
3382 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * MediaTek ALSA SoC AFE platform driver for 81884 *5 * Copyright (c) 2022 MediaTek Inc.6 * Author: Bicycle Tsai <bicycle.tsai@mediatek.com>7 *         Trevor Wu <trevor.wu@mediatek.com>8 *         Chun-Chia Chiu <chun-chia.chiu@mediatek.com>9 */10 11#include <linux/arm-smccc.h>12#include <linux/delay.h>13#include <linux/dma-mapping.h>14#include <linux/module.h>15#include <linux/mfd/syscon.h>16#include <linux/of.h>17#include <linux/of_address.h>18#include <linux/of_platform.h>19#include <linux/of_reserved_mem.h>20#include <linux/pm_runtime.h>21#include <linux/soc/mediatek/infracfg.h>22#include <linux/reset.h>23#include <sound/pcm_params.h>24#include "mt8188-afe-common.h"25#include "mt8188-afe-clk.h"26#include "mt8188-reg.h"27#include "../common/mtk-afe-platform-driver.h"28#include "../common/mtk-afe-fe-dai.h"29 30#define MT8188_MEMIF_BUFFER_BYTES_ALIGN  (0x40)31#define MT8188_MEMIF_DL7_MAX_PERIOD_SIZE (0x3fff)32 33#define MEMIF_AXI_MINLEN 9 /* register default value */34 35struct mtk_dai_memif_priv {36	unsigned int asys_timing_sel;37	unsigned int fs_timing;38};39 40static const struct snd_pcm_hardware mt8188_afe_hardware = {41	.info = SNDRV_PCM_INFO_MMAP |42		SNDRV_PCM_INFO_INTERLEAVED |43		SNDRV_PCM_INFO_MMAP_VALID,44	.formats = SNDRV_PCM_FMTBIT_S16_LE |45		   SNDRV_PCM_FMTBIT_S24_LE |46		   SNDRV_PCM_FMTBIT_S32_LE,47	.period_bytes_min = 64,48	.period_bytes_max = 256 * 1024,49	.periods_min = 2,50	.periods_max = 256,51	.buffer_bytes_max = 256 * 2 * 1024,52};53 54struct mt8188_afe_rate {55	unsigned int rate;56	unsigned int reg_value;57};58 59static const struct mt8188_afe_rate mt8188_afe_rates[] = {60	{ .rate = 8000, .reg_value = 0, },61	{ .rate = 12000, .reg_value = 1, },62	{ .rate = 16000, .reg_value = 2, },63	{ .rate = 24000, .reg_value = 3, },64	{ .rate = 32000, .reg_value = 4, },65	{ .rate = 48000, .reg_value = 5, },66	{ .rate = 96000, .reg_value = 6, },67	{ .rate = 192000, .reg_value = 7, },68	{ .rate = 384000, .reg_value = 8, },69	{ .rate = 7350, .reg_value = 16, },70	{ .rate = 11025, .reg_value = 17, },71	{ .rate = 14700, .reg_value = 18, },72	{ .rate = 22050, .reg_value = 19, },73	{ .rate = 29400, .reg_value = 20, },74	{ .rate = 44100, .reg_value = 21, },75	{ .rate = 88200, .reg_value = 22, },76	{ .rate = 176400, .reg_value = 23, },77	{ .rate = 352800, .reg_value = 24, },78};79 80int mt8188_afe_fs_timing(unsigned int rate)81{82	int i;83 84	for (i = 0; i < ARRAY_SIZE(mt8188_afe_rates); i++)85		if (mt8188_afe_rates[i].rate == rate)86			return mt8188_afe_rates[i].reg_value;87 88	return -EINVAL;89}90 91static int mt8188_memif_fs(struct snd_pcm_substream *substream,92			   unsigned int rate)93{94	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);95	struct snd_soc_component *component = NULL;96	struct mtk_base_afe *afe = NULL;97	struct mt8188_afe_private *afe_priv = NULL;98	struct mtk_base_afe_memif *memif = NULL;99	struct mtk_dai_memif_priv *memif_priv = NULL;100	int fs = mt8188_afe_fs_timing(rate);101	int id = snd_soc_rtd_to_cpu(rtd, 0)->id;102 103	if (id < 0)104		return -EINVAL;105 106	component = snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);107	if (!component)108		return -EINVAL;109 110	afe = snd_soc_component_get_drvdata(component);111	memif = &afe->memif[id];112 113	switch (memif->data->id) {114	case MT8188_AFE_MEMIF_DL10:115		fs = MT8188_ETDM_OUT3_1X_EN;116		break;117	case MT8188_AFE_MEMIF_UL8:118		fs = MT8188_ETDM_IN1_NX_EN;119		break;120	case MT8188_AFE_MEMIF_UL3:121		fs = MT8188_ETDM_IN2_NX_EN;122		break;123	default:124		afe_priv = afe->platform_priv;125		memif_priv = afe_priv->dai_priv[id];126		if (memif_priv->fs_timing)127			fs = memif_priv->fs_timing;128		break;129	}130 131	return fs;132}133 134static int mt8188_irq_fs(struct snd_pcm_substream *substream,135			 unsigned int rate)136{137	int fs = mt8188_memif_fs(substream, rate);138 139	switch (fs) {140	case MT8188_ETDM_IN1_NX_EN:141		fs = MT8188_ETDM_IN1_1X_EN;142		break;143	case MT8188_ETDM_IN2_NX_EN:144		fs = MT8188_ETDM_IN2_1X_EN;145		break;146	default:147		break;148	}149 150	return fs;151}152 153enum {154	MT8188_AFE_CM0,155	MT8188_AFE_CM1,156	MT8188_AFE_CM2,157	MT8188_AFE_CM_NUM,158};159 160struct mt8188_afe_channel_merge {161	int id;162	int reg;163	unsigned int sel_shift;164	unsigned int sel_maskbit;165	unsigned int sel_default;166	unsigned int ch_num_shift;167	unsigned int ch_num_maskbit;168	unsigned int en_shift;169	unsigned int en_maskbit;170	unsigned int update_cnt_shift;171	unsigned int update_cnt_maskbit;172	unsigned int update_cnt_default;173};174 175static const struct mt8188_afe_channel_merge176	mt8188_afe_cm[MT8188_AFE_CM_NUM] = {177	[MT8188_AFE_CM0] = {178		.id = MT8188_AFE_CM0,179		.reg = AFE_CM0_CON,180		.sel_shift = 30,181		.sel_maskbit = 0x1,182		.sel_default = 1,183		.ch_num_shift = 2,184		.ch_num_maskbit = 0x3f,185		.en_shift = 0,186		.en_maskbit = 0x1,187		.update_cnt_shift = 16,188		.update_cnt_maskbit = 0x1fff,189		.update_cnt_default = 0x3,190	},191	[MT8188_AFE_CM1] = {192		.id = MT8188_AFE_CM1,193		.reg = AFE_CM1_CON,194		.sel_shift = 30,195		.sel_maskbit = 0x1,196		.sel_default = 1,197		.ch_num_shift = 2,198		.ch_num_maskbit = 0x1f,199		.en_shift = 0,200		.en_maskbit = 0x1,201		.update_cnt_shift = 16,202		.update_cnt_maskbit = 0x1fff,203		.update_cnt_default = 0x3,204	},205	[MT8188_AFE_CM2] = {206		.id = MT8188_AFE_CM2,207		.reg = AFE_CM2_CON,208		.sel_shift = 30,209		.sel_maskbit = 0x1,210		.sel_default = 1,211		.ch_num_shift = 2,212		.ch_num_maskbit = 0x1f,213		.en_shift = 0,214		.en_maskbit = 0x1,215		.update_cnt_shift = 16,216		.update_cnt_maskbit = 0x1fff,217		.update_cnt_default = 0x3,218	},219};220 221static int mt8188_afe_memif_is_ul(int id)222{223	if (id >= MT8188_AFE_MEMIF_UL_START && id < MT8188_AFE_MEMIF_END)224		return 1;225	else226		return 0;227}228 229static const struct mt8188_afe_channel_merge *230	mt8188_afe_found_cm(struct snd_soc_dai *dai)231{232	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);233	int id = -EINVAL;234 235	if (mt8188_afe_memif_is_ul(dai->id) == 0)236		return NULL;237 238	switch (dai->id) {239	case MT8188_AFE_MEMIF_UL9:240		id = MT8188_AFE_CM0;241		break;242	case MT8188_AFE_MEMIF_UL2:243		id = MT8188_AFE_CM1;244		break;245	case MT8188_AFE_MEMIF_UL10:246		id = MT8188_AFE_CM2;247		break;248	default:249		break;250	}251 252	if (id < 0) {253		dev_dbg(afe->dev, "%s, memif %d cannot find CM!\n", __func__, dai->id);254		return NULL;255	}256 257	return &mt8188_afe_cm[id];258}259 260static int mt8188_afe_config_cm(struct mtk_base_afe *afe,261				const struct mt8188_afe_channel_merge *cm,262				unsigned int channels)263{264	if (!cm)265		return -EINVAL;266 267	regmap_update_bits(afe->regmap,268			   cm->reg,269			   cm->sel_maskbit << cm->sel_shift,270			   cm->sel_default << cm->sel_shift);271 272	regmap_update_bits(afe->regmap,273			   cm->reg,274			   cm->ch_num_maskbit << cm->ch_num_shift,275			   (channels - 1) << cm->ch_num_shift);276 277	regmap_update_bits(afe->regmap,278			   cm->reg,279			   cm->update_cnt_maskbit << cm->update_cnt_shift,280			   cm->update_cnt_default << cm->update_cnt_shift);281 282	return 0;283}284 285static int mt8188_afe_enable_cm(struct mtk_base_afe *afe,286				const struct mt8188_afe_channel_merge *cm,287				bool enable)288{289	if (!cm)290		return -EINVAL;291 292	regmap_update_bits(afe->regmap,293			   cm->reg,294			   cm->en_maskbit << cm->en_shift,295			   enable << cm->en_shift);296 297	return 0;298}299 300static int mt8188_afe_fe_startup(struct snd_pcm_substream *substream,301				 struct snd_soc_dai *dai)302{303	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);304	struct snd_pcm_runtime *runtime = substream->runtime;305	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);306	int id = snd_soc_rtd_to_cpu(rtd, 0)->id;307	int ret;308 309	ret = mtk_afe_fe_startup(substream, dai);310 311	snd_pcm_hw_constraint_step(runtime, 0,312				   SNDRV_PCM_HW_PARAM_BUFFER_BYTES,313				   MT8188_MEMIF_BUFFER_BYTES_ALIGN);314 315	if (id != MT8188_AFE_MEMIF_DL7)316		goto out;317 318	ret = snd_pcm_hw_constraint_minmax(runtime,319					   SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 1,320					   MT8188_MEMIF_DL7_MAX_PERIOD_SIZE);321	if (ret < 0)322		dev_dbg(afe->dev, "hw_constraint_minmax failed\n");323out:324	return ret;325}326 327static void mt8188_afe_fe_shutdown(struct snd_pcm_substream *substream,328				   struct snd_soc_dai *dai)329{330	mtk_afe_fe_shutdown(substream, dai);331}332 333static int mt8188_afe_fe_hw_params(struct snd_pcm_substream *substream,334				   struct snd_pcm_hw_params *params,335				   struct snd_soc_dai *dai)336{337	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);338	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);339	int id = snd_soc_rtd_to_cpu(rtd, 0)->id;340	struct mtk_base_afe_memif *memif = &afe->memif[id];341	const struct mtk_base_memif_data *data = memif->data;342	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);343	unsigned int channels = params_channels(params);344 345	mt8188_afe_config_cm(afe, cm, channels);346 347	if (data->ch_num_reg >= 0) {348		regmap_update_bits(afe->regmap, data->ch_num_reg,349				   data->ch_num_maskbit << data->ch_num_shift,350				   channels << data->ch_num_shift);351	}352 353	return mtk_afe_fe_hw_params(substream, params, dai);354}355 356static int mt8188_afe_fe_trigger(struct snd_pcm_substream *substream, int cmd,357				 struct snd_soc_dai *dai)358{359	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);360	const struct mt8188_afe_channel_merge *cm = mt8188_afe_found_cm(dai);361	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);362	struct snd_pcm_runtime * const runtime = substream->runtime;363	int id = snd_soc_rtd_to_cpu(rtd, 0)->id;364	struct mtk_base_afe_memif *memif = &afe->memif[id];365	struct mtk_base_afe_irq *irqs = &afe->irqs[memif->irq_usage];366	const struct mtk_base_irq_data *irq_data = irqs->irq_data;367	unsigned int counter = runtime->period_size;368	int fs;369	int ret;370 371	switch (cmd) {372	case SNDRV_PCM_TRIGGER_START:373	case SNDRV_PCM_TRIGGER_RESUME:374		mt8188_afe_enable_cm(afe, cm, true);375 376		ret = mtk_memif_set_enable(afe, id);377		if (ret) {378			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",379				__func__, id, ret);380			return ret;381		}382 383		/* set irq counter */384		regmap_update_bits(afe->regmap, irq_data->irq_cnt_reg,385				   irq_data->irq_cnt_maskbit << irq_data->irq_cnt_shift,386				   counter << irq_data->irq_cnt_shift);387 388		/* set irq fs */389		fs = afe->irq_fs(substream, runtime->rate);390 391		if (fs < 0)392			return -EINVAL;393 394		if (irq_data->irq_fs_reg >= 0)395			regmap_update_bits(afe->regmap, irq_data->irq_fs_reg,396					   irq_data->irq_fs_maskbit << irq_data->irq_fs_shift,397					   fs << irq_data->irq_fs_shift);398 399		/* delay for uplink */400		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {401			u32 sample_delay;402 403			sample_delay = ((MEMIF_AXI_MINLEN + 1) * 64 +404					(runtime->channels * runtime->sample_bits - 1)) /405					(runtime->channels * runtime->sample_bits) + 1;406 407			udelay(sample_delay * 1000000 / runtime->rate);408		}409 410		/* enable interrupt */411		regmap_set_bits(afe->regmap, irq_data->irq_en_reg,412				BIT(irq_data->irq_en_shift));413		return 0;414	case SNDRV_PCM_TRIGGER_STOP:415	case SNDRV_PCM_TRIGGER_SUSPEND:416		mt8188_afe_enable_cm(afe, cm, false);417 418		ret = mtk_memif_set_disable(afe, id);419		if (ret)420			dev_err(afe->dev, "%s(), error, id %d, memif enable, ret %d\n",421				__func__, id, ret);422 423		/* disable interrupt */424 425		regmap_clear_bits(afe->regmap, irq_data->irq_en_reg,426				  BIT(irq_data->irq_en_shift));427		/* and clear pending IRQ */428		regmap_write(afe->regmap, irq_data->irq_clr_reg,429			     BIT(irq_data->irq_clr_shift));430		return ret;431	default:432		return -EINVAL;433	}434}435 436static const struct snd_soc_dai_ops mt8188_afe_fe_dai_ops = {437	.startup	= mt8188_afe_fe_startup,438	.shutdown	= mt8188_afe_fe_shutdown,439	.hw_params	= mt8188_afe_fe_hw_params,440	.hw_free	= mtk_afe_fe_hw_free,441	.prepare	= mtk_afe_fe_prepare,442	.trigger	= mt8188_afe_fe_trigger,443};444 445#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\446		       SNDRV_PCM_RATE_88200 |\447		       SNDRV_PCM_RATE_96000 |\448		       SNDRV_PCM_RATE_176400 |\449		       SNDRV_PCM_RATE_192000 |\450		       SNDRV_PCM_RATE_352800 |\451		       SNDRV_PCM_RATE_384000)452 453#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\454			 SNDRV_PCM_FMTBIT_S24_LE |\455			 SNDRV_PCM_FMTBIT_S32_LE)456 457static struct snd_soc_dai_driver mt8188_memif_dai_driver[] = {458	/* FE DAIs: memory intefaces to CPU */459	{460		.name = "DL2",461		.id = MT8188_AFE_MEMIF_DL2,462		.playback = {463			.stream_name = "DL2",464			.channels_min = 1,465			.channels_max = 2,466			.rates = MTK_PCM_RATES,467			.formats = MTK_PCM_FORMATS,468		},469		.ops = &mt8188_afe_fe_dai_ops,470	},471	{472		.name = "DL3",473		.id = MT8188_AFE_MEMIF_DL3,474		.playback = {475			.stream_name = "DL3",476			.channels_min = 1,477			.channels_max = 2,478			.rates = MTK_PCM_RATES,479			.formats = MTK_PCM_FORMATS,480		},481		.ops = &mt8188_afe_fe_dai_ops,482	},483	{484		.name = "DL6",485		.id = MT8188_AFE_MEMIF_DL6,486		.playback = {487			.stream_name = "DL6",488			.channels_min = 1,489			.channels_max = 2,490			.rates = MTK_PCM_RATES,491			.formats = MTK_PCM_FORMATS,492		},493		.ops = &mt8188_afe_fe_dai_ops,494	},495	{496		.name = "DL7",497		.id = MT8188_AFE_MEMIF_DL7,498		.playback = {499			.stream_name = "DL7",500			.channels_min = 1,501			.channels_max = 2,502			.rates = MTK_PCM_RATES,503			.formats = MTK_PCM_FORMATS,504		},505		.ops = &mt8188_afe_fe_dai_ops,506	},507	{508		.name = "DL8",509		.id = MT8188_AFE_MEMIF_DL8,510		.playback = {511			.stream_name = "DL8",512			.channels_min = 1,513			.channels_max = 16,514			.rates = MTK_PCM_RATES,515			.formats = MTK_PCM_FORMATS,516		},517		.ops = &mt8188_afe_fe_dai_ops,518	},519	{520		.name = "DL10",521		.id = MT8188_AFE_MEMIF_DL10,522		.playback = {523			.stream_name = "DL10",524			.channels_min = 1,525			.channels_max = 8,526			.rates = MTK_PCM_RATES,527			.formats = MTK_PCM_FORMATS,528		},529		.ops = &mt8188_afe_fe_dai_ops,530	},531	{532		.name = "DL11",533		.id = MT8188_AFE_MEMIF_DL11,534		.playback = {535			.stream_name = "DL11",536			.channels_min = 1,537			.channels_max = 32,538			.rates = MTK_PCM_RATES,539			.formats = MTK_PCM_FORMATS,540		},541		.ops = &mt8188_afe_fe_dai_ops,542	},543	{544		.name = "UL1",545		.id = MT8188_AFE_MEMIF_UL1,546		.capture = {547			.stream_name = "UL1",548			.channels_min = 1,549			.channels_max = 8,550			.rates = MTK_PCM_RATES,551			.formats = MTK_PCM_FORMATS,552		},553		.ops = &mt8188_afe_fe_dai_ops,554	},555	{556		.name = "UL2",557		.id = MT8188_AFE_MEMIF_UL2,558		.capture = {559			.stream_name = "UL2",560			.channels_min = 1,561			.channels_max = 8,562			.rates = MTK_PCM_RATES,563			.formats = MTK_PCM_FORMATS,564		},565		.ops = &mt8188_afe_fe_dai_ops,566	},567	{568		.name = "UL3",569		.id = MT8188_AFE_MEMIF_UL3,570		.capture = {571			.stream_name = "UL3",572			.channels_min = 1,573			.channels_max = 16,574			.rates = MTK_PCM_RATES,575			.formats = MTK_PCM_FORMATS,576		},577		.ops = &mt8188_afe_fe_dai_ops,578	},579	{580		.name = "UL4",581		.id = MT8188_AFE_MEMIF_UL4,582		.capture = {583			.stream_name = "UL4",584			.channels_min = 1,585			.channels_max = 2,586			.rates = MTK_PCM_RATES,587			.formats = MTK_PCM_FORMATS,588		},589		.ops = &mt8188_afe_fe_dai_ops,590	},591	{592		.name = "UL5",593		.id = MT8188_AFE_MEMIF_UL5,594		.capture = {595			.stream_name = "UL5",596			.channels_min = 1,597			.channels_max = 2,598			.rates = MTK_PCM_RATES,599			.formats = MTK_PCM_FORMATS,600		},601		.ops = &mt8188_afe_fe_dai_ops,602	},603	{604		.name = "UL6",605		.id = MT8188_AFE_MEMIF_UL6,606		.capture = {607			.stream_name = "UL6",608			.channels_min = 1,609			.channels_max = 8,610			.rates = MTK_PCM_RATES,611			.formats = MTK_PCM_FORMATS,612		},613		.ops = &mt8188_afe_fe_dai_ops,614	},615	{616		.name = "UL8",617		.id = MT8188_AFE_MEMIF_UL8,618		.capture = {619			.stream_name = "UL8",620			.channels_min = 1,621			.channels_max = 24,622			.rates = MTK_PCM_RATES,623			.formats = MTK_PCM_FORMATS,624		},625		.ops = &mt8188_afe_fe_dai_ops,626	},627	{628		.name = "UL9",629		.id = MT8188_AFE_MEMIF_UL9,630		.capture = {631			.stream_name = "UL9",632			.channels_min = 1,633			.channels_max = 32,634			.rates = MTK_PCM_RATES,635			.formats = MTK_PCM_FORMATS,636		},637		.ops = &mt8188_afe_fe_dai_ops,638	},639	{640		.name = "UL10",641		.id = MT8188_AFE_MEMIF_UL10,642		.capture = {643			.stream_name = "UL10",644			.channels_min = 1,645			.channels_max = 4,646			.rates = MTK_PCM_RATES,647			.formats = MTK_PCM_FORMATS,648		},649		.ops = &mt8188_afe_fe_dai_ops,650	},651};652 653static const struct snd_kcontrol_new o002_mix[] = {654	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN2, 0, 1, 0),655	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN2, 12, 1, 0),656	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN2, 20, 1, 0),657	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN2, 22, 1, 0),658	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN2_2, 6, 1, 0),659	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN2_2, 8, 1, 0),660	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN2_5, 8, 1, 0),661};662 663static const struct snd_kcontrol_new o003_mix[] = {664	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN3, 1, 1, 0),665	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN3, 13, 1, 0),666	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN3, 21, 1, 0),667	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN3, 23, 1, 0),668	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN3_2, 7, 1, 0),669	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN3_2, 9, 1, 0),670	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN3_5, 9, 1, 0),671};672 673static const struct snd_kcontrol_new o004_mix[] = {674	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN4, 0, 1, 0),675	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN4, 14, 1, 0),676	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN4, 24, 1, 0),677	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN4_2, 10, 1, 0),678};679 680static const struct snd_kcontrol_new o005_mix[] = {681	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN5, 1, 1, 0),682	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN5, 15, 1, 0),683	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN5, 25, 1, 0),684	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN5_2, 11, 1, 0),685};686 687static const struct snd_kcontrol_new o006_mix[] = {688	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN6, 0, 1, 0),689	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN6, 16, 1, 0),690	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN6, 26, 1, 0),691	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN6_2, 12, 1, 0),692};693 694static const struct snd_kcontrol_new o007_mix[] = {695	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN7, 1, 1, 0),696	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN7, 17, 1, 0),697	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN7, 27, 1, 0),698	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN7_2, 13, 1, 0),699};700 701static const struct snd_kcontrol_new o008_mix[] = {702	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN8, 18, 1, 0),703	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN8, 28, 1, 0),704	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN8_2, 14, 1, 0),705};706 707static const struct snd_kcontrol_new o009_mix[] = {708	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN9, 19, 1, 0),709	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN9, 29, 1, 0),710	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN9_2, 15, 1, 0),711};712 713static const struct snd_kcontrol_new o010_mix[] = {714	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN10, 22, 1, 0),715	SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN10, 30, 1, 0),716	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN10_1, 14, 1, 0),717	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN10_2, 8, 1, 0),718	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN10_2, 16, 1, 0),719	SOC_DAPM_SINGLE_AUTODISABLE("I188 Switch", AFE_CONN10_5, 28, 1, 0),720};721 722static const struct snd_kcontrol_new o011_mix[] = {723	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN11, 23, 1, 0),724	SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN11, 31, 1, 0),725	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN11_1, 15, 1, 0),726	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN11_2, 9, 1, 0),727	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN11_2, 17, 1, 0),728	SOC_DAPM_SINGLE_AUTODISABLE("I189 Switch", AFE_CONN11_5, 29, 1, 0),729};730 731static const struct snd_kcontrol_new o012_mix[] = {732	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN12, 24, 1, 0),733	SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN12_1, 0, 1, 0),734	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN12_1, 16, 1, 0),735	SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN12_2, 10, 1, 0),736	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN12_2, 18, 1, 0),737	SOC_DAPM_SINGLE_AUTODISABLE("I190 Switch", AFE_CONN12_5, 30, 1, 0),738};739 740static const struct snd_kcontrol_new o013_mix[] = {741	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN13, 25, 1, 0),742	SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN13_1, 1, 1, 0),743	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN13_1, 17, 1, 0),744	SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN13_2, 11, 1, 0),745	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN13_2, 19, 1, 0),746	SOC_DAPM_SINGLE_AUTODISABLE("I191 Switch", AFE_CONN13_5, 31, 1, 0),747};748 749static const struct snd_kcontrol_new o014_mix[] = {750	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN14, 26, 1, 0),751	SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN14_1, 2, 1, 0),752	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN14_1, 18, 1, 0),753	SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN14_2, 12, 1, 0),754	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN14_2, 20, 1, 0),755	SOC_DAPM_SINGLE_AUTODISABLE("I192 Switch", AFE_CONN14_6, 0, 1, 0),756};757 758static const struct snd_kcontrol_new o015_mix[] = {759	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN15, 27, 1, 0),760	SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN15_1, 3, 1, 0),761	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN15_1, 19, 1, 0),762	SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN15_2, 13, 1, 0),763	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN15_2, 21, 1, 0),764	SOC_DAPM_SINGLE_AUTODISABLE("I193 Switch", AFE_CONN15_6, 1, 1, 0),765};766 767static const struct snd_kcontrol_new o016_mix[] = {768	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN16, 28, 1, 0),769	SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN16_1, 4, 1, 0),770	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN16_1, 20, 1, 0),771	SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN16_2, 14, 1, 0),772	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN16_2, 22, 1, 0),773	SOC_DAPM_SINGLE_AUTODISABLE("I194 Switch", AFE_CONN16_6, 2, 1, 0),774};775 776static const struct snd_kcontrol_new o017_mix[] = {777	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN17, 29, 1, 0),778	SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN17_1, 5, 1, 0),779	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN17_1, 21, 1, 0),780	SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN17_2, 15, 1, 0),781	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN17_2, 23, 1, 0),782	SOC_DAPM_SINGLE_AUTODISABLE("I195 Switch", AFE_CONN17_6, 3, 1, 0),783};784 785static const struct snd_kcontrol_new o018_mix[] = {786	SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN18_2, 16, 1, 0),787};788 789static const struct snd_kcontrol_new o019_mix[] = {790	SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN19_2, 17, 1, 0),791};792 793static const struct snd_kcontrol_new o020_mix[] = {794	SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN20_2, 18, 1, 0),795};796 797static const struct snd_kcontrol_new o021_mix[] = {798	SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN21_2, 19, 1, 0),799};800 801static const struct snd_kcontrol_new o022_mix[] = {802	SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN22_2, 20, 1, 0),803};804 805static const struct snd_kcontrol_new o023_mix[] = {806	SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN23_2, 21, 1, 0),807};808 809static const struct snd_kcontrol_new o024_mix[] = {810	SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN24_2, 22, 1, 0),811};812 813static const struct snd_kcontrol_new o025_mix[] = {814	SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN25_2, 23, 1, 0),815};816 817static const struct snd_kcontrol_new o026_mix[] = {818	SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN26_1, 14, 1, 0),819};820 821static const struct snd_kcontrol_new o027_mix[] = {822	SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN27_1, 15, 1, 0),823};824 825static const struct snd_kcontrol_new o028_mix[] = {826	SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN28_1, 16, 1, 0),827};828 829static const struct snd_kcontrol_new o029_mix[] = {830	SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN29_1, 17, 1, 0),831};832 833static const struct snd_kcontrol_new o030_mix[] = {834	SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN30_1, 18, 1, 0),835};836 837static const struct snd_kcontrol_new o031_mix[] = {838	SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN31_1, 19, 1, 0),839};840 841static const struct snd_kcontrol_new o032_mix[] = {842	SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN32_1, 20, 1, 0),843};844 845static const struct snd_kcontrol_new o033_mix[] = {846	SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN33_1, 21, 1, 0),847};848 849static const struct snd_kcontrol_new o034_mix[] = {850	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN34, 0, 1, 0),851	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN34, 2, 1, 0),852	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN34, 12, 1, 0),853	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN34, 20, 1, 0),854	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN34_2, 6, 1, 0),855	SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN34_2, 8, 1, 0),856	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN34_5, 8, 1, 0),857};858 859static const struct snd_kcontrol_new o035_mix[] = {860	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN35, 1, 1, 0),861	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN35, 3, 1, 0),862	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN35, 13, 1, 0),863	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN35, 21, 1, 0),864	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN35_2, 7, 1, 0),865	SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN35_2, 9, 1, 0),866	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN35_5, 8, 1, 0),867	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN35_5, 9, 1, 0),868};869 870static const struct snd_kcontrol_new o036_mix[] = {871	SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN36, 0, 1, 0),872	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN36, 12, 1, 0),873	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN36, 20, 1, 0),874	SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN36_2, 6, 1, 0),875	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN36_5, 8, 1, 0),876};877 878static const struct snd_kcontrol_new o037_mix[] = {879	SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN37, 1, 1, 0),880	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN37, 13, 1, 0),881	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN37, 21, 1, 0),882	SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN37_2, 7, 1, 0),883	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN37_5, 9, 1, 0),884};885 886static const struct snd_kcontrol_new o038_mix[] = {887	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN38, 22, 1, 0),888	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN38_5, 8, 1, 0),889};890 891static const struct snd_kcontrol_new o039_mix[] = {892	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN39, 23, 1, 0),893	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN39_5, 9, 1, 0),894};895 896static const struct snd_kcontrol_new o040_mix[] = {897	SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN40, 2, 1, 0),898	SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN40, 12, 1, 0),899	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN40, 22, 1, 0),900	SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN40_5, 8, 1, 0),901};902 903static const struct snd_kcontrol_new o041_mix[] = {904	SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN41, 3, 1, 0),905	SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN41, 13, 1, 0),906	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN41, 23, 1, 0),907	SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN41_5, 9, 1, 0),908};909 910static const struct snd_kcontrol_new o042_mix[] = {911	SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN42, 14, 1, 0),912	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN42, 24, 1, 0),913};914 915static const struct snd_kcontrol_new o043_mix[] = {916	SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN43, 15, 1, 0),917	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN43, 25, 1, 0),918};919 920static const struct snd_kcontrol_new o044_mix[] = {921	SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN44, 16, 1, 0),922	SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN44, 26, 1, 0),923};924 925static const struct snd_kcontrol_new o045_mix[] = {926	SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN45, 17, 1, 0),927	SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN45, 27, 1, 0),928};929 930static const struct snd_kcontrol_new o046_mix[] = {931	SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN46, 18, 1, 0),932	SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN46, 28, 1, 0),933};934 935static const struct snd_kcontrol_new o047_mix[] = {936	SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN47, 19, 1, 0),937	SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN47, 29, 1, 0),938};939 940static const struct snd_kcontrol_new o182_mix[] = {941	SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN182, 20, 1, 0),942	SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN182, 22, 1, 0),943	SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN182, 24, 1, 0),944};945 946static const struct snd_kcontrol_new o183_mix[] = {947	SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN183, 21, 1, 0),948	SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN183, 23, 1, 0),949	SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN183, 25, 1, 0),950};951 952static const char * const dl8_dl11_data_sel_mux_text[] = {953	"dl8", "dl11",954};955 956static SOC_ENUM_SINGLE_DECL(dl8_dl11_data_sel_mux_enum,957			    AFE_DAC_CON2, 0, dl8_dl11_data_sel_mux_text);958 959static const struct snd_kcontrol_new dl8_dl11_data_sel_mux =960	SOC_DAPM_ENUM("DL8_DL11 Sink",961		      dl8_dl11_data_sel_mux_enum);962 963static const struct snd_soc_dapm_widget mt8188_memif_widgets[] = {964	/* DL6 */965	SND_SOC_DAPM_MIXER("I000", SND_SOC_NOPM, 0, 0, NULL, 0),966	SND_SOC_DAPM_MIXER("I001", SND_SOC_NOPM, 0, 0, NULL, 0),967 968	/* DL3 */969	SND_SOC_DAPM_MIXER("I020", SND_SOC_NOPM, 0, 0, NULL, 0),970	SND_SOC_DAPM_MIXER("I021", SND_SOC_NOPM, 0, 0, NULL, 0),971 972	/* DL11 */973	SND_SOC_DAPM_MIXER("I022", SND_SOC_NOPM, 0, 0, NULL, 0),974	SND_SOC_DAPM_MIXER("I023", SND_SOC_NOPM, 0, 0, NULL, 0),975	SND_SOC_DAPM_MIXER("I024", SND_SOC_NOPM, 0, 0, NULL, 0),976	SND_SOC_DAPM_MIXER("I025", SND_SOC_NOPM, 0, 0, NULL, 0),977	SND_SOC_DAPM_MIXER("I026", SND_SOC_NOPM, 0, 0, NULL, 0),978	SND_SOC_DAPM_MIXER("I027", SND_SOC_NOPM, 0, 0, NULL, 0),979	SND_SOC_DAPM_MIXER("I028", SND_SOC_NOPM, 0, 0, NULL, 0),980	SND_SOC_DAPM_MIXER("I029", SND_SOC_NOPM, 0, 0, NULL, 0),981	SND_SOC_DAPM_MIXER("I030", SND_SOC_NOPM, 0, 0, NULL, 0),982	SND_SOC_DAPM_MIXER("I031", SND_SOC_NOPM, 0, 0, NULL, 0),983	SND_SOC_DAPM_MIXER("I032", SND_SOC_NOPM, 0, 0, NULL, 0),984	SND_SOC_DAPM_MIXER("I033", SND_SOC_NOPM, 0, 0, NULL, 0),985	SND_SOC_DAPM_MIXER("I034", SND_SOC_NOPM, 0, 0, NULL, 0),986	SND_SOC_DAPM_MIXER("I035", SND_SOC_NOPM, 0, 0, NULL, 0),987	SND_SOC_DAPM_MIXER("I036", SND_SOC_NOPM, 0, 0, NULL, 0),988	SND_SOC_DAPM_MIXER("I037", SND_SOC_NOPM, 0, 0, NULL, 0),989 990	/* DL11/DL8 */991	SND_SOC_DAPM_MIXER("I046", SND_SOC_NOPM, 0, 0, NULL, 0),992	SND_SOC_DAPM_MIXER("I047", SND_SOC_NOPM, 0, 0, NULL, 0),993	SND_SOC_DAPM_MIXER("I048", SND_SOC_NOPM, 0, 0, NULL, 0),994	SND_SOC_DAPM_MIXER("I049", SND_SOC_NOPM, 0, 0, NULL, 0),995	SND_SOC_DAPM_MIXER("I050", SND_SOC_NOPM, 0, 0, NULL, 0),996	SND_SOC_DAPM_MIXER("I051", SND_SOC_NOPM, 0, 0, NULL, 0),997	SND_SOC_DAPM_MIXER("I052", SND_SOC_NOPM, 0, 0, NULL, 0),998	SND_SOC_DAPM_MIXER("I053", SND_SOC_NOPM, 0, 0, NULL, 0),999	SND_SOC_DAPM_MIXER("I054", SND_SOC_NOPM, 0, 0, NULL, 0),1000	SND_SOC_DAPM_MIXER("I055", SND_SOC_NOPM, 0, 0, NULL, 0),1001	SND_SOC_DAPM_MIXER("I056", SND_SOC_NOPM, 0, 0, NULL, 0),1002	SND_SOC_DAPM_MIXER("I057", SND_SOC_NOPM, 0, 0, NULL, 0),1003	SND_SOC_DAPM_MIXER("I058", SND_SOC_NOPM, 0, 0, NULL, 0),1004	SND_SOC_DAPM_MIXER("I059", SND_SOC_NOPM, 0, 0, NULL, 0),1005	SND_SOC_DAPM_MIXER("I060", SND_SOC_NOPM, 0, 0, NULL, 0),1006	SND_SOC_DAPM_MIXER("I061", SND_SOC_NOPM, 0, 0, NULL, 0),1007 1008	/* DL2 */1009	SND_SOC_DAPM_MIXER("I070", SND_SOC_NOPM, 0, 0, NULL, 0),1010	SND_SOC_DAPM_MIXER("I071", SND_SOC_NOPM, 0, 0, NULL, 0),1011 1012	SND_SOC_DAPM_MUX("DL8_DL11 Mux",1013			 SND_SOC_NOPM, 0, 0, &dl8_dl11_data_sel_mux),1014 1015	/* UL9 */1016	SND_SOC_DAPM_MIXER("O002", SND_SOC_NOPM, 0, 0,1017			   o002_mix, ARRAY_SIZE(o002_mix)),1018	SND_SOC_DAPM_MIXER("O003", SND_SOC_NOPM, 0, 0,1019			   o003_mix, ARRAY_SIZE(o003_mix)),1020	SND_SOC_DAPM_MIXER("O004", SND_SOC_NOPM, 0, 0,1021			   o004_mix, ARRAY_SIZE(o004_mix)),1022	SND_SOC_DAPM_MIXER("O005", SND_SOC_NOPM, 0, 0,1023			   o005_mix, ARRAY_SIZE(o005_mix)),1024	SND_SOC_DAPM_MIXER("O006", SND_SOC_NOPM, 0, 0,1025			   o006_mix, ARRAY_SIZE(o006_mix)),1026	SND_SOC_DAPM_MIXER("O007", SND_SOC_NOPM, 0, 0,1027			   o007_mix, ARRAY_SIZE(o007_mix)),1028	SND_SOC_DAPM_MIXER("O008", SND_SOC_NOPM, 0, 0,1029			   o008_mix, ARRAY_SIZE(o008_mix)),1030	SND_SOC_DAPM_MIXER("O009", SND_SOC_NOPM, 0, 0,1031			   o009_mix, ARRAY_SIZE(o009_mix)),1032	SND_SOC_DAPM_MIXER("O010", SND_SOC_NOPM, 0, 0,1033			   o010_mix, ARRAY_SIZE(o010_mix)),1034	SND_SOC_DAPM_MIXER("O011", SND_SOC_NOPM, 0, 0,1035			   o011_mix, ARRAY_SIZE(o011_mix)),1036	SND_SOC_DAPM_MIXER("O012", SND_SOC_NOPM, 0, 0,1037			   o012_mix, ARRAY_SIZE(o012_mix)),1038	SND_SOC_DAPM_MIXER("O013", SND_SOC_NOPM, 0, 0,1039			   o013_mix, ARRAY_SIZE(o013_mix)),1040	SND_SOC_DAPM_MIXER("O014", SND_SOC_NOPM, 0, 0,1041			   o014_mix, ARRAY_SIZE(o014_mix)),1042	SND_SOC_DAPM_MIXER("O015", SND_SOC_NOPM, 0, 0,1043			   o015_mix, ARRAY_SIZE(o015_mix)),1044	SND_SOC_DAPM_MIXER("O016", SND_SOC_NOPM, 0, 0,1045			   o016_mix, ARRAY_SIZE(o016_mix)),1046	SND_SOC_DAPM_MIXER("O017", SND_SOC_NOPM, 0, 0,1047			   o017_mix, ARRAY_SIZE(o017_mix)),1048	SND_SOC_DAPM_MIXER("O018", SND_SOC_NOPM, 0, 0,1049			   o018_mix, ARRAY_SIZE(o018_mix)),1050	SND_SOC_DAPM_MIXER("O019", SND_SOC_NOPM, 0, 0,1051			   o019_mix, ARRAY_SIZE(o019_mix)),1052	SND_SOC_DAPM_MIXER("O020", SND_SOC_NOPM, 0, 0,1053			   o020_mix, ARRAY_SIZE(o020_mix)),1054	SND_SOC_DAPM_MIXER("O021", SND_SOC_NOPM, 0, 0,1055			   o021_mix, ARRAY_SIZE(o021_mix)),1056	SND_SOC_DAPM_MIXER("O022", SND_SOC_NOPM, 0, 0,1057			   o022_mix, ARRAY_SIZE(o022_mix)),1058	SND_SOC_DAPM_MIXER("O023", SND_SOC_NOPM, 0, 0,1059			   o023_mix, ARRAY_SIZE(o023_mix)),1060	SND_SOC_DAPM_MIXER("O024", SND_SOC_NOPM, 0, 0,1061			   o024_mix, ARRAY_SIZE(o024_mix)),1062	SND_SOC_DAPM_MIXER("O025", SND_SOC_NOPM, 0, 0,1063			   o025_mix, ARRAY_SIZE(o025_mix)),1064	SND_SOC_DAPM_MIXER("O026", SND_SOC_NOPM, 0, 0,1065			   o026_mix, ARRAY_SIZE(o026_mix)),1066	SND_SOC_DAPM_MIXER("O027", SND_SOC_NOPM, 0, 0,1067			   o027_mix, ARRAY_SIZE(o027_mix)),1068	SND_SOC_DAPM_MIXER("O028", SND_SOC_NOPM, 0, 0,1069			   o028_mix, ARRAY_SIZE(o028_mix)),1070	SND_SOC_DAPM_MIXER("O029", SND_SOC_NOPM, 0, 0,1071			   o029_mix, ARRAY_SIZE(o029_mix)),1072	SND_SOC_DAPM_MIXER("O030", SND_SOC_NOPM, 0, 0,1073			   o030_mix, ARRAY_SIZE(o030_mix)),1074	SND_SOC_DAPM_MIXER("O031", SND_SOC_NOPM, 0, 0,1075			   o031_mix, ARRAY_SIZE(o031_mix)),1076	SND_SOC_DAPM_MIXER("O032", SND_SOC_NOPM, 0, 0,1077			   o032_mix, ARRAY_SIZE(o032_mix)),1078	SND_SOC_DAPM_MIXER("O033", SND_SOC_NOPM, 0, 0,1079			   o033_mix, ARRAY_SIZE(o033_mix)),1080 1081	/* UL4 */1082	SND_SOC_DAPM_MIXER("O034", SND_SOC_NOPM, 0, 0,1083			   o034_mix, ARRAY_SIZE(o034_mix)),1084	SND_SOC_DAPM_MIXER("O035", SND_SOC_NOPM, 0, 0,1085			   o035_mix, ARRAY_SIZE(o035_mix)),1086 1087	/* UL5 */1088	SND_SOC_DAPM_MIXER("O036", SND_SOC_NOPM, 0, 0,1089			   o036_mix, ARRAY_SIZE(o036_mix)),1090	SND_SOC_DAPM_MIXER("O037", SND_SOC_NOPM, 0, 0,1091			   o037_mix, ARRAY_SIZE(o037_mix)),1092 1093	/* UL10 */1094	SND_SOC_DAPM_MIXER("O038", SND_SOC_NOPM, 0, 0,1095			   o038_mix, ARRAY_SIZE(o038_mix)),1096	SND_SOC_DAPM_MIXER("O039", SND_SOC_NOPM, 0, 0,1097			   o039_mix, ARRAY_SIZE(o039_mix)),1098	SND_SOC_DAPM_MIXER("O182", SND_SOC_NOPM, 0, 0,1099			   o182_mix, ARRAY_SIZE(o182_mix)),1100	SND_SOC_DAPM_MIXER("O183", SND_SOC_NOPM, 0, 0,1101			   o183_mix, ARRAY_SIZE(o183_mix)),1102 1103	/* UL2 */1104	SND_SOC_DAPM_MIXER("O040", SND_SOC_NOPM, 0, 0,1105			   o040_mix, ARRAY_SIZE(o040_mix)),1106	SND_SOC_DAPM_MIXER("O041", SND_SOC_NOPM, 0, 0,1107			   o041_mix, ARRAY_SIZE(o041_mix)),1108	SND_SOC_DAPM_MIXER("O042", SND_SOC_NOPM, 0, 0,1109			   o042_mix, ARRAY_SIZE(o042_mix)),1110	SND_SOC_DAPM_MIXER("O043", SND_SOC_NOPM, 0, 0,1111			   o043_mix, ARRAY_SIZE(o043_mix)),1112	SND_SOC_DAPM_MIXER("O044", SND_SOC_NOPM, 0, 0,1113			   o044_mix, ARRAY_SIZE(o044_mix)),1114	SND_SOC_DAPM_MIXER("O045", SND_SOC_NOPM, 0, 0,1115			   o045_mix, ARRAY_SIZE(o045_mix)),1116	SND_SOC_DAPM_MIXER("O046", SND_SOC_NOPM, 0, 0,1117			   o046_mix, ARRAY_SIZE(o046_mix)),1118	SND_SOC_DAPM_MIXER("O047", SND_SOC_NOPM, 0, 0,1119			   o047_mix, ARRAY_SIZE(o047_mix)),1120};1121 1122static const struct snd_soc_dapm_route mt8188_memif_routes[] = {1123	{"I000", NULL, "DL6"},1124	{"I001", NULL, "DL6"},1125 1126	{"I020", NULL, "DL3"},1127	{"I021", NULL, "DL3"},1128 1129	{"I022", NULL, "DL11"},1130	{"I023", NULL, "DL11"},1131	{"I024", NULL, "DL11"},1132	{"I025", NULL, "DL11"},1133	{"I026", NULL, "DL11"},1134	{"I027", NULL, "DL11"},1135	{"I028", NULL, "DL11"},1136	{"I029", NULL, "DL11"},1137	{"I030", NULL, "DL11"},1138	{"I031", NULL, "DL11"},1139	{"I032", NULL, "DL11"},1140	{"I033", NULL, "DL11"},1141	{"I034", NULL, "DL11"},1142	{"I035", NULL, "DL11"},1143	{"I036", NULL, "DL11"},1144	{"I037", NULL, "DL11"},1145 1146	{"DL8_DL11 Mux", "dl8", "DL8"},1147	{"DL8_DL11 Mux", "dl11", "DL11"},1148 1149	{"I046", NULL, "DL8_DL11 Mux"},1150	{"I047", NULL, "DL8_DL11 Mux"},1151	{"I048", NULL, "DL8_DL11 Mux"},1152	{"I049", NULL, "DL8_DL11 Mux"},1153	{"I050", NULL, "DL8_DL11 Mux"},1154	{"I051", NULL, "DL8_DL11 Mux"},1155	{"I052", NULL, "DL8_DL11 Mux"},1156	{"I053", NULL, "DL8_DL11 Mux"},1157	{"I054", NULL, "DL8_DL11 Mux"},1158	{"I055", NULL, "DL8_DL11 Mux"},1159	{"I056", NULL, "DL8_DL11 Mux"},1160	{"I057", NULL, "DL8_DL11 Mux"},1161	{"I058", NULL, "DL8_DL11 Mux"},1162	{"I059", NULL, "DL8_DL11 Mux"},1163	{"I060", NULL, "DL8_DL11 Mux"},1164	{"I061", NULL, "DL8_DL11 Mux"},1165 1166	{"I070", NULL, "DL2"},1167	{"I071", NULL, "DL2"},1168 1169	{"UL9", NULL, "O002"},1170	{"UL9", NULL, "O003"},1171	{"UL9", NULL, "O004"},1172	{"UL9", NULL, "O005"},1173	{"UL9", NULL, "O006"},1174	{"UL9", NULL, "O007"},1175	{"UL9", NULL, "O008"},1176	{"UL9", NULL, "O009"},1177	{"UL9", NULL, "O010"},1178	{"UL9", NULL, "O011"},1179	{"UL9", NULL, "O012"},1180	{"UL9", NULL, "O013"},1181	{"UL9", NULL, "O014"},1182	{"UL9", NULL, "O015"},1183	{"UL9", NULL, "O016"},1184	{"UL9", NULL, "O017"},1185	{"UL9", NULL, "O018"},1186	{"UL9", NULL, "O019"},1187	{"UL9", NULL, "O020"},1188	{"UL9", NULL, "O021"},1189	{"UL9", NULL, "O022"},1190	{"UL9", NULL, "O023"},1191	{"UL9", NULL, "O024"},1192	{"UL9", NULL, "O025"},1193	{"UL9", NULL, "O026"},1194	{"UL9", NULL, "O027"},1195	{"UL9", NULL, "O028"},1196	{"UL9", NULL, "O029"},1197	{"UL9", NULL, "O030"},1198	{"UL9", NULL, "O031"},1199	{"UL9", NULL, "O032"},1200	{"UL9", NULL, "O033"},1201 1202	{"UL4", NULL, "O034"},1203	{"UL4", NULL, "O035"},1204 1205	{"UL5", NULL, "O036"},1206	{"UL5", NULL, "O037"},1207 1208	{"UL10", NULL, "O038"},1209	{"UL10", NULL, "O039"},1210	{"UL10", NULL, "O182"},1211	{"UL10", NULL, "O183"},1212 1213	{"UL2", NULL, "O040"},1214	{"UL2", NULL, "O041"},1215	{"UL2", NULL, "O042"},1216	{"UL2", NULL, "O043"},1217	{"UL2", NULL, "O044"},1218	{"UL2", NULL, "O045"},1219	{"UL2", NULL, "O046"},1220	{"UL2", NULL, "O047"},1221 1222	{"O004", "I000 Switch", "I000"},1223	{"O005", "I001 Switch", "I001"},1224 1225	{"O006", "I000 Switch", "I000"},1226	{"O007", "I001 Switch", "I001"},1227 1228	{"O010", "I022 Switch", "I022"},1229	{"O011", "I023 Switch", "I023"},1230	{"O012", "I024 Switch", "I024"},1231	{"O013", "I025 Switch", "I025"},1232	{"O014", "I026 Switch", "I026"},1233	{"O015", "I027 Switch", "I027"},1234	{"O016", "I028 Switch", "I028"},1235	{"O017", "I029 Switch", "I029"},1236 1237	{"O010", "I046 Switch", "I046"},1238	{"O011", "I047 Switch", "I047"},1239	{"O012", "I048 Switch", "I048"},1240	{"O013", "I049 Switch", "I049"},1241	{"O014", "I050 Switch", "I050"},1242	{"O015", "I051 Switch", "I051"},1243	{"O016", "I052 Switch", "I052"},1244	{"O017", "I053 Switch", "I053"},1245 1246	{"O002", "I022 Switch", "I022"},1247	{"O003", "I023 Switch", "I023"},1248	{"O004", "I024 Switch", "I024"},1249	{"O005", "I025 Switch", "I025"},1250	{"O006", "I026 Switch", "I026"},1251	{"O007", "I027 Switch", "I027"},1252	{"O008", "I028 Switch", "I028"},1253	{"O009", "I029 Switch", "I029"},1254	{"O010", "I030 Switch", "I030"},1255	{"O011", "I031 Switch", "I031"},1256	{"O012", "I032 Switch", "I032"},1257	{"O013", "I033 Switch", "I033"},1258	{"O014", "I034 Switch", "I034"},1259	{"O015", "I035 Switch", "I035"},1260	{"O016", "I036 Switch", "I036"},1261	{"O017", "I037 Switch", "I037"},1262	{"O026", "I046 Switch", "I046"},1263	{"O027", "I047 Switch", "I047"},1264	{"O028", "I048 Switch", "I048"},1265	{"O029", "I049 Switch", "I049"},1266	{"O030", "I050 Switch", "I050"},1267	{"O031", "I051 Switch", "I051"},1268	{"O032", "I052 Switch", "I052"},1269	{"O033", "I053 Switch", "I053"},1270 1271	{"O002", "I000 Switch", "I000"},1272	{"O003", "I001 Switch", "I001"},1273	{"O002", "I020 Switch", "I020"},1274	{"O003", "I021 Switch", "I021"},1275	{"O002", "I070 Switch", "I070"},1276	{"O003", "I071 Switch", "I071"},1277 1278	{"O034", "I000 Switch", "I000"},1279	{"O035", "I001 Switch", "I001"},1280	{"O034", "I002 Switch", "I002"},1281	{"O035", "I003 Switch", "I003"},1282	{"O034", "I012 Switch", "I012"},1283	{"O035", "I013 Switch", "I013"},1284	{"O034", "I020 Switch", "I020"},1285	{"O035", "I021 Switch", "I021"},1286	{"O034", "I070 Switch", "I070"},1287	{"O035", "I071 Switch", "I071"},1288	{"O034", "I072 Switch", "I072"},1289	{"O035", "I073 Switch", "I073"},1290 1291	{"O036", "I000 Switch", "I000"},1292	{"O037", "I001 Switch", "I001"},1293	{"O036", "I012 Switch", "I012"},1294	{"O037", "I013 Switch", "I013"},1295	{"O036", "I020 Switch", "I020"},1296	{"O037", "I021 Switch", "I021"},1297	{"O036", "I070 Switch", "I070"},1298	{"O037", "I071 Switch", "I071"},1299	{"O036", "I168 Switch", "I168"},1300	{"O037", "I169 Switch", "I169"},1301 1302	{"O038", "I022 Switch", "I022"},1303	{"O039", "I023 Switch", "I023"},1304	{"O182", "I024 Switch", "I024"},1305	{"O183", "I025 Switch", "I025"},1306 1307	{"O038", "I168 Switch", "I168"},1308	{"O039", "I169 Switch", "I169"},1309 1310	{"O182", "I020 Switch", "I020"},1311	{"O183", "I021 Switch", "I021"},1312 1313	{"O182", "I022 Switch", "I022"},1314	{"O183", "I023 Switch", "I023"},1315 1316	{"O040", "I022 Switch", "I022"},1317	{"O041", "I023 Switch", "I023"},1318	{"O042", "I024 Switch", "I024"},1319	{"O043", "I025 Switch", "I025"},1320	{"O044", "I026 Switch", "I026"},1321	{"O045", "I027 Switch", "I027"},1322	{"O046", "I028 Switch", "I028"},1323	{"O047", "I029 Switch", "I029"},1324 1325	{"O040", "I002 Switch", "I002"},1326	{"O041", "I003 Switch", "I003"},1327 1328	{"O002", "I012 Switch", "I012"},1329	{"O003", "I013 Switch", "I013"},1330	{"O004", "I014 Switch", "I014"},1331	{"O005", "I015 Switch", "I015"},1332	{"O006", "I016 Switch", "I016"},1333	{"O007", "I017 Switch", "I017"},1334	{"O008", "I018 Switch", "I018"},1335	{"O009", "I019 Switch", "I019"},1336	{"O010", "I188 Switch", "I188"},1337	{"O011", "I189 Switch", "I189"},1338	{"O012", "I190 Switch", "I190"},1339	{"O013", "I191 Switch", "I191"},1340	{"O014", "I192 Switch", "I192"},1341	{"O015", "I193 Switch", "I193"},1342	{"O016", "I194 Switch", "I194"},1343	{"O017", "I195 Switch", "I195"},1344 1345	{"O040", "I012 Switch", "I012"},1346	{"O041", "I013 Switch", "I013"},1347	{"O042", "I014 Switch", "I014"},1348	{"O043", "I015 Switch", "I015"},1349	{"O044", "I016 Switch", "I016"},1350	{"O045", "I017 Switch", "I017"},1351	{"O046", "I018 Switch", "I018"},1352	{"O047", "I019 Switch", "I019"},1353 1354	{"O002", "I072 Switch", "I072"},1355	{"O003", "I073 Switch", "I073"},1356	{"O004", "I074 Switch", "I074"},1357	{"O005", "I075 Switch", "I075"},1358	{"O006", "I076 Switch", "I076"},1359	{"O007", "I077 Switch", "I077"},1360	{"O008", "I078 Switch", "I078"},1361	{"O009", "I079 Switch", "I079"},1362	{"O010", "I080 Switch", "I080"},1363	{"O011", "I081 Switch", "I081"},1364	{"O012", "I082 Switch", "I082"},1365	{"O013", "I083 Switch", "I083"},1366	{"O014", "I084 Switch", "I084"},1367	{"O015", "I085 Switch", "I085"},1368	{"O016", "I086 Switch", "I086"},1369	{"O017", "I087 Switch", "I087"},1370 1371	{"O010", "I072 Switch", "I072"},1372	{"O011", "I073 Switch", "I073"},1373	{"O012", "I074 Switch", "I074"},1374	{"O013", "I075 Switch", "I075"},1375	{"O014", "I076 Switch", "I076"},1376	{"O015", "I077 Switch", "I077"},1377	{"O016", "I078 Switch", "I078"},1378	{"O017", "I079 Switch", "I079"},1379	{"O018", "I080 Switch", "I080"},1380	{"O019", "I081 Switch", "I081"},1381	{"O020", "I082 Switch", "I082"},1382	{"O021", "I083 Switch", "I083"},1383	{"O022", "I084 Switch", "I084"},1384	{"O023", "I085 Switch", "I085"},1385	{"O024", "I086 Switch", "I086"},1386	{"O025", "I087 Switch", "I087"},1387 1388	{"O002", "I168 Switch", "I168"},1389	{"O003", "I169 Switch", "I169"},1390 1391	{"O034", "I168 Switch", "I168"},1392	{"O035", "I168 Switch", "I168"},1393	{"O035", "I169 Switch", "I169"},1394 1395	{"O040", "I168 Switch", "I168"},1396	{"O041", "I169 Switch", "I169"},1397};1398 1399static const char * const mt8188_afe_1x_en_sel_text[] = {1400	"a1sys_a2sys", "a3sys", "a4sys",1401};1402 1403static const unsigned int mt8188_afe_1x_en_sel_values[] = {1404	0, 1, 2,1405};1406 1407static SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum,1408				  A3_A4_TIMING_SEL1, 18, 0x3,1409				  mt8188_afe_1x_en_sel_text,1410				  mt8188_afe_1x_en_sel_values);1411static SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum,1412				  A3_A4_TIMING_SEL1, 20, 0x3,1413				  mt8188_afe_1x_en_sel_text,1414				  mt8188_afe_1x_en_sel_values);1415static SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum,1416				  A3_A4_TIMING_SEL1, 22, 0x3,1417				  mt8188_afe_1x_en_sel_text,1418				  mt8188_afe_1x_en_sel_values);1419static SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum,1420				  A3_A4_TIMING_SEL1, 24, 0x3,1421				  mt8188_afe_1x_en_sel_text,1422				  mt8188_afe_1x_en_sel_values);1423static SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum,1424				  A3_A4_TIMING_SEL1, 26, 0x3,1425				  mt8188_afe_1x_en_sel_text,1426				  mt8188_afe_1x_en_sel_values);1427static SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum,1428				  A3_A4_TIMING_SEL1, 28, 0x3,1429				  mt8188_afe_1x_en_sel_text,1430				  mt8188_afe_1x_en_sel_values);1431static SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum,1432				  A3_A4_TIMING_SEL1, 30, 0x3,1433				  mt8188_afe_1x_en_sel_text,1434				  mt8188_afe_1x_en_sel_values);1435static SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum,1436				  A3_A4_TIMING_SEL1, 0, 0x3,1437				  mt8188_afe_1x_en_sel_text,1438				  mt8188_afe_1x_en_sel_values);1439static SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum,1440				  A3_A4_TIMING_SEL1, 2, 0x3,1441				  mt8188_afe_1x_en_sel_text,1442				  mt8188_afe_1x_en_sel_values);1443static SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum,1444				  A3_A4_TIMING_SEL1, 4, 0x3,1445				  mt8188_afe_1x_en_sel_text,1446				  mt8188_afe_1x_en_sel_values);1447static SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum,1448				  A3_A4_TIMING_SEL1, 6, 0x3,1449				  mt8188_afe_1x_en_sel_text,1450				  mt8188_afe_1x_en_sel_values);1451static SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum,1452				  A3_A4_TIMING_SEL1, 8, 0x3,1453				  mt8188_afe_1x_en_sel_text,1454				  mt8188_afe_1x_en_sel_values);1455static SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum,1456				  A3_A4_TIMING_SEL1, 10, 0x3,1457				  mt8188_afe_1x_en_sel_text,1458				  mt8188_afe_1x_en_sel_values);1459static SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum,1460				  A3_A4_TIMING_SEL1, 12, 0x3,1461				  mt8188_afe_1x_en_sel_text,1462				  mt8188_afe_1x_en_sel_values);1463static SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum,1464				  A3_A4_TIMING_SEL1, 14, 0x3,1465				  mt8188_afe_1x_en_sel_text,1466				  mt8188_afe_1x_en_sel_values);1467static SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum,1468				  A3_A4_TIMING_SEL1, 16, 0x3,1469				  mt8188_afe_1x_en_sel_text,1470				  mt8188_afe_1x_en_sel_values);1471 1472static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum,1473				  A3_A4_TIMING_SEL6, 0, 0x3,1474				  mt8188_afe_1x_en_sel_text,1475				  mt8188_afe_1x_en_sel_values);1476static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum,1477				  A3_A4_TIMING_SEL6, 2, 0x3,1478				  mt8188_afe_1x_en_sel_text,1479				  mt8188_afe_1x_en_sel_values);1480static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum,1481				  A3_A4_TIMING_SEL6, 4, 0x3,1482				  mt8188_afe_1x_en_sel_text,1483				  mt8188_afe_1x_en_sel_values);1484static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum,1485				  A3_A4_TIMING_SEL6, 6, 0x3,1486				  mt8188_afe_1x_en_sel_text,1487				  mt8188_afe_1x_en_sel_values);1488static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum,1489				  A3_A4_TIMING_SEL6, 8, 0x3,1490				  mt8188_afe_1x_en_sel_text,1491				  mt8188_afe_1x_en_sel_values);1492static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum,1493				  A3_A4_TIMING_SEL6, 10, 0x3,1494				  mt8188_afe_1x_en_sel_text,1495				  mt8188_afe_1x_en_sel_values);1496static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum,1497				  A3_A4_TIMING_SEL6, 12, 0x3,1498				  mt8188_afe_1x_en_sel_text,1499				  mt8188_afe_1x_en_sel_values);1500static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum,1501				  A3_A4_TIMING_SEL6, 14, 0x3,1502				  mt8188_afe_1x_en_sel_text,1503				  mt8188_afe_1x_en_sel_values);1504static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum,1505				  A3_A4_TIMING_SEL6, 16, 0x3,1506				  mt8188_afe_1x_en_sel_text,1507				  mt8188_afe_1x_en_sel_values);1508static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum,1509				  A3_A4_TIMING_SEL6, 18, 0x3,1510				  mt8188_afe_1x_en_sel_text,1511				  mt8188_afe_1x_en_sel_values);1512static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum,1513				  A3_A4_TIMING_SEL6, 20, 0x3,1514				  mt8188_afe_1x_en_sel_text,1515				  mt8188_afe_1x_en_sel_values);1516static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum,1517				  A3_A4_TIMING_SEL6, 22, 0x3,1518				  mt8188_afe_1x_en_sel_text,1519				  mt8188_afe_1x_en_sel_values);1520static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum,1521				  A3_A4_TIMING_SEL6, 24, 0x3,1522				  mt8188_afe_1x_en_sel_text,1523				  mt8188_afe_1x_en_sel_values);1524static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum,1525				  A3_A4_TIMING_SEL6, 26, 0x3,1526				  mt8188_afe_1x_en_sel_text,1527				  mt8188_afe_1x_en_sel_values);1528static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum,1529				  A3_A4_TIMING_SEL6, 28, 0x3,1530				  mt8188_afe_1x_en_sel_text,1531				  mt8188_afe_1x_en_sel_values);1532static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum,1533				  A3_A4_TIMING_SEL6, 30, 0x3,1534				  mt8188_afe_1x_en_sel_text,1535				  mt8188_afe_1x_en_sel_values);1536 1537static const char * const mt8188_afe_fs_timing_sel_text[] = {1538	"asys",1539	"etdmout1_1x_en",1540	"etdmout2_1x_en",1541	"etdmout3_1x_en",1542	"etdmin1_1x_en",1543	"etdmin2_1x_en",1544	"etdmin1_nx_en",1545	"etdmin2_nx_en",1546};1547 1548static const unsigned int mt8188_afe_fs_timing_sel_values[] = {1549	0,1550	MT8188_ETDM_OUT1_1X_EN,1551	MT8188_ETDM_OUT2_1X_EN,1552	MT8188_ETDM_OUT3_1X_EN,1553	MT8188_ETDM_IN1_1X_EN,1554	MT8188_ETDM_IN2_1X_EN,1555	MT8188_ETDM_IN1_NX_EN,1556	MT8188_ETDM_IN2_NX_EN,1557};1558 1559static SOC_VALUE_ENUM_SINGLE_DECL(dl2_fs_timing_sel_enum,1560				  SND_SOC_NOPM, 0, 0,1561				  mt8188_afe_fs_timing_sel_text,1562				  mt8188_afe_fs_timing_sel_values);1563static SOC_VALUE_ENUM_SINGLE_DECL(dl3_fs_timing_sel_enum,1564				  SND_SOC_NOPM, 0, 0,1565				  mt8188_afe_fs_timing_sel_text,1566				  mt8188_afe_fs_timing_sel_values);1567static SOC_VALUE_ENUM_SINGLE_DECL(dl6_fs_timing_sel_enum,1568				  SND_SOC_NOPM, 0, 0,1569				  mt8188_afe_fs_timing_sel_text,1570				  mt8188_afe_fs_timing_sel_values);1571static SOC_VALUE_ENUM_SINGLE_DECL(dl8_fs_timing_sel_enum,1572				  SND_SOC_NOPM, 0, 0,1573				  mt8188_afe_fs_timing_sel_text,1574				  mt8188_afe_fs_timing_sel_values);1575static SOC_VALUE_ENUM_SINGLE_DECL(dl11_fs_timing_sel_enum,1576				  SND_SOC_NOPM, 0, 0,1577				  mt8188_afe_fs_timing_sel_text,1578				  mt8188_afe_fs_timing_sel_values);1579static SOC_VALUE_ENUM_SINGLE_DECL(ul2_fs_timing_sel_enum,1580				  SND_SOC_NOPM, 0, 0,1581				  mt8188_afe_fs_timing_sel_text,1582				  mt8188_afe_fs_timing_sel_values);1583static SOC_VALUE_ENUM_SINGLE_DECL(ul4_fs_timing_sel_enum,1584				  SND_SOC_NOPM, 0, 0,1585				  mt8188_afe_fs_timing_sel_text,1586				  mt8188_afe_fs_timing_sel_values);1587static SOC_VALUE_ENUM_SINGLE_DECL(ul5_fs_timing_sel_enum,1588				  SND_SOC_NOPM, 0, 0,1589				  mt8188_afe_fs_timing_sel_text,1590				  mt8188_afe_fs_timing_sel_values);1591static SOC_VALUE_ENUM_SINGLE_DECL(ul9_fs_timing_sel_enum,1592				  SND_SOC_NOPM, 0, 0,1593				  mt8188_afe_fs_timing_sel_text,1594				  mt8188_afe_fs_timing_sel_values);1595static SOC_VALUE_ENUM_SINGLE_DECL(ul10_fs_timing_sel_enum,1596				  SND_SOC_NOPM, 0, 0,1597				  mt8188_afe_fs_timing_sel_text,1598				  mt8188_afe_fs_timing_sel_values);1599 1600static int mt8188_memif_1x_en_sel_put(struct snd_kcontrol *kcontrol,1601				      struct snd_ctl_elem_value *ucontrol)1602{1603	struct snd_soc_component *component =1604		snd_soc_kcontrol_component(kcontrol);1605	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1606	struct mt8188_afe_private *afe_priv = afe->platform_priv;1607	struct mtk_dai_memif_priv *memif_priv;1608	unsigned int dai_id = kcontrol->id.device;1609	long val = ucontrol->value.integer.value[0];1610	int ret = 0;1611 1612	memif_priv = afe_priv->dai_priv[dai_id];1613 1614	if (val == memif_priv->asys_timing_sel)1615		return 0;1616 1617	ret = snd_soc_put_enum_double(kcontrol, ucontrol);1618 1619	memif_priv->asys_timing_sel = val;1620 1621	return ret;1622}1623 1624static int mt8188_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol,1625					 struct snd_ctl_elem_value *ucontrol)1626{1627	struct snd_soc_component *component =1628		snd_soc_kcontrol_component(kcontrol);1629	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1630	struct mt8188_afe_private *afe_priv = afe->platform_priv;1631	unsigned int id = kcontrol->id.device;1632	long val = ucontrol->value.integer.value[0];1633	int ret = 0;1634 1635	if (val == afe_priv->irq_priv[id].asys_timing_sel)1636		return 0;1637 1638	ret = snd_soc_put_enum_double(kcontrol, ucontrol);1639 1640	afe_priv->irq_priv[id].asys_timing_sel = val;1641 1642	return ret;1643}1644 1645static int mt8188_memif_fs_timing_sel_get(struct snd_kcontrol *kcontrol,1646					  struct snd_ctl_elem_value *ucontrol)1647{1648	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);1649	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1650	struct mt8188_afe_private *afe_priv = afe->platform_priv;1651	struct mtk_dai_memif_priv *memif_priv;1652	unsigned int dai_id = kcontrol->id.device;1653	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;1654 1655	memif_priv = afe_priv->dai_priv[dai_id];1656 1657	ucontrol->value.enumerated.item[0] =1658		snd_soc_enum_val_to_item(e, memif_priv->fs_timing);1659 1660	return 0;1661}1662 1663static int mt8188_memif_fs_timing_sel_put(struct snd_kcontrol *kcontrol,1664					  struct snd_ctl_elem_value *ucontrol)1665{1666	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);1667	struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1668	struct mt8188_afe_private *afe_priv = afe->platform_priv;1669	struct mtk_dai_memif_priv *memif_priv;1670	unsigned int dai_id = kcontrol->id.device;1671	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;1672	unsigned int *item = ucontrol->value.enumerated.item;1673	unsigned int prev_item = 0;1674 1675	if (item[0] >= e->items)1676		return -EINVAL;1677 1678	memif_priv = afe_priv->dai_priv[dai_id];1679 1680	prev_item = snd_soc_enum_val_to_item(e, memif_priv->fs_timing);1681 1682	if (item[0] == prev_item)1683		return 0;1684 1685	memif_priv->fs_timing = snd_soc_enum_item_to_val(e, item[0]);1686 1687	return 1;1688}1689 1690static const struct snd_kcontrol_new mt8188_memif_controls[] = {1691	MT8188_SOC_ENUM_EXT("dl2_1x_en_sel",1692			    dl2_1x_en_sel_enum,1693			    snd_soc_get_enum_double,1694			    mt8188_memif_1x_en_sel_put,1695			    MT8188_AFE_MEMIF_DL2),1696	MT8188_SOC_ENUM_EXT("dl3_1x_en_sel",1697			    dl3_1x_en_sel_enum,1698			    snd_soc_get_enum_double,1699			    mt8188_memif_1x_en_sel_put,1700			    MT8188_AFE_MEMIF_DL3),1701	MT8188_SOC_ENUM_EXT("dl6_1x_en_sel",1702			    dl6_1x_en_sel_enum,1703			    snd_soc_get_enum_double,1704			    mt8188_memif_1x_en_sel_put,1705			    MT8188_AFE_MEMIF_DL6),1706	MT8188_SOC_ENUM_EXT("dl7_1x_en_sel",1707			    dl7_1x_en_sel_enum,1708			    snd_soc_get_enum_double,1709			    mt8188_memif_1x_en_sel_put,1710			    MT8188_AFE_MEMIF_DL7),1711	MT8188_SOC_ENUM_EXT("dl8_1x_en_sel",1712			    dl8_1x_en_sel_enum,1713			    snd_soc_get_enum_double,1714			    mt8188_memif_1x_en_sel_put,1715			    MT8188_AFE_MEMIF_DL8),1716	MT8188_SOC_ENUM_EXT("dl10_1x_en_sel",1717			    dl10_1x_en_sel_enum,1718			    snd_soc_get_enum_double,1719			    mt8188_memif_1x_en_sel_put,1720			    MT8188_AFE_MEMIF_DL10),1721	MT8188_SOC_ENUM_EXT("dl11_1x_en_sel",1722			    dl11_1x_en_sel_enum,1723			    snd_soc_get_enum_double,1724			    mt8188_memif_1x_en_sel_put,1725			    MT8188_AFE_MEMIF_DL11),1726	MT8188_SOC_ENUM_EXT("ul1_1x_en_sel",1727			    ul1_1x_en_sel_enum,1728			    snd_soc_get_enum_double,1729			    mt8188_memif_1x_en_sel_put,1730			    MT8188_AFE_MEMIF_UL1),1731	MT8188_SOC_ENUM_EXT("ul2_1x_en_sel",1732			    ul2_1x_en_sel_enum,1733			    snd_soc_get_enum_double,1734			    mt8188_memif_1x_en_sel_put,1735			    MT8188_AFE_MEMIF_UL2),1736	MT8188_SOC_ENUM_EXT("ul3_1x_en_sel",1737			    ul3_1x_en_sel_enum,1738			    snd_soc_get_enum_double,1739			    mt8188_memif_1x_en_sel_put,1740			    MT8188_AFE_MEMIF_UL3),1741	MT8188_SOC_ENUM_EXT("ul4_1x_en_sel",1742			    ul4_1x_en_sel_enum,1743			    snd_soc_get_enum_double,1744			    mt8188_memif_1x_en_sel_put,1745			    MT8188_AFE_MEMIF_UL4),1746	MT8188_SOC_ENUM_EXT("ul5_1x_en_sel",1747			    ul5_1x_en_sel_enum,1748			    snd_soc_get_enum_double,1749			    mt8188_memif_1x_en_sel_put,1750			    MT8188_AFE_MEMIF_UL5),1751	MT8188_SOC_ENUM_EXT("ul6_1x_en_sel",1752			    ul6_1x_en_sel_enum,1753			    snd_soc_get_enum_double,1754			    mt8188_memif_1x_en_sel_put,1755			    MT8188_AFE_MEMIF_UL6),1756	MT8188_SOC_ENUM_EXT("ul8_1x_en_sel",1757			    ul8_1x_en_sel_enum,1758			    snd_soc_get_enum_double,1759			    mt8188_memif_1x_en_sel_put,1760			    MT8188_AFE_MEMIF_UL8),1761	MT8188_SOC_ENUM_EXT("ul9_1x_en_sel",1762			    ul9_1x_en_sel_enum,1763			    snd_soc_get_enum_double,1764			    mt8188_memif_1x_en_sel_put,1765			    MT8188_AFE_MEMIF_UL9),1766	MT8188_SOC_ENUM_EXT("ul10_1x_en_sel",1767			    ul10_1x_en_sel_enum,1768			    snd_soc_get_enum_double,1769			    mt8188_memif_1x_en_sel_put,1770			    MT8188_AFE_MEMIF_UL10),1771	MT8188_SOC_ENUM_EXT("asys_irq1_1x_en_sel",1772			    asys_irq1_1x_en_sel_enum,1773			    snd_soc_get_enum_double,1774			    mt8188_asys_irq_1x_en_sel_put,1775			    MT8188_AFE_IRQ_13),1776	MT8188_SOC_ENUM_EXT("asys_irq2_1x_en_sel",1777			    asys_irq2_1x_en_sel_enum,1778			    snd_soc_get_enum_double,1779			    mt8188_asys_irq_1x_en_sel_put,1780			    MT8188_AFE_IRQ_14),1781	MT8188_SOC_ENUM_EXT("asys_irq3_1x_en_sel",1782			    asys_irq3_1x_en_sel_enum,1783			    snd_soc_get_enum_double,1784			    mt8188_asys_irq_1x_en_sel_put,1785			    MT8188_AFE_IRQ_15),1786	MT8188_SOC_ENUM_EXT("asys_irq4_1x_en_sel",1787			    asys_irq4_1x_en_sel_enum,1788			    snd_soc_get_enum_double,1789			    mt8188_asys_irq_1x_en_sel_put,1790			    MT8188_AFE_IRQ_16),1791	MT8188_SOC_ENUM_EXT("asys_irq5_1x_en_sel",1792			    asys_irq5_1x_en_sel_enum,1793			    snd_soc_get_enum_double,1794			    mt8188_asys_irq_1x_en_sel_put,1795			    MT8188_AFE_IRQ_17),1796	MT8188_SOC_ENUM_EXT("asys_irq6_1x_en_sel",1797			    asys_irq6_1x_en_sel_enum,1798			    snd_soc_get_enum_double,1799			    mt8188_asys_irq_1x_en_sel_put,1800			    MT8188_AFE_IRQ_18),1801	MT8188_SOC_ENUM_EXT("asys_irq7_1x_en_sel",1802			    asys_irq7_1x_en_sel_enum,1803			    snd_soc_get_enum_double,1804			    mt8188_asys_irq_1x_en_sel_put,1805			    MT8188_AFE_IRQ_19),1806	MT8188_SOC_ENUM_EXT("asys_irq8_1x_en_sel",1807			    asys_irq8_1x_en_sel_enum,1808			    snd_soc_get_enum_double,1809			    mt8188_asys_irq_1x_en_sel_put,1810			    MT8188_AFE_IRQ_20),1811	MT8188_SOC_ENUM_EXT("asys_irq9_1x_en_sel",1812			    asys_irq9_1x_en_sel_enum,1813			    snd_soc_get_enum_double,1814			    mt8188_asys_irq_1x_en_sel_put,1815			    MT8188_AFE_IRQ_21),1816	MT8188_SOC_ENUM_EXT("asys_irq10_1x_en_sel",1817			    asys_irq10_1x_en_sel_enum,1818			    snd_soc_get_enum_double,1819			    mt8188_asys_irq_1x_en_sel_put,1820			    MT8188_AFE_IRQ_22),1821	MT8188_SOC_ENUM_EXT("asys_irq11_1x_en_sel",1822			    asys_irq11_1x_en_sel_enum,1823			    snd_soc_get_enum_double,1824			    mt8188_asys_irq_1x_en_sel_put,1825			    MT8188_AFE_IRQ_23),1826	MT8188_SOC_ENUM_EXT("asys_irq12_1x_en_sel",1827			    asys_irq12_1x_en_sel_enum,1828			    snd_soc_get_enum_double,1829			    mt8188_asys_irq_1x_en_sel_put,1830			    MT8188_AFE_IRQ_24),1831	MT8188_SOC_ENUM_EXT("asys_irq13_1x_en_sel",1832			    asys_irq13_1x_en_sel_enum,1833			    snd_soc_get_enum_double,1834			    mt8188_asys_irq_1x_en_sel_put,1835			    MT8188_AFE_IRQ_25),1836	MT8188_SOC_ENUM_EXT("asys_irq14_1x_en_sel",1837			    asys_irq14_1x_en_sel_enum,1838			    snd_soc_get_enum_double,1839			    mt8188_asys_irq_1x_en_sel_put,1840			    MT8188_AFE_IRQ_26),1841	MT8188_SOC_ENUM_EXT("asys_irq15_1x_en_sel",1842			    asys_irq15_1x_en_sel_enum,1843			    snd_soc_get_enum_double,1844			    mt8188_asys_irq_1x_en_sel_put,1845			    MT8188_AFE_IRQ_27),1846	MT8188_SOC_ENUM_EXT("asys_irq16_1x_en_sel",1847			    asys_irq16_1x_en_sel_enum,1848			    snd_soc_get_enum_double,1849			    mt8188_asys_irq_1x_en_sel_put,1850			    MT8188_AFE_IRQ_28),1851	MT8188_SOC_ENUM_EXT("dl2_fs_timing_sel",1852			    dl2_fs_timing_sel_enum,1853			    mt8188_memif_fs_timing_sel_get,1854			    mt8188_memif_fs_timing_sel_put,1855			    MT8188_AFE_MEMIF_DL2),1856	MT8188_SOC_ENUM_EXT("dl3_fs_timing_sel",1857			    dl3_fs_timing_sel_enum,1858			    mt8188_memif_fs_timing_sel_get,1859			    mt8188_memif_fs_timing_sel_put,1860			    MT8188_AFE_MEMIF_DL3),1861	MT8188_SOC_ENUM_EXT("dl6_fs_timing_sel",1862			    dl6_fs_timing_sel_enum,1863			    mt8188_memif_fs_timing_sel_get,1864			    mt8188_memif_fs_timing_sel_put,1865			    MT8188_AFE_MEMIF_DL6),1866	MT8188_SOC_ENUM_EXT("dl8_fs_timing_sel",1867			    dl8_fs_timing_sel_enum,1868			    mt8188_memif_fs_timing_sel_get,1869			    mt8188_memif_fs_timing_sel_put,1870			    MT8188_AFE_MEMIF_DL8),1871	MT8188_SOC_ENUM_EXT("dl11_fs_timing_sel",1872			    dl11_fs_timing_sel_enum,1873			    mt8188_memif_fs_timing_sel_get,1874			    mt8188_memif_fs_timing_sel_put,1875			    MT8188_AFE_MEMIF_DL11),1876	MT8188_SOC_ENUM_EXT("ul2_fs_timing_sel",1877			    ul2_fs_timing_sel_enum,1878			    mt8188_memif_fs_timing_sel_get,1879			    mt8188_memif_fs_timing_sel_put,1880			    MT8188_AFE_MEMIF_UL2),1881	MT8188_SOC_ENUM_EXT("ul4_fs_timing_sel",1882			    ul4_fs_timing_sel_enum,1883			    mt8188_memif_fs_timing_sel_get,1884			    mt8188_memif_fs_timing_sel_put,1885			    MT8188_AFE_MEMIF_UL4),1886	MT8188_SOC_ENUM_EXT("ul5_fs_timing_sel",1887			    ul5_fs_timing_sel_enum,1888			    mt8188_memif_fs_timing_sel_get,1889			    mt8188_memif_fs_timing_sel_put,1890			    MT8188_AFE_MEMIF_UL5),1891	MT8188_SOC_ENUM_EXT("ul9_fs_timing_sel",1892			    ul9_fs_timing_sel_enum,1893			    mt8188_memif_fs_timing_sel_get,1894			    mt8188_memif_fs_timing_sel_put,1895			    MT8188_AFE_MEMIF_UL9),1896	MT8188_SOC_ENUM_EXT("ul10_fs_timing_sel",1897			    ul10_fs_timing_sel_enum,1898			    mt8188_memif_fs_timing_sel_get,1899			    mt8188_memif_fs_timing_sel_put,1900			    MT8188_AFE_MEMIF_UL10),1901};1902 1903static const struct mtk_base_memif_data memif_data[MT8188_AFE_MEMIF_NUM] = {1904	[MT8188_AFE_MEMIF_DL2] = {1905		.name = "DL2",1906		.id = MT8188_AFE_MEMIF_DL2,1907		.reg_ofs_base = AFE_DL2_BASE,1908		.reg_ofs_cur = AFE_DL2_CUR,1909		.reg_ofs_end = AFE_DL2_END,1910		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1911		.fs_shift = 10,1912		.fs_maskbit = 0x1f,1913		.mono_reg = -1,1914		.mono_shift = 0,1915		.int_odd_flag_reg = -1,1916		.int_odd_flag_shift = 0,1917		.enable_reg = AFE_DAC_CON0,1918		.enable_shift = 18,1919		.hd_reg = AFE_DL2_CON0,1920		.hd_shift = 5,1921		.agent_disable_reg = AUDIO_TOP_CON5,1922		.agent_disable_shift = 18,1923		.ch_num_reg = AFE_DL2_CON0,1924		.ch_num_shift = 0,1925		.ch_num_maskbit = 0x1f,1926		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1927		.msb_shift = 18,1928		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1929		.msb_end_shift = 18,1930	},1931	[MT8188_AFE_MEMIF_DL3] = {1932		.name = "DL3",1933		.id = MT8188_AFE_MEMIF_DL3,1934		.reg_ofs_base = AFE_DL3_BASE,1935		.reg_ofs_cur = AFE_DL3_CUR,1936		.reg_ofs_end = AFE_DL3_END,1937		.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1938		.fs_shift = 15,1939		.fs_maskbit = 0x1f,1940		.mono_reg = -1,1941		.mono_shift = 0,1942		.int_odd_flag_reg = -1,1943		.int_odd_flag_shift = 0,1944		.enable_reg = AFE_DAC_CON0,1945		.enable_shift = 19,1946		.hd_reg = AFE_DL3_CON0,1947		.hd_shift = 5,1948		.agent_disable_reg = AUDIO_TOP_CON5,1949		.agent_disable_shift = 19,1950		.ch_num_reg = AFE_DL3_CON0,1951		.ch_num_shift = 0,1952		.ch_num_maskbit = 0x1f,1953		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1954		.msb_shift = 19,1955		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1956		.msb_end_shift = 19,1957	},1958	[MT8188_AFE_MEMIF_DL6] = {1959		.name = "DL6",1960		.id = MT8188_AFE_MEMIF_DL6,1961		.reg_ofs_base = AFE_DL6_BASE,1962		.reg_ofs_cur = AFE_DL6_CUR,1963		.reg_ofs_end = AFE_DL6_END,1964		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1965		.fs_shift = 0,1966		.fs_maskbit = 0x1f,1967		.mono_reg = -1,1968		.mono_shift = 0,1969		.int_odd_flag_reg = -1,1970		.int_odd_flag_shift = 0,1971		.enable_reg = AFE_DAC_CON0,1972		.enable_shift = 22,1973		.hd_reg = AFE_DL6_CON0,1974		.hd_shift = 5,1975		.agent_disable_reg = AUDIO_TOP_CON5,1976		.agent_disable_shift = 22,1977		.ch_num_reg = AFE_DL6_CON0,1978		.ch_num_shift = 0,1979		.ch_num_maskbit = 0x1f,1980		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1981		.msb_shift = 22,1982		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1983		.msb_end_shift = 22,1984	},1985	[MT8188_AFE_MEMIF_DL7] = {1986		.name = "DL7",1987		.id = MT8188_AFE_MEMIF_DL7,1988		.reg_ofs_base = AFE_DL7_BASE,1989		.reg_ofs_cur = AFE_DL7_CUR,1990		.reg_ofs_end = AFE_DL7_END,1991		.fs_reg = -1,1992		.fs_shift = 0,1993		.fs_maskbit = 0,1994		.mono_reg = -1,1995		.mono_shift = 0,1996		.int_odd_flag_reg = -1,1997		.int_odd_flag_shift = 0,1998		.enable_reg = AFE_DAC_CON0,1999		.enable_shift = 23,2000		.hd_reg = AFE_DL7_CON0,2001		.hd_shift = 5,2002		.agent_disable_reg = AUDIO_TOP_CON5,2003		.agent_disable_shift = 23,2004		.ch_num_reg = AFE_DL7_CON0,2005		.ch_num_shift = 0,2006		.ch_num_maskbit = 0x1f,2007		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2008		.msb_shift = 23,2009		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2010		.msb_end_shift = 23,2011	},2012	[MT8188_AFE_MEMIF_DL8] = {2013		.name = "DL8",2014		.id = MT8188_AFE_MEMIF_DL8,2015		.reg_ofs_base = AFE_DL8_BASE,2016		.reg_ofs_cur = AFE_DL8_CUR,2017		.reg_ofs_end = AFE_DL8_END,2018		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,2019		.fs_shift = 10,2020		.fs_maskbit = 0x1f,2021		.mono_reg = -1,2022		.mono_shift = 0,2023		.int_odd_flag_reg = -1,2024		.int_odd_flag_shift = 0,2025		.enable_reg = AFE_DAC_CON0,2026		.enable_shift = 24,2027		.hd_reg = AFE_DL8_CON0,2028		.hd_shift = 6,2029		.agent_disable_reg = AUDIO_TOP_CON5,2030		.agent_disable_shift = 24,2031		.ch_num_reg = AFE_DL8_CON0,2032		.ch_num_shift = 0,2033		.ch_num_maskbit = 0x3f,2034		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2035		.msb_shift = 24,2036		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2037		.msb_end_shift = 24,2038	},2039	[MT8188_AFE_MEMIF_DL10] = {2040		.name = "DL10",2041		.id = MT8188_AFE_MEMIF_DL10,2042		.reg_ofs_base = AFE_DL10_BASE,2043		.reg_ofs_cur = AFE_DL10_CUR,2044		.reg_ofs_end = AFE_DL10_END,2045		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,2046		.fs_shift = 20,2047		.fs_maskbit = 0x1f,2048		.mono_reg = -1,2049		.mono_shift = 0,2050		.int_odd_flag_reg = -1,2051		.int_odd_flag_shift = 0,2052		.enable_reg = AFE_DAC_CON0,2053		.enable_shift = 26,2054		.hd_reg = AFE_DL10_CON0,2055		.hd_shift = 5,2056		.agent_disable_reg = AUDIO_TOP_CON5,2057		.agent_disable_shift = 26,2058		.ch_num_reg = AFE_DL10_CON0,2059		.ch_num_shift = 0,2060		.ch_num_maskbit = 0x1f,2061		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2062		.msb_shift = 26,2063		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2064		.msb_end_shift = 26,2065	},2066	[MT8188_AFE_MEMIF_DL11] = {2067		.name = "DL11",2068		.id = MT8188_AFE_MEMIF_DL11,2069		.reg_ofs_base = AFE_DL11_BASE,2070		.reg_ofs_cur = AFE_DL11_CUR,2071		.reg_ofs_end = AFE_DL11_END,2072		.fs_reg = AFE_MEMIF_AGENT_FS_CON1,2073		.fs_shift = 25,2074		.fs_maskbit = 0x1f,2075		.mono_reg = -1,2076		.mono_shift = 0,2077		.int_odd_flag_reg = -1,2078		.int_odd_flag_shift = 0,2079		.enable_reg = AFE_DAC_CON0,2080		.enable_shift = 27,2081		.hd_reg = AFE_DL11_CON0,2082		.hd_shift = 7,2083		.agent_disable_reg = AUDIO_TOP_CON5,2084		.agent_disable_shift = 27,2085		.ch_num_reg = AFE_DL11_CON0,2086		.ch_num_shift = 0,2087		.ch_num_maskbit = 0x7f,2088		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2089		.msb_shift = 27,2090		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2091		.msb_end_shift = 27,2092	},2093	[MT8188_AFE_MEMIF_UL1] = {2094		.name = "UL1",2095		.id = MT8188_AFE_MEMIF_UL1,2096		.reg_ofs_base = AFE_UL1_BASE,2097		.reg_ofs_cur = AFE_UL1_CUR,2098		.reg_ofs_end = AFE_UL1_END,2099		.fs_reg = -1,2100		.fs_shift = 0,2101		.fs_maskbit = 0,2102		.mono_reg = AFE_UL1_CON0,2103		.mono_shift = 1,2104		.int_odd_flag_reg = AFE_UL1_CON0,2105		.int_odd_flag_shift = 0,2106		.enable_reg = AFE_DAC_CON0,2107		.enable_shift = 1,2108		.hd_reg = AFE_UL1_CON0,2109		.hd_shift = 5,2110		.agent_disable_reg = AUDIO_TOP_CON5,2111		.agent_disable_shift = 0,2112		.ch_num_reg = -1,2113		.ch_num_shift = 0,2114		.ch_num_maskbit = 0,2115		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2116		.msb_shift = 0,2117		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2118		.msb_end_shift = 0,2119	},2120	[MT8188_AFE_MEMIF_UL2] = {2121		.name = "UL2",2122		.id = MT8188_AFE_MEMIF_UL2,2123		.reg_ofs_base = AFE_UL2_BASE,2124		.reg_ofs_cur = AFE_UL2_CUR,2125		.reg_ofs_end = AFE_UL2_END,2126		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2127		.fs_shift = 5,2128		.fs_maskbit = 0x1f,2129		.mono_reg = AFE_UL2_CON0,2130		.mono_shift = 1,2131		.int_odd_flag_reg = AFE_UL2_CON0,2132		.int_odd_flag_shift = 0,2133		.enable_reg = AFE_DAC_CON0,2134		.enable_shift = 2,2135		.hd_reg = AFE_UL2_CON0,2136		.hd_shift = 5,2137		.agent_disable_reg = AUDIO_TOP_CON5,2138		.agent_disable_shift = 1,2139		.ch_num_reg = -1,2140		.ch_num_shift = 0,2141		.ch_num_maskbit = 0,2142		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2143		.msb_shift = 1,2144		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2145		.msb_end_shift = 1,2146	},2147	[MT8188_AFE_MEMIF_UL3] = {2148		.name = "UL3",2149		.id = MT8188_AFE_MEMIF_UL3,2150		.reg_ofs_base = AFE_UL3_BASE,2151		.reg_ofs_cur = AFE_UL3_CUR,2152		.reg_ofs_end = AFE_UL3_END,2153		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2154		.fs_shift = 10,2155		.fs_maskbit = 0x1f,2156		.mono_reg = AFE_UL3_CON0,2157		.mono_shift = 1,2158		.int_odd_flag_reg = AFE_UL3_CON0,2159		.int_odd_flag_shift = 0,2160		.enable_reg = AFE_DAC_CON0,2161		.enable_shift = 3,2162		.hd_reg = AFE_UL3_CON0,2163		.hd_shift = 5,2164		.agent_disable_reg = AUDIO_TOP_CON5,2165		.agent_disable_shift = 2,2166		.ch_num_reg = -1,2167		.ch_num_shift = 0,2168		.ch_num_maskbit = 0,2169		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2170		.msb_shift = 2,2171		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2172		.msb_end_shift = 2,2173	},2174	[MT8188_AFE_MEMIF_UL4] = {2175		.name = "UL4",2176		.id = MT8188_AFE_MEMIF_UL4,2177		.reg_ofs_base = AFE_UL4_BASE,2178		.reg_ofs_cur = AFE_UL4_CUR,2179		.reg_ofs_end = AFE_UL4_END,2180		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2181		.fs_shift = 15,2182		.fs_maskbit = 0x1f,2183		.mono_reg = AFE_UL4_CON0,2184		.mono_shift = 1,2185		.int_odd_flag_reg = AFE_UL4_CON0,2186		.int_odd_flag_shift = 0,2187		.enable_reg = AFE_DAC_CON0,2188		.enable_shift = 4,2189		.hd_reg = AFE_UL4_CON0,2190		.hd_shift = 5,2191		.agent_disable_reg = AUDIO_TOP_CON5,2192		.agent_disable_shift = 3,2193		.ch_num_reg = -1,2194		.ch_num_shift = 0,2195		.ch_num_maskbit = 0,2196		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2197		.msb_shift = 3,2198		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2199		.msb_end_shift = 3,2200	},2201	[MT8188_AFE_MEMIF_UL5] = {2202		.name = "UL5",2203		.id = MT8188_AFE_MEMIF_UL5,2204		.reg_ofs_base = AFE_UL5_BASE,2205		.reg_ofs_cur = AFE_UL5_CUR,2206		.reg_ofs_end = AFE_UL5_END,2207		.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2208		.fs_shift = 20,2209		.fs_maskbit = 0x1f,2210		.mono_reg = AFE_UL5_CON0,2211		.mono_shift = 1,2212		.int_odd_flag_reg = AFE_UL5_CON0,2213		.int_odd_flag_shift = 0,2214		.enable_reg = AFE_DAC_CON0,2215		.enable_shift = 5,2216		.hd_reg = AFE_UL5_CON0,2217		.hd_shift = 5,2218		.agent_disable_reg = AUDIO_TOP_CON5,2219		.agent_disable_shift = 4,2220		.ch_num_reg = -1,2221		.ch_num_shift = 0,2222		.ch_num_maskbit = 0,2223		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2224		.msb_shift = 4,2225		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2226		.msb_end_shift = 4,2227	},2228	[MT8188_AFE_MEMIF_UL6] = {2229		.name = "UL6",2230		.id = MT8188_AFE_MEMIF_UL6,2231		.reg_ofs_base = AFE_UL6_BASE,2232		.reg_ofs_cur = AFE_UL6_CUR,2233		.reg_ofs_end = AFE_UL6_END,2234		.fs_reg = -1,2235		.fs_shift = 0,2236		.fs_maskbit = 0,2237		.mono_reg = AFE_UL6_CON0,2238		.mono_shift = 1,2239		.int_odd_flag_reg = AFE_UL6_CON0,2240		.int_odd_flag_shift = 0,2241		.enable_reg = AFE_DAC_CON0,2242		.enable_shift = 6,2243		.hd_reg = AFE_UL6_CON0,2244		.hd_shift = 5,2245		.agent_disable_reg = AUDIO_TOP_CON5,2246		.agent_disable_shift = 5,2247		.ch_num_reg = -1,2248		.ch_num_shift = 0,2249		.ch_num_maskbit = 0,2250		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2251		.msb_shift = 5,2252		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2253		.msb_end_shift = 5,2254	},2255	[MT8188_AFE_MEMIF_UL8] = {2256		.name = "UL8",2257		.id = MT8188_AFE_MEMIF_UL8,2258		.reg_ofs_base = AFE_UL8_BASE,2259		.reg_ofs_cur = AFE_UL8_CUR,2260		.reg_ofs_end = AFE_UL8_END,2261		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2262		.fs_shift = 5,2263		.fs_maskbit = 0x1f,2264		.mono_reg = AFE_UL8_CON0,2265		.mono_shift = 1,2266		.int_odd_flag_reg = AFE_UL8_CON0,2267		.int_odd_flag_shift = 0,2268		.enable_reg = AFE_DAC_CON0,2269		.enable_shift = 8,2270		.hd_reg = AFE_UL8_CON0,2271		.hd_shift = 5,2272		.agent_disable_reg = AUDIO_TOP_CON5,2273		.agent_disable_shift = 7,2274		.ch_num_reg = -1,2275		.ch_num_shift = 0,2276		.ch_num_maskbit = 0,2277		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2278		.msb_shift = 7,2279		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2280		.msb_end_shift = 7,2281	},2282	[MT8188_AFE_MEMIF_UL9] = {2283		.name = "UL9",2284		.id = MT8188_AFE_MEMIF_UL9,2285		.reg_ofs_base = AFE_UL9_BASE,2286		.reg_ofs_cur = AFE_UL9_CUR,2287		.reg_ofs_end = AFE_UL9_END,2288		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2289		.fs_shift = 10,2290		.fs_maskbit = 0x1f,2291		.mono_reg = AFE_UL9_CON0,2292		.mono_shift = 1,2293		.int_odd_flag_reg = AFE_UL9_CON0,2294		.int_odd_flag_shift = 0,2295		.enable_reg = AFE_DAC_CON0,2296		.enable_shift = 9,2297		.hd_reg = AFE_UL9_CON0,2298		.hd_shift = 5,2299		.agent_disable_reg = AUDIO_TOP_CON5,2300		.agent_disable_shift = 8,2301		.ch_num_reg = -1,2302		.ch_num_shift = 0,2303		.ch_num_maskbit = 0,2304		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2305		.msb_shift = 8,2306		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2307		.msb_end_shift = 8,2308	},2309	[MT8188_AFE_MEMIF_UL10] = {2310		.name = "UL10",2311		.id = MT8188_AFE_MEMIF_UL10,2312		.reg_ofs_base = AFE_UL10_BASE,2313		.reg_ofs_cur = AFE_UL10_CUR,2314		.reg_ofs_end = AFE_UL10_END,2315		.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2316		.fs_shift = 15,2317		.fs_maskbit = 0x1f,2318		.mono_reg = AFE_UL10_CON0,2319		.mono_shift = 1,2320		.int_odd_flag_reg = AFE_UL10_CON0,2321		.int_odd_flag_shift = 0,2322		.enable_reg = AFE_DAC_CON0,2323		.enable_shift = 10,2324		.hd_reg = AFE_UL10_CON0,2325		.hd_shift = 5,2326		.agent_disable_reg = AUDIO_TOP_CON5,2327		.agent_disable_shift = 9,2328		.ch_num_reg = -1,2329		.ch_num_shift = 0,2330		.ch_num_maskbit = 0,2331		.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2332		.msb_shift = 9,2333		.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2334		.msb_end_shift = 9,2335	},2336};2337 2338static const struct mtk_base_irq_data irq_data[MT8188_AFE_IRQ_NUM] = {2339	[MT8188_AFE_IRQ_1] = {2340		.id = MT8188_AFE_IRQ_1,2341		.irq_cnt_reg = -1,2342		.irq_cnt_shift = 0,2343		.irq_cnt_maskbit = 0,2344		.irq_fs_reg = -1,2345		.irq_fs_shift = 0,2346		.irq_fs_maskbit = 0,2347		.irq_en_reg = AFE_IRQ1_CON,2348		.irq_en_shift = 31,2349		.irq_clr_reg = AFE_IRQ_MCU_CLR,2350		.irq_clr_shift = 0,2351		.irq_status_shift = 16,2352	},2353	[MT8188_AFE_IRQ_2] = {2354		.id = MT8188_AFE_IRQ_2,2355		.irq_cnt_reg = -1,2356		.irq_cnt_shift = 0,2357		.irq_cnt_maskbit = 0,2358		.irq_fs_reg = -1,2359		.irq_fs_shift = 0,2360		.irq_fs_maskbit = 0,2361		.irq_en_reg = AFE_IRQ2_CON,2362		.irq_en_shift = 31,2363		.irq_clr_reg = AFE_IRQ_MCU_CLR,2364		.irq_clr_shift = 1,2365		.irq_status_shift = 17,2366	},2367	[MT8188_AFE_IRQ_3] = {2368		.id = MT8188_AFE_IRQ_3,2369		.irq_cnt_reg = AFE_IRQ3_CON,2370		.irq_cnt_shift = 0,2371		.irq_cnt_maskbit = 0xffffff,2372		.irq_fs_reg = -1,2373		.irq_fs_shift = 0,2374		.irq_fs_maskbit = 0,2375		.irq_en_reg = AFE_IRQ3_CON,2376		.irq_en_shift = 31,2377		.irq_clr_reg = AFE_IRQ_MCU_CLR,2378		.irq_clr_shift = 2,2379		.irq_status_shift = 18,2380	},2381	[MT8188_AFE_IRQ_8] = {2382		.id = MT8188_AFE_IRQ_8,2383		.irq_cnt_reg = -1,2384		.irq_cnt_shift = 0,2385		.irq_cnt_maskbit = 0,2386		.irq_fs_reg = -1,2387		.irq_fs_shift = 0,2388		.irq_fs_maskbit = 0,2389		.irq_en_reg = AFE_IRQ8_CON,2390		.irq_en_shift = 31,2391		.irq_clr_reg = AFE_IRQ_MCU_CLR,2392		.irq_clr_shift = 7,2393		.irq_status_shift = 23,2394	},2395	[MT8188_AFE_IRQ_9] = {2396		.id = MT8188_AFE_IRQ_9,2397		.irq_cnt_reg = AFE_IRQ9_CON,2398		.irq_cnt_shift = 0,2399		.irq_cnt_maskbit = 0xffffff,2400		.irq_fs_reg = -1,2401		.irq_fs_shift = 0,2402		.irq_fs_maskbit = 0,2403		.irq_en_reg = AFE_IRQ9_CON,2404		.irq_en_shift = 31,2405		.irq_clr_reg = AFE_IRQ_MCU_CLR,2406		.irq_clr_shift = 8,2407		.irq_status_shift = 24,2408	},2409	[MT8188_AFE_IRQ_10] = {2410		.id = MT8188_AFE_IRQ_10,2411		.irq_cnt_reg = -1,2412		.irq_cnt_shift = 0,2413		.irq_cnt_maskbit = 0,2414		.irq_fs_reg = -1,2415		.irq_fs_shift = 0,2416		.irq_fs_maskbit = 0,2417		.irq_en_reg = AFE_IRQ10_CON,2418		.irq_en_shift = 31,2419		.irq_clr_reg = AFE_IRQ_MCU_CLR,2420		.irq_clr_shift = 9,2421		.irq_status_shift = 25,2422	},2423	[MT8188_AFE_IRQ_13] = {2424		.id = MT8188_AFE_IRQ_13,2425		.irq_cnt_reg = ASYS_IRQ1_CON,2426		.irq_cnt_shift = 0,2427		.irq_cnt_maskbit = 0xffffff,2428		.irq_fs_reg = ASYS_IRQ1_CON,2429		.irq_fs_shift = 24,2430		.irq_fs_maskbit = 0x1ffff,2431		.irq_en_reg = ASYS_IRQ1_CON,2432		.irq_en_shift = 31,2433		.irq_clr_reg =  ASYS_IRQ_CLR,2434		.irq_clr_shift = 0,2435		.irq_status_shift = 0,2436	},2437	[MT8188_AFE_IRQ_14] = {2438		.id = MT8188_AFE_IRQ_14,2439		.irq_cnt_reg = ASYS_IRQ2_CON,2440		.irq_cnt_shift = 0,2441		.irq_cnt_maskbit = 0xffffff,2442		.irq_fs_reg = ASYS_IRQ2_CON,2443		.irq_fs_shift = 24,2444		.irq_fs_maskbit = 0x1ffff,2445		.irq_en_reg = ASYS_IRQ2_CON,2446		.irq_en_shift = 31,2447		.irq_clr_reg =  ASYS_IRQ_CLR,2448		.irq_clr_shift = 1,2449		.irq_status_shift = 1,2450	},2451	[MT8188_AFE_IRQ_15] = {2452		.id = MT8188_AFE_IRQ_15,2453		.irq_cnt_reg = ASYS_IRQ3_CON,2454		.irq_cnt_shift = 0,2455		.irq_cnt_maskbit = 0xffffff,2456		.irq_fs_reg = ASYS_IRQ3_CON,2457		.irq_fs_shift = 24,2458		.irq_fs_maskbit = 0x1ffff,2459		.irq_en_reg = ASYS_IRQ3_CON,2460		.irq_en_shift = 31,2461		.irq_clr_reg =  ASYS_IRQ_CLR,2462		.irq_clr_shift = 2,2463		.irq_status_shift = 2,2464	},2465	[MT8188_AFE_IRQ_16] = {2466		.id = MT8188_AFE_IRQ_16,2467		.irq_cnt_reg = ASYS_IRQ4_CON,2468		.irq_cnt_shift = 0,2469		.irq_cnt_maskbit = 0xffffff,2470		.irq_fs_reg = ASYS_IRQ4_CON,2471		.irq_fs_shift = 24,2472		.irq_fs_maskbit = 0x1ffff,2473		.irq_en_reg = ASYS_IRQ4_CON,2474		.irq_en_shift = 31,2475		.irq_clr_reg =  ASYS_IRQ_CLR,2476		.irq_clr_shift = 3,2477		.irq_status_shift = 3,2478	},2479	[MT8188_AFE_IRQ_17] = {2480		.id = MT8188_AFE_IRQ_17,2481		.irq_cnt_reg = ASYS_IRQ5_CON,2482		.irq_cnt_shift = 0,2483		.irq_cnt_maskbit = 0xffffff,2484		.irq_fs_reg = ASYS_IRQ5_CON,2485		.irq_fs_shift = 24,2486		.irq_fs_maskbit = 0x1ffff,2487		.irq_en_reg = ASYS_IRQ5_CON,2488		.irq_en_shift = 31,2489		.irq_clr_reg =  ASYS_IRQ_CLR,2490		.irq_clr_shift = 4,2491		.irq_status_shift = 4,2492	},2493	[MT8188_AFE_IRQ_18] = {2494		.id = MT8188_AFE_IRQ_18,2495		.irq_cnt_reg = ASYS_IRQ6_CON,2496		.irq_cnt_shift = 0,2497		.irq_cnt_maskbit = 0xffffff,2498		.irq_fs_reg = ASYS_IRQ6_CON,2499		.irq_fs_shift = 24,2500		.irq_fs_maskbit = 0x1ffff,2501		.irq_en_reg = ASYS_IRQ6_CON,2502		.irq_en_shift = 31,2503		.irq_clr_reg =  ASYS_IRQ_CLR,2504		.irq_clr_shift = 5,2505		.irq_status_shift = 5,2506	},2507	[MT8188_AFE_IRQ_19] = {2508		.id = MT8188_AFE_IRQ_19,2509		.irq_cnt_reg = ASYS_IRQ7_CON,2510		.irq_cnt_shift = 0,2511		.irq_cnt_maskbit = 0xffffff,2512		.irq_fs_reg = ASYS_IRQ7_CON,2513		.irq_fs_shift = 24,2514		.irq_fs_maskbit = 0x1ffff,2515		.irq_en_reg = ASYS_IRQ7_CON,2516		.irq_en_shift = 31,2517		.irq_clr_reg =  ASYS_IRQ_CLR,2518		.irq_clr_shift = 6,2519		.irq_status_shift = 6,2520	},2521	[MT8188_AFE_IRQ_20] = {2522		.id = MT8188_AFE_IRQ_20,2523		.irq_cnt_reg = ASYS_IRQ8_CON,2524		.irq_cnt_shift = 0,2525		.irq_cnt_maskbit = 0xffffff,2526		.irq_fs_reg = ASYS_IRQ8_CON,2527		.irq_fs_shift = 24,2528		.irq_fs_maskbit = 0x1ffff,2529		.irq_en_reg = ASYS_IRQ8_CON,2530		.irq_en_shift = 31,2531		.irq_clr_reg =  ASYS_IRQ_CLR,2532		.irq_clr_shift = 7,2533		.irq_status_shift = 7,2534	},2535	[MT8188_AFE_IRQ_21] = {2536		.id = MT8188_AFE_IRQ_21,2537		.irq_cnt_reg = ASYS_IRQ9_CON,2538		.irq_cnt_shift = 0,2539		.irq_cnt_maskbit = 0xffffff,2540		.irq_fs_reg = ASYS_IRQ9_CON,2541		.irq_fs_shift = 24,2542		.irq_fs_maskbit = 0x1ffff,2543		.irq_en_reg = ASYS_IRQ9_CON,2544		.irq_en_shift = 31,2545		.irq_clr_reg =  ASYS_IRQ_CLR,2546		.irq_clr_shift = 8,2547		.irq_status_shift = 8,2548	},2549	[MT8188_AFE_IRQ_22] = {2550		.id = MT8188_AFE_IRQ_22,2551		.irq_cnt_reg = ASYS_IRQ10_CON,2552		.irq_cnt_shift = 0,2553		.irq_cnt_maskbit = 0xffffff,2554		.irq_fs_reg = ASYS_IRQ10_CON,2555		.irq_fs_shift = 24,2556		.irq_fs_maskbit = 0x1ffff,2557		.irq_en_reg = ASYS_IRQ10_CON,2558		.irq_en_shift = 31,2559		.irq_clr_reg =  ASYS_IRQ_CLR,2560		.irq_clr_shift = 9,2561		.irq_status_shift = 9,2562	},2563	[MT8188_AFE_IRQ_23] = {2564		.id = MT8188_AFE_IRQ_23,2565		.irq_cnt_reg = ASYS_IRQ11_CON,2566		.irq_cnt_shift = 0,2567		.irq_cnt_maskbit = 0xffffff,2568		.irq_fs_reg = ASYS_IRQ11_CON,2569		.irq_fs_shift = 24,2570		.irq_fs_maskbit = 0x1ffff,2571		.irq_en_reg = ASYS_IRQ11_CON,2572		.irq_en_shift = 31,2573		.irq_clr_reg =  ASYS_IRQ_CLR,2574		.irq_clr_shift = 10,2575		.irq_status_shift = 10,2576	},2577	[MT8188_AFE_IRQ_24] = {2578		.id = MT8188_AFE_IRQ_24,2579		.irq_cnt_reg = ASYS_IRQ12_CON,2580		.irq_cnt_shift = 0,2581		.irq_cnt_maskbit = 0xffffff,2582		.irq_fs_reg = ASYS_IRQ12_CON,2583		.irq_fs_shift = 24,2584		.irq_fs_maskbit = 0x1ffff,2585		.irq_en_reg = ASYS_IRQ12_CON,2586		.irq_en_shift = 31,2587		.irq_clr_reg =  ASYS_IRQ_CLR,2588		.irq_clr_shift = 11,2589		.irq_status_shift = 11,2590	},2591	[MT8188_AFE_IRQ_25] = {2592		.id = MT8188_AFE_IRQ_25,2593		.irq_cnt_reg = ASYS_IRQ13_CON,2594		.irq_cnt_shift = 0,2595		.irq_cnt_maskbit = 0xffffff,2596		.irq_fs_reg = ASYS_IRQ13_CON,2597		.irq_fs_shift = 24,2598		.irq_fs_maskbit = 0x1ffff,2599		.irq_en_reg = ASYS_IRQ13_CON,2600		.irq_en_shift = 31,2601		.irq_clr_reg =  ASYS_IRQ_CLR,2602		.irq_clr_shift = 12,2603		.irq_status_shift = 12,2604	},2605	[MT8188_AFE_IRQ_26] = {2606		.id = MT8188_AFE_IRQ_26,2607		.irq_cnt_reg = ASYS_IRQ14_CON,2608		.irq_cnt_shift = 0,2609		.irq_cnt_maskbit = 0xffffff,2610		.irq_fs_reg = ASYS_IRQ14_CON,2611		.irq_fs_shift = 24,2612		.irq_fs_maskbit = 0x1ffff,2613		.irq_en_reg = ASYS_IRQ14_CON,2614		.irq_en_shift = 31,2615		.irq_clr_reg =  ASYS_IRQ_CLR,2616		.irq_clr_shift = 13,2617		.irq_status_shift = 13,2618	},2619	[MT8188_AFE_IRQ_27] = {2620		.id = MT8188_AFE_IRQ_27,2621		.irq_cnt_reg = ASYS_IRQ15_CON,2622		.irq_cnt_shift = 0,2623		.irq_cnt_maskbit = 0xffffff,2624		.irq_fs_reg = ASYS_IRQ15_CON,2625		.irq_fs_shift = 24,2626		.irq_fs_maskbit = 0x1ffff,2627		.irq_en_reg = ASYS_IRQ15_CON,2628		.irq_en_shift = 31,2629		.irq_clr_reg =  ASYS_IRQ_CLR,2630		.irq_clr_shift = 14,2631		.irq_status_shift = 14,2632	},2633	[MT8188_AFE_IRQ_28] = {2634		.id = MT8188_AFE_IRQ_28,2635		.irq_cnt_reg = ASYS_IRQ16_CON,2636		.irq_cnt_shift = 0,2637		.irq_cnt_maskbit = 0xffffff,2638		.irq_fs_reg = ASYS_IRQ16_CON,2639		.irq_fs_shift = 24,2640		.irq_fs_maskbit = 0x1ffff,2641		.irq_en_reg = ASYS_IRQ16_CON,2642		.irq_en_shift = 31,2643		.irq_clr_reg =  ASYS_IRQ_CLR,2644		.irq_clr_shift = 15,2645		.irq_status_shift = 15,2646	},2647};2648 2649static const int mt8188_afe_memif_const_irqs[MT8188_AFE_MEMIF_NUM] = {2650	[MT8188_AFE_MEMIF_DL2] = MT8188_AFE_IRQ_13,2651	[MT8188_AFE_MEMIF_DL3] = MT8188_AFE_IRQ_14,2652	[MT8188_AFE_MEMIF_DL6] = MT8188_AFE_IRQ_15,2653	[MT8188_AFE_MEMIF_DL7] = MT8188_AFE_IRQ_1,2654	[MT8188_AFE_MEMIF_DL8] = MT8188_AFE_IRQ_16,2655	[MT8188_AFE_MEMIF_DL10] = MT8188_AFE_IRQ_17,2656	[MT8188_AFE_MEMIF_DL11] = MT8188_AFE_IRQ_18,2657	[MT8188_AFE_MEMIF_UL1] = MT8188_AFE_IRQ_3,2658	[MT8188_AFE_MEMIF_UL2] = MT8188_AFE_IRQ_19,2659	[MT8188_AFE_MEMIF_UL3] = MT8188_AFE_IRQ_20,2660	[MT8188_AFE_MEMIF_UL4] = MT8188_AFE_IRQ_21,2661	[MT8188_AFE_MEMIF_UL5] = MT8188_AFE_IRQ_22,2662	[MT8188_AFE_MEMIF_UL6] = MT8188_AFE_IRQ_9,2663	[MT8188_AFE_MEMIF_UL8] = MT8188_AFE_IRQ_23,2664	[MT8188_AFE_MEMIF_UL9] = MT8188_AFE_IRQ_24,2665	[MT8188_AFE_MEMIF_UL10] = MT8188_AFE_IRQ_25,2666};2667 2668static bool mt8188_is_volatile_reg(struct device *dev, unsigned int reg)2669{2670	/* these auto-gen reg has read-only bit, so put it as volatile */2671	/* volatile reg cannot be cached, so cannot be set when power off */2672	switch (reg) {2673	case AUDIO_TOP_CON0:2674	case AUDIO_TOP_CON1:2675	case AUDIO_TOP_CON3:2676	case AUDIO_TOP_CON4:2677	case AUDIO_TOP_CON5:2678	case AUDIO_TOP_CON6:2679	case ASYS_IRQ_CLR:2680	case ASYS_IRQ_STATUS:2681	case ASYS_IRQ_MON1:2682	case ASYS_IRQ_MON2:2683	case AFE_IRQ_MCU_CLR:2684	case AFE_IRQ_STATUS:2685	case AFE_IRQ3_CON_MON:2686	case AFE_IRQ_MCU_MON2:2687	case ADSP_IRQ_STATUS:2688	case AUDIO_TOP_STA0:2689	case AUDIO_TOP_STA1:2690	case AFE_GAIN1_CUR:2691	case AFE_GAIN2_CUR:2692	case AFE_IEC_BURST_INFO:2693	case AFE_IEC_CHL_STAT0:2694	case AFE_IEC_CHL_STAT1:2695	case AFE_IEC_CHR_STAT0:2696	case AFE_IEC_CHR_STAT1:2697	case AFE_SPDIFIN_CHSTS1:2698	case AFE_SPDIFIN_CHSTS2:2699	case AFE_SPDIFIN_CHSTS3:2700	case AFE_SPDIFIN_CHSTS4:2701	case AFE_SPDIFIN_CHSTS5:2702	case AFE_SPDIFIN_CHSTS6:2703	case AFE_SPDIFIN_DEBUG1:2704	case AFE_SPDIFIN_DEBUG2:2705	case AFE_SPDIFIN_DEBUG3:2706	case AFE_SPDIFIN_DEBUG4:2707	case AFE_SPDIFIN_EC:2708	case AFE_SPDIFIN_CKLOCK_CFG:2709	case AFE_SPDIFIN_BR_DBG1:2710	case AFE_SPDIFIN_CKFBDIV:2711	case AFE_SPDIFIN_INT_EXT:2712	case AFE_SPDIFIN_INT_EXT2:2713	case SPDIFIN_FREQ_STATUS:2714	case SPDIFIN_USERCODE1:2715	case SPDIFIN_USERCODE2:2716	case SPDIFIN_USERCODE3:2717	case SPDIFIN_USERCODE4:2718	case SPDIFIN_USERCODE5:2719	case SPDIFIN_USERCODE6:2720	case SPDIFIN_USERCODE7:2721	case SPDIFIN_USERCODE8:2722	case SPDIFIN_USERCODE9:2723	case SPDIFIN_USERCODE10:2724	case SPDIFIN_USERCODE11:2725	case SPDIFIN_USERCODE12:2726	case AFE_LINEIN_APLL_TUNER_MON:2727	case AFE_EARC_APLL_TUNER_MON:2728	case AFE_CM0_MON:2729	case AFE_CM1_MON:2730	case AFE_CM2_MON:2731	case AFE_MPHONE_MULTI_DET_MON0:2732	case AFE_MPHONE_MULTI_DET_MON1:2733	case AFE_MPHONE_MULTI_DET_MON2:2734	case AFE_MPHONE_MULTI2_DET_MON0:2735	case AFE_MPHONE_MULTI2_DET_MON1:2736	case AFE_MPHONE_MULTI2_DET_MON2:2737	case AFE_ADDA_MTKAIF_MON0:2738	case AFE_ADDA_MTKAIF_MON1:2739	case AFE_AUD_PAD_TOP:2740	case AFE_ADDA6_MTKAIF_MON0:2741	case AFE_ADDA6_MTKAIF_MON1:2742	case AFE_ADDA6_SRC_DEBUG_MON0:2743	case AFE_ADDA6_UL_SRC_MON0:2744	case AFE_ADDA6_UL_SRC_MON1:2745	case AFE_ASRC11_NEW_CON8:2746	case AFE_ASRC11_NEW_CON9:2747	case AFE_ASRC12_NEW_CON8:2748	case AFE_ASRC12_NEW_CON9:2749	case AFE_LRCK_CNT:2750	case AFE_DAC_MON0:2751	case AFE_DAC_CON0:2752	case AFE_DL2_CUR:2753	case AFE_DL3_CUR:2754	case AFE_DL6_CUR:2755	case AFE_DL7_CUR:2756	case AFE_DL8_CUR:2757	case AFE_DL10_CUR:2758	case AFE_DL11_CUR:2759	case AFE_UL1_CUR:2760	case AFE_UL2_CUR:2761	case AFE_UL3_CUR:2762	case AFE_UL4_CUR:2763	case AFE_UL5_CUR:2764	case AFE_UL6_CUR:2765	case AFE_UL8_CUR:2766	case AFE_UL9_CUR:2767	case AFE_UL10_CUR:2768	case AFE_DL8_CHK_SUM1:2769	case AFE_DL8_CHK_SUM2:2770	case AFE_DL8_CHK_SUM3:2771	case AFE_DL8_CHK_SUM4:2772	case AFE_DL8_CHK_SUM5:2773	case AFE_DL8_CHK_SUM6:2774	case AFE_DL10_CHK_SUM1:2775	case AFE_DL10_CHK_SUM2:2776	case AFE_DL10_CHK_SUM3:2777	case AFE_DL10_CHK_SUM4:2778	case AFE_DL10_CHK_SUM5:2779	case AFE_DL10_CHK_SUM6:2780	case AFE_DL11_CHK_SUM1:2781	case AFE_DL11_CHK_SUM2:2782	case AFE_DL11_CHK_SUM3:2783	case AFE_DL11_CHK_SUM4:2784	case AFE_DL11_CHK_SUM5:2785	case AFE_DL11_CHK_SUM6:2786	case AFE_UL1_CHK_SUM1:2787	case AFE_UL1_CHK_SUM2:2788	case AFE_UL2_CHK_SUM1:2789	case AFE_UL2_CHK_SUM2:2790	case AFE_UL3_CHK_SUM1:2791	case AFE_UL3_CHK_SUM2:2792	case AFE_UL4_CHK_SUM1:2793	case AFE_UL4_CHK_SUM2:2794	case AFE_UL5_CHK_SUM1:2795	case AFE_UL5_CHK_SUM2:2796	case AFE_UL6_CHK_SUM1:2797	case AFE_UL6_CHK_SUM2:2798	case AFE_UL8_CHK_SUM1:2799	case AFE_UL8_CHK_SUM2:2800	case AFE_DL2_CHK_SUM1:2801	case AFE_DL2_CHK_SUM2:2802	case AFE_DL3_CHK_SUM1:2803	case AFE_DL3_CHK_SUM2:2804	case AFE_DL6_CHK_SUM1:2805	case AFE_DL6_CHK_SUM2:2806	case AFE_DL7_CHK_SUM1:2807	case AFE_DL7_CHK_SUM2:2808	case AFE_UL9_CHK_SUM1:2809	case AFE_UL9_CHK_SUM2:2810	case AFE_BUS_MON1:2811	case UL1_MOD2AGT_CNT_LAT:2812	case UL2_MOD2AGT_CNT_LAT:2813	case UL3_MOD2AGT_CNT_LAT:2814	case UL4_MOD2AGT_CNT_LAT:2815	case UL5_MOD2AGT_CNT_LAT:2816	case UL6_MOD2AGT_CNT_LAT:2817	case UL8_MOD2AGT_CNT_LAT:2818	case UL9_MOD2AGT_CNT_LAT:2819	case UL10_MOD2AGT_CNT_LAT:2820	case AFE_MEMIF_BUF_FULL_MON:2821	case AFE_MEMIF_BUF_MON1:2822	case AFE_MEMIF_BUF_MON3:2823	case AFE_MEMIF_BUF_MON4:2824	case AFE_MEMIF_BUF_MON5:2825	case AFE_MEMIF_BUF_MON6:2826	case AFE_MEMIF_BUF_MON7:2827	case AFE_MEMIF_BUF_MON8:2828	case AFE_MEMIF_BUF_MON9:2829	case AFE_MEMIF_BUF_MON10:2830	case DL2_AGENT2MODULE_CNT:2831	case DL3_AGENT2MODULE_CNT:2832	case DL6_AGENT2MODULE_CNT:2833	case DL7_AGENT2MODULE_CNT:2834	case DL8_AGENT2MODULE_CNT:2835	case DL10_AGENT2MODULE_CNT:2836	case DL11_AGENT2MODULE_CNT:2837	case UL1_MODULE2AGENT_CNT:2838	case UL2_MODULE2AGENT_CNT:2839	case UL3_MODULE2AGENT_CNT:2840	case UL4_MODULE2AGENT_CNT:2841	case UL5_MODULE2AGENT_CNT:2842	case UL6_MODULE2AGENT_CNT:2843	case UL8_MODULE2AGENT_CNT:2844	case UL9_MODULE2AGENT_CNT:2845	case UL10_MODULE2AGENT_CNT:2846	case AFE_DMIC0_SRC_DEBUG_MON0:2847	case AFE_DMIC0_UL_SRC_MON0:2848	case AFE_DMIC0_UL_SRC_MON1:2849	case AFE_DMIC1_SRC_DEBUG_MON0:2850	case AFE_DMIC1_UL_SRC_MON0:2851	case AFE_DMIC1_UL_SRC_MON1:2852	case AFE_DMIC2_SRC_DEBUG_MON0:2853	case AFE_DMIC2_UL_SRC_MON0:2854	case AFE_DMIC2_UL_SRC_MON1:2855	case AFE_DMIC3_SRC_DEBUG_MON0:2856	case AFE_DMIC3_UL_SRC_MON0:2857	case AFE_DMIC3_UL_SRC_MON1:2858	case DMIC_GAIN1_CUR:2859	case DMIC_GAIN2_CUR:2860	case DMIC_GAIN3_CUR:2861	case DMIC_GAIN4_CUR:2862	case ETDM_IN1_MONITOR:2863	case ETDM_IN2_MONITOR:2864	case ETDM_OUT1_MONITOR:2865	case ETDM_OUT2_MONITOR:2866	case ETDM_OUT3_MONITOR:2867	case AFE_ADDA_SRC_DEBUG_MON0:2868	case AFE_ADDA_SRC_DEBUG_MON1:2869	case AFE_ADDA_DL_SDM_FIFO_MON:2870	case AFE_ADDA_DL_SRC_LCH_MON:2871	case AFE_ADDA_DL_SRC_RCH_MON:2872	case AFE_ADDA_DL_SDM_OUT_MON:2873	case AFE_GASRC0_NEW_CON8:2874	case AFE_GASRC0_NEW_CON9:2875	case AFE_GASRC0_NEW_CON12:2876	case AFE_GASRC1_NEW_CON8:2877	case AFE_GASRC1_NEW_CON9:2878	case AFE_GASRC1_NEW_CON12:2879	case AFE_GASRC2_NEW_CON8:2880	case AFE_GASRC2_NEW_CON9:2881	case AFE_GASRC2_NEW_CON12:2882	case AFE_GASRC3_NEW_CON8:2883	case AFE_GASRC3_NEW_CON9:2884	case AFE_GASRC3_NEW_CON12:2885	case AFE_GASRC4_NEW_CON8:2886	case AFE_GASRC4_NEW_CON9:2887	case AFE_GASRC4_NEW_CON12:2888	case AFE_GASRC5_NEW_CON8:2889	case AFE_GASRC5_NEW_CON9:2890	case AFE_GASRC5_NEW_CON12:2891	case AFE_GASRC6_NEW_CON8:2892	case AFE_GASRC6_NEW_CON9:2893	case AFE_GASRC6_NEW_CON12:2894	case AFE_GASRC7_NEW_CON8:2895	case AFE_GASRC7_NEW_CON9:2896	case AFE_GASRC7_NEW_CON12:2897	case AFE_GASRC8_NEW_CON8:2898	case AFE_GASRC8_NEW_CON9:2899	case AFE_GASRC8_NEW_CON12:2900	case AFE_GASRC9_NEW_CON8:2901	case AFE_GASRC9_NEW_CON9:2902	case AFE_GASRC9_NEW_CON12:2903	case AFE_GASRC10_NEW_CON8:2904	case AFE_GASRC10_NEW_CON9:2905	case AFE_GASRC10_NEW_CON12:2906	case AFE_GASRC11_NEW_CON8:2907	case AFE_GASRC11_NEW_CON9:2908	case AFE_GASRC11_NEW_CON12:2909		return true;2910	default:2911		return false;2912	};2913}2914 2915static const struct regmap_config mt8188_afe_regmap_config = {2916	.reg_bits = 32,2917	.reg_stride = 4,2918	.val_bits = 32,2919	.volatile_reg = mt8188_is_volatile_reg,2920	.max_register = AFE_MAX_REGISTER,2921	.num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1),2922	.cache_type = REGCACHE_FLAT,2923};2924 2925#define AFE_IRQ_CLR_BITS (0x387)2926#define ASYS_IRQ_CLR_BITS (0xffff)2927 2928static irqreturn_t mt8188_afe_irq_handler(int irq_id, void *dev_id)2929{2930	struct mtk_base_afe *afe = dev_id;2931	unsigned int val = 0;2932	unsigned int asys_irq_clr_bits = 0;2933	unsigned int afe_irq_clr_bits = 0;2934	unsigned int irq_status_bits = 0;2935	unsigned int irq_clr_bits = 0;2936	unsigned int mcu_irq_mask = 0;2937	int i = 0;2938	int ret = 0;2939 2940	ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val);2941	if (ret) {2942		dev_err(afe->dev, "%s irq status err\n", __func__);2943		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2944		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2945		goto err_irq;2946	}2947 2948	ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask);2949	if (ret) {2950		dev_err(afe->dev, "%s read irq mask err\n", __func__);2951		afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2952		asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2953		goto err_irq;2954	}2955 2956	/* only clr cpu irq */2957	val &= mcu_irq_mask;2958 2959	for (i = 0; i < MT8188_AFE_MEMIF_NUM; i++) {2960		struct mtk_base_afe_memif *memif = &afe->memif[i];2961		struct mtk_base_irq_data const *irq_data;2962 2963		if (memif->irq_usage < 0)2964			continue;2965 2966		irq_data = afe->irqs[memif->irq_usage].irq_data;2967 2968		irq_status_bits = BIT(irq_data->irq_status_shift);2969		irq_clr_bits = BIT(irq_data->irq_clr_shift);2970 2971		if (!(val & irq_status_bits))2972			continue;2973 2974		if (irq_data->irq_clr_reg == ASYS_IRQ_CLR)2975			asys_irq_clr_bits |= irq_clr_bits;2976		else2977			afe_irq_clr_bits |= irq_clr_bits;2978 2979		snd_pcm_period_elapsed(memif->substream);2980	}2981 2982err_irq:2983	/* clear irq */2984	if (asys_irq_clr_bits)2985		regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits);2986	if (afe_irq_clr_bits)2987		regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits);2988 2989	return IRQ_HANDLED;2990}2991 2992static int mt8188_afe_runtime_suspend(struct device *dev)2993{2994	struct mtk_base_afe *afe = dev_get_drvdata(dev);2995	struct mt8188_afe_private *afe_priv = afe->platform_priv;2996 2997	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)2998		goto skip_regmap;2999 3000	mt8188_afe_disable_main_clock(afe);3001 3002	regcache_cache_only(afe->regmap, true);3003	regcache_mark_dirty(afe->regmap);3004 3005skip_regmap:3006	mt8188_afe_disable_reg_rw_clk(afe);3007 3008	return 0;3009}3010 3011static int mt8188_afe_runtime_resume(struct device *dev)3012{3013	struct mtk_base_afe *afe = dev_get_drvdata(dev);3014	struct mt8188_afe_private *afe_priv = afe->platform_priv;3015	struct arm_smccc_res res;3016 3017	arm_smccc_smc(MTK_SIP_AUDIO_CONTROL,3018		      MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS,3019		      0, 0, 0, 0, 0, 0, &res);3020 3021	mt8188_afe_enable_reg_rw_clk(afe);3022 3023	if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)3024		goto skip_regmap;3025 3026	regcache_cache_only(afe->regmap, false);3027	regcache_sync(afe->regmap);3028 3029	mt8188_afe_enable_main_clock(afe);3030skip_regmap:3031	return 0;3032}3033 3034static int init_memif_priv_data(struct mtk_base_afe *afe)3035{3036	struct mt8188_afe_private *afe_priv = afe->platform_priv;3037	struct mtk_dai_memif_priv *memif_priv;3038	int i;3039 3040	for (i = MT8188_AFE_MEMIF_START; i < MT8188_AFE_MEMIF_END; i++) {3041		memif_priv = devm_kzalloc(afe->dev,3042					  sizeof(struct mtk_dai_memif_priv),3043					  GFP_KERNEL);3044		if (!memif_priv)3045			return -ENOMEM;3046 3047		afe_priv->dai_priv[i] = memif_priv;3048	}3049 3050	return 0;3051}3052 3053static int mt8188_dai_memif_register(struct mtk_base_afe *afe)3054{3055	struct mtk_base_afe_dai *dai;3056 3057	dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);3058	if (!dai)3059		return -ENOMEM;3060 3061	list_add(&dai->list, &afe->sub_dais);3062 3063	dai->dai_drivers = mt8188_memif_dai_driver;3064	dai->num_dai_drivers = ARRAY_SIZE(mt8188_memif_dai_driver);3065 3066	dai->dapm_widgets = mt8188_memif_widgets;3067	dai->num_dapm_widgets = ARRAY_SIZE(mt8188_memif_widgets);3068	dai->dapm_routes = mt8188_memif_routes;3069	dai->num_dapm_routes = ARRAY_SIZE(mt8188_memif_routes);3070	dai->controls = mt8188_memif_controls;3071	dai->num_controls = ARRAY_SIZE(mt8188_memif_controls);3072 3073	return init_memif_priv_data(afe);3074}3075 3076typedef int (*dai_register_cb)(struct mtk_base_afe *);3077static const dai_register_cb dai_register_cbs[] = {3078	mt8188_dai_adda_register,3079	mt8188_dai_etdm_register,3080	mt8188_dai_pcm_register,3081	mt8188_dai_memif_register,3082};3083 3084static const struct reg_sequence mt8188_afe_reg_defaults[] = {3085	{ AFE_IRQ_MASK, 0x387ffff },3086	{ AFE_IRQ3_CON, BIT(30) },3087	{ AFE_IRQ9_CON, BIT(30) },3088	{ ETDM_IN1_CON4, 0x12000100 },3089	{ ETDM_IN2_CON4, 0x12000100 },3090};3091 3092static const struct reg_sequence mt8188_cg_patch[] = {3093	{ AUDIO_TOP_CON0, 0xfffffffb },3094	{ AUDIO_TOP_CON1, 0xfffffff8 },3095};3096 3097static int mt8188_afe_init_registers(struct mtk_base_afe *afe)3098{3099	return regmap_multi_reg_write(afe->regmap,3100				      mt8188_afe_reg_defaults,3101				      ARRAY_SIZE(mt8188_afe_reg_defaults));3102}3103 3104static int mt8188_afe_parse_of(struct mtk_base_afe *afe,3105			       struct device_node *np)3106{3107#if IS_ENABLED(CONFIG_SND_SOC_MT6359)3108	struct mt8188_afe_private *afe_priv = afe->platform_priv;3109 3110	afe_priv->topckgen = syscon_regmap_lookup_by_phandle(afe->dev->of_node,3111							     "mediatek,topckgen");3112	if (IS_ERR(afe_priv->topckgen))3113		return dev_err_probe(afe->dev,  PTR_ERR(afe_priv->topckgen),3114				     "%s() Cannot find topckgen controller\n",3115				     __func__);3116#endif3117	return 0;3118}3119 3120#define MT8188_DELAY_US 103121#define MT8188_TIMEOUT_US USEC_PER_SEC3122 3123static int bus_protect_enable(struct regmap *regmap)3124{3125	int ret;3126	u32 val;3127	u32 mask;3128 3129	val = 0;3130	mask = MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1;3131	regmap_write(regmap, MT8188_TOP_AXI_PROT_EN_2_SET, mask);3132 3133	ret = regmap_read_poll_timeout(regmap, MT8188_TOP_AXI_PROT_EN_2_STA,3134				       val, (val & mask) == mask,3135				       MT8188_DELAY_US, MT8188_TIMEOUT_US);3136	if (ret)3137		return ret;3138 3139	val = 0;3140	mask = MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2;3141	regmap_write(regmap, MT8188_TOP_AXI_PROT_EN_2_SET, mask);3142 3143	ret = regmap_read_poll_timeout(regmap, MT8188_TOP_AXI_PROT_EN_2_STA,3144				       val, (val & mask) == mask,3145				       MT8188_DELAY_US, MT8188_TIMEOUT_US);3146	return ret;3147}3148 3149static int bus_protect_disable(struct regmap *regmap)3150{3151	int ret;3152	u32 val;3153	u32 mask;3154 3155	val = 0;3156	mask = MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2;3157	regmap_write(regmap, MT8188_TOP_AXI_PROT_EN_2_CLR, mask);3158 3159	ret = regmap_read_poll_timeout(regmap, MT8188_TOP_AXI_PROT_EN_2_STA,3160				       val, !(val & mask),3161				       MT8188_DELAY_US, MT8188_TIMEOUT_US);3162	if (ret)3163		return ret;3164 3165	val = 0;3166	mask = MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1;3167	regmap_write(regmap, MT8188_TOP_AXI_PROT_EN_2_CLR, mask);3168 3169	ret = regmap_read_poll_timeout(regmap, MT8188_TOP_AXI_PROT_EN_2_STA,3170				       val, !(val & mask),3171				       MT8188_DELAY_US, MT8188_TIMEOUT_US);3172	return ret;3173}3174 3175static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)3176{3177	struct mtk_base_afe *afe;3178	struct mt8188_afe_private *afe_priv;3179	struct device *dev = &pdev->dev;3180	struct reset_control *rstc;3181	struct regmap *infra_ao;3182	int i, irq_id, ret;3183 3184	ret = of_reserved_mem_device_init(dev);3185	if (ret)3186		dev_dbg(dev, "failed to assign memory region: %d\n", ret);3187 3188	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(33));3189	if (ret)3190		return ret;3191 3192	afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);3193	if (!afe)3194		return -ENOMEM;3195 3196	afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv),3197					  GFP_KERNEL);3198	if (!afe->platform_priv)3199		return -ENOMEM;3200 3201	afe_priv = afe->platform_priv;3202	afe->dev = &pdev->dev;3203 3204	afe->base_addr = devm_platform_ioremap_resource(pdev, 0);3205	if (IS_ERR(afe->base_addr))3206		return dev_err_probe(dev, PTR_ERR(afe->base_addr),3207				     "AFE base_addr not found\n");3208 3209	infra_ao = syscon_regmap_lookup_by_phandle(dev->of_node,3210						   "mediatek,infracfg");3211	if (IS_ERR(infra_ao))3212		return dev_err_probe(dev, PTR_ERR(infra_ao),3213				     "%s() Cannot find infra_ao controller\n",3214				     __func__);3215 3216	/* reset controller to reset audio regs before regmap cache */3217	rstc = devm_reset_control_get_exclusive(dev, "audiosys");3218	if (IS_ERR(rstc))3219		return dev_err_probe(dev, PTR_ERR(rstc),3220				     "could not get audiosys reset\n");3221 3222	ret = bus_protect_enable(infra_ao);3223	if (ret) {3224		dev_err(dev, "bus_protect_enable failed\n");3225		return ret;3226	}3227 3228	ret = reset_control_reset(rstc);3229	if (ret) {3230		dev_err(dev, "failed to trigger audio reset:%d\n", ret);3231		return ret;3232	}3233 3234	ret = bus_protect_disable(infra_ao);3235	if (ret) {3236		dev_err(dev, "bus_protect_disable failed\n");3237		return ret;3238	}3239 3240	/* initial audio related clock */3241	ret = mt8188_afe_init_clock(afe);3242	if (ret)3243		return dev_err_probe(dev, ret, "init clock error");3244 3245	spin_lock_init(&afe_priv->afe_ctrl_lock);3246 3247	mutex_init(&afe->irq_alloc_lock);3248 3249	/* irq initialize */3250	afe->irqs_size = MT8188_AFE_IRQ_NUM;3251	afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),3252				 GFP_KERNEL);3253	if (!afe->irqs)3254		return -ENOMEM;3255 3256	for (i = 0; i < afe->irqs_size; i++)3257		afe->irqs[i].irq_data = &irq_data[i];3258 3259	/* init memif */3260	afe->memif_size = MT8188_AFE_MEMIF_NUM;3261	afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),3262				  GFP_KERNEL);3263	if (!afe->memif)3264		return -ENOMEM;3265 3266	for (i = 0; i < afe->memif_size; i++) {3267		afe->memif[i].data = &memif_data[i];3268		afe->memif[i].irq_usage = mt8188_afe_memif_const_irqs[i];3269		afe->memif[i].const_irq = 1;3270		afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true;3271	}3272 3273	/* request irq */3274	irq_id = platform_get_irq(pdev, 0);3275	if (irq_id < 0)3276		return dev_err_probe(dev, irq_id, "no irq found");3277 3278	ret = devm_request_irq(dev, irq_id, mt8188_afe_irq_handler,3279			       IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);3280	if (ret)3281		return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");3282 3283	/* init sub_dais */3284	INIT_LIST_HEAD(&afe->sub_dais);3285 3286	for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {3287		ret = dai_register_cbs[i](afe);3288		if (ret)3289			return dev_err_probe(dev, ret, "dai register i %d fail\n", i);3290	}3291 3292	/* init dai_driver and component_driver */3293	ret = mtk_afe_combine_sub_dai(afe);3294	if (ret)3295		return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");3296 3297	afe->mtk_afe_hardware = &mt8188_afe_hardware;3298	afe->memif_fs = mt8188_memif_fs;3299	afe->irq_fs = mt8188_irq_fs;3300 3301	afe->runtime_resume = mt8188_afe_runtime_resume;3302	afe->runtime_suspend = mt8188_afe_runtime_suspend;3303 3304	platform_set_drvdata(pdev, afe);3305 3306	ret = mt8188_afe_parse_of(afe, pdev->dev.of_node);3307	if (ret)3308		return ret;3309 3310	ret = devm_pm_runtime_enable(dev);3311	if (ret)3312		return ret;3313 3314	/* enable clock for regcache get default value from hw */3315	afe_priv->pm_runtime_bypass_reg_ctl = true;3316	ret = pm_runtime_resume_and_get(dev);3317	if (ret)3318		return dev_err_probe(dev, ret, "failed to resume device\n");3319 3320	afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,3321					    &mt8188_afe_regmap_config);3322	if (IS_ERR(afe->regmap)) {3323		ret = PTR_ERR(afe->regmap);3324		goto err_pm_put;3325	}3326 3327	ret = regmap_register_patch(afe->regmap, mt8188_cg_patch,3328				    ARRAY_SIZE(mt8188_cg_patch));3329	if (ret < 0) {3330		dev_info(dev, "Failed to apply cg patch\n");3331		goto err_pm_put;3332	}3333 3334	/* register component */3335	ret = devm_snd_soc_register_component(dev, &mtk_afe_pcm_platform,3336					      afe->dai_drivers, afe->num_dai_drivers);3337	if (ret) {3338		dev_warn(dev, "err_platform\n");3339		goto err_pm_put;3340	}3341 3342	mt8188_afe_init_registers(afe);3343 3344	pm_runtime_put_sync(&pdev->dev);3345	afe_priv->pm_runtime_bypass_reg_ctl = false;3346 3347	regcache_cache_only(afe->regmap, true);3348	regcache_mark_dirty(afe->regmap);3349 3350	return 0;3351err_pm_put:3352	pm_runtime_put_sync(dev);3353 3354	return ret;3355}3356 3357static const struct of_device_id mt8188_afe_pcm_dt_match[] = {3358	{ .compatible = "mediatek,mt8188-afe", },3359	{},3360};3361MODULE_DEVICE_TABLE(of, mt8188_afe_pcm_dt_match);3362 3363static const struct dev_pm_ops mt8188_afe_pm_ops = {3364	SET_RUNTIME_PM_OPS(mt8188_afe_runtime_suspend,3365			   mt8188_afe_runtime_resume, NULL)3366};3367 3368static struct platform_driver mt8188_afe_pcm_driver = {3369	.driver = {3370		   .name = "mt8188-audio",3371		   .of_match_table = mt8188_afe_pcm_dt_match,3372		   .pm = &mt8188_afe_pm_ops,3373	},3374	.probe = mt8188_afe_pcm_dev_probe,3375};3376 3377module_platform_driver(mt8188_afe_pcm_driver);3378 3379MODULE_DESCRIPTION("MediaTek SoC AFE platform driver for ALSA 8188");3380MODULE_AUTHOR("Chun-Chia.Chiu <chun-chia.chiu@mediatek.com>");3381MODULE_LICENSE("GPL");3382