Path: blob/master/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
54378 views
// SPDX-License-Identifier: GPL-2.01/*2* Mediatek ALSA SoC AFE platform driver for 81953*4* Copyright (c) 2021 MediaTek Inc.5* Author: Bicycle Tsai <[email protected]>6* Trevor Wu <[email protected]>7*/89#include <linux/delay.h>10#include <linux/dma-mapping.h>11#include <linux/module.h>12#include <linux/mfd/syscon.h>13#include <linux/of.h>14#include <linux/of_address.h>15#include <linux/of_platform.h>16#include <linux/of_reserved_mem.h>17#include <linux/pm_runtime.h>18#include <linux/reset.h>19#include "mt8195-afe-common.h"20#include "mt8195-afe-clk.h"21#include "mt8195-reg.h"22#include "../common/mtk-afe-platform-driver.h"23#include "../common/mtk-afe-fe-dai.h"2425#define MT8195_MEMIF_BUFFER_BYTES_ALIGN (0x40)26#define MT8195_MEMIF_DL7_MAX_PERIOD_SIZE (0x3fff)2728struct mtk_dai_memif_priv {29unsigned int asys_timing_sel;30};3132static const struct snd_pcm_hardware mt8195_afe_hardware = {33.info = SNDRV_PCM_INFO_MMAP |34SNDRV_PCM_INFO_INTERLEAVED |35SNDRV_PCM_INFO_MMAP_VALID,36.formats = SNDRV_PCM_FMTBIT_S16_LE |37SNDRV_PCM_FMTBIT_S24_LE |38SNDRV_PCM_FMTBIT_S32_LE,39.period_bytes_min = 64,40.period_bytes_max = 256 * 1024,41.periods_min = 2,42.periods_max = 256,43.buffer_bytes_max = 256 * 2 * 1024,44};4546struct mt8195_afe_rate {47unsigned int rate;48unsigned int reg_value;49};5051static const struct mt8195_afe_rate mt8195_afe_rates[] = {52{ .rate = 8000, .reg_value = 0, },53{ .rate = 12000, .reg_value = 1, },54{ .rate = 16000, .reg_value = 2, },55{ .rate = 24000, .reg_value = 3, },56{ .rate = 32000, .reg_value = 4, },57{ .rate = 48000, .reg_value = 5, },58{ .rate = 96000, .reg_value = 6, },59{ .rate = 192000, .reg_value = 7, },60{ .rate = 384000, .reg_value = 8, },61{ .rate = 7350, .reg_value = 16, },62{ .rate = 11025, .reg_value = 17, },63{ .rate = 14700, .reg_value = 18, },64{ .rate = 22050, .reg_value = 19, },65{ .rate = 29400, .reg_value = 20, },66{ .rate = 44100, .reg_value = 21, },67{ .rate = 88200, .reg_value = 22, },68{ .rate = 176400, .reg_value = 23, },69{ .rate = 352800, .reg_value = 24, },70};7172int mt8195_afe_fs_timing(unsigned int rate)73{74int i;7576for (i = 0; i < ARRAY_SIZE(mt8195_afe_rates); i++)77if (mt8195_afe_rates[i].rate == rate)78return mt8195_afe_rates[i].reg_value;7980return -EINVAL;81}8283static int mt8195_memif_fs(struct snd_pcm_substream *substream,84unsigned int rate)85{86struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);87struct snd_soc_component *component =88snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);89struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);90int id = snd_soc_rtd_to_cpu(rtd, 0)->id;91struct mtk_base_afe_memif *memif = &afe->memif[id];92int fs = mt8195_afe_fs_timing(rate);9394switch (memif->data->id) {95case MT8195_AFE_MEMIF_DL10:96fs = MT8195_ETDM_OUT3_1X_EN;97break;98case MT8195_AFE_MEMIF_UL8:99fs = MT8195_ETDM_IN1_NX_EN;100break;101case MT8195_AFE_MEMIF_UL3:102fs = MT8195_ETDM_IN2_NX_EN;103break;104default:105break;106}107108return fs;109}110111static int mt8195_irq_fs(struct snd_pcm_substream *substream,112unsigned int rate)113{114int fs = mt8195_memif_fs(substream, rate);115116switch (fs) {117case MT8195_ETDM_IN1_NX_EN:118fs = MT8195_ETDM_IN1_1X_EN;119break;120case MT8195_ETDM_IN2_NX_EN:121fs = MT8195_ETDM_IN2_1X_EN;122break;123default:124break;125}126127return fs;128}129130enum {131MT8195_AFE_CM0,132MT8195_AFE_CM1,133MT8195_AFE_CM2,134MT8195_AFE_CM_NUM,135};136137struct mt8195_afe_channel_merge {138int id;139int reg;140unsigned int sel_shift;141unsigned int sel_maskbit;142unsigned int sel_default;143unsigned int ch_num_shift;144unsigned int ch_num_maskbit;145unsigned int en_shift;146unsigned int en_maskbit;147unsigned int update_cnt_shift;148unsigned int update_cnt_maskbit;149unsigned int update_cnt_default;150};151152static const struct mt8195_afe_channel_merge153mt8195_afe_cm[MT8195_AFE_CM_NUM] = {154[MT8195_AFE_CM0] = {155.id = MT8195_AFE_CM0,156.reg = AFE_CM0_CON,157.sel_shift = 30,158.sel_maskbit = 0x1,159.sel_default = 1,160.ch_num_shift = 2,161.ch_num_maskbit = 0x3f,162.en_shift = 0,163.en_maskbit = 0x1,164.update_cnt_shift = 16,165.update_cnt_maskbit = 0x1fff,166.update_cnt_default = 0x3,167},168[MT8195_AFE_CM1] = {169.id = MT8195_AFE_CM1,170.reg = AFE_CM1_CON,171.sel_shift = 30,172.sel_maskbit = 0x1,173.sel_default = 1,174.ch_num_shift = 2,175.ch_num_maskbit = 0x1f,176.en_shift = 0,177.en_maskbit = 0x1,178.update_cnt_shift = 16,179.update_cnt_maskbit = 0x1fff,180.update_cnt_default = 0x3,181},182[MT8195_AFE_CM2] = {183.id = MT8195_AFE_CM2,184.reg = AFE_CM2_CON,185.sel_shift = 30,186.sel_maskbit = 0x1,187.sel_default = 1,188.ch_num_shift = 2,189.ch_num_maskbit = 0x1f,190.en_shift = 0,191.en_maskbit = 0x1,192.update_cnt_shift = 16,193.update_cnt_maskbit = 0x1fff,194.update_cnt_default = 0x3,195},196};197198static int mt8195_afe_memif_is_ul(int id)199{200if (id >= MT8195_AFE_MEMIF_UL_START && id < MT8195_AFE_MEMIF_END)201return 1;202else203return 0;204}205206static const struct mt8195_afe_channel_merge*207mt8195_afe_found_cm(struct snd_soc_dai *dai)208{209struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);210int id = -EINVAL;211212if (mt8195_afe_memif_is_ul(dai->id) == 0)213return NULL;214215switch (dai->id) {216case MT8195_AFE_MEMIF_UL9:217id = MT8195_AFE_CM0;218break;219case MT8195_AFE_MEMIF_UL2:220id = MT8195_AFE_CM1;221break;222case MT8195_AFE_MEMIF_UL10:223id = MT8195_AFE_CM2;224break;225default:226break;227}228229if (id < 0) {230dev_dbg(afe->dev, "%s, memif %d cannot find CM!\n",231__func__, dai->id);232return NULL;233}234235return &mt8195_afe_cm[id];236}237238static int mt8195_afe_config_cm(struct mtk_base_afe *afe,239const struct mt8195_afe_channel_merge *cm,240unsigned int channels)241{242if (!cm)243return -EINVAL;244245regmap_update_bits(afe->regmap,246cm->reg,247cm->sel_maskbit << cm->sel_shift,248cm->sel_default << cm->sel_shift);249250regmap_update_bits(afe->regmap,251cm->reg,252cm->ch_num_maskbit << cm->ch_num_shift,253(channels - 1) << cm->ch_num_shift);254255regmap_update_bits(afe->regmap,256cm->reg,257cm->update_cnt_maskbit << cm->update_cnt_shift,258cm->update_cnt_default << cm->update_cnt_shift);259260return 0;261}262263static int mt8195_afe_enable_cm(struct mtk_base_afe *afe,264const struct mt8195_afe_channel_merge *cm,265bool enable)266{267if (!cm)268return -EINVAL;269270regmap_update_bits(afe->regmap,271cm->reg,272cm->en_maskbit << cm->en_shift,273enable << cm->en_shift);274275return 0;276}277278static int279mt8195_afe_paired_memif_clk_prepare(struct snd_pcm_substream *substream,280struct snd_soc_dai *dai,281int enable)282{283struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);284struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);285struct mt8195_afe_private *afe_priv = afe->platform_priv;286int id = snd_soc_rtd_to_cpu(rtd, 0)->id;287int clk_id;288289if (id != MT8195_AFE_MEMIF_DL8 && id != MT8195_AFE_MEMIF_DL10)290return 0;291292if (enable) {293clk_id = MT8195_CLK_AUD_MEMIF_DL10;294mt8195_afe_prepare_clk(afe, afe_priv->clk[clk_id]);295clk_id = MT8195_CLK_AUD_MEMIF_DL8;296mt8195_afe_prepare_clk(afe, afe_priv->clk[clk_id]);297} else {298clk_id = MT8195_CLK_AUD_MEMIF_DL8;299mt8195_afe_unprepare_clk(afe, afe_priv->clk[clk_id]);300clk_id = MT8195_CLK_AUD_MEMIF_DL10;301mt8195_afe_unprepare_clk(afe, afe_priv->clk[clk_id]);302}303304return 0;305}306307static int308mt8195_afe_paired_memif_clk_enable(struct snd_pcm_substream *substream,309struct snd_soc_dai *dai,310int enable)311{312struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);313struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);314struct mt8195_afe_private *afe_priv = afe->platform_priv;315int id = snd_soc_rtd_to_cpu(rtd, 0)->id;316int clk_id;317318if (id != MT8195_AFE_MEMIF_DL8 && id != MT8195_AFE_MEMIF_DL10)319return 0;320321if (enable) {322/* DL8_DL10_MEM */323clk_id = MT8195_CLK_AUD_MEMIF_DL10;324mt8195_afe_enable_clk_atomic(afe, afe_priv->clk[clk_id]);325udelay(1);326/* DL8_DL10_AGENT */327clk_id = MT8195_CLK_AUD_MEMIF_DL8;328mt8195_afe_enable_clk_atomic(afe, afe_priv->clk[clk_id]);329} else {330/* DL8_DL10_AGENT */331clk_id = MT8195_CLK_AUD_MEMIF_DL8;332mt8195_afe_disable_clk_atomic(afe, afe_priv->clk[clk_id]);333/* DL8_DL10_MEM */334clk_id = MT8195_CLK_AUD_MEMIF_DL10;335mt8195_afe_disable_clk_atomic(afe, afe_priv->clk[clk_id]);336}337338return 0;339}340341static int mt8195_afe_fe_startup(struct snd_pcm_substream *substream,342struct snd_soc_dai *dai)343{344struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);345struct snd_pcm_runtime *runtime = substream->runtime;346struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);347int id = snd_soc_rtd_to_cpu(rtd, 0)->id;348int ret = 0;349350mt8195_afe_paired_memif_clk_prepare(substream, dai, 1);351352ret = mtk_afe_fe_startup(substream, dai);353354snd_pcm_hw_constraint_step(runtime, 0,355SNDRV_PCM_HW_PARAM_BUFFER_BYTES,356MT8195_MEMIF_BUFFER_BYTES_ALIGN);357358if (id != MT8195_AFE_MEMIF_DL7)359goto out;360361ret = snd_pcm_hw_constraint_minmax(runtime,362SNDRV_PCM_HW_PARAM_PERIOD_SIZE,3631,364MT8195_MEMIF_DL7_MAX_PERIOD_SIZE);365if (ret < 0)366dev_dbg(afe->dev, "hw_constraint_minmax failed\n");367out:368return ret;369}370371static void mt8195_afe_fe_shutdown(struct snd_pcm_substream *substream,372struct snd_soc_dai *dai)373{374mtk_afe_fe_shutdown(substream, dai);375mt8195_afe_paired_memif_clk_prepare(substream, dai, 0);376}377378static int mt8195_afe_fe_hw_params(struct snd_pcm_substream *substream,379struct snd_pcm_hw_params *params,380struct snd_soc_dai *dai)381{382struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);383struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);384int id = snd_soc_rtd_to_cpu(rtd, 0)->id;385struct mtk_base_afe_memif *memif = &afe->memif[id];386const struct mtk_base_memif_data *data = memif->data;387const struct mt8195_afe_channel_merge *cm = mt8195_afe_found_cm(dai);388unsigned int ch_num = params_channels(params);389390mt8195_afe_config_cm(afe, cm, params_channels(params));391392if (data->ch_num_reg >= 0) {393regmap_update_bits(afe->regmap, data->ch_num_reg,394data->ch_num_maskbit << data->ch_num_shift,395ch_num << data->ch_num_shift);396}397398return mtk_afe_fe_hw_params(substream, params, dai);399}400401static int mt8195_afe_fe_hw_free(struct snd_pcm_substream *substream,402struct snd_soc_dai *dai)403{404return mtk_afe_fe_hw_free(substream, dai);405}406407static int mt8195_afe_fe_prepare(struct snd_pcm_substream *substream,408struct snd_soc_dai *dai)409{410return mtk_afe_fe_prepare(substream, dai);411}412413static int mt8195_afe_fe_trigger(struct snd_pcm_substream *substream, int cmd,414struct snd_soc_dai *dai)415{416int ret = 0;417struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);418const struct mt8195_afe_channel_merge *cm = mt8195_afe_found_cm(dai);419420switch (cmd) {421case SNDRV_PCM_TRIGGER_START:422case SNDRV_PCM_TRIGGER_RESUME:423mt8195_afe_enable_cm(afe, cm, true);424break;425case SNDRV_PCM_TRIGGER_STOP:426case SNDRV_PCM_TRIGGER_SUSPEND:427mt8195_afe_enable_cm(afe, cm, false);428break;429default:430break;431}432433ret = mtk_afe_fe_trigger(substream, cmd, dai);434435switch (cmd) {436case SNDRV_PCM_TRIGGER_START:437case SNDRV_PCM_TRIGGER_RESUME:438mt8195_afe_paired_memif_clk_enable(substream, dai, 1);439break;440case SNDRV_PCM_TRIGGER_STOP:441case SNDRV_PCM_TRIGGER_SUSPEND:442mt8195_afe_paired_memif_clk_enable(substream, dai, 0);443break;444default:445break;446}447448return ret;449}450451static int mt8195_afe_fe_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)452{453return 0;454}455456static const struct snd_soc_dai_ops mt8195_afe_fe_dai_ops = {457.startup = mt8195_afe_fe_startup,458.shutdown = mt8195_afe_fe_shutdown,459.hw_params = mt8195_afe_fe_hw_params,460.hw_free = mt8195_afe_fe_hw_free,461.prepare = mt8195_afe_fe_prepare,462.trigger = mt8195_afe_fe_trigger,463.set_fmt = mt8195_afe_fe_set_fmt,464};465466#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\467SNDRV_PCM_RATE_88200 |\468SNDRV_PCM_RATE_96000 |\469SNDRV_PCM_RATE_176400 |\470SNDRV_PCM_RATE_192000 |\471SNDRV_PCM_RATE_352800 |\472SNDRV_PCM_RATE_384000)473474#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\475SNDRV_PCM_FMTBIT_S24_LE |\476SNDRV_PCM_FMTBIT_S32_LE)477478static struct snd_soc_dai_driver mt8195_memif_dai_driver[] = {479/* FE DAIs: memory intefaces to CPU */480{481.name = "DL2",482.id = MT8195_AFE_MEMIF_DL2,483.playback = {484.stream_name = "DL2",485.channels_min = 1,486.channels_max = 2,487.rates = MTK_PCM_RATES,488.formats = MTK_PCM_FORMATS,489},490.ops = &mt8195_afe_fe_dai_ops,491},492{493.name = "DL3",494.id = MT8195_AFE_MEMIF_DL3,495.playback = {496.stream_name = "DL3",497.channels_min = 1,498.channels_max = 2,499.rates = MTK_PCM_RATES,500.formats = MTK_PCM_FORMATS,501},502.ops = &mt8195_afe_fe_dai_ops,503},504{505.name = "DL6",506.id = MT8195_AFE_MEMIF_DL6,507.playback = {508.stream_name = "DL6",509.channels_min = 1,510.channels_max = 2,511.rates = MTK_PCM_RATES,512.formats = MTK_PCM_FORMATS,513},514.ops = &mt8195_afe_fe_dai_ops,515},516{517.name = "DL7",518.id = MT8195_AFE_MEMIF_DL7,519.playback = {520.stream_name = "DL7",521.channels_min = 1,522.channels_max = 2,523.rates = MTK_PCM_RATES,524.formats = MTK_PCM_FORMATS,525},526.ops = &mt8195_afe_fe_dai_ops,527},528{529.name = "DL8",530.id = MT8195_AFE_MEMIF_DL8,531.playback = {532.stream_name = "DL8",533.channels_min = 1,534.channels_max = 24,535.rates = MTK_PCM_RATES,536.formats = MTK_PCM_FORMATS,537},538.ops = &mt8195_afe_fe_dai_ops,539},540{541.name = "DL10",542.id = MT8195_AFE_MEMIF_DL10,543.playback = {544.stream_name = "DL10",545.channels_min = 1,546.channels_max = 8,547.rates = MTK_PCM_RATES,548.formats = MTK_PCM_FORMATS,549},550.ops = &mt8195_afe_fe_dai_ops,551},552{553.name = "DL11",554.id = MT8195_AFE_MEMIF_DL11,555.playback = {556.stream_name = "DL11",557.channels_min = 1,558.channels_max = 48,559.rates = MTK_PCM_RATES,560.formats = MTK_PCM_FORMATS,561},562.ops = &mt8195_afe_fe_dai_ops,563},564{565.name = "UL1",566.id = MT8195_AFE_MEMIF_UL1,567.capture = {568.stream_name = "UL1",569.channels_min = 1,570.channels_max = 8,571.rates = MTK_PCM_RATES,572.formats = MTK_PCM_FORMATS,573},574.ops = &mt8195_afe_fe_dai_ops,575},576{577.name = "UL2",578.id = MT8195_AFE_MEMIF_UL2,579.capture = {580.stream_name = "UL2",581.channels_min = 1,582.channels_max = 8,583.rates = MTK_PCM_RATES,584.formats = MTK_PCM_FORMATS,585},586.ops = &mt8195_afe_fe_dai_ops,587},588{589.name = "UL3",590.id = MT8195_AFE_MEMIF_UL3,591.capture = {592.stream_name = "UL3",593.channels_min = 1,594.channels_max = 16,595.rates = MTK_PCM_RATES,596.formats = MTK_PCM_FORMATS,597},598.ops = &mt8195_afe_fe_dai_ops,599},600{601.name = "UL4",602.id = MT8195_AFE_MEMIF_UL4,603.capture = {604.stream_name = "UL4",605.channels_min = 1,606.channels_max = 2,607.rates = MTK_PCM_RATES,608.formats = MTK_PCM_FORMATS,609},610.ops = &mt8195_afe_fe_dai_ops,611},612{613.name = "UL5",614.id = MT8195_AFE_MEMIF_UL5,615.capture = {616.stream_name = "UL5",617.channels_min = 1,618.channels_max = 2,619.rates = MTK_PCM_RATES,620.formats = MTK_PCM_FORMATS,621},622.ops = &mt8195_afe_fe_dai_ops,623},624{625.name = "UL6",626.id = MT8195_AFE_MEMIF_UL6,627.capture = {628.stream_name = "UL6",629.channels_min = 1,630.channels_max = 8,631.rates = MTK_PCM_RATES,632.formats = MTK_PCM_FORMATS,633},634.ops = &mt8195_afe_fe_dai_ops,635},636{637.name = "UL8",638.id = MT8195_AFE_MEMIF_UL8,639.capture = {640.stream_name = "UL8",641.channels_min = 1,642.channels_max = 24,643.rates = MTK_PCM_RATES,644.formats = MTK_PCM_FORMATS,645},646.ops = &mt8195_afe_fe_dai_ops,647},648{649.name = "UL9",650.id = MT8195_AFE_MEMIF_UL9,651.capture = {652.stream_name = "UL9",653.channels_min = 1,654.channels_max = 32,655.rates = MTK_PCM_RATES,656.formats = MTK_PCM_FORMATS,657},658.ops = &mt8195_afe_fe_dai_ops,659},660{661.name = "UL10",662.id = MT8195_AFE_MEMIF_UL10,663.capture = {664.stream_name = "UL10",665.channels_min = 1,666.channels_max = 4,667.rates = MTK_PCM_RATES,668.formats = MTK_PCM_FORMATS,669},670.ops = &mt8195_afe_fe_dai_ops,671},672};673674static const struct snd_kcontrol_new o002_mix[] = {675SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN2, 0, 1, 0),676SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN2, 12, 1, 0),677SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN2, 20, 1, 0),678SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN2, 22, 1, 0),679SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN2_2, 6, 1, 0),680SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN2_2, 8, 1, 0),681SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN2_5, 8, 1, 0),682};683684static const struct snd_kcontrol_new o003_mix[] = {685SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN3, 1, 1, 0),686SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN3, 13, 1, 0),687SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN3, 21, 1, 0),688SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN3, 23, 1, 0),689SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN3_2, 7, 1, 0),690SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN3_2, 9, 1, 0),691SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN3_5, 9, 1, 0),692};693694static const struct snd_kcontrol_new o004_mix[] = {695SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN4, 0, 1, 0),696SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN4, 14, 1, 0),697SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN4, 24, 1, 0),698SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN4_2, 10, 1, 0),699SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN4_5, 10, 1, 0),700};701702static const struct snd_kcontrol_new o005_mix[] = {703SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN5, 1, 1, 0),704SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN5, 15, 1, 0),705SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN5, 25, 1, 0),706SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN5_2, 11, 1, 0),707SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN5_5, 11, 1, 0),708};709710static const struct snd_kcontrol_new o006_mix[] = {711SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN6, 0, 1, 0),712SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN6, 16, 1, 0),713SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN6, 26, 1, 0),714SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN6_2, 12, 1, 0),715};716717static const struct snd_kcontrol_new o007_mix[] = {718SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN7, 1, 1, 0),719SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN7, 17, 1, 0),720SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN7, 27, 1, 0),721SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN7_2, 13, 1, 0),722};723724static const struct snd_kcontrol_new o008_mix[] = {725SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN8, 18, 1, 0),726SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN8, 28, 1, 0),727SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN8_2, 14, 1, 0),728};729730static const struct snd_kcontrol_new o009_mix[] = {731SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN9, 19, 1, 0),732SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN9, 29, 1, 0),733SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN9_2, 15, 1, 0),734};735736static const struct snd_kcontrol_new o010_mix[] = {737SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN10, 22, 1, 0),738SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN10, 30, 1, 0),739SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN10_1, 14, 1, 0),740SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN10_2, 8, 1, 0),741};742743static const struct snd_kcontrol_new o011_mix[] = {744SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN11, 23, 1, 0),745SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN11, 31, 1, 0),746SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN11_1, 15, 1, 0),747SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN11_2, 9, 1, 0),748};749750static const struct snd_kcontrol_new o012_mix[] = {751SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN12, 24, 1, 0),752SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN12_1, 0, 1, 0),753SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN12_1, 16, 1, 0),754SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN12_2, 10, 1, 0),755};756757static const struct snd_kcontrol_new o013_mix[] = {758SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN13, 25, 1, 0),759SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN13_1, 1, 1, 0),760SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN13_1, 17, 1, 0),761SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN13_2, 11, 1, 0),762};763764static const struct snd_kcontrol_new o014_mix[] = {765SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN14, 26, 1, 0),766SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN14_1, 2, 1, 0),767SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN14_1, 18, 1, 0),768SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN14_2, 12, 1, 0),769};770771static const struct snd_kcontrol_new o015_mix[] = {772SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN15, 27, 1, 0),773SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN15_1, 3, 1, 0),774SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN15_1, 19, 1, 0),775SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN15_2, 13, 1, 0),776};777778static const struct snd_kcontrol_new o016_mix[] = {779SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN16, 28, 1, 0),780SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN16_1, 4, 1, 0),781SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN16_1, 20, 1, 0),782SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN16_2, 14, 1, 0),783};784785static const struct snd_kcontrol_new o017_mix[] = {786SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN17, 29, 1, 0),787SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN17_1, 5, 1, 0),788SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN17_1, 21, 1, 0),789SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN17_2, 15, 1, 0),790};791792static const struct snd_kcontrol_new o018_mix[] = {793SOC_DAPM_SINGLE_AUTODISABLE("I038 Switch", AFE_CONN18_1, 6, 1, 0),794SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN18_2, 16, 1, 0),795};796797static const struct snd_kcontrol_new o019_mix[] = {798SOC_DAPM_SINGLE_AUTODISABLE("I039 Switch", AFE_CONN19_1, 7, 1, 0),799SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN19_2, 17, 1, 0),800};801802static const struct snd_kcontrol_new o020_mix[] = {803SOC_DAPM_SINGLE_AUTODISABLE("I040 Switch", AFE_CONN20_1, 8, 1, 0),804SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN20_2, 18, 1, 0),805};806807static const struct snd_kcontrol_new o021_mix[] = {808SOC_DAPM_SINGLE_AUTODISABLE("I041 Switch", AFE_CONN21_1, 9, 1, 0),809SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN21_2, 19, 1, 0),810};811812static const struct snd_kcontrol_new o022_mix[] = {813SOC_DAPM_SINGLE_AUTODISABLE("I042 Switch", AFE_CONN22_1, 10, 1, 0),814SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN22_2, 20, 1, 0),815};816817static const struct snd_kcontrol_new o023_mix[] = {818SOC_DAPM_SINGLE_AUTODISABLE("I043 Switch", AFE_CONN23_1, 11, 1, 0),819SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN23_2, 21, 1, 0),820};821822static const struct snd_kcontrol_new o024_mix[] = {823SOC_DAPM_SINGLE_AUTODISABLE("I044 Switch", AFE_CONN24_1, 12, 1, 0),824SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN24_2, 22, 1, 0),825};826827static const struct snd_kcontrol_new o025_mix[] = {828SOC_DAPM_SINGLE_AUTODISABLE("I045 Switch", AFE_CONN25_1, 13, 1, 0),829SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN25_2, 23, 1, 0),830};831832static const struct snd_kcontrol_new o026_mix[] = {833SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN26_1, 14, 1, 0),834SOC_DAPM_SINGLE_AUTODISABLE("I088 Switch", AFE_CONN26_2, 24, 1, 0),835};836837static const struct snd_kcontrol_new o027_mix[] = {838SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN27_1, 15, 1, 0),839SOC_DAPM_SINGLE_AUTODISABLE("I089 Switch", AFE_CONN27_2, 25, 1, 0),840};841842static const struct snd_kcontrol_new o028_mix[] = {843SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN28_1, 16, 1, 0),844SOC_DAPM_SINGLE_AUTODISABLE("I090 Switch", AFE_CONN28_2, 26, 1, 0),845};846847static const struct snd_kcontrol_new o029_mix[] = {848SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN29_1, 17, 1, 0),849SOC_DAPM_SINGLE_AUTODISABLE("I091 Switch", AFE_CONN29_2, 27, 1, 0),850};851852static const struct snd_kcontrol_new o030_mix[] = {853SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN30_1, 18, 1, 0),854SOC_DAPM_SINGLE_AUTODISABLE("I092 Switch", AFE_CONN30_2, 28, 1, 0),855};856857static const struct snd_kcontrol_new o031_mix[] = {858SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN31_1, 19, 1, 0),859SOC_DAPM_SINGLE_AUTODISABLE("I093 Switch", AFE_CONN31_2, 29, 1, 0),860};861862static const struct snd_kcontrol_new o032_mix[] = {863SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN32_1, 20, 1, 0),864SOC_DAPM_SINGLE_AUTODISABLE("I094 Switch", AFE_CONN32_2, 30, 1, 0),865};866867static const struct snd_kcontrol_new o033_mix[] = {868SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN33_1, 21, 1, 0),869SOC_DAPM_SINGLE_AUTODISABLE("I095 Switch", AFE_CONN33_2, 31, 1, 0),870};871872static const struct snd_kcontrol_new o034_mix[] = {873SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN34, 0, 1, 0),874SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN34, 2, 1, 0),875SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN34, 12, 1, 0),876SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN34, 20, 1, 0),877SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN34_2, 6, 1, 0),878SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN34_2, 8, 1, 0),879SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN34_5, 8, 1, 0),880SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN34_5, 10, 1, 0),881};882883static const struct snd_kcontrol_new o035_mix[] = {884SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN35, 1, 1, 0),885SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN35, 3, 1, 0),886SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN35, 13, 1, 0),887SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN35, 21, 1, 0),888SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN35_2, 7, 1, 0),889SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN35_2, 9, 1, 0),890SOC_DAPM_SINGLE_AUTODISABLE("I137 Switch", AFE_CONN35_4, 9, 1, 0),891SOC_DAPM_SINGLE_AUTODISABLE("I139 Switch", AFE_CONN35_4, 11, 1, 0),892SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN35_5, 8, 1, 0),893SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN35_5, 9, 1, 0),894SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN35_5, 10, 1, 0),895SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN35_5, 11, 1, 0),896};897898static const struct snd_kcontrol_new o036_mix[] = {899SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN36, 0, 1, 0),900SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN36, 12, 1, 0),901SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN36, 20, 1, 0),902SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN36_2, 6, 1, 0),903SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN36_5, 8, 1, 0),904};905906static const struct snd_kcontrol_new o037_mix[] = {907SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN37, 1, 1, 0),908SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN37, 13, 1, 0),909SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN37, 21, 1, 0),910SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN37_2, 7, 1, 0),911SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN37_5, 9, 1, 0),912};913914static const struct snd_kcontrol_new o038_mix[] = {915SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN38, 22, 1, 0),916};917918static const struct snd_kcontrol_new o039_mix[] = {919SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN39, 23, 1, 0),920};921922static const struct snd_kcontrol_new o040_mix[] = {923SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN40, 2, 1, 0),924SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN40, 12, 1, 0),925SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN40, 22, 1, 0),926SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN40_5, 8, 1, 0),927};928929static const struct snd_kcontrol_new o041_mix[] = {930SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN41, 3, 1, 0),931SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN41, 13, 1, 0),932SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN41, 23, 1, 0),933SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN41_5, 9, 1, 0),934};935936static const struct snd_kcontrol_new o042_mix[] = {937SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN42, 14, 1, 0),938SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN42, 24, 1, 0),939SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN42_5, 10, 1, 0),940};941942static const struct snd_kcontrol_new o043_mix[] = {943SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN43, 15, 1, 0),944SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN43, 25, 1, 0),945SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN43_5, 11, 1, 0),946};947948static const struct snd_kcontrol_new o044_mix[] = {949SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN44, 16, 1, 0),950SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN44, 26, 1, 0),951};952953static const struct snd_kcontrol_new o045_mix[] = {954SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN45, 17, 1, 0),955SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN45, 27, 1, 0),956};957958static const struct snd_kcontrol_new o046_mix[] = {959SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN46, 18, 1, 0),960SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN46, 28, 1, 0),961};962963static const struct snd_kcontrol_new o047_mix[] = {964SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN47, 19, 1, 0),965SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN47, 29, 1, 0),966};967968static const struct snd_kcontrol_new o182_mix[] = {969SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN182, 24, 1, 0),970};971972static const struct snd_kcontrol_new o183_mix[] = {973SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN183, 25, 1, 0),974};975976static const char * const dl8_dl11_data_sel_mux_text[] = {977"dl8", "dl11",978};979980static SOC_ENUM_SINGLE_DECL(dl8_dl11_data_sel_mux_enum,981AFE_DAC_CON2, 0, dl8_dl11_data_sel_mux_text);982983static const struct snd_kcontrol_new dl8_dl11_data_sel_mux =984SOC_DAPM_ENUM("DL8_DL11 Sink", dl8_dl11_data_sel_mux_enum);985986static const struct snd_soc_dapm_widget mt8195_memif_widgets[] = {987/* DL6 */988SND_SOC_DAPM_MIXER("I000", SND_SOC_NOPM, 0, 0, NULL, 0),989SND_SOC_DAPM_MIXER("I001", SND_SOC_NOPM, 0, 0, NULL, 0),990991/* DL3 */992SND_SOC_DAPM_MIXER("I020", SND_SOC_NOPM, 0, 0, NULL, 0),993SND_SOC_DAPM_MIXER("I021", SND_SOC_NOPM, 0, 0, NULL, 0),994995/* DL11 */996SND_SOC_DAPM_MIXER("I022", SND_SOC_NOPM, 0, 0, NULL, 0),997SND_SOC_DAPM_MIXER("I023", SND_SOC_NOPM, 0, 0, NULL, 0),998SND_SOC_DAPM_MIXER("I024", SND_SOC_NOPM, 0, 0, NULL, 0),999SND_SOC_DAPM_MIXER("I025", SND_SOC_NOPM, 0, 0, NULL, 0),1000SND_SOC_DAPM_MIXER("I026", SND_SOC_NOPM, 0, 0, NULL, 0),1001SND_SOC_DAPM_MIXER("I027", SND_SOC_NOPM, 0, 0, NULL, 0),1002SND_SOC_DAPM_MIXER("I028", SND_SOC_NOPM, 0, 0, NULL, 0),1003SND_SOC_DAPM_MIXER("I029", SND_SOC_NOPM, 0, 0, NULL, 0),1004SND_SOC_DAPM_MIXER("I030", SND_SOC_NOPM, 0, 0, NULL, 0),1005SND_SOC_DAPM_MIXER("I031", SND_SOC_NOPM, 0, 0, NULL, 0),1006SND_SOC_DAPM_MIXER("I032", SND_SOC_NOPM, 0, 0, NULL, 0),1007SND_SOC_DAPM_MIXER("I033", SND_SOC_NOPM, 0, 0, NULL, 0),1008SND_SOC_DAPM_MIXER("I034", SND_SOC_NOPM, 0, 0, NULL, 0),1009SND_SOC_DAPM_MIXER("I035", SND_SOC_NOPM, 0, 0, NULL, 0),1010SND_SOC_DAPM_MIXER("I036", SND_SOC_NOPM, 0, 0, NULL, 0),1011SND_SOC_DAPM_MIXER("I037", SND_SOC_NOPM, 0, 0, NULL, 0),1012SND_SOC_DAPM_MIXER("I038", SND_SOC_NOPM, 0, 0, NULL, 0),1013SND_SOC_DAPM_MIXER("I039", SND_SOC_NOPM, 0, 0, NULL, 0),1014SND_SOC_DAPM_MIXER("I040", SND_SOC_NOPM, 0, 0, NULL, 0),1015SND_SOC_DAPM_MIXER("I041", SND_SOC_NOPM, 0, 0, NULL, 0),1016SND_SOC_DAPM_MIXER("I042", SND_SOC_NOPM, 0, 0, NULL, 0),1017SND_SOC_DAPM_MIXER("I043", SND_SOC_NOPM, 0, 0, NULL, 0),1018SND_SOC_DAPM_MIXER("I044", SND_SOC_NOPM, 0, 0, NULL, 0),1019SND_SOC_DAPM_MIXER("I045", SND_SOC_NOPM, 0, 0, NULL, 0),10201021/* DL11/DL8 */1022SND_SOC_DAPM_MIXER("I046", SND_SOC_NOPM, 0, 0, NULL, 0),1023SND_SOC_DAPM_MIXER("I047", SND_SOC_NOPM, 0, 0, NULL, 0),1024SND_SOC_DAPM_MIXER("I048", SND_SOC_NOPM, 0, 0, NULL, 0),1025SND_SOC_DAPM_MIXER("I049", SND_SOC_NOPM, 0, 0, NULL, 0),1026SND_SOC_DAPM_MIXER("I050", SND_SOC_NOPM, 0, 0, NULL, 0),1027SND_SOC_DAPM_MIXER("I051", SND_SOC_NOPM, 0, 0, NULL, 0),1028SND_SOC_DAPM_MIXER("I052", SND_SOC_NOPM, 0, 0, NULL, 0),1029SND_SOC_DAPM_MIXER("I053", SND_SOC_NOPM, 0, 0, NULL, 0),1030SND_SOC_DAPM_MIXER("I054", SND_SOC_NOPM, 0, 0, NULL, 0),1031SND_SOC_DAPM_MIXER("I055", SND_SOC_NOPM, 0, 0, NULL, 0),1032SND_SOC_DAPM_MIXER("I056", SND_SOC_NOPM, 0, 0, NULL, 0),1033SND_SOC_DAPM_MIXER("I057", SND_SOC_NOPM, 0, 0, NULL, 0),1034SND_SOC_DAPM_MIXER("I058", SND_SOC_NOPM, 0, 0, NULL, 0),1035SND_SOC_DAPM_MIXER("I059", SND_SOC_NOPM, 0, 0, NULL, 0),1036SND_SOC_DAPM_MIXER("I060", SND_SOC_NOPM, 0, 0, NULL, 0),1037SND_SOC_DAPM_MIXER("I061", SND_SOC_NOPM, 0, 0, NULL, 0),1038SND_SOC_DAPM_MIXER("I062", SND_SOC_NOPM, 0, 0, NULL, 0),1039SND_SOC_DAPM_MIXER("I063", SND_SOC_NOPM, 0, 0, NULL, 0),1040SND_SOC_DAPM_MIXER("I064", SND_SOC_NOPM, 0, 0, NULL, 0),1041SND_SOC_DAPM_MIXER("I065", SND_SOC_NOPM, 0, 0, NULL, 0),1042SND_SOC_DAPM_MIXER("I066", SND_SOC_NOPM, 0, 0, NULL, 0),1043SND_SOC_DAPM_MIXER("I067", SND_SOC_NOPM, 0, 0, NULL, 0),1044SND_SOC_DAPM_MIXER("I068", SND_SOC_NOPM, 0, 0, NULL, 0),1045SND_SOC_DAPM_MIXER("I069", SND_SOC_NOPM, 0, 0, NULL, 0),10461047/* DL2 */1048SND_SOC_DAPM_MIXER("I070", SND_SOC_NOPM, 0, 0, NULL, 0),1049SND_SOC_DAPM_MIXER("I071", SND_SOC_NOPM, 0, 0, NULL, 0),10501051SND_SOC_DAPM_MUX("DL8_DL11 Mux",1052SND_SOC_NOPM, 0, 0, &dl8_dl11_data_sel_mux),10531054/* UL9 */1055SND_SOC_DAPM_MIXER("O002", SND_SOC_NOPM, 0, 0,1056o002_mix, ARRAY_SIZE(o002_mix)),1057SND_SOC_DAPM_MIXER("O003", SND_SOC_NOPM, 0, 0,1058o003_mix, ARRAY_SIZE(o003_mix)),1059SND_SOC_DAPM_MIXER("O004", SND_SOC_NOPM, 0, 0,1060o004_mix, ARRAY_SIZE(o004_mix)),1061SND_SOC_DAPM_MIXER("O005", SND_SOC_NOPM, 0, 0,1062o005_mix, ARRAY_SIZE(o005_mix)),1063SND_SOC_DAPM_MIXER("O006", SND_SOC_NOPM, 0, 0,1064o006_mix, ARRAY_SIZE(o006_mix)),1065SND_SOC_DAPM_MIXER("O007", SND_SOC_NOPM, 0, 0,1066o007_mix, ARRAY_SIZE(o007_mix)),1067SND_SOC_DAPM_MIXER("O008", SND_SOC_NOPM, 0, 0,1068o008_mix, ARRAY_SIZE(o008_mix)),1069SND_SOC_DAPM_MIXER("O009", SND_SOC_NOPM, 0, 0,1070o009_mix, ARRAY_SIZE(o009_mix)),1071SND_SOC_DAPM_MIXER("O010", SND_SOC_NOPM, 0, 0,1072o010_mix, ARRAY_SIZE(o010_mix)),1073SND_SOC_DAPM_MIXER("O011", SND_SOC_NOPM, 0, 0,1074o011_mix, ARRAY_SIZE(o011_mix)),1075SND_SOC_DAPM_MIXER("O012", SND_SOC_NOPM, 0, 0,1076o012_mix, ARRAY_SIZE(o012_mix)),1077SND_SOC_DAPM_MIXER("O013", SND_SOC_NOPM, 0, 0,1078o013_mix, ARRAY_SIZE(o013_mix)),1079SND_SOC_DAPM_MIXER("O014", SND_SOC_NOPM, 0, 0,1080o014_mix, ARRAY_SIZE(o014_mix)),1081SND_SOC_DAPM_MIXER("O015", SND_SOC_NOPM, 0, 0,1082o015_mix, ARRAY_SIZE(o015_mix)),1083SND_SOC_DAPM_MIXER("O016", SND_SOC_NOPM, 0, 0,1084o016_mix, ARRAY_SIZE(o016_mix)),1085SND_SOC_DAPM_MIXER("O017", SND_SOC_NOPM, 0, 0,1086o017_mix, ARRAY_SIZE(o017_mix)),1087SND_SOC_DAPM_MIXER("O018", SND_SOC_NOPM, 0, 0,1088o018_mix, ARRAY_SIZE(o018_mix)),1089SND_SOC_DAPM_MIXER("O019", SND_SOC_NOPM, 0, 0,1090o019_mix, ARRAY_SIZE(o019_mix)),1091SND_SOC_DAPM_MIXER("O020", SND_SOC_NOPM, 0, 0,1092o020_mix, ARRAY_SIZE(o020_mix)),1093SND_SOC_DAPM_MIXER("O021", SND_SOC_NOPM, 0, 0,1094o021_mix, ARRAY_SIZE(o021_mix)),1095SND_SOC_DAPM_MIXER("O022", SND_SOC_NOPM, 0, 0,1096o022_mix, ARRAY_SIZE(o022_mix)),1097SND_SOC_DAPM_MIXER("O023", SND_SOC_NOPM, 0, 0,1098o023_mix, ARRAY_SIZE(o023_mix)),1099SND_SOC_DAPM_MIXER("O024", SND_SOC_NOPM, 0, 0,1100o024_mix, ARRAY_SIZE(o024_mix)),1101SND_SOC_DAPM_MIXER("O025", SND_SOC_NOPM, 0, 0,1102o025_mix, ARRAY_SIZE(o025_mix)),1103SND_SOC_DAPM_MIXER("O026", SND_SOC_NOPM, 0, 0,1104o026_mix, ARRAY_SIZE(o026_mix)),1105SND_SOC_DAPM_MIXER("O027", SND_SOC_NOPM, 0, 0,1106o027_mix, ARRAY_SIZE(o027_mix)),1107SND_SOC_DAPM_MIXER("O028", SND_SOC_NOPM, 0, 0,1108o028_mix, ARRAY_SIZE(o028_mix)),1109SND_SOC_DAPM_MIXER("O029", SND_SOC_NOPM, 0, 0,1110o029_mix, ARRAY_SIZE(o029_mix)),1111SND_SOC_DAPM_MIXER("O030", SND_SOC_NOPM, 0, 0,1112o030_mix, ARRAY_SIZE(o030_mix)),1113SND_SOC_DAPM_MIXER("O031", SND_SOC_NOPM, 0, 0,1114o031_mix, ARRAY_SIZE(o031_mix)),1115SND_SOC_DAPM_MIXER("O032", SND_SOC_NOPM, 0, 0,1116o032_mix, ARRAY_SIZE(o032_mix)),1117SND_SOC_DAPM_MIXER("O033", SND_SOC_NOPM, 0, 0,1118o033_mix, ARRAY_SIZE(o033_mix)),11191120/* UL4 */1121SND_SOC_DAPM_MIXER("O034", SND_SOC_NOPM, 0, 0,1122o034_mix, ARRAY_SIZE(o034_mix)),1123SND_SOC_DAPM_MIXER("O035", SND_SOC_NOPM, 0, 0,1124o035_mix, ARRAY_SIZE(o035_mix)),11251126/* UL5 */1127SND_SOC_DAPM_MIXER("O036", SND_SOC_NOPM, 0, 0,1128o036_mix, ARRAY_SIZE(o036_mix)),1129SND_SOC_DAPM_MIXER("O037", SND_SOC_NOPM, 0, 0,1130o037_mix, ARRAY_SIZE(o037_mix)),11311132/* UL10 */1133SND_SOC_DAPM_MIXER("O038", SND_SOC_NOPM, 0, 0,1134o038_mix, ARRAY_SIZE(o038_mix)),1135SND_SOC_DAPM_MIXER("O039", SND_SOC_NOPM, 0, 0,1136o039_mix, ARRAY_SIZE(o039_mix)),1137SND_SOC_DAPM_MIXER("O182", SND_SOC_NOPM, 0, 0,1138o182_mix, ARRAY_SIZE(o182_mix)),1139SND_SOC_DAPM_MIXER("O183", SND_SOC_NOPM, 0, 0,1140o183_mix, ARRAY_SIZE(o183_mix)),11411142/* UL2 */1143SND_SOC_DAPM_MIXER("O040", SND_SOC_NOPM, 0, 0,1144o040_mix, ARRAY_SIZE(o040_mix)),1145SND_SOC_DAPM_MIXER("O041", SND_SOC_NOPM, 0, 0,1146o041_mix, ARRAY_SIZE(o041_mix)),1147SND_SOC_DAPM_MIXER("O042", SND_SOC_NOPM, 0, 0,1148o042_mix, ARRAY_SIZE(o042_mix)),1149SND_SOC_DAPM_MIXER("O043", SND_SOC_NOPM, 0, 0,1150o043_mix, ARRAY_SIZE(o043_mix)),1151SND_SOC_DAPM_MIXER("O044", SND_SOC_NOPM, 0, 0,1152o044_mix, ARRAY_SIZE(o044_mix)),1153SND_SOC_DAPM_MIXER("O045", SND_SOC_NOPM, 0, 0,1154o045_mix, ARRAY_SIZE(o045_mix)),1155SND_SOC_DAPM_MIXER("O046", SND_SOC_NOPM, 0, 0,1156o046_mix, ARRAY_SIZE(o046_mix)),1157SND_SOC_DAPM_MIXER("O047", SND_SOC_NOPM, 0, 0,1158o047_mix, ARRAY_SIZE(o047_mix)),1159};11601161static const struct snd_soc_dapm_route mt8195_memif_routes[] = {1162{"I000", NULL, "DL6"},1163{"I001", NULL, "DL6"},11641165{"I020", NULL, "DL3"},1166{"I021", NULL, "DL3"},11671168{"I022", NULL, "DL11"},1169{"I023", NULL, "DL11"},1170{"I024", NULL, "DL11"},1171{"I025", NULL, "DL11"},1172{"I026", NULL, "DL11"},1173{"I027", NULL, "DL11"},1174{"I028", NULL, "DL11"},1175{"I029", NULL, "DL11"},1176{"I030", NULL, "DL11"},1177{"I031", NULL, "DL11"},1178{"I032", NULL, "DL11"},1179{"I033", NULL, "DL11"},1180{"I034", NULL, "DL11"},1181{"I035", NULL, "DL11"},1182{"I036", NULL, "DL11"},1183{"I037", NULL, "DL11"},1184{"I038", NULL, "DL11"},1185{"I039", NULL, "DL11"},1186{"I040", NULL, "DL11"},1187{"I041", NULL, "DL11"},1188{"I042", NULL, "DL11"},1189{"I043", NULL, "DL11"},1190{"I044", NULL, "DL11"},1191{"I045", NULL, "DL11"},11921193{"DL8_DL11 Mux", "dl8", "DL8"},1194{"DL8_DL11 Mux", "dl11", "DL11"},11951196{"I046", NULL, "DL8_DL11 Mux"},1197{"I047", NULL, "DL8_DL11 Mux"},1198{"I048", NULL, "DL8_DL11 Mux"},1199{"I049", NULL, "DL8_DL11 Mux"},1200{"I050", NULL, "DL8_DL11 Mux"},1201{"I051", NULL, "DL8_DL11 Mux"},1202{"I052", NULL, "DL8_DL11 Mux"},1203{"I053", NULL, "DL8_DL11 Mux"},1204{"I054", NULL, "DL8_DL11 Mux"},1205{"I055", NULL, "DL8_DL11 Mux"},1206{"I056", NULL, "DL8_DL11 Mux"},1207{"I057", NULL, "DL8_DL11 Mux"},1208{"I058", NULL, "DL8_DL11 Mux"},1209{"I059", NULL, "DL8_DL11 Mux"},1210{"I060", NULL, "DL8_DL11 Mux"},1211{"I061", NULL, "DL8_DL11 Mux"},1212{"I062", NULL, "DL8_DL11 Mux"},1213{"I063", NULL, "DL8_DL11 Mux"},1214{"I064", NULL, "DL8_DL11 Mux"},1215{"I065", NULL, "DL8_DL11 Mux"},1216{"I066", NULL, "DL8_DL11 Mux"},1217{"I067", NULL, "DL8_DL11 Mux"},1218{"I068", NULL, "DL8_DL11 Mux"},1219{"I069", NULL, "DL8_DL11 Mux"},12201221{"I070", NULL, "DL2"},1222{"I071", NULL, "DL2"},12231224{"UL9", NULL, "O002"},1225{"UL9", NULL, "O003"},1226{"UL9", NULL, "O004"},1227{"UL9", NULL, "O005"},1228{"UL9", NULL, "O006"},1229{"UL9", NULL, "O007"},1230{"UL9", NULL, "O008"},1231{"UL9", NULL, "O009"},1232{"UL9", NULL, "O010"},1233{"UL9", NULL, "O011"},1234{"UL9", NULL, "O012"},1235{"UL9", NULL, "O013"},1236{"UL9", NULL, "O014"},1237{"UL9", NULL, "O015"},1238{"UL9", NULL, "O016"},1239{"UL9", NULL, "O017"},1240{"UL9", NULL, "O018"},1241{"UL9", NULL, "O019"},1242{"UL9", NULL, "O020"},1243{"UL9", NULL, "O021"},1244{"UL9", NULL, "O022"},1245{"UL9", NULL, "O023"},1246{"UL9", NULL, "O024"},1247{"UL9", NULL, "O025"},1248{"UL9", NULL, "O026"},1249{"UL9", NULL, "O027"},1250{"UL9", NULL, "O028"},1251{"UL9", NULL, "O029"},1252{"UL9", NULL, "O030"},1253{"UL9", NULL, "O031"},1254{"UL9", NULL, "O032"},1255{"UL9", NULL, "O033"},12561257{"UL4", NULL, "O034"},1258{"UL4", NULL, "O035"},12591260{"UL5", NULL, "O036"},1261{"UL5", NULL, "O037"},12621263{"UL10", NULL, "O038"},1264{"UL10", NULL, "O039"},1265{"UL10", NULL, "O182"},1266{"UL10", NULL, "O183"},12671268{"UL2", NULL, "O040"},1269{"UL2", NULL, "O041"},1270{"UL2", NULL, "O042"},1271{"UL2", NULL, "O043"},1272{"UL2", NULL, "O044"},1273{"UL2", NULL, "O045"},1274{"UL2", NULL, "O046"},1275{"UL2", NULL, "O047"},12761277{"O004", "I000 Switch", "I000"},1278{"O005", "I001 Switch", "I001"},12791280{"O006", "I000 Switch", "I000"},1281{"O007", "I001 Switch", "I001"},12821283{"O010", "I022 Switch", "I022"},1284{"O011", "I023 Switch", "I023"},1285{"O012", "I024 Switch", "I024"},1286{"O013", "I025 Switch", "I025"},1287{"O014", "I026 Switch", "I026"},1288{"O015", "I027 Switch", "I027"},1289{"O016", "I028 Switch", "I028"},1290{"O017", "I029 Switch", "I029"},12911292{"O010", "I046 Switch", "I046"},1293{"O011", "I047 Switch", "I047"},1294{"O012", "I048 Switch", "I048"},1295{"O013", "I049 Switch", "I049"},1296{"O014", "I050 Switch", "I050"},1297{"O015", "I051 Switch", "I051"},1298{"O016", "I052 Switch", "I052"},1299{"O017", "I053 Switch", "I053"},1300{"O002", "I022 Switch", "I022"},1301{"O003", "I023 Switch", "I023"},1302{"O004", "I024 Switch", "I024"},1303{"O005", "I025 Switch", "I025"},1304{"O006", "I026 Switch", "I026"},1305{"O007", "I027 Switch", "I027"},1306{"O008", "I028 Switch", "I028"},1307{"O009", "I029 Switch", "I029"},1308{"O010", "I030 Switch", "I030"},1309{"O011", "I031 Switch", "I031"},1310{"O012", "I032 Switch", "I032"},1311{"O013", "I033 Switch", "I033"},1312{"O014", "I034 Switch", "I034"},1313{"O015", "I035 Switch", "I035"},1314{"O016", "I036 Switch", "I036"},1315{"O017", "I037 Switch", "I037"},1316{"O018", "I038 Switch", "I038"},1317{"O019", "I039 Switch", "I039"},1318{"O020", "I040 Switch", "I040"},1319{"O021", "I041 Switch", "I041"},1320{"O022", "I042 Switch", "I042"},1321{"O023", "I043 Switch", "I043"},1322{"O024", "I044 Switch", "I044"},1323{"O025", "I045 Switch", "I045"},1324{"O026", "I046 Switch", "I046"},1325{"O027", "I047 Switch", "I047"},1326{"O028", "I048 Switch", "I048"},1327{"O029", "I049 Switch", "I049"},1328{"O030", "I050 Switch", "I050"},1329{"O031", "I051 Switch", "I051"},1330{"O032", "I052 Switch", "I052"},1331{"O033", "I053 Switch", "I053"},13321333{"O002", "I000 Switch", "I000"},1334{"O003", "I001 Switch", "I001"},1335{"O002", "I020 Switch", "I020"},1336{"O003", "I021 Switch", "I021"},1337{"O002", "I070 Switch", "I070"},1338{"O003", "I071 Switch", "I071"},13391340{"O034", "I000 Switch", "I000"},1341{"O035", "I001 Switch", "I001"},1342{"O034", "I002 Switch", "I002"},1343{"O035", "I003 Switch", "I003"},1344{"O034", "I012 Switch", "I012"},1345{"O035", "I013 Switch", "I013"},1346{"O034", "I020 Switch", "I020"},1347{"O035", "I021 Switch", "I021"},1348{"O034", "I070 Switch", "I070"},1349{"O035", "I071 Switch", "I071"},1350{"O034", "I072 Switch", "I072"},1351{"O035", "I073 Switch", "I073"},13521353{"O036", "I000 Switch", "I000"},1354{"O037", "I001 Switch", "I001"},1355{"O036", "I012 Switch", "I012"},1356{"O037", "I013 Switch", "I013"},1357{"O036", "I020 Switch", "I020"},1358{"O037", "I021 Switch", "I021"},1359{"O036", "I070 Switch", "I070"},1360{"O037", "I071 Switch", "I071"},1361{"O036", "I168 Switch", "I168"},1362{"O037", "I169 Switch", "I169"},13631364{"O038", "I022 Switch", "I022"},1365{"O039", "I023 Switch", "I023"},1366{"O182", "I024 Switch", "I024"},1367{"O183", "I025 Switch", "I025"},13681369{"O040", "I022 Switch", "I022"},1370{"O041", "I023 Switch", "I023"},1371{"O042", "I024 Switch", "I024"},1372{"O043", "I025 Switch", "I025"},1373{"O044", "I026 Switch", "I026"},1374{"O045", "I027 Switch", "I027"},1375{"O046", "I028 Switch", "I028"},1376{"O047", "I029 Switch", "I029"},13771378{"O040", "I002 Switch", "I002"},1379{"O041", "I003 Switch", "I003"},1380{"O002", "I012 Switch", "I012"},1381{"O003", "I013 Switch", "I013"},1382{"O004", "I014 Switch", "I014"},1383{"O005", "I015 Switch", "I015"},1384{"O006", "I016 Switch", "I016"},1385{"O007", "I017 Switch", "I017"},1386{"O008", "I018 Switch", "I018"},1387{"O009", "I019 Switch", "I019"},13881389{"O040", "I012 Switch", "I012"},1390{"O041", "I013 Switch", "I013"},1391{"O042", "I014 Switch", "I014"},1392{"O043", "I015 Switch", "I015"},1393{"O044", "I016 Switch", "I016"},1394{"O045", "I017 Switch", "I017"},1395{"O046", "I018 Switch", "I018"},1396{"O047", "I019 Switch", "I019"},13971398{"O002", "I072 Switch", "I072"},1399{"O003", "I073 Switch", "I073"},1400{"O004", "I074 Switch", "I074"},1401{"O005", "I075 Switch", "I075"},1402{"O006", "I076 Switch", "I076"},1403{"O007", "I077 Switch", "I077"},1404{"O008", "I078 Switch", "I078"},1405{"O009", "I079 Switch", "I079"},14061407{"O010", "I072 Switch", "I072"},1408{"O011", "I073 Switch", "I073"},1409{"O012", "I074 Switch", "I074"},1410{"O013", "I075 Switch", "I075"},1411{"O014", "I076 Switch", "I076"},1412{"O015", "I077 Switch", "I077"},1413{"O016", "I078 Switch", "I078"},1414{"O017", "I079 Switch", "I079"},1415{"O018", "I080 Switch", "I080"},1416{"O019", "I081 Switch", "I081"},1417{"O020", "I082 Switch", "I082"},1418{"O021", "I083 Switch", "I083"},1419{"O022", "I084 Switch", "I084"},1420{"O023", "I085 Switch", "I085"},1421{"O024", "I086 Switch", "I086"},1422{"O025", "I087 Switch", "I087"},1423{"O026", "I088 Switch", "I088"},1424{"O027", "I089 Switch", "I089"},1425{"O028", "I090 Switch", "I090"},1426{"O029", "I091 Switch", "I091"},1427{"O030", "I092 Switch", "I092"},1428{"O031", "I093 Switch", "I093"},1429{"O032", "I094 Switch", "I094"},1430{"O033", "I095 Switch", "I095"},14311432{"O002", "I168 Switch", "I168"},1433{"O003", "I169 Switch", "I169"},1434{"O004", "I170 Switch", "I170"},1435{"O005", "I171 Switch", "I171"},14361437{"O034", "I168 Switch", "I168"},1438{"O035", "I168 Switch", "I168"},1439{"O035", "I169 Switch", "I169"},14401441{"O034", "I170 Switch", "I170"},1442{"O035", "I170 Switch", "I170"},1443{"O035", "I171 Switch", "I171"},14441445{"O040", "I168 Switch", "I168"},1446{"O041", "I169 Switch", "I169"},1447{"O042", "I170 Switch", "I170"},1448{"O043", "I171 Switch", "I171"},1449};14501451static const char * const mt8195_afe_1x_en_sel_text[] = {1452"a1sys_a2sys", "a3sys", "a4sys",1453};14541455static const unsigned int mt8195_afe_1x_en_sel_values[] = {14560, 1, 2,1457};14581459static int mt8195_memif_1x_en_sel_put(struct snd_kcontrol *kcontrol,1460struct snd_ctl_elem_value *ucontrol)1461{1462struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);1463struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1464struct mt8195_afe_private *afe_priv = afe->platform_priv;1465struct mtk_dai_memif_priv *memif_priv;1466unsigned int dai_id = kcontrol->id.device;1467long val = ucontrol->value.integer.value[0];1468int ret = 0;14691470memif_priv = afe_priv->dai_priv[dai_id];14711472if (val == memif_priv->asys_timing_sel)1473return 0;14741475ret = snd_soc_put_enum_double(kcontrol, ucontrol);14761477memif_priv->asys_timing_sel = val;14781479return ret;1480}14811482static int mt8195_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol,1483struct snd_ctl_elem_value *ucontrol)1484{1485struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);1486struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1487struct mt8195_afe_private *afe_priv = afe->platform_priv;1488unsigned int id = kcontrol->id.device;1489long val = ucontrol->value.integer.value[0];1490int ret = 0;14911492if (val == afe_priv->irq_priv[id].asys_timing_sel)1493return 0;14941495ret = snd_soc_put_enum_double(kcontrol, ucontrol);14961497afe_priv->irq_priv[id].asys_timing_sel = val;14981499return ret;1500}15011502static SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum,1503A3_A4_TIMING_SEL1, 18, 0x3,1504mt8195_afe_1x_en_sel_text,1505mt8195_afe_1x_en_sel_values);1506static SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum,1507A3_A4_TIMING_SEL1, 20, 0x3,1508mt8195_afe_1x_en_sel_text,1509mt8195_afe_1x_en_sel_values);1510static SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum,1511A3_A4_TIMING_SEL1, 22, 0x3,1512mt8195_afe_1x_en_sel_text,1513mt8195_afe_1x_en_sel_values);1514static SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum,1515A3_A4_TIMING_SEL1, 24, 0x3,1516mt8195_afe_1x_en_sel_text,1517mt8195_afe_1x_en_sel_values);1518static SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum,1519A3_A4_TIMING_SEL1, 26, 0x3,1520mt8195_afe_1x_en_sel_text,1521mt8195_afe_1x_en_sel_values);1522static SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum,1523A3_A4_TIMING_SEL1, 28, 0x3,1524mt8195_afe_1x_en_sel_text,1525mt8195_afe_1x_en_sel_values);1526static SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum,1527A3_A4_TIMING_SEL1, 30, 0x3,1528mt8195_afe_1x_en_sel_text,1529mt8195_afe_1x_en_sel_values);1530static SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum,1531A3_A4_TIMING_SEL1, 0, 0x3,1532mt8195_afe_1x_en_sel_text,1533mt8195_afe_1x_en_sel_values);1534static SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum,1535A3_A4_TIMING_SEL1, 2, 0x3,1536mt8195_afe_1x_en_sel_text,1537mt8195_afe_1x_en_sel_values);1538static SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum,1539A3_A4_TIMING_SEL1, 4, 0x3,1540mt8195_afe_1x_en_sel_text,1541mt8195_afe_1x_en_sel_values);1542static SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum,1543A3_A4_TIMING_SEL1, 6, 0x3,1544mt8195_afe_1x_en_sel_text,1545mt8195_afe_1x_en_sel_values);1546static SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum,1547A3_A4_TIMING_SEL1, 8, 0x3,1548mt8195_afe_1x_en_sel_text,1549mt8195_afe_1x_en_sel_values);1550static SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum,1551A3_A4_TIMING_SEL1, 10, 0x3,1552mt8195_afe_1x_en_sel_text,1553mt8195_afe_1x_en_sel_values);1554static SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum,1555A3_A4_TIMING_SEL1, 12, 0x3,1556mt8195_afe_1x_en_sel_text,1557mt8195_afe_1x_en_sel_values);1558static SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum,1559A3_A4_TIMING_SEL1, 14, 0x3,1560mt8195_afe_1x_en_sel_text,1561mt8195_afe_1x_en_sel_values);1562static SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum,1563A3_A4_TIMING_SEL1, 16, 0x3,1564mt8195_afe_1x_en_sel_text,1565mt8195_afe_1x_en_sel_values);15661567static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum,1568A3_A4_TIMING_SEL6, 0, 0x3,1569mt8195_afe_1x_en_sel_text,1570mt8195_afe_1x_en_sel_values);1571static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum,1572A3_A4_TIMING_SEL6, 2, 0x3,1573mt8195_afe_1x_en_sel_text,1574mt8195_afe_1x_en_sel_values);1575static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum,1576A3_A4_TIMING_SEL6, 4, 0x3,1577mt8195_afe_1x_en_sel_text,1578mt8195_afe_1x_en_sel_values);1579static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum,1580A3_A4_TIMING_SEL6, 6, 0x3,1581mt8195_afe_1x_en_sel_text,1582mt8195_afe_1x_en_sel_values);1583static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum,1584A3_A4_TIMING_SEL6, 8, 0x3,1585mt8195_afe_1x_en_sel_text,1586mt8195_afe_1x_en_sel_values);1587static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum,1588A3_A4_TIMING_SEL6, 10, 0x3,1589mt8195_afe_1x_en_sel_text,1590mt8195_afe_1x_en_sel_values);1591static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum,1592A3_A4_TIMING_SEL6, 12, 0x3,1593mt8195_afe_1x_en_sel_text,1594mt8195_afe_1x_en_sel_values);1595static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum,1596A3_A4_TIMING_SEL6, 14, 0x3,1597mt8195_afe_1x_en_sel_text,1598mt8195_afe_1x_en_sel_values);1599static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum,1600A3_A4_TIMING_SEL6, 16, 0x3,1601mt8195_afe_1x_en_sel_text,1602mt8195_afe_1x_en_sel_values);1603static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum,1604A3_A4_TIMING_SEL6, 18, 0x3,1605mt8195_afe_1x_en_sel_text,1606mt8195_afe_1x_en_sel_values);1607static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum,1608A3_A4_TIMING_SEL6, 20, 0x3,1609mt8195_afe_1x_en_sel_text,1610mt8195_afe_1x_en_sel_values);1611static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum,1612A3_A4_TIMING_SEL6, 22, 0x3,1613mt8195_afe_1x_en_sel_text,1614mt8195_afe_1x_en_sel_values);1615static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum,1616A3_A4_TIMING_SEL6, 24, 0x3,1617mt8195_afe_1x_en_sel_text,1618mt8195_afe_1x_en_sel_values);1619static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum,1620A3_A4_TIMING_SEL6, 26, 0x3,1621mt8195_afe_1x_en_sel_text,1622mt8195_afe_1x_en_sel_values);1623static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum,1624A3_A4_TIMING_SEL6, 28, 0x3,1625mt8195_afe_1x_en_sel_text,1626mt8195_afe_1x_en_sel_values);1627static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum,1628A3_A4_TIMING_SEL6, 30, 0x3,1629mt8195_afe_1x_en_sel_text,1630mt8195_afe_1x_en_sel_values);16311632static const struct snd_kcontrol_new mt8195_memif_controls[] = {1633MT8195_SOC_ENUM_EXT("dl2_1x_en_sel",1634dl2_1x_en_sel_enum,1635snd_soc_get_enum_double,1636mt8195_memif_1x_en_sel_put,1637MT8195_AFE_MEMIF_DL2),1638MT8195_SOC_ENUM_EXT("dl3_1x_en_sel",1639dl3_1x_en_sel_enum,1640snd_soc_get_enum_double,1641mt8195_memif_1x_en_sel_put,1642MT8195_AFE_MEMIF_DL3),1643MT8195_SOC_ENUM_EXT("dl6_1x_en_sel",1644dl6_1x_en_sel_enum,1645snd_soc_get_enum_double,1646mt8195_memif_1x_en_sel_put,1647MT8195_AFE_MEMIF_DL6),1648MT8195_SOC_ENUM_EXT("dl7_1x_en_sel",1649dl7_1x_en_sel_enum,1650snd_soc_get_enum_double,1651mt8195_memif_1x_en_sel_put,1652MT8195_AFE_MEMIF_DL7),1653MT8195_SOC_ENUM_EXT("dl8_1x_en_sel",1654dl8_1x_en_sel_enum,1655snd_soc_get_enum_double,1656mt8195_memif_1x_en_sel_put,1657MT8195_AFE_MEMIF_DL8),1658MT8195_SOC_ENUM_EXT("dl10_1x_en_sel",1659dl10_1x_en_sel_enum,1660snd_soc_get_enum_double,1661mt8195_memif_1x_en_sel_put,1662MT8195_AFE_MEMIF_DL10),1663MT8195_SOC_ENUM_EXT("dl11_1x_en_sel",1664dl11_1x_en_sel_enum,1665snd_soc_get_enum_double,1666mt8195_memif_1x_en_sel_put,1667MT8195_AFE_MEMIF_DL11),1668MT8195_SOC_ENUM_EXT("ul1_1x_en_sel",1669ul1_1x_en_sel_enum,1670snd_soc_get_enum_double,1671mt8195_memif_1x_en_sel_put,1672MT8195_AFE_MEMIF_UL1),1673MT8195_SOC_ENUM_EXT("ul2_1x_en_sel",1674ul2_1x_en_sel_enum,1675snd_soc_get_enum_double,1676mt8195_memif_1x_en_sel_put,1677MT8195_AFE_MEMIF_UL2),1678MT8195_SOC_ENUM_EXT("ul3_1x_en_sel",1679ul3_1x_en_sel_enum,1680snd_soc_get_enum_double,1681mt8195_memif_1x_en_sel_put,1682MT8195_AFE_MEMIF_UL3),1683MT8195_SOC_ENUM_EXT("ul4_1x_en_sel",1684ul4_1x_en_sel_enum,1685snd_soc_get_enum_double,1686mt8195_memif_1x_en_sel_put,1687MT8195_AFE_MEMIF_UL4),1688MT8195_SOC_ENUM_EXT("ul5_1x_en_sel",1689ul5_1x_en_sel_enum,1690snd_soc_get_enum_double,1691mt8195_memif_1x_en_sel_put,1692MT8195_AFE_MEMIF_UL5),1693MT8195_SOC_ENUM_EXT("ul6_1x_en_sel",1694ul6_1x_en_sel_enum,1695snd_soc_get_enum_double,1696mt8195_memif_1x_en_sel_put,1697MT8195_AFE_MEMIF_UL6),1698MT8195_SOC_ENUM_EXT("ul8_1x_en_sel",1699ul8_1x_en_sel_enum,1700snd_soc_get_enum_double,1701mt8195_memif_1x_en_sel_put,1702MT8195_AFE_MEMIF_UL8),1703MT8195_SOC_ENUM_EXT("ul9_1x_en_sel",1704ul9_1x_en_sel_enum,1705snd_soc_get_enum_double,1706mt8195_memif_1x_en_sel_put,1707MT8195_AFE_MEMIF_UL9),1708MT8195_SOC_ENUM_EXT("ul10_1x_en_sel",1709ul10_1x_en_sel_enum,1710snd_soc_get_enum_double,1711mt8195_memif_1x_en_sel_put,1712MT8195_AFE_MEMIF_UL10),1713MT8195_SOC_ENUM_EXT("asys_irq1_1x_en_sel",1714asys_irq1_1x_en_sel_enum,1715snd_soc_get_enum_double,1716mt8195_asys_irq_1x_en_sel_put,1717MT8195_AFE_IRQ_13),1718MT8195_SOC_ENUM_EXT("asys_irq2_1x_en_sel",1719asys_irq2_1x_en_sel_enum,1720snd_soc_get_enum_double,1721mt8195_asys_irq_1x_en_sel_put,1722MT8195_AFE_IRQ_14),1723MT8195_SOC_ENUM_EXT("asys_irq3_1x_en_sel",1724asys_irq3_1x_en_sel_enum,1725snd_soc_get_enum_double,1726mt8195_asys_irq_1x_en_sel_put,1727MT8195_AFE_IRQ_15),1728MT8195_SOC_ENUM_EXT("asys_irq4_1x_en_sel",1729asys_irq4_1x_en_sel_enum,1730snd_soc_get_enum_double,1731mt8195_asys_irq_1x_en_sel_put,1732MT8195_AFE_IRQ_16),1733MT8195_SOC_ENUM_EXT("asys_irq5_1x_en_sel",1734asys_irq5_1x_en_sel_enum,1735snd_soc_get_enum_double,1736mt8195_asys_irq_1x_en_sel_put,1737MT8195_AFE_IRQ_17),1738MT8195_SOC_ENUM_EXT("asys_irq6_1x_en_sel",1739asys_irq6_1x_en_sel_enum,1740snd_soc_get_enum_double,1741mt8195_asys_irq_1x_en_sel_put,1742MT8195_AFE_IRQ_18),1743MT8195_SOC_ENUM_EXT("asys_irq7_1x_en_sel",1744asys_irq7_1x_en_sel_enum,1745snd_soc_get_enum_double,1746mt8195_asys_irq_1x_en_sel_put,1747MT8195_AFE_IRQ_19),1748MT8195_SOC_ENUM_EXT("asys_irq8_1x_en_sel",1749asys_irq8_1x_en_sel_enum,1750snd_soc_get_enum_double,1751mt8195_asys_irq_1x_en_sel_put,1752MT8195_AFE_IRQ_20),1753MT8195_SOC_ENUM_EXT("asys_irq9_1x_en_sel",1754asys_irq9_1x_en_sel_enum,1755snd_soc_get_enum_double,1756mt8195_asys_irq_1x_en_sel_put,1757MT8195_AFE_IRQ_21),1758MT8195_SOC_ENUM_EXT("asys_irq10_1x_en_sel",1759asys_irq10_1x_en_sel_enum,1760snd_soc_get_enum_double,1761mt8195_asys_irq_1x_en_sel_put,1762MT8195_AFE_IRQ_22),1763MT8195_SOC_ENUM_EXT("asys_irq11_1x_en_sel",1764asys_irq11_1x_en_sel_enum,1765snd_soc_get_enum_double,1766mt8195_asys_irq_1x_en_sel_put,1767MT8195_AFE_IRQ_23),1768MT8195_SOC_ENUM_EXT("asys_irq12_1x_en_sel",1769asys_irq12_1x_en_sel_enum,1770snd_soc_get_enum_double,1771mt8195_asys_irq_1x_en_sel_put,1772MT8195_AFE_IRQ_24),1773MT8195_SOC_ENUM_EXT("asys_irq13_1x_en_sel",1774asys_irq13_1x_en_sel_enum,1775snd_soc_get_enum_double,1776mt8195_asys_irq_1x_en_sel_put,1777MT8195_AFE_IRQ_25),1778MT8195_SOC_ENUM_EXT("asys_irq14_1x_en_sel",1779asys_irq14_1x_en_sel_enum,1780snd_soc_get_enum_double,1781mt8195_asys_irq_1x_en_sel_put,1782MT8195_AFE_IRQ_26),1783MT8195_SOC_ENUM_EXT("asys_irq15_1x_en_sel",1784asys_irq15_1x_en_sel_enum,1785snd_soc_get_enum_double,1786mt8195_asys_irq_1x_en_sel_put,1787MT8195_AFE_IRQ_27),1788MT8195_SOC_ENUM_EXT("asys_irq16_1x_en_sel",1789asys_irq16_1x_en_sel_enum,1790snd_soc_get_enum_double,1791mt8195_asys_irq_1x_en_sel_put,1792MT8195_AFE_IRQ_28),1793};17941795static const struct mtk_base_memif_data memif_data[MT8195_AFE_MEMIF_NUM] = {1796[MT8195_AFE_MEMIF_DL2] = {1797.name = "DL2",1798.id = MT8195_AFE_MEMIF_DL2,1799.reg_ofs_base = AFE_DL2_BASE,1800.reg_ofs_cur = AFE_DL2_CUR,1801.reg_ofs_end = AFE_DL2_END,1802.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1803.fs_shift = 10,1804.fs_maskbit = 0x1f,1805.mono_reg = -1,1806.mono_shift = 0,1807.int_odd_flag_reg = -1,1808.int_odd_flag_shift = 0,1809.enable_reg = AFE_DAC_CON0,1810.enable_shift = 18,1811.hd_reg = AFE_DL2_CON0,1812.hd_shift = 5,1813.agent_disable_reg = AUDIO_TOP_CON5,1814.agent_disable_shift = 18,1815.ch_num_reg = AFE_DL2_CON0,1816.ch_num_shift = 0,1817.ch_num_maskbit = 0x1f,1818.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1819.msb_shift = 18,1820.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1821.msb_end_shift = 18,1822},1823[MT8195_AFE_MEMIF_DL3] = {1824.name = "DL3",1825.id = MT8195_AFE_MEMIF_DL3,1826.reg_ofs_base = AFE_DL3_BASE,1827.reg_ofs_cur = AFE_DL3_CUR,1828.reg_ofs_end = AFE_DL3_END,1829.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1830.fs_shift = 15,1831.fs_maskbit = 0x1f,1832.mono_reg = -1,1833.mono_shift = 0,1834.int_odd_flag_reg = -1,1835.int_odd_flag_shift = 0,1836.enable_reg = AFE_DAC_CON0,1837.enable_shift = 19,1838.hd_reg = AFE_DL3_CON0,1839.hd_shift = 5,1840.agent_disable_reg = AUDIO_TOP_CON5,1841.agent_disable_shift = 19,1842.ch_num_reg = AFE_DL3_CON0,1843.ch_num_shift = 0,1844.ch_num_maskbit = 0x1f,1845.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1846.msb_shift = 19,1847.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1848.msb_end_shift = 19,1849},1850[MT8195_AFE_MEMIF_DL6] = {1851.name = "DL6",1852.id = MT8195_AFE_MEMIF_DL6,1853.reg_ofs_base = AFE_DL6_BASE,1854.reg_ofs_cur = AFE_DL6_CUR,1855.reg_ofs_end = AFE_DL6_END,1856.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1857.fs_shift = 0,1858.fs_maskbit = 0x1f,1859.mono_reg = -1,1860.mono_shift = 0,1861.int_odd_flag_reg = -1,1862.int_odd_flag_shift = 0,1863.enable_reg = AFE_DAC_CON0,1864.enable_shift = 22,1865.hd_reg = AFE_DL6_CON0,1866.hd_shift = 5,1867.agent_disable_reg = AUDIO_TOP_CON5,1868.agent_disable_shift = 22,1869.ch_num_reg = AFE_DL6_CON0,1870.ch_num_shift = 0,1871.ch_num_maskbit = 0x1f,1872.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1873.msb_shift = 22,1874.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1875.msb_end_shift = 22,1876},1877[MT8195_AFE_MEMIF_DL7] = {1878.name = "DL7",1879.id = MT8195_AFE_MEMIF_DL7,1880.reg_ofs_base = AFE_DL7_BASE,1881.reg_ofs_cur = AFE_DL7_CUR,1882.reg_ofs_end = AFE_DL7_END,1883.fs_reg = -1,1884.fs_shift = 0,1885.fs_maskbit = 0,1886.mono_reg = -1,1887.mono_shift = 0,1888.int_odd_flag_reg = -1,1889.int_odd_flag_shift = 0,1890.enable_reg = AFE_DAC_CON0,1891.enable_shift = 23,1892.hd_reg = AFE_DL7_CON0,1893.hd_shift = 5,1894.agent_disable_reg = AUDIO_TOP_CON5,1895.agent_disable_shift = 23,1896.ch_num_reg = AFE_DL7_CON0,1897.ch_num_shift = 0,1898.ch_num_maskbit = 0x1f,1899.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1900.msb_shift = 23,1901.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1902.msb_end_shift = 23,1903},1904[MT8195_AFE_MEMIF_DL8] = {1905.name = "DL8",1906.id = MT8195_AFE_MEMIF_DL8,1907.reg_ofs_base = AFE_DL8_BASE,1908.reg_ofs_cur = AFE_DL8_CUR,1909.reg_ofs_end = AFE_DL8_END,1910.fs_reg = AFE_MEMIF_AGENT_FS_CON1,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 = 24,1919.hd_reg = AFE_DL8_CON0,1920.hd_shift = 6,1921.agent_disable_reg = -1,1922.agent_disable_shift = 0,1923.ch_num_reg = AFE_DL8_CON0,1924.ch_num_shift = 0,1925.ch_num_maskbit = 0x3f,1926.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1927.msb_shift = 24,1928.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1929.msb_end_shift = 24,1930},1931[MT8195_AFE_MEMIF_DL10] = {1932.name = "DL10",1933.id = MT8195_AFE_MEMIF_DL10,1934.reg_ofs_base = AFE_DL10_BASE,1935.reg_ofs_cur = AFE_DL10_CUR,1936.reg_ofs_end = AFE_DL10_END,1937.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1938.fs_shift = 20,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 = 26,1946.hd_reg = AFE_DL10_CON0,1947.hd_shift = 5,1948.agent_disable_reg = -1,1949.agent_disable_shift = 0,1950.ch_num_reg = AFE_DL10_CON0,1951.ch_num_shift = 0,1952.ch_num_maskbit = 0x1f,1953.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1954.msb_shift = 26,1955.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1956.msb_end_shift = 26,1957},1958[MT8195_AFE_MEMIF_DL11] = {1959.name = "DL11",1960.id = MT8195_AFE_MEMIF_DL11,1961.reg_ofs_base = AFE_DL11_BASE,1962.reg_ofs_cur = AFE_DL11_CUR,1963.reg_ofs_end = AFE_DL11_END,1964.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1965.fs_shift = 25,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 = 27,1973.hd_reg = AFE_DL11_CON0,1974.hd_shift = 7,1975.agent_disable_reg = AUDIO_TOP_CON5,1976.agent_disable_shift = 27,1977.ch_num_reg = AFE_DL11_CON0,1978.ch_num_shift = 0,1979.ch_num_maskbit = 0x7f,1980.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1981.msb_shift = 27,1982.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1983.msb_end_shift = 27,1984},1985[MT8195_AFE_MEMIF_UL1] = {1986.name = "UL1",1987.id = MT8195_AFE_MEMIF_UL1,1988.reg_ofs_base = AFE_UL1_BASE,1989.reg_ofs_cur = AFE_UL1_CUR,1990.reg_ofs_end = AFE_UL1_END,1991.fs_reg = -1,1992.fs_shift = 0,1993.fs_maskbit = 0,1994.mono_reg = AFE_UL1_CON0,1995.mono_shift = 1,1996.int_odd_flag_reg = AFE_UL1_CON0,1997.int_odd_flag_shift = 0,1998.enable_reg = AFE_DAC_CON0,1999.enable_shift = 1,2000.hd_reg = AFE_UL1_CON0,2001.hd_shift = 5,2002.agent_disable_reg = AUDIO_TOP_CON5,2003.agent_disable_shift = 0,2004.ch_num_reg = -1,2005.ch_num_shift = 0,2006.ch_num_maskbit = 0,2007.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2008.msb_shift = 0,2009.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2010.msb_end_shift = 0,2011},2012[MT8195_AFE_MEMIF_UL2] = {2013.name = "UL2",2014.id = MT8195_AFE_MEMIF_UL2,2015.reg_ofs_base = AFE_UL2_BASE,2016.reg_ofs_cur = AFE_UL2_CUR,2017.reg_ofs_end = AFE_UL2_END,2018.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2019.fs_shift = 5,2020.fs_maskbit = 0x1f,2021.mono_reg = AFE_UL2_CON0,2022.mono_shift = 1,2023.int_odd_flag_reg = AFE_UL2_CON0,2024.int_odd_flag_shift = 0,2025.enable_reg = AFE_DAC_CON0,2026.enable_shift = 2,2027.hd_reg = AFE_UL2_CON0,2028.hd_shift = 5,2029.agent_disable_reg = AUDIO_TOP_CON5,2030.agent_disable_shift = 1,2031.ch_num_reg = -1,2032.ch_num_shift = 0,2033.ch_num_maskbit = 0,2034.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2035.msb_shift = 1,2036.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2037.msb_end_shift = 1,2038},2039[MT8195_AFE_MEMIF_UL3] = {2040.name = "UL3",2041.id = MT8195_AFE_MEMIF_UL3,2042.reg_ofs_base = AFE_UL3_BASE,2043.reg_ofs_cur = AFE_UL3_CUR,2044.reg_ofs_end = AFE_UL3_END,2045.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2046.fs_shift = 10,2047.fs_maskbit = 0x1f,2048.mono_reg = AFE_UL3_CON0,2049.mono_shift = 1,2050.int_odd_flag_reg = AFE_UL3_CON0,2051.int_odd_flag_shift = 0,2052.enable_reg = AFE_DAC_CON0,2053.enable_shift = 3,2054.hd_reg = AFE_UL3_CON0,2055.hd_shift = 5,2056.agent_disable_reg = AUDIO_TOP_CON5,2057.agent_disable_shift = 2,2058.ch_num_reg = -1,2059.ch_num_shift = 0,2060.ch_num_maskbit = 0,2061.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2062.msb_shift = 2,2063.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2064.msb_end_shift = 2,2065},2066[MT8195_AFE_MEMIF_UL4] = {2067.name = "UL4",2068.id = MT8195_AFE_MEMIF_UL4,2069.reg_ofs_base = AFE_UL4_BASE,2070.reg_ofs_cur = AFE_UL4_CUR,2071.reg_ofs_end = AFE_UL4_END,2072.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2073.fs_shift = 15,2074.fs_maskbit = 0x1f,2075.mono_reg = AFE_UL4_CON0,2076.mono_shift = 1,2077.int_odd_flag_reg = AFE_UL4_CON0,2078.int_odd_flag_shift = 0,2079.enable_reg = AFE_DAC_CON0,2080.enable_shift = 4,2081.hd_reg = AFE_UL4_CON0,2082.hd_shift = 5,2083.agent_disable_reg = AUDIO_TOP_CON5,2084.agent_disable_shift = 3,2085.ch_num_reg = -1,2086.ch_num_shift = 0,2087.ch_num_maskbit = 0,2088.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2089.msb_shift = 3,2090.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2091.msb_end_shift = 3,2092},2093[MT8195_AFE_MEMIF_UL5] = {2094.name = "UL5",2095.id = MT8195_AFE_MEMIF_UL5,2096.reg_ofs_base = AFE_UL5_BASE,2097.reg_ofs_cur = AFE_UL5_CUR,2098.reg_ofs_end = AFE_UL5_END,2099.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2100.fs_shift = 20,2101.fs_maskbit = 0x1f,2102.mono_reg = AFE_UL5_CON0,2103.mono_shift = 1,2104.int_odd_flag_reg = AFE_UL5_CON0,2105.int_odd_flag_shift = 0,2106.enable_reg = AFE_DAC_CON0,2107.enable_shift = 5,2108.hd_reg = AFE_UL5_CON0,2109.hd_shift = 5,2110.agent_disable_reg = AUDIO_TOP_CON5,2111.agent_disable_shift = 4,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 = 4,2117.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2118.msb_end_shift = 4,2119},2120[MT8195_AFE_MEMIF_UL6] = {2121.name = "UL6",2122.id = MT8195_AFE_MEMIF_UL6,2123.reg_ofs_base = AFE_UL6_BASE,2124.reg_ofs_cur = AFE_UL6_CUR,2125.reg_ofs_end = AFE_UL6_END,2126.fs_reg = -1,2127.fs_shift = 0,2128.fs_maskbit = 0,2129.mono_reg = AFE_UL6_CON0,2130.mono_shift = 1,2131.int_odd_flag_reg = AFE_UL6_CON0,2132.int_odd_flag_shift = 0,2133.enable_reg = AFE_DAC_CON0,2134.enable_shift = 6,2135.hd_reg = AFE_UL6_CON0,2136.hd_shift = 5,2137.agent_disable_reg = AUDIO_TOP_CON5,2138.agent_disable_shift = 5,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 = 5,2144.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2145.msb_end_shift = 5,2146},2147[MT8195_AFE_MEMIF_UL8] = {2148.name = "UL8",2149.id = MT8195_AFE_MEMIF_UL8,2150.reg_ofs_base = AFE_UL8_BASE,2151.reg_ofs_cur = AFE_UL8_CUR,2152.reg_ofs_end = AFE_UL8_END,2153.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2154.fs_shift = 5,2155.fs_maskbit = 0x1f,2156.mono_reg = AFE_UL8_CON0,2157.mono_shift = 1,2158.int_odd_flag_reg = AFE_UL8_CON0,2159.int_odd_flag_shift = 0,2160.enable_reg = AFE_DAC_CON0,2161.enable_shift = 8,2162.hd_reg = AFE_UL8_CON0,2163.hd_shift = 5,2164.agent_disable_reg = AUDIO_TOP_CON5,2165.agent_disable_shift = 7,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 = 7,2171.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2172.msb_end_shift = 7,2173},2174[MT8195_AFE_MEMIF_UL9] = {2175.name = "UL9",2176.id = MT8195_AFE_MEMIF_UL9,2177.reg_ofs_base = AFE_UL9_BASE,2178.reg_ofs_cur = AFE_UL9_CUR,2179.reg_ofs_end = AFE_UL9_END,2180.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2181.fs_shift = 10,2182.fs_maskbit = 0x1f,2183.mono_reg = AFE_UL9_CON0,2184.mono_shift = 1,2185.int_odd_flag_reg = AFE_UL9_CON0,2186.int_odd_flag_shift = 0,2187.enable_reg = AFE_DAC_CON0,2188.enable_shift = 9,2189.hd_reg = AFE_UL9_CON0,2190.hd_shift = 5,2191.agent_disable_reg = AUDIO_TOP_CON5,2192.agent_disable_shift = 8,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 = 8,2198.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2199.msb_end_shift = 8,2200},2201[MT8195_AFE_MEMIF_UL10] = {2202.name = "UL10",2203.id = MT8195_AFE_MEMIF_UL10,2204.reg_ofs_base = AFE_UL10_BASE,2205.reg_ofs_cur = AFE_UL10_CUR,2206.reg_ofs_end = AFE_UL10_END,2207.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2208.fs_shift = 15,2209.fs_maskbit = 0x1f,2210.mono_reg = AFE_UL10_CON0,2211.mono_shift = 1,2212.int_odd_flag_reg = AFE_UL10_CON0,2213.int_odd_flag_shift = 0,2214.enable_reg = AFE_DAC_CON0,2215.enable_shift = 10,2216.hd_reg = AFE_UL10_CON0,2217.hd_shift = 5,2218.agent_disable_reg = AUDIO_TOP_CON5,2219.agent_disable_shift = 9,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 = 9,2225.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2226.msb_end_shift = 9,2227},2228};22292230static const struct mtk_base_irq_data irq_data_array[MT8195_AFE_IRQ_NUM] = {2231[MT8195_AFE_IRQ_1] = {2232.id = MT8195_AFE_IRQ_1,2233.irq_cnt_reg = -1,2234.irq_cnt_shift = 0,2235.irq_cnt_maskbit = 0,2236.irq_fs_reg = -1,2237.irq_fs_shift = 0,2238.irq_fs_maskbit = 0,2239.irq_en_reg = AFE_IRQ1_CON,2240.irq_en_shift = 31,2241.irq_clr_reg = AFE_IRQ_MCU_CLR,2242.irq_clr_shift = 0,2243.irq_status_shift = 16,2244},2245[MT8195_AFE_IRQ_2] = {2246.id = MT8195_AFE_IRQ_2,2247.irq_cnt_reg = -1,2248.irq_cnt_shift = 0,2249.irq_cnt_maskbit = 0,2250.irq_fs_reg = -1,2251.irq_fs_shift = 0,2252.irq_fs_maskbit = 0,2253.irq_en_reg = AFE_IRQ2_CON,2254.irq_en_shift = 31,2255.irq_clr_reg = AFE_IRQ_MCU_CLR,2256.irq_clr_shift = 1,2257.irq_status_shift = 17,2258},2259[MT8195_AFE_IRQ_3] = {2260.id = MT8195_AFE_IRQ_3,2261.irq_cnt_reg = AFE_IRQ3_CON,2262.irq_cnt_shift = 0,2263.irq_cnt_maskbit = 0xffffff,2264.irq_fs_reg = -1,2265.irq_fs_shift = 0,2266.irq_fs_maskbit = 0,2267.irq_en_reg = AFE_IRQ3_CON,2268.irq_en_shift = 31,2269.irq_clr_reg = AFE_IRQ_MCU_CLR,2270.irq_clr_shift = 2,2271.irq_status_shift = 18,2272},2273[MT8195_AFE_IRQ_8] = {2274.id = MT8195_AFE_IRQ_8,2275.irq_cnt_reg = -1,2276.irq_cnt_shift = 0,2277.irq_cnt_maskbit = 0,2278.irq_fs_reg = -1,2279.irq_fs_shift = 0,2280.irq_fs_maskbit = 0,2281.irq_en_reg = AFE_IRQ8_CON,2282.irq_en_shift = 31,2283.irq_clr_reg = AFE_IRQ_MCU_CLR,2284.irq_clr_shift = 7,2285.irq_status_shift = 23,2286},2287[MT8195_AFE_IRQ_9] = {2288.id = MT8195_AFE_IRQ_9,2289.irq_cnt_reg = AFE_IRQ9_CON,2290.irq_cnt_shift = 0,2291.irq_cnt_maskbit = 0xffffff,2292.irq_fs_reg = -1,2293.irq_fs_shift = 0,2294.irq_fs_maskbit = 0,2295.irq_en_reg = AFE_IRQ9_CON,2296.irq_en_shift = 31,2297.irq_clr_reg = AFE_IRQ_MCU_CLR,2298.irq_clr_shift = 8,2299.irq_status_shift = 24,2300},2301[MT8195_AFE_IRQ_10] = {2302.id = MT8195_AFE_IRQ_10,2303.irq_cnt_reg = -1,2304.irq_cnt_shift = 0,2305.irq_cnt_maskbit = 0,2306.irq_fs_reg = -1,2307.irq_fs_shift = 0,2308.irq_fs_maskbit = 0,2309.irq_en_reg = AFE_IRQ10_CON,2310.irq_en_shift = 31,2311.irq_clr_reg = AFE_IRQ_MCU_CLR,2312.irq_clr_shift = 9,2313.irq_status_shift = 25,2314},2315[MT8195_AFE_IRQ_13] = {2316.id = MT8195_AFE_IRQ_13,2317.irq_cnt_reg = ASYS_IRQ1_CON,2318.irq_cnt_shift = 0,2319.irq_cnt_maskbit = 0xffffff,2320.irq_fs_reg = ASYS_IRQ1_CON,2321.irq_fs_shift = 24,2322.irq_fs_maskbit = 0x1ffff,2323.irq_en_reg = ASYS_IRQ1_CON,2324.irq_en_shift = 31,2325.irq_clr_reg = ASYS_IRQ_CLR,2326.irq_clr_shift = 0,2327.irq_status_shift = 0,2328},2329[MT8195_AFE_IRQ_14] = {2330.id = MT8195_AFE_IRQ_14,2331.irq_cnt_reg = ASYS_IRQ2_CON,2332.irq_cnt_shift = 0,2333.irq_cnt_maskbit = 0xffffff,2334.irq_fs_reg = ASYS_IRQ2_CON,2335.irq_fs_shift = 24,2336.irq_fs_maskbit = 0x1ffff,2337.irq_en_reg = ASYS_IRQ2_CON,2338.irq_en_shift = 31,2339.irq_clr_reg = ASYS_IRQ_CLR,2340.irq_clr_shift = 1,2341.irq_status_shift = 1,2342},2343[MT8195_AFE_IRQ_15] = {2344.id = MT8195_AFE_IRQ_15,2345.irq_cnt_reg = ASYS_IRQ3_CON,2346.irq_cnt_shift = 0,2347.irq_cnt_maskbit = 0xffffff,2348.irq_fs_reg = ASYS_IRQ3_CON,2349.irq_fs_shift = 24,2350.irq_fs_maskbit = 0x1ffff,2351.irq_en_reg = ASYS_IRQ3_CON,2352.irq_en_shift = 31,2353.irq_clr_reg = ASYS_IRQ_CLR,2354.irq_clr_shift = 2,2355.irq_status_shift = 2,2356},2357[MT8195_AFE_IRQ_16] = {2358.id = MT8195_AFE_IRQ_16,2359.irq_cnt_reg = ASYS_IRQ4_CON,2360.irq_cnt_shift = 0,2361.irq_cnt_maskbit = 0xffffff,2362.irq_fs_reg = ASYS_IRQ4_CON,2363.irq_fs_shift = 24,2364.irq_fs_maskbit = 0x1ffff,2365.irq_en_reg = ASYS_IRQ4_CON,2366.irq_en_shift = 31,2367.irq_clr_reg = ASYS_IRQ_CLR,2368.irq_clr_shift = 3,2369.irq_status_shift = 3,2370},2371[MT8195_AFE_IRQ_17] = {2372.id = MT8195_AFE_IRQ_17,2373.irq_cnt_reg = ASYS_IRQ5_CON,2374.irq_cnt_shift = 0,2375.irq_cnt_maskbit = 0xffffff,2376.irq_fs_reg = ASYS_IRQ5_CON,2377.irq_fs_shift = 24,2378.irq_fs_maskbit = 0x1ffff,2379.irq_en_reg = ASYS_IRQ5_CON,2380.irq_en_shift = 31,2381.irq_clr_reg = ASYS_IRQ_CLR,2382.irq_clr_shift = 4,2383.irq_status_shift = 4,2384},2385[MT8195_AFE_IRQ_18] = {2386.id = MT8195_AFE_IRQ_18,2387.irq_cnt_reg = ASYS_IRQ6_CON,2388.irq_cnt_shift = 0,2389.irq_cnt_maskbit = 0xffffff,2390.irq_fs_reg = ASYS_IRQ6_CON,2391.irq_fs_shift = 24,2392.irq_fs_maskbit = 0x1ffff,2393.irq_en_reg = ASYS_IRQ6_CON,2394.irq_en_shift = 31,2395.irq_clr_reg = ASYS_IRQ_CLR,2396.irq_clr_shift = 5,2397.irq_status_shift = 5,2398},2399[MT8195_AFE_IRQ_19] = {2400.id = MT8195_AFE_IRQ_19,2401.irq_cnt_reg = ASYS_IRQ7_CON,2402.irq_cnt_shift = 0,2403.irq_cnt_maskbit = 0xffffff,2404.irq_fs_reg = ASYS_IRQ7_CON,2405.irq_fs_shift = 24,2406.irq_fs_maskbit = 0x1ffff,2407.irq_en_reg = ASYS_IRQ7_CON,2408.irq_en_shift = 31,2409.irq_clr_reg = ASYS_IRQ_CLR,2410.irq_clr_shift = 6,2411.irq_status_shift = 6,2412},2413[MT8195_AFE_IRQ_20] = {2414.id = MT8195_AFE_IRQ_20,2415.irq_cnt_reg = ASYS_IRQ8_CON,2416.irq_cnt_shift = 0,2417.irq_cnt_maskbit = 0xffffff,2418.irq_fs_reg = ASYS_IRQ8_CON,2419.irq_fs_shift = 24,2420.irq_fs_maskbit = 0x1ffff,2421.irq_en_reg = ASYS_IRQ8_CON,2422.irq_en_shift = 31,2423.irq_clr_reg = ASYS_IRQ_CLR,2424.irq_clr_shift = 7,2425.irq_status_shift = 7,2426},2427[MT8195_AFE_IRQ_21] = {2428.id = MT8195_AFE_IRQ_21,2429.irq_cnt_reg = ASYS_IRQ9_CON,2430.irq_cnt_shift = 0,2431.irq_cnt_maskbit = 0xffffff,2432.irq_fs_reg = ASYS_IRQ9_CON,2433.irq_fs_shift = 24,2434.irq_fs_maskbit = 0x1ffff,2435.irq_en_reg = ASYS_IRQ9_CON,2436.irq_en_shift = 31,2437.irq_clr_reg = ASYS_IRQ_CLR,2438.irq_clr_shift = 8,2439.irq_status_shift = 8,2440},2441[MT8195_AFE_IRQ_22] = {2442.id = MT8195_AFE_IRQ_22,2443.irq_cnt_reg = ASYS_IRQ10_CON,2444.irq_cnt_shift = 0,2445.irq_cnt_maskbit = 0xffffff,2446.irq_fs_reg = ASYS_IRQ10_CON,2447.irq_fs_shift = 24,2448.irq_fs_maskbit = 0x1ffff,2449.irq_en_reg = ASYS_IRQ10_CON,2450.irq_en_shift = 31,2451.irq_clr_reg = ASYS_IRQ_CLR,2452.irq_clr_shift = 9,2453.irq_status_shift = 9,2454},2455[MT8195_AFE_IRQ_23] = {2456.id = MT8195_AFE_IRQ_23,2457.irq_cnt_reg = ASYS_IRQ11_CON,2458.irq_cnt_shift = 0,2459.irq_cnt_maskbit = 0xffffff,2460.irq_fs_reg = ASYS_IRQ11_CON,2461.irq_fs_shift = 24,2462.irq_fs_maskbit = 0x1ffff,2463.irq_en_reg = ASYS_IRQ11_CON,2464.irq_en_shift = 31,2465.irq_clr_reg = ASYS_IRQ_CLR,2466.irq_clr_shift = 10,2467.irq_status_shift = 10,2468},2469[MT8195_AFE_IRQ_24] = {2470.id = MT8195_AFE_IRQ_24,2471.irq_cnt_reg = ASYS_IRQ12_CON,2472.irq_cnt_shift = 0,2473.irq_cnt_maskbit = 0xffffff,2474.irq_fs_reg = ASYS_IRQ12_CON,2475.irq_fs_shift = 24,2476.irq_fs_maskbit = 0x1ffff,2477.irq_en_reg = ASYS_IRQ12_CON,2478.irq_en_shift = 31,2479.irq_clr_reg = ASYS_IRQ_CLR,2480.irq_clr_shift = 11,2481.irq_status_shift = 11,2482},2483[MT8195_AFE_IRQ_25] = {2484.id = MT8195_AFE_IRQ_25,2485.irq_cnt_reg = ASYS_IRQ13_CON,2486.irq_cnt_shift = 0,2487.irq_cnt_maskbit = 0xffffff,2488.irq_fs_reg = ASYS_IRQ13_CON,2489.irq_fs_shift = 24,2490.irq_fs_maskbit = 0x1ffff,2491.irq_en_reg = ASYS_IRQ13_CON,2492.irq_en_shift = 31,2493.irq_clr_reg = ASYS_IRQ_CLR,2494.irq_clr_shift = 12,2495.irq_status_shift = 12,2496},2497[MT8195_AFE_IRQ_26] = {2498.id = MT8195_AFE_IRQ_26,2499.irq_cnt_reg = ASYS_IRQ14_CON,2500.irq_cnt_shift = 0,2501.irq_cnt_maskbit = 0xffffff,2502.irq_fs_reg = ASYS_IRQ14_CON,2503.irq_fs_shift = 24,2504.irq_fs_maskbit = 0x1ffff,2505.irq_en_reg = ASYS_IRQ14_CON,2506.irq_en_shift = 31,2507.irq_clr_reg = ASYS_IRQ_CLR,2508.irq_clr_shift = 13,2509.irq_status_shift = 13,2510},2511[MT8195_AFE_IRQ_27] = {2512.id = MT8195_AFE_IRQ_27,2513.irq_cnt_reg = ASYS_IRQ15_CON,2514.irq_cnt_shift = 0,2515.irq_cnt_maskbit = 0xffffff,2516.irq_fs_reg = ASYS_IRQ15_CON,2517.irq_fs_shift = 24,2518.irq_fs_maskbit = 0x1ffff,2519.irq_en_reg = ASYS_IRQ15_CON,2520.irq_en_shift = 31,2521.irq_clr_reg = ASYS_IRQ_CLR,2522.irq_clr_shift = 14,2523.irq_status_shift = 14,2524},2525[MT8195_AFE_IRQ_28] = {2526.id = MT8195_AFE_IRQ_28,2527.irq_cnt_reg = ASYS_IRQ16_CON,2528.irq_cnt_shift = 0,2529.irq_cnt_maskbit = 0xffffff,2530.irq_fs_reg = ASYS_IRQ16_CON,2531.irq_fs_shift = 24,2532.irq_fs_maskbit = 0x1ffff,2533.irq_en_reg = ASYS_IRQ16_CON,2534.irq_en_shift = 31,2535.irq_clr_reg = ASYS_IRQ_CLR,2536.irq_clr_shift = 15,2537.irq_status_shift = 15,2538},2539};25402541static const int mt8195_afe_memif_const_irqs[MT8195_AFE_MEMIF_NUM] = {2542[MT8195_AFE_MEMIF_DL2] = MT8195_AFE_IRQ_13,2543[MT8195_AFE_MEMIF_DL3] = MT8195_AFE_IRQ_14,2544[MT8195_AFE_MEMIF_DL6] = MT8195_AFE_IRQ_15,2545[MT8195_AFE_MEMIF_DL7] = MT8195_AFE_IRQ_1,2546[MT8195_AFE_MEMIF_DL8] = MT8195_AFE_IRQ_16,2547[MT8195_AFE_MEMIF_DL10] = MT8195_AFE_IRQ_17,2548[MT8195_AFE_MEMIF_DL11] = MT8195_AFE_IRQ_18,2549[MT8195_AFE_MEMIF_UL1] = MT8195_AFE_IRQ_3,2550[MT8195_AFE_MEMIF_UL2] = MT8195_AFE_IRQ_19,2551[MT8195_AFE_MEMIF_UL3] = MT8195_AFE_IRQ_20,2552[MT8195_AFE_MEMIF_UL4] = MT8195_AFE_IRQ_21,2553[MT8195_AFE_MEMIF_UL5] = MT8195_AFE_IRQ_22,2554[MT8195_AFE_MEMIF_UL6] = MT8195_AFE_IRQ_9,2555[MT8195_AFE_MEMIF_UL8] = MT8195_AFE_IRQ_23,2556[MT8195_AFE_MEMIF_UL9] = MT8195_AFE_IRQ_24,2557[MT8195_AFE_MEMIF_UL10] = MT8195_AFE_IRQ_25,2558};25592560static bool mt8195_is_volatile_reg(struct device *dev, unsigned int reg)2561{2562/* these auto-gen reg has read-only bit, so put it as volatile */2563/* volatile reg cannot be cached, so cannot be set when power off */2564switch (reg) {2565case AUDIO_TOP_CON0:2566case AUDIO_TOP_CON1:2567case AUDIO_TOP_CON3:2568case AUDIO_TOP_CON4:2569case AUDIO_TOP_CON5:2570case AUDIO_TOP_CON6:2571case ASYS_IRQ_CLR:2572case ASYS_IRQ_STATUS:2573case ASYS_IRQ_MON1:2574case ASYS_IRQ_MON2:2575case AFE_IRQ_MCU_CLR:2576case AFE_IRQ_STATUS:2577case AFE_IRQ3_CON_MON:2578case AFE_IRQ_MCU_MON2:2579case ADSP_IRQ_STATUS:2580case AUDIO_TOP_STA0:2581case AUDIO_TOP_STA1:2582case AFE_GAIN1_CUR:2583case AFE_GAIN2_CUR:2584case AFE_IEC_BURST_INFO:2585case AFE_IEC_CHL_STAT0:2586case AFE_IEC_CHL_STAT1:2587case AFE_IEC_CHR_STAT0:2588case AFE_IEC_CHR_STAT1:2589case AFE_SPDIFIN_CHSTS1:2590case AFE_SPDIFIN_CHSTS2:2591case AFE_SPDIFIN_CHSTS3:2592case AFE_SPDIFIN_CHSTS4:2593case AFE_SPDIFIN_CHSTS5:2594case AFE_SPDIFIN_CHSTS6:2595case AFE_SPDIFIN_DEBUG1:2596case AFE_SPDIFIN_DEBUG2:2597case AFE_SPDIFIN_DEBUG3:2598case AFE_SPDIFIN_DEBUG4:2599case AFE_SPDIFIN_EC:2600case AFE_SPDIFIN_CKLOCK_CFG:2601case AFE_SPDIFIN_BR_DBG1:2602case AFE_SPDIFIN_CKFBDIV:2603case AFE_SPDIFIN_INT_EXT:2604case AFE_SPDIFIN_INT_EXT2:2605case SPDIFIN_FREQ_STATUS:2606case SPDIFIN_USERCODE1:2607case SPDIFIN_USERCODE2:2608case SPDIFIN_USERCODE3:2609case SPDIFIN_USERCODE4:2610case SPDIFIN_USERCODE5:2611case SPDIFIN_USERCODE6:2612case SPDIFIN_USERCODE7:2613case SPDIFIN_USERCODE8:2614case SPDIFIN_USERCODE9:2615case SPDIFIN_USERCODE10:2616case SPDIFIN_USERCODE11:2617case SPDIFIN_USERCODE12:2618case AFE_LINEIN_APLL_TUNER_MON:2619case AFE_EARC_APLL_TUNER_MON:2620case AFE_CM0_MON:2621case AFE_CM1_MON:2622case AFE_CM2_MON:2623case AFE_MPHONE_MULTI_DET_MON0:2624case AFE_MPHONE_MULTI_DET_MON1:2625case AFE_MPHONE_MULTI_DET_MON2:2626case AFE_MPHONE_MULTI2_DET_MON0:2627case AFE_MPHONE_MULTI2_DET_MON1:2628case AFE_MPHONE_MULTI2_DET_MON2:2629case AFE_ADDA_MTKAIF_MON0:2630case AFE_ADDA_MTKAIF_MON1:2631case AFE_AUD_PAD_TOP:2632case AFE_ADDA6_MTKAIF_MON0:2633case AFE_ADDA6_MTKAIF_MON1:2634case AFE_ADDA6_SRC_DEBUG_MON0:2635case AFE_ADDA6_UL_SRC_MON0:2636case AFE_ADDA6_UL_SRC_MON1:2637case AFE_ASRC11_NEW_CON8:2638case AFE_ASRC11_NEW_CON9:2639case AFE_ASRC12_NEW_CON8:2640case AFE_ASRC12_NEW_CON9:2641case AFE_LRCK_CNT:2642case AFE_DAC_MON0:2643case AFE_DL2_CUR:2644case AFE_DL3_CUR:2645case AFE_DL6_CUR:2646case AFE_DL7_CUR:2647case AFE_DL8_CUR:2648case AFE_DL10_CUR:2649case AFE_DL11_CUR:2650case AFE_UL1_CUR:2651case AFE_UL2_CUR:2652case AFE_UL3_CUR:2653case AFE_UL4_CUR:2654case AFE_UL5_CUR:2655case AFE_UL6_CUR:2656case AFE_UL8_CUR:2657case AFE_UL9_CUR:2658case AFE_UL10_CUR:2659case AFE_DL8_CHK_SUM1:2660case AFE_DL8_CHK_SUM2:2661case AFE_DL8_CHK_SUM3:2662case AFE_DL8_CHK_SUM4:2663case AFE_DL8_CHK_SUM5:2664case AFE_DL8_CHK_SUM6:2665case AFE_DL10_CHK_SUM1:2666case AFE_DL10_CHK_SUM2:2667case AFE_DL10_CHK_SUM3:2668case AFE_DL10_CHK_SUM4:2669case AFE_DL10_CHK_SUM5:2670case AFE_DL10_CHK_SUM6:2671case AFE_DL11_CHK_SUM1:2672case AFE_DL11_CHK_SUM2:2673case AFE_DL11_CHK_SUM3:2674case AFE_DL11_CHK_SUM4:2675case AFE_DL11_CHK_SUM5:2676case AFE_DL11_CHK_SUM6:2677case AFE_UL1_CHK_SUM1:2678case AFE_UL1_CHK_SUM2:2679case AFE_UL2_CHK_SUM1:2680case AFE_UL2_CHK_SUM2:2681case AFE_UL3_CHK_SUM1:2682case AFE_UL3_CHK_SUM2:2683case AFE_UL4_CHK_SUM1:2684case AFE_UL4_CHK_SUM2:2685case AFE_UL5_CHK_SUM1:2686case AFE_UL5_CHK_SUM2:2687case AFE_UL6_CHK_SUM1:2688case AFE_UL6_CHK_SUM2:2689case AFE_UL8_CHK_SUM1:2690case AFE_UL8_CHK_SUM2:2691case AFE_DL2_CHK_SUM1:2692case AFE_DL2_CHK_SUM2:2693case AFE_DL3_CHK_SUM1:2694case AFE_DL3_CHK_SUM2:2695case AFE_DL6_CHK_SUM1:2696case AFE_DL6_CHK_SUM2:2697case AFE_DL7_CHK_SUM1:2698case AFE_DL7_CHK_SUM2:2699case AFE_UL9_CHK_SUM1:2700case AFE_UL9_CHK_SUM2:2701case AFE_BUS_MON1:2702case UL1_MOD2AGT_CNT_LAT:2703case UL2_MOD2AGT_CNT_LAT:2704case UL3_MOD2AGT_CNT_LAT:2705case UL4_MOD2AGT_CNT_LAT:2706case UL5_MOD2AGT_CNT_LAT:2707case UL6_MOD2AGT_CNT_LAT:2708case UL8_MOD2AGT_CNT_LAT:2709case UL9_MOD2AGT_CNT_LAT:2710case UL10_MOD2AGT_CNT_LAT:2711case AFE_MEMIF_BUF_FULL_MON:2712case AFE_MEMIF_BUF_MON1:2713case AFE_MEMIF_BUF_MON3:2714case AFE_MEMIF_BUF_MON4:2715case AFE_MEMIF_BUF_MON5:2716case AFE_MEMIF_BUF_MON6:2717case AFE_MEMIF_BUF_MON7:2718case AFE_MEMIF_BUF_MON8:2719case AFE_MEMIF_BUF_MON9:2720case AFE_MEMIF_BUF_MON10:2721case DL2_AGENT2MODULE_CNT:2722case DL3_AGENT2MODULE_CNT:2723case DL6_AGENT2MODULE_CNT:2724case DL7_AGENT2MODULE_CNT:2725case DL8_AGENT2MODULE_CNT:2726case DL10_AGENT2MODULE_CNT:2727case DL11_AGENT2MODULE_CNT:2728case UL1_MODULE2AGENT_CNT:2729case UL2_MODULE2AGENT_CNT:2730case UL3_MODULE2AGENT_CNT:2731case UL4_MODULE2AGENT_CNT:2732case UL5_MODULE2AGENT_CNT:2733case UL6_MODULE2AGENT_CNT:2734case UL8_MODULE2AGENT_CNT:2735case UL9_MODULE2AGENT_CNT:2736case UL10_MODULE2AGENT_CNT:2737case AFE_DMIC0_SRC_DEBUG_MON0:2738case AFE_DMIC0_UL_SRC_MON0:2739case AFE_DMIC0_UL_SRC_MON1:2740case AFE_DMIC1_SRC_DEBUG_MON0:2741case AFE_DMIC1_UL_SRC_MON0:2742case AFE_DMIC1_UL_SRC_MON1:2743case AFE_DMIC2_SRC_DEBUG_MON0:2744case AFE_DMIC2_UL_SRC_MON0:2745case AFE_DMIC2_UL_SRC_MON1:2746case AFE_DMIC3_SRC_DEBUG_MON0:2747case AFE_DMIC3_UL_SRC_MON0:2748case AFE_DMIC3_UL_SRC_MON1:2749case DMIC_GAIN1_CUR:2750case DMIC_GAIN2_CUR:2751case DMIC_GAIN3_CUR:2752case DMIC_GAIN4_CUR:2753case ETDM_IN1_MONITOR:2754case ETDM_IN2_MONITOR:2755case ETDM_OUT1_MONITOR:2756case ETDM_OUT2_MONITOR:2757case ETDM_OUT3_MONITOR:2758case AFE_ADDA_SRC_DEBUG_MON0:2759case AFE_ADDA_SRC_DEBUG_MON1:2760case AFE_ADDA_DL_SDM_FIFO_MON:2761case AFE_ADDA_DL_SRC_LCH_MON:2762case AFE_ADDA_DL_SRC_RCH_MON:2763case AFE_ADDA_DL_SDM_OUT_MON:2764case AFE_GASRC0_NEW_CON8:2765case AFE_GASRC0_NEW_CON9:2766case AFE_GASRC0_NEW_CON12:2767case AFE_GASRC1_NEW_CON8:2768case AFE_GASRC1_NEW_CON9:2769case AFE_GASRC1_NEW_CON12:2770case AFE_GASRC2_NEW_CON8:2771case AFE_GASRC2_NEW_CON9:2772case AFE_GASRC2_NEW_CON12:2773case AFE_GASRC3_NEW_CON8:2774case AFE_GASRC3_NEW_CON9:2775case AFE_GASRC3_NEW_CON12:2776case AFE_GASRC4_NEW_CON8:2777case AFE_GASRC4_NEW_CON9:2778case AFE_GASRC4_NEW_CON12:2779case AFE_GASRC5_NEW_CON8:2780case AFE_GASRC5_NEW_CON9:2781case AFE_GASRC5_NEW_CON12:2782case AFE_GASRC6_NEW_CON8:2783case AFE_GASRC6_NEW_CON9:2784case AFE_GASRC6_NEW_CON12:2785case AFE_GASRC7_NEW_CON8:2786case AFE_GASRC7_NEW_CON9:2787case AFE_GASRC7_NEW_CON12:2788case AFE_GASRC8_NEW_CON8:2789case AFE_GASRC8_NEW_CON9:2790case AFE_GASRC8_NEW_CON12:2791case AFE_GASRC9_NEW_CON8:2792case AFE_GASRC9_NEW_CON9:2793case AFE_GASRC9_NEW_CON12:2794case AFE_GASRC10_NEW_CON8:2795case AFE_GASRC10_NEW_CON9:2796case AFE_GASRC10_NEW_CON12:2797case AFE_GASRC11_NEW_CON8:2798case AFE_GASRC11_NEW_CON9:2799case AFE_GASRC11_NEW_CON12:2800case AFE_GASRC12_NEW_CON8:2801case AFE_GASRC12_NEW_CON9:2802case AFE_GASRC12_NEW_CON12:2803case AFE_GASRC13_NEW_CON8:2804case AFE_GASRC13_NEW_CON9:2805case AFE_GASRC13_NEW_CON12:2806case AFE_GASRC14_NEW_CON8:2807case AFE_GASRC14_NEW_CON9:2808case AFE_GASRC14_NEW_CON12:2809case AFE_GASRC15_NEW_CON8:2810case AFE_GASRC15_NEW_CON9:2811case AFE_GASRC15_NEW_CON12:2812case AFE_GASRC16_NEW_CON8:2813case AFE_GASRC16_NEW_CON9:2814case AFE_GASRC16_NEW_CON12:2815case AFE_GASRC17_NEW_CON8:2816case AFE_GASRC17_NEW_CON9:2817case AFE_GASRC17_NEW_CON12:2818case AFE_GASRC18_NEW_CON8:2819case AFE_GASRC18_NEW_CON9:2820case AFE_GASRC18_NEW_CON12:2821case AFE_GASRC19_NEW_CON8:2822case AFE_GASRC19_NEW_CON9:2823case AFE_GASRC19_NEW_CON12:2824return true;2825default:2826return false;2827};2828}28292830static const struct regmap_config mt8195_afe_regmap_config = {2831.reg_bits = 32,2832.reg_stride = 4,2833.val_bits = 32,2834.volatile_reg = mt8195_is_volatile_reg,2835.max_register = AFE_MAX_REGISTER,2836.num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1),2837.cache_type = REGCACHE_FLAT,2838};28392840#define AFE_IRQ_CLR_BITS (0x387)2841#define ASYS_IRQ_CLR_BITS (0xffff)28422843static irqreturn_t mt8195_afe_irq_handler(int irq_id, void *dev_id)2844{2845struct mtk_base_afe *afe = dev_id;2846unsigned int val = 0;2847unsigned int asys_irq_clr_bits = 0;2848unsigned int afe_irq_clr_bits = 0;2849unsigned int irq_status_bits = 0;2850unsigned int irq_clr_bits = 0;2851unsigned int mcu_irq_mask = 0;2852int i = 0;2853int ret = 0;28542855ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val);2856if (ret) {2857dev_info(afe->dev, "%s irq status err\n", __func__);2858afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2859asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2860goto err_irq;2861}28622863ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask);2864if (ret) {2865dev_info(afe->dev, "%s read irq mask err\n", __func__);2866afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2867asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2868goto err_irq;2869}28702871/* only clr cpu irq */2872val &= mcu_irq_mask;28732874for (i = 0; i < MT8195_AFE_MEMIF_NUM; i++) {2875struct mtk_base_afe_memif *memif = &afe->memif[i];2876struct mtk_base_irq_data const *irq_data;28772878if (memif->irq_usage < 0)2879continue;28802881irq_data = afe->irqs[memif->irq_usage].irq_data;28822883irq_status_bits = BIT(irq_data->irq_status_shift);2884irq_clr_bits = BIT(irq_data->irq_clr_shift);28852886if (!(val & irq_status_bits))2887continue;28882889if (irq_data->irq_clr_reg == ASYS_IRQ_CLR)2890asys_irq_clr_bits |= irq_clr_bits;2891else2892afe_irq_clr_bits |= irq_clr_bits;28932894snd_pcm_period_elapsed(memif->substream);2895}28962897err_irq:2898/* clear irq */2899if (asys_irq_clr_bits)2900regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits);2901if (afe_irq_clr_bits)2902regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits);29032904return IRQ_HANDLED;2905}29062907static int mt8195_afe_runtime_suspend(struct device *dev)2908{2909struct mtk_base_afe *afe = dev_get_drvdata(dev);2910struct mt8195_afe_private *afe_priv = afe->platform_priv;29112912if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)2913goto skip_regmap;29142915mt8195_afe_disable_main_clock(afe);29162917regcache_cache_only(afe->regmap, true);2918regcache_mark_dirty(afe->regmap);29192920skip_regmap:2921mt8195_afe_disable_reg_rw_clk(afe);29222923return 0;2924}29252926static int mt8195_afe_runtime_resume(struct device *dev)2927{2928struct mtk_base_afe *afe = dev_get_drvdata(dev);2929struct mt8195_afe_private *afe_priv = afe->platform_priv;29302931mt8195_afe_enable_reg_rw_clk(afe);29322933if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)2934goto skip_regmap;29352936regcache_cache_only(afe->regmap, false);2937regcache_sync(afe->regmap);29382939mt8195_afe_enable_main_clock(afe);2940skip_regmap:2941return 0;2942}29432944static int init_memif_priv_data(struct mtk_base_afe *afe)2945{2946struct mt8195_afe_private *afe_priv = afe->platform_priv;2947struct mtk_dai_memif_priv *memif_priv;2948int i;29492950for (i = MT8195_AFE_MEMIF_START; i < MT8195_AFE_MEMIF_END; i++) {2951memif_priv = devm_kzalloc(afe->dev,2952sizeof(struct mtk_dai_memif_priv),2953GFP_KERNEL);2954if (!memif_priv)2955return -ENOMEM;29562957afe_priv->dai_priv[i] = memif_priv;2958}29592960return 0;2961}29622963static int mt8195_dai_memif_register(struct mtk_base_afe *afe)2964{2965struct mtk_base_afe_dai *dai;29662967dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);2968if (!dai)2969return -ENOMEM;29702971list_add(&dai->list, &afe->sub_dais);29722973dai->dai_drivers = mt8195_memif_dai_driver;2974dai->num_dai_drivers = ARRAY_SIZE(mt8195_memif_dai_driver);29752976dai->dapm_widgets = mt8195_memif_widgets;2977dai->num_dapm_widgets = ARRAY_SIZE(mt8195_memif_widgets);2978dai->dapm_routes = mt8195_memif_routes;2979dai->num_dapm_routes = ARRAY_SIZE(mt8195_memif_routes);2980dai->controls = mt8195_memif_controls;2981dai->num_controls = ARRAY_SIZE(mt8195_memif_controls);29822983return init_memif_priv_data(afe);2984}29852986typedef int (*dai_register_cb)(struct mtk_base_afe *);2987static const dai_register_cb dai_register_cbs[] = {2988mt8195_dai_adda_register,2989mt8195_dai_etdm_register,2990mt8195_dai_pcm_register,2991mt8195_dai_memif_register,2992};29932994static const struct reg_sequence mt8195_afe_reg_defaults[] = {2995{ AFE_IRQ_MASK, 0x387ffff },2996{ AFE_IRQ3_CON, BIT(30) },2997{ AFE_IRQ9_CON, BIT(30) },2998{ ETDM_IN1_CON4, 0x12000100 },2999{ ETDM_IN2_CON4, 0x12000100 },3000};30013002static const struct reg_sequence mt8195_cg_patch[] = {3003{ AUDIO_TOP_CON0, 0xfffffffb },3004{ AUDIO_TOP_CON1, 0xfffffff8 },3005};30063007static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)3008{3009struct mtk_base_afe *afe;3010struct mt8195_afe_private *afe_priv;3011struct device *dev = &pdev->dev;3012struct reset_control *rstc;3013int i, irq_id, ret;30143015ret = of_reserved_mem_device_init(dev);3016if (ret)3017return dev_err_probe(dev, ret, "failed to assign memory region\n");30183019ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(33));3020if (ret)3021return ret;30223023afe = devm_kzalloc(dev, sizeof(*afe), GFP_KERNEL);3024if (!afe)3025return -ENOMEM;30263027afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv),3028GFP_KERNEL);3029if (!afe->platform_priv)3030return -ENOMEM;30313032afe_priv = afe->platform_priv;3033afe->dev = &pdev->dev;30343035afe->base_addr = devm_platform_ioremap_resource(pdev, 0);3036if (IS_ERR(afe->base_addr))3037return PTR_ERR(afe->base_addr);30383039/* initial audio related clock */3040ret = mt8195_afe_init_clock(afe);3041if (ret)3042return dev_err_probe(dev, ret, "init clock error\n");30433044/* reset controller to reset audio regs before regmap cache */3045rstc = devm_reset_control_get_exclusive(dev, "audiosys");3046if (IS_ERR(rstc))3047return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n");30483049ret = reset_control_reset(rstc);3050if (ret)3051return dev_err_probe(dev, ret, "failed to trigger audio reset\n");30523053spin_lock_init(&afe_priv->afe_ctrl_lock);30543055mutex_init(&afe->irq_alloc_lock);30563057/* irq initialize */3058afe->irqs_size = MT8195_AFE_IRQ_NUM;3059afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),3060GFP_KERNEL);3061if (!afe->irqs)3062return -ENOMEM;30633064for (i = 0; i < afe->irqs_size; i++)3065afe->irqs[i].irq_data = &irq_data_array[i];30663067/* init memif */3068afe->memif_size = MT8195_AFE_MEMIF_NUM;3069afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),3070GFP_KERNEL);3071if (!afe->memif)3072return -ENOMEM;30733074for (i = 0; i < afe->memif_size; i++) {3075afe->memif[i].data = &memif_data[i];3076afe->memif[i].irq_usage = mt8195_afe_memif_const_irqs[i];3077afe->memif[i].const_irq = 1;3078afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true;3079}30803081/* request irq */3082irq_id = platform_get_irq(pdev, 0);3083if (irq_id < 0)3084return -ENXIO;30853086ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler,3087IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);3088if (ret)3089return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");30903091/* init sub_dais */3092INIT_LIST_HEAD(&afe->sub_dais);30933094for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {3095ret = dai_register_cbs[i](afe);3096if (ret)3097return dev_err_probe(dev, ret, "dai cb%i register fail\n", i);3098}30993100/* init dai_driver and component_driver */3101ret = mtk_afe_combine_sub_dai(afe);3102if (ret)3103return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");31043105afe->mtk_afe_hardware = &mt8195_afe_hardware;3106afe->memif_fs = mt8195_memif_fs;3107afe->irq_fs = mt8195_irq_fs;31083109afe->runtime_resume = mt8195_afe_runtime_resume;3110afe->runtime_suspend = mt8195_afe_runtime_suspend;31113112platform_set_drvdata(pdev, afe);31133114afe_priv->topckgen = syscon_regmap_lookup_by_phandle(dev->of_node, "mediatek,topckgen");3115if (IS_ERR(afe_priv->topckgen))3116dev_dbg(afe->dev, "Cannot find topckgen controller: %ld\n",3117PTR_ERR(afe_priv->topckgen));31183119/* enable clock for regcache get default value from hw */3120afe_priv->pm_runtime_bypass_reg_ctl = true;31213122ret = devm_pm_runtime_enable(dev);3123if (ret)3124return ret;31253126ret = pm_runtime_resume_and_get(dev);3127if (ret)3128return dev_err_probe(dev, ret, "Failed to resume device\n");31293130afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,3131&mt8195_afe_regmap_config);3132if (IS_ERR(afe->regmap)) {3133ret = PTR_ERR(afe->regmap);3134goto err_pm_put;3135}31363137ret = regmap_register_patch(afe->regmap, mt8195_cg_patch,3138ARRAY_SIZE(mt8195_cg_patch));3139if (ret < 0) {3140dev_err(dev, "Failed to apply cg patch\n");3141goto err_pm_put;3142}31433144/* register component */3145ret = devm_snd_soc_register_component(dev, &mtk_afe_pcm_platform,3146afe->dai_drivers, afe->num_dai_drivers);3147if (ret) {3148dev_warn(dev, "err_platform\n");3149goto err_pm_put;3150}31513152ret = regmap_multi_reg_write(afe->regmap, mt8195_afe_reg_defaults,3153ARRAY_SIZE(mt8195_afe_reg_defaults));3154if (ret)3155goto err_pm_put;31563157ret = pm_runtime_put_sync(dev);3158if (ret)3159return dev_err_probe(dev, ret, "Failed to suspend device\n");31603161afe_priv->pm_runtime_bypass_reg_ctl = false;31623163regcache_cache_only(afe->regmap, true);3164regcache_mark_dirty(afe->regmap);31653166return 0;31673168err_pm_put:3169pm_runtime_put_sync(dev);31703171return ret;3172}31733174static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)3175{3176if (!pm_runtime_status_suspended(&pdev->dev))3177mt8195_afe_runtime_suspend(&pdev->dev);3178}31793180static const struct of_device_id mt8195_afe_pcm_dt_match[] = {3181{.compatible = "mediatek,mt8195-audio", },3182{},3183};3184MODULE_DEVICE_TABLE(of, mt8195_afe_pcm_dt_match);31853186static const struct dev_pm_ops mt8195_afe_pm_ops = {3187RUNTIME_PM_OPS(mt8195_afe_runtime_suspend,3188mt8195_afe_runtime_resume, NULL)3189};31903191static struct platform_driver mt8195_afe_pcm_driver = {3192.driver = {3193.name = "mt8195-audio",3194.of_match_table = mt8195_afe_pcm_dt_match,3195.pm = pm_ptr(&mt8195_afe_pm_ops),3196},3197.probe = mt8195_afe_pcm_dev_probe,3198.remove = mt8195_afe_pcm_dev_remove,3199};32003201module_platform_driver(mt8195_afe_pcm_driver);32023203MODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8195");3204MODULE_AUTHOR("Bicycle Tsai <[email protected]>");3205MODULE_LICENSE("GPL v2");320632073208