Path: blob/master/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
26488 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 =1463snd_soc_kcontrol_component(kcontrol);1464struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1465struct mt8195_afe_private *afe_priv = afe->platform_priv;1466struct mtk_dai_memif_priv *memif_priv;1467unsigned int dai_id = kcontrol->id.device;1468long val = ucontrol->value.integer.value[0];1469int ret = 0;14701471memif_priv = afe_priv->dai_priv[dai_id];14721473if (val == memif_priv->asys_timing_sel)1474return 0;14751476ret = snd_soc_put_enum_double(kcontrol, ucontrol);14771478memif_priv->asys_timing_sel = val;14791480return ret;1481}14821483static int mt8195_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol,1484struct snd_ctl_elem_value *ucontrol)1485{1486struct snd_soc_component *component =1487snd_soc_kcontrol_component(kcontrol);1488struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);1489struct mt8195_afe_private *afe_priv = afe->platform_priv;1490unsigned int id = kcontrol->id.device;1491long val = ucontrol->value.integer.value[0];1492int ret = 0;14931494if (val == afe_priv->irq_priv[id].asys_timing_sel)1495return 0;14961497ret = snd_soc_put_enum_double(kcontrol, ucontrol);14981499afe_priv->irq_priv[id].asys_timing_sel = val;15001501return ret;1502}15031504static SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum,1505A3_A4_TIMING_SEL1, 18, 0x3,1506mt8195_afe_1x_en_sel_text,1507mt8195_afe_1x_en_sel_values);1508static SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum,1509A3_A4_TIMING_SEL1, 20, 0x3,1510mt8195_afe_1x_en_sel_text,1511mt8195_afe_1x_en_sel_values);1512static SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum,1513A3_A4_TIMING_SEL1, 22, 0x3,1514mt8195_afe_1x_en_sel_text,1515mt8195_afe_1x_en_sel_values);1516static SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum,1517A3_A4_TIMING_SEL1, 24, 0x3,1518mt8195_afe_1x_en_sel_text,1519mt8195_afe_1x_en_sel_values);1520static SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum,1521A3_A4_TIMING_SEL1, 26, 0x3,1522mt8195_afe_1x_en_sel_text,1523mt8195_afe_1x_en_sel_values);1524static SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum,1525A3_A4_TIMING_SEL1, 28, 0x3,1526mt8195_afe_1x_en_sel_text,1527mt8195_afe_1x_en_sel_values);1528static SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum,1529A3_A4_TIMING_SEL1, 30, 0x3,1530mt8195_afe_1x_en_sel_text,1531mt8195_afe_1x_en_sel_values);1532static SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum,1533A3_A4_TIMING_SEL1, 0, 0x3,1534mt8195_afe_1x_en_sel_text,1535mt8195_afe_1x_en_sel_values);1536static SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum,1537A3_A4_TIMING_SEL1, 2, 0x3,1538mt8195_afe_1x_en_sel_text,1539mt8195_afe_1x_en_sel_values);1540static SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum,1541A3_A4_TIMING_SEL1, 4, 0x3,1542mt8195_afe_1x_en_sel_text,1543mt8195_afe_1x_en_sel_values);1544static SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum,1545A3_A4_TIMING_SEL1, 6, 0x3,1546mt8195_afe_1x_en_sel_text,1547mt8195_afe_1x_en_sel_values);1548static SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum,1549A3_A4_TIMING_SEL1, 8, 0x3,1550mt8195_afe_1x_en_sel_text,1551mt8195_afe_1x_en_sel_values);1552static SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum,1553A3_A4_TIMING_SEL1, 10, 0x3,1554mt8195_afe_1x_en_sel_text,1555mt8195_afe_1x_en_sel_values);1556static SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum,1557A3_A4_TIMING_SEL1, 12, 0x3,1558mt8195_afe_1x_en_sel_text,1559mt8195_afe_1x_en_sel_values);1560static SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum,1561A3_A4_TIMING_SEL1, 14, 0x3,1562mt8195_afe_1x_en_sel_text,1563mt8195_afe_1x_en_sel_values);1564static SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum,1565A3_A4_TIMING_SEL1, 16, 0x3,1566mt8195_afe_1x_en_sel_text,1567mt8195_afe_1x_en_sel_values);15681569static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum,1570A3_A4_TIMING_SEL6, 0, 0x3,1571mt8195_afe_1x_en_sel_text,1572mt8195_afe_1x_en_sel_values);1573static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum,1574A3_A4_TIMING_SEL6, 2, 0x3,1575mt8195_afe_1x_en_sel_text,1576mt8195_afe_1x_en_sel_values);1577static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum,1578A3_A4_TIMING_SEL6, 4, 0x3,1579mt8195_afe_1x_en_sel_text,1580mt8195_afe_1x_en_sel_values);1581static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum,1582A3_A4_TIMING_SEL6, 6, 0x3,1583mt8195_afe_1x_en_sel_text,1584mt8195_afe_1x_en_sel_values);1585static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum,1586A3_A4_TIMING_SEL6, 8, 0x3,1587mt8195_afe_1x_en_sel_text,1588mt8195_afe_1x_en_sel_values);1589static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum,1590A3_A4_TIMING_SEL6, 10, 0x3,1591mt8195_afe_1x_en_sel_text,1592mt8195_afe_1x_en_sel_values);1593static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum,1594A3_A4_TIMING_SEL6, 12, 0x3,1595mt8195_afe_1x_en_sel_text,1596mt8195_afe_1x_en_sel_values);1597static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum,1598A3_A4_TIMING_SEL6, 14, 0x3,1599mt8195_afe_1x_en_sel_text,1600mt8195_afe_1x_en_sel_values);1601static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum,1602A3_A4_TIMING_SEL6, 16, 0x3,1603mt8195_afe_1x_en_sel_text,1604mt8195_afe_1x_en_sel_values);1605static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum,1606A3_A4_TIMING_SEL6, 18, 0x3,1607mt8195_afe_1x_en_sel_text,1608mt8195_afe_1x_en_sel_values);1609static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum,1610A3_A4_TIMING_SEL6, 20, 0x3,1611mt8195_afe_1x_en_sel_text,1612mt8195_afe_1x_en_sel_values);1613static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum,1614A3_A4_TIMING_SEL6, 22, 0x3,1615mt8195_afe_1x_en_sel_text,1616mt8195_afe_1x_en_sel_values);1617static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum,1618A3_A4_TIMING_SEL6, 24, 0x3,1619mt8195_afe_1x_en_sel_text,1620mt8195_afe_1x_en_sel_values);1621static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum,1622A3_A4_TIMING_SEL6, 26, 0x3,1623mt8195_afe_1x_en_sel_text,1624mt8195_afe_1x_en_sel_values);1625static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum,1626A3_A4_TIMING_SEL6, 28, 0x3,1627mt8195_afe_1x_en_sel_text,1628mt8195_afe_1x_en_sel_values);1629static SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum,1630A3_A4_TIMING_SEL6, 30, 0x3,1631mt8195_afe_1x_en_sel_text,1632mt8195_afe_1x_en_sel_values);16331634static const struct snd_kcontrol_new mt8195_memif_controls[] = {1635MT8195_SOC_ENUM_EXT("dl2_1x_en_sel",1636dl2_1x_en_sel_enum,1637snd_soc_get_enum_double,1638mt8195_memif_1x_en_sel_put,1639MT8195_AFE_MEMIF_DL2),1640MT8195_SOC_ENUM_EXT("dl3_1x_en_sel",1641dl3_1x_en_sel_enum,1642snd_soc_get_enum_double,1643mt8195_memif_1x_en_sel_put,1644MT8195_AFE_MEMIF_DL3),1645MT8195_SOC_ENUM_EXT("dl6_1x_en_sel",1646dl6_1x_en_sel_enum,1647snd_soc_get_enum_double,1648mt8195_memif_1x_en_sel_put,1649MT8195_AFE_MEMIF_DL6),1650MT8195_SOC_ENUM_EXT("dl7_1x_en_sel",1651dl7_1x_en_sel_enum,1652snd_soc_get_enum_double,1653mt8195_memif_1x_en_sel_put,1654MT8195_AFE_MEMIF_DL7),1655MT8195_SOC_ENUM_EXT("dl8_1x_en_sel",1656dl8_1x_en_sel_enum,1657snd_soc_get_enum_double,1658mt8195_memif_1x_en_sel_put,1659MT8195_AFE_MEMIF_DL8),1660MT8195_SOC_ENUM_EXT("dl10_1x_en_sel",1661dl10_1x_en_sel_enum,1662snd_soc_get_enum_double,1663mt8195_memif_1x_en_sel_put,1664MT8195_AFE_MEMIF_DL10),1665MT8195_SOC_ENUM_EXT("dl11_1x_en_sel",1666dl11_1x_en_sel_enum,1667snd_soc_get_enum_double,1668mt8195_memif_1x_en_sel_put,1669MT8195_AFE_MEMIF_DL11),1670MT8195_SOC_ENUM_EXT("ul1_1x_en_sel",1671ul1_1x_en_sel_enum,1672snd_soc_get_enum_double,1673mt8195_memif_1x_en_sel_put,1674MT8195_AFE_MEMIF_UL1),1675MT8195_SOC_ENUM_EXT("ul2_1x_en_sel",1676ul2_1x_en_sel_enum,1677snd_soc_get_enum_double,1678mt8195_memif_1x_en_sel_put,1679MT8195_AFE_MEMIF_UL2),1680MT8195_SOC_ENUM_EXT("ul3_1x_en_sel",1681ul3_1x_en_sel_enum,1682snd_soc_get_enum_double,1683mt8195_memif_1x_en_sel_put,1684MT8195_AFE_MEMIF_UL3),1685MT8195_SOC_ENUM_EXT("ul4_1x_en_sel",1686ul4_1x_en_sel_enum,1687snd_soc_get_enum_double,1688mt8195_memif_1x_en_sel_put,1689MT8195_AFE_MEMIF_UL4),1690MT8195_SOC_ENUM_EXT("ul5_1x_en_sel",1691ul5_1x_en_sel_enum,1692snd_soc_get_enum_double,1693mt8195_memif_1x_en_sel_put,1694MT8195_AFE_MEMIF_UL5),1695MT8195_SOC_ENUM_EXT("ul6_1x_en_sel",1696ul6_1x_en_sel_enum,1697snd_soc_get_enum_double,1698mt8195_memif_1x_en_sel_put,1699MT8195_AFE_MEMIF_UL6),1700MT8195_SOC_ENUM_EXT("ul8_1x_en_sel",1701ul8_1x_en_sel_enum,1702snd_soc_get_enum_double,1703mt8195_memif_1x_en_sel_put,1704MT8195_AFE_MEMIF_UL8),1705MT8195_SOC_ENUM_EXT("ul9_1x_en_sel",1706ul9_1x_en_sel_enum,1707snd_soc_get_enum_double,1708mt8195_memif_1x_en_sel_put,1709MT8195_AFE_MEMIF_UL9),1710MT8195_SOC_ENUM_EXT("ul10_1x_en_sel",1711ul10_1x_en_sel_enum,1712snd_soc_get_enum_double,1713mt8195_memif_1x_en_sel_put,1714MT8195_AFE_MEMIF_UL10),1715MT8195_SOC_ENUM_EXT("asys_irq1_1x_en_sel",1716asys_irq1_1x_en_sel_enum,1717snd_soc_get_enum_double,1718mt8195_asys_irq_1x_en_sel_put,1719MT8195_AFE_IRQ_13),1720MT8195_SOC_ENUM_EXT("asys_irq2_1x_en_sel",1721asys_irq2_1x_en_sel_enum,1722snd_soc_get_enum_double,1723mt8195_asys_irq_1x_en_sel_put,1724MT8195_AFE_IRQ_14),1725MT8195_SOC_ENUM_EXT("asys_irq3_1x_en_sel",1726asys_irq3_1x_en_sel_enum,1727snd_soc_get_enum_double,1728mt8195_asys_irq_1x_en_sel_put,1729MT8195_AFE_IRQ_15),1730MT8195_SOC_ENUM_EXT("asys_irq4_1x_en_sel",1731asys_irq4_1x_en_sel_enum,1732snd_soc_get_enum_double,1733mt8195_asys_irq_1x_en_sel_put,1734MT8195_AFE_IRQ_16),1735MT8195_SOC_ENUM_EXT("asys_irq5_1x_en_sel",1736asys_irq5_1x_en_sel_enum,1737snd_soc_get_enum_double,1738mt8195_asys_irq_1x_en_sel_put,1739MT8195_AFE_IRQ_17),1740MT8195_SOC_ENUM_EXT("asys_irq6_1x_en_sel",1741asys_irq6_1x_en_sel_enum,1742snd_soc_get_enum_double,1743mt8195_asys_irq_1x_en_sel_put,1744MT8195_AFE_IRQ_18),1745MT8195_SOC_ENUM_EXT("asys_irq7_1x_en_sel",1746asys_irq7_1x_en_sel_enum,1747snd_soc_get_enum_double,1748mt8195_asys_irq_1x_en_sel_put,1749MT8195_AFE_IRQ_19),1750MT8195_SOC_ENUM_EXT("asys_irq8_1x_en_sel",1751asys_irq8_1x_en_sel_enum,1752snd_soc_get_enum_double,1753mt8195_asys_irq_1x_en_sel_put,1754MT8195_AFE_IRQ_20),1755MT8195_SOC_ENUM_EXT("asys_irq9_1x_en_sel",1756asys_irq9_1x_en_sel_enum,1757snd_soc_get_enum_double,1758mt8195_asys_irq_1x_en_sel_put,1759MT8195_AFE_IRQ_21),1760MT8195_SOC_ENUM_EXT("asys_irq10_1x_en_sel",1761asys_irq10_1x_en_sel_enum,1762snd_soc_get_enum_double,1763mt8195_asys_irq_1x_en_sel_put,1764MT8195_AFE_IRQ_22),1765MT8195_SOC_ENUM_EXT("asys_irq11_1x_en_sel",1766asys_irq11_1x_en_sel_enum,1767snd_soc_get_enum_double,1768mt8195_asys_irq_1x_en_sel_put,1769MT8195_AFE_IRQ_23),1770MT8195_SOC_ENUM_EXT("asys_irq12_1x_en_sel",1771asys_irq12_1x_en_sel_enum,1772snd_soc_get_enum_double,1773mt8195_asys_irq_1x_en_sel_put,1774MT8195_AFE_IRQ_24),1775MT8195_SOC_ENUM_EXT("asys_irq13_1x_en_sel",1776asys_irq13_1x_en_sel_enum,1777snd_soc_get_enum_double,1778mt8195_asys_irq_1x_en_sel_put,1779MT8195_AFE_IRQ_25),1780MT8195_SOC_ENUM_EXT("asys_irq14_1x_en_sel",1781asys_irq14_1x_en_sel_enum,1782snd_soc_get_enum_double,1783mt8195_asys_irq_1x_en_sel_put,1784MT8195_AFE_IRQ_26),1785MT8195_SOC_ENUM_EXT("asys_irq15_1x_en_sel",1786asys_irq15_1x_en_sel_enum,1787snd_soc_get_enum_double,1788mt8195_asys_irq_1x_en_sel_put,1789MT8195_AFE_IRQ_27),1790MT8195_SOC_ENUM_EXT("asys_irq16_1x_en_sel",1791asys_irq16_1x_en_sel_enum,1792snd_soc_get_enum_double,1793mt8195_asys_irq_1x_en_sel_put,1794MT8195_AFE_IRQ_28),1795};17961797static const struct mtk_base_memif_data memif_data[MT8195_AFE_MEMIF_NUM] = {1798[MT8195_AFE_MEMIF_DL2] = {1799.name = "DL2",1800.id = MT8195_AFE_MEMIF_DL2,1801.reg_ofs_base = AFE_DL2_BASE,1802.reg_ofs_cur = AFE_DL2_CUR,1803.reg_ofs_end = AFE_DL2_END,1804.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1805.fs_shift = 10,1806.fs_maskbit = 0x1f,1807.mono_reg = -1,1808.mono_shift = 0,1809.int_odd_flag_reg = -1,1810.int_odd_flag_shift = 0,1811.enable_reg = AFE_DAC_CON0,1812.enable_shift = 18,1813.hd_reg = AFE_DL2_CON0,1814.hd_shift = 5,1815.agent_disable_reg = AUDIO_TOP_CON5,1816.agent_disable_shift = 18,1817.ch_num_reg = AFE_DL2_CON0,1818.ch_num_shift = 0,1819.ch_num_maskbit = 0x1f,1820.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1821.msb_shift = 18,1822.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1823.msb_end_shift = 18,1824},1825[MT8195_AFE_MEMIF_DL3] = {1826.name = "DL3",1827.id = MT8195_AFE_MEMIF_DL3,1828.reg_ofs_base = AFE_DL3_BASE,1829.reg_ofs_cur = AFE_DL3_CUR,1830.reg_ofs_end = AFE_DL3_END,1831.fs_reg = AFE_MEMIF_AGENT_FS_CON0,1832.fs_shift = 15,1833.fs_maskbit = 0x1f,1834.mono_reg = -1,1835.mono_shift = 0,1836.int_odd_flag_reg = -1,1837.int_odd_flag_shift = 0,1838.enable_reg = AFE_DAC_CON0,1839.enable_shift = 19,1840.hd_reg = AFE_DL3_CON0,1841.hd_shift = 5,1842.agent_disable_reg = AUDIO_TOP_CON5,1843.agent_disable_shift = 19,1844.ch_num_reg = AFE_DL3_CON0,1845.ch_num_shift = 0,1846.ch_num_maskbit = 0x1f,1847.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1848.msb_shift = 19,1849.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1850.msb_end_shift = 19,1851},1852[MT8195_AFE_MEMIF_DL6] = {1853.name = "DL6",1854.id = MT8195_AFE_MEMIF_DL6,1855.reg_ofs_base = AFE_DL6_BASE,1856.reg_ofs_cur = AFE_DL6_CUR,1857.reg_ofs_end = AFE_DL6_END,1858.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1859.fs_shift = 0,1860.fs_maskbit = 0x1f,1861.mono_reg = -1,1862.mono_shift = 0,1863.int_odd_flag_reg = -1,1864.int_odd_flag_shift = 0,1865.enable_reg = AFE_DAC_CON0,1866.enable_shift = 22,1867.hd_reg = AFE_DL6_CON0,1868.hd_shift = 5,1869.agent_disable_reg = AUDIO_TOP_CON5,1870.agent_disable_shift = 22,1871.ch_num_reg = AFE_DL6_CON0,1872.ch_num_shift = 0,1873.ch_num_maskbit = 0x1f,1874.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1875.msb_shift = 22,1876.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1877.msb_end_shift = 22,1878},1879[MT8195_AFE_MEMIF_DL7] = {1880.name = "DL7",1881.id = MT8195_AFE_MEMIF_DL7,1882.reg_ofs_base = AFE_DL7_BASE,1883.reg_ofs_cur = AFE_DL7_CUR,1884.reg_ofs_end = AFE_DL7_END,1885.fs_reg = -1,1886.fs_shift = 0,1887.fs_maskbit = 0,1888.mono_reg = -1,1889.mono_shift = 0,1890.int_odd_flag_reg = -1,1891.int_odd_flag_shift = 0,1892.enable_reg = AFE_DAC_CON0,1893.enable_shift = 23,1894.hd_reg = AFE_DL7_CON0,1895.hd_shift = 5,1896.agent_disable_reg = AUDIO_TOP_CON5,1897.agent_disable_shift = 23,1898.ch_num_reg = AFE_DL7_CON0,1899.ch_num_shift = 0,1900.ch_num_maskbit = 0x1f,1901.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1902.msb_shift = 23,1903.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1904.msb_end_shift = 23,1905},1906[MT8195_AFE_MEMIF_DL8] = {1907.name = "DL8",1908.id = MT8195_AFE_MEMIF_DL8,1909.reg_ofs_base = AFE_DL8_BASE,1910.reg_ofs_cur = AFE_DL8_CUR,1911.reg_ofs_end = AFE_DL8_END,1912.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1913.fs_shift = 10,1914.fs_maskbit = 0x1f,1915.mono_reg = -1,1916.mono_shift = 0,1917.int_odd_flag_reg = -1,1918.int_odd_flag_shift = 0,1919.enable_reg = AFE_DAC_CON0,1920.enable_shift = 24,1921.hd_reg = AFE_DL8_CON0,1922.hd_shift = 6,1923.agent_disable_reg = -1,1924.agent_disable_shift = 0,1925.ch_num_reg = AFE_DL8_CON0,1926.ch_num_shift = 0,1927.ch_num_maskbit = 0x3f,1928.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1929.msb_shift = 24,1930.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1931.msb_end_shift = 24,1932},1933[MT8195_AFE_MEMIF_DL10] = {1934.name = "DL10",1935.id = MT8195_AFE_MEMIF_DL10,1936.reg_ofs_base = AFE_DL10_BASE,1937.reg_ofs_cur = AFE_DL10_CUR,1938.reg_ofs_end = AFE_DL10_END,1939.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1940.fs_shift = 20,1941.fs_maskbit = 0x1f,1942.mono_reg = -1,1943.mono_shift = 0,1944.int_odd_flag_reg = -1,1945.int_odd_flag_shift = 0,1946.enable_reg = AFE_DAC_CON0,1947.enable_shift = 26,1948.hd_reg = AFE_DL10_CON0,1949.hd_shift = 5,1950.agent_disable_reg = -1,1951.agent_disable_shift = 0,1952.ch_num_reg = AFE_DL10_CON0,1953.ch_num_shift = 0,1954.ch_num_maskbit = 0x1f,1955.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1956.msb_shift = 26,1957.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1958.msb_end_shift = 26,1959},1960[MT8195_AFE_MEMIF_DL11] = {1961.name = "DL11",1962.id = MT8195_AFE_MEMIF_DL11,1963.reg_ofs_base = AFE_DL11_BASE,1964.reg_ofs_cur = AFE_DL11_CUR,1965.reg_ofs_end = AFE_DL11_END,1966.fs_reg = AFE_MEMIF_AGENT_FS_CON1,1967.fs_shift = 25,1968.fs_maskbit = 0x1f,1969.mono_reg = -1,1970.mono_shift = 0,1971.int_odd_flag_reg = -1,1972.int_odd_flag_shift = 0,1973.enable_reg = AFE_DAC_CON0,1974.enable_shift = 27,1975.hd_reg = AFE_DL11_CON0,1976.hd_shift = 7,1977.agent_disable_reg = AUDIO_TOP_CON5,1978.agent_disable_shift = 27,1979.ch_num_reg = AFE_DL11_CON0,1980.ch_num_shift = 0,1981.ch_num_maskbit = 0x7f,1982.msb_reg = AFE_NORMAL_BASE_ADR_MSB,1983.msb_shift = 27,1984.msb_end_reg = AFE_NORMAL_END_ADR_MSB,1985.msb_end_shift = 27,1986},1987[MT8195_AFE_MEMIF_UL1] = {1988.name = "UL1",1989.id = MT8195_AFE_MEMIF_UL1,1990.reg_ofs_base = AFE_UL1_BASE,1991.reg_ofs_cur = AFE_UL1_CUR,1992.reg_ofs_end = AFE_UL1_END,1993.fs_reg = -1,1994.fs_shift = 0,1995.fs_maskbit = 0,1996.mono_reg = AFE_UL1_CON0,1997.mono_shift = 1,1998.int_odd_flag_reg = AFE_UL1_CON0,1999.int_odd_flag_shift = 0,2000.enable_reg = AFE_DAC_CON0,2001.enable_shift = 1,2002.hd_reg = AFE_UL1_CON0,2003.hd_shift = 5,2004.agent_disable_reg = AUDIO_TOP_CON5,2005.agent_disable_shift = 0,2006.ch_num_reg = -1,2007.ch_num_shift = 0,2008.ch_num_maskbit = 0,2009.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2010.msb_shift = 0,2011.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2012.msb_end_shift = 0,2013},2014[MT8195_AFE_MEMIF_UL2] = {2015.name = "UL2",2016.id = MT8195_AFE_MEMIF_UL2,2017.reg_ofs_base = AFE_UL2_BASE,2018.reg_ofs_cur = AFE_UL2_CUR,2019.reg_ofs_end = AFE_UL2_END,2020.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2021.fs_shift = 5,2022.fs_maskbit = 0x1f,2023.mono_reg = AFE_UL2_CON0,2024.mono_shift = 1,2025.int_odd_flag_reg = AFE_UL2_CON0,2026.int_odd_flag_shift = 0,2027.enable_reg = AFE_DAC_CON0,2028.enable_shift = 2,2029.hd_reg = AFE_UL2_CON0,2030.hd_shift = 5,2031.agent_disable_reg = AUDIO_TOP_CON5,2032.agent_disable_shift = 1,2033.ch_num_reg = -1,2034.ch_num_shift = 0,2035.ch_num_maskbit = 0,2036.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2037.msb_shift = 1,2038.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2039.msb_end_shift = 1,2040},2041[MT8195_AFE_MEMIF_UL3] = {2042.name = "UL3",2043.id = MT8195_AFE_MEMIF_UL3,2044.reg_ofs_base = AFE_UL3_BASE,2045.reg_ofs_cur = AFE_UL3_CUR,2046.reg_ofs_end = AFE_UL3_END,2047.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2048.fs_shift = 10,2049.fs_maskbit = 0x1f,2050.mono_reg = AFE_UL3_CON0,2051.mono_shift = 1,2052.int_odd_flag_reg = AFE_UL3_CON0,2053.int_odd_flag_shift = 0,2054.enable_reg = AFE_DAC_CON0,2055.enable_shift = 3,2056.hd_reg = AFE_UL3_CON0,2057.hd_shift = 5,2058.agent_disable_reg = AUDIO_TOP_CON5,2059.agent_disable_shift = 2,2060.ch_num_reg = -1,2061.ch_num_shift = 0,2062.ch_num_maskbit = 0,2063.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2064.msb_shift = 2,2065.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2066.msb_end_shift = 2,2067},2068[MT8195_AFE_MEMIF_UL4] = {2069.name = "UL4",2070.id = MT8195_AFE_MEMIF_UL4,2071.reg_ofs_base = AFE_UL4_BASE,2072.reg_ofs_cur = AFE_UL4_CUR,2073.reg_ofs_end = AFE_UL4_END,2074.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2075.fs_shift = 15,2076.fs_maskbit = 0x1f,2077.mono_reg = AFE_UL4_CON0,2078.mono_shift = 1,2079.int_odd_flag_reg = AFE_UL4_CON0,2080.int_odd_flag_shift = 0,2081.enable_reg = AFE_DAC_CON0,2082.enable_shift = 4,2083.hd_reg = AFE_UL4_CON0,2084.hd_shift = 5,2085.agent_disable_reg = AUDIO_TOP_CON5,2086.agent_disable_shift = 3,2087.ch_num_reg = -1,2088.ch_num_shift = 0,2089.ch_num_maskbit = 0,2090.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2091.msb_shift = 3,2092.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2093.msb_end_shift = 3,2094},2095[MT8195_AFE_MEMIF_UL5] = {2096.name = "UL5",2097.id = MT8195_AFE_MEMIF_UL5,2098.reg_ofs_base = AFE_UL5_BASE,2099.reg_ofs_cur = AFE_UL5_CUR,2100.reg_ofs_end = AFE_UL5_END,2101.fs_reg = AFE_MEMIF_AGENT_FS_CON2,2102.fs_shift = 20,2103.fs_maskbit = 0x1f,2104.mono_reg = AFE_UL5_CON0,2105.mono_shift = 1,2106.int_odd_flag_reg = AFE_UL5_CON0,2107.int_odd_flag_shift = 0,2108.enable_reg = AFE_DAC_CON0,2109.enable_shift = 5,2110.hd_reg = AFE_UL5_CON0,2111.hd_shift = 5,2112.agent_disable_reg = AUDIO_TOP_CON5,2113.agent_disable_shift = 4,2114.ch_num_reg = -1,2115.ch_num_shift = 0,2116.ch_num_maskbit = 0,2117.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2118.msb_shift = 4,2119.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2120.msb_end_shift = 4,2121},2122[MT8195_AFE_MEMIF_UL6] = {2123.name = "UL6",2124.id = MT8195_AFE_MEMIF_UL6,2125.reg_ofs_base = AFE_UL6_BASE,2126.reg_ofs_cur = AFE_UL6_CUR,2127.reg_ofs_end = AFE_UL6_END,2128.fs_reg = -1,2129.fs_shift = 0,2130.fs_maskbit = 0,2131.mono_reg = AFE_UL6_CON0,2132.mono_shift = 1,2133.int_odd_flag_reg = AFE_UL6_CON0,2134.int_odd_flag_shift = 0,2135.enable_reg = AFE_DAC_CON0,2136.enable_shift = 6,2137.hd_reg = AFE_UL6_CON0,2138.hd_shift = 5,2139.agent_disable_reg = AUDIO_TOP_CON5,2140.agent_disable_shift = 5,2141.ch_num_reg = -1,2142.ch_num_shift = 0,2143.ch_num_maskbit = 0,2144.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2145.msb_shift = 5,2146.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2147.msb_end_shift = 5,2148},2149[MT8195_AFE_MEMIF_UL8] = {2150.name = "UL8",2151.id = MT8195_AFE_MEMIF_UL8,2152.reg_ofs_base = AFE_UL8_BASE,2153.reg_ofs_cur = AFE_UL8_CUR,2154.reg_ofs_end = AFE_UL8_END,2155.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2156.fs_shift = 5,2157.fs_maskbit = 0x1f,2158.mono_reg = AFE_UL8_CON0,2159.mono_shift = 1,2160.int_odd_flag_reg = AFE_UL8_CON0,2161.int_odd_flag_shift = 0,2162.enable_reg = AFE_DAC_CON0,2163.enable_shift = 8,2164.hd_reg = AFE_UL8_CON0,2165.hd_shift = 5,2166.agent_disable_reg = AUDIO_TOP_CON5,2167.agent_disable_shift = 7,2168.ch_num_reg = -1,2169.ch_num_shift = 0,2170.ch_num_maskbit = 0,2171.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2172.msb_shift = 7,2173.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2174.msb_end_shift = 7,2175},2176[MT8195_AFE_MEMIF_UL9] = {2177.name = "UL9",2178.id = MT8195_AFE_MEMIF_UL9,2179.reg_ofs_base = AFE_UL9_BASE,2180.reg_ofs_cur = AFE_UL9_CUR,2181.reg_ofs_end = AFE_UL9_END,2182.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2183.fs_shift = 10,2184.fs_maskbit = 0x1f,2185.mono_reg = AFE_UL9_CON0,2186.mono_shift = 1,2187.int_odd_flag_reg = AFE_UL9_CON0,2188.int_odd_flag_shift = 0,2189.enable_reg = AFE_DAC_CON0,2190.enable_shift = 9,2191.hd_reg = AFE_UL9_CON0,2192.hd_shift = 5,2193.agent_disable_reg = AUDIO_TOP_CON5,2194.agent_disable_shift = 8,2195.ch_num_reg = -1,2196.ch_num_shift = 0,2197.ch_num_maskbit = 0,2198.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2199.msb_shift = 8,2200.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2201.msb_end_shift = 8,2202},2203[MT8195_AFE_MEMIF_UL10] = {2204.name = "UL10",2205.id = MT8195_AFE_MEMIF_UL10,2206.reg_ofs_base = AFE_UL10_BASE,2207.reg_ofs_cur = AFE_UL10_CUR,2208.reg_ofs_end = AFE_UL10_END,2209.fs_reg = AFE_MEMIF_AGENT_FS_CON3,2210.fs_shift = 15,2211.fs_maskbit = 0x1f,2212.mono_reg = AFE_UL10_CON0,2213.mono_shift = 1,2214.int_odd_flag_reg = AFE_UL10_CON0,2215.int_odd_flag_shift = 0,2216.enable_reg = AFE_DAC_CON0,2217.enable_shift = 10,2218.hd_reg = AFE_UL10_CON0,2219.hd_shift = 5,2220.agent_disable_reg = AUDIO_TOP_CON5,2221.agent_disable_shift = 9,2222.ch_num_reg = -1,2223.ch_num_shift = 0,2224.ch_num_maskbit = 0,2225.msb_reg = AFE_NORMAL_BASE_ADR_MSB,2226.msb_shift = 9,2227.msb_end_reg = AFE_NORMAL_END_ADR_MSB,2228.msb_end_shift = 9,2229},2230};22312232static const struct mtk_base_irq_data irq_data_array[MT8195_AFE_IRQ_NUM] = {2233[MT8195_AFE_IRQ_1] = {2234.id = MT8195_AFE_IRQ_1,2235.irq_cnt_reg = -1,2236.irq_cnt_shift = 0,2237.irq_cnt_maskbit = 0,2238.irq_fs_reg = -1,2239.irq_fs_shift = 0,2240.irq_fs_maskbit = 0,2241.irq_en_reg = AFE_IRQ1_CON,2242.irq_en_shift = 31,2243.irq_clr_reg = AFE_IRQ_MCU_CLR,2244.irq_clr_shift = 0,2245.irq_status_shift = 16,2246},2247[MT8195_AFE_IRQ_2] = {2248.id = MT8195_AFE_IRQ_2,2249.irq_cnt_reg = -1,2250.irq_cnt_shift = 0,2251.irq_cnt_maskbit = 0,2252.irq_fs_reg = -1,2253.irq_fs_shift = 0,2254.irq_fs_maskbit = 0,2255.irq_en_reg = AFE_IRQ2_CON,2256.irq_en_shift = 31,2257.irq_clr_reg = AFE_IRQ_MCU_CLR,2258.irq_clr_shift = 1,2259.irq_status_shift = 17,2260},2261[MT8195_AFE_IRQ_3] = {2262.id = MT8195_AFE_IRQ_3,2263.irq_cnt_reg = AFE_IRQ3_CON,2264.irq_cnt_shift = 0,2265.irq_cnt_maskbit = 0xffffff,2266.irq_fs_reg = -1,2267.irq_fs_shift = 0,2268.irq_fs_maskbit = 0,2269.irq_en_reg = AFE_IRQ3_CON,2270.irq_en_shift = 31,2271.irq_clr_reg = AFE_IRQ_MCU_CLR,2272.irq_clr_shift = 2,2273.irq_status_shift = 18,2274},2275[MT8195_AFE_IRQ_8] = {2276.id = MT8195_AFE_IRQ_8,2277.irq_cnt_reg = -1,2278.irq_cnt_shift = 0,2279.irq_cnt_maskbit = 0,2280.irq_fs_reg = -1,2281.irq_fs_shift = 0,2282.irq_fs_maskbit = 0,2283.irq_en_reg = AFE_IRQ8_CON,2284.irq_en_shift = 31,2285.irq_clr_reg = AFE_IRQ_MCU_CLR,2286.irq_clr_shift = 7,2287.irq_status_shift = 23,2288},2289[MT8195_AFE_IRQ_9] = {2290.id = MT8195_AFE_IRQ_9,2291.irq_cnt_reg = AFE_IRQ9_CON,2292.irq_cnt_shift = 0,2293.irq_cnt_maskbit = 0xffffff,2294.irq_fs_reg = -1,2295.irq_fs_shift = 0,2296.irq_fs_maskbit = 0,2297.irq_en_reg = AFE_IRQ9_CON,2298.irq_en_shift = 31,2299.irq_clr_reg = AFE_IRQ_MCU_CLR,2300.irq_clr_shift = 8,2301.irq_status_shift = 24,2302},2303[MT8195_AFE_IRQ_10] = {2304.id = MT8195_AFE_IRQ_10,2305.irq_cnt_reg = -1,2306.irq_cnt_shift = 0,2307.irq_cnt_maskbit = 0,2308.irq_fs_reg = -1,2309.irq_fs_shift = 0,2310.irq_fs_maskbit = 0,2311.irq_en_reg = AFE_IRQ10_CON,2312.irq_en_shift = 31,2313.irq_clr_reg = AFE_IRQ_MCU_CLR,2314.irq_clr_shift = 9,2315.irq_status_shift = 25,2316},2317[MT8195_AFE_IRQ_13] = {2318.id = MT8195_AFE_IRQ_13,2319.irq_cnt_reg = ASYS_IRQ1_CON,2320.irq_cnt_shift = 0,2321.irq_cnt_maskbit = 0xffffff,2322.irq_fs_reg = ASYS_IRQ1_CON,2323.irq_fs_shift = 24,2324.irq_fs_maskbit = 0x1ffff,2325.irq_en_reg = ASYS_IRQ1_CON,2326.irq_en_shift = 31,2327.irq_clr_reg = ASYS_IRQ_CLR,2328.irq_clr_shift = 0,2329.irq_status_shift = 0,2330},2331[MT8195_AFE_IRQ_14] = {2332.id = MT8195_AFE_IRQ_14,2333.irq_cnt_reg = ASYS_IRQ2_CON,2334.irq_cnt_shift = 0,2335.irq_cnt_maskbit = 0xffffff,2336.irq_fs_reg = ASYS_IRQ2_CON,2337.irq_fs_shift = 24,2338.irq_fs_maskbit = 0x1ffff,2339.irq_en_reg = ASYS_IRQ2_CON,2340.irq_en_shift = 31,2341.irq_clr_reg = ASYS_IRQ_CLR,2342.irq_clr_shift = 1,2343.irq_status_shift = 1,2344},2345[MT8195_AFE_IRQ_15] = {2346.id = MT8195_AFE_IRQ_15,2347.irq_cnt_reg = ASYS_IRQ3_CON,2348.irq_cnt_shift = 0,2349.irq_cnt_maskbit = 0xffffff,2350.irq_fs_reg = ASYS_IRQ3_CON,2351.irq_fs_shift = 24,2352.irq_fs_maskbit = 0x1ffff,2353.irq_en_reg = ASYS_IRQ3_CON,2354.irq_en_shift = 31,2355.irq_clr_reg = ASYS_IRQ_CLR,2356.irq_clr_shift = 2,2357.irq_status_shift = 2,2358},2359[MT8195_AFE_IRQ_16] = {2360.id = MT8195_AFE_IRQ_16,2361.irq_cnt_reg = ASYS_IRQ4_CON,2362.irq_cnt_shift = 0,2363.irq_cnt_maskbit = 0xffffff,2364.irq_fs_reg = ASYS_IRQ4_CON,2365.irq_fs_shift = 24,2366.irq_fs_maskbit = 0x1ffff,2367.irq_en_reg = ASYS_IRQ4_CON,2368.irq_en_shift = 31,2369.irq_clr_reg = ASYS_IRQ_CLR,2370.irq_clr_shift = 3,2371.irq_status_shift = 3,2372},2373[MT8195_AFE_IRQ_17] = {2374.id = MT8195_AFE_IRQ_17,2375.irq_cnt_reg = ASYS_IRQ5_CON,2376.irq_cnt_shift = 0,2377.irq_cnt_maskbit = 0xffffff,2378.irq_fs_reg = ASYS_IRQ5_CON,2379.irq_fs_shift = 24,2380.irq_fs_maskbit = 0x1ffff,2381.irq_en_reg = ASYS_IRQ5_CON,2382.irq_en_shift = 31,2383.irq_clr_reg = ASYS_IRQ_CLR,2384.irq_clr_shift = 4,2385.irq_status_shift = 4,2386},2387[MT8195_AFE_IRQ_18] = {2388.id = MT8195_AFE_IRQ_18,2389.irq_cnt_reg = ASYS_IRQ6_CON,2390.irq_cnt_shift = 0,2391.irq_cnt_maskbit = 0xffffff,2392.irq_fs_reg = ASYS_IRQ6_CON,2393.irq_fs_shift = 24,2394.irq_fs_maskbit = 0x1ffff,2395.irq_en_reg = ASYS_IRQ6_CON,2396.irq_en_shift = 31,2397.irq_clr_reg = ASYS_IRQ_CLR,2398.irq_clr_shift = 5,2399.irq_status_shift = 5,2400},2401[MT8195_AFE_IRQ_19] = {2402.id = MT8195_AFE_IRQ_19,2403.irq_cnt_reg = ASYS_IRQ7_CON,2404.irq_cnt_shift = 0,2405.irq_cnt_maskbit = 0xffffff,2406.irq_fs_reg = ASYS_IRQ7_CON,2407.irq_fs_shift = 24,2408.irq_fs_maskbit = 0x1ffff,2409.irq_en_reg = ASYS_IRQ7_CON,2410.irq_en_shift = 31,2411.irq_clr_reg = ASYS_IRQ_CLR,2412.irq_clr_shift = 6,2413.irq_status_shift = 6,2414},2415[MT8195_AFE_IRQ_20] = {2416.id = MT8195_AFE_IRQ_20,2417.irq_cnt_reg = ASYS_IRQ8_CON,2418.irq_cnt_shift = 0,2419.irq_cnt_maskbit = 0xffffff,2420.irq_fs_reg = ASYS_IRQ8_CON,2421.irq_fs_shift = 24,2422.irq_fs_maskbit = 0x1ffff,2423.irq_en_reg = ASYS_IRQ8_CON,2424.irq_en_shift = 31,2425.irq_clr_reg = ASYS_IRQ_CLR,2426.irq_clr_shift = 7,2427.irq_status_shift = 7,2428},2429[MT8195_AFE_IRQ_21] = {2430.id = MT8195_AFE_IRQ_21,2431.irq_cnt_reg = ASYS_IRQ9_CON,2432.irq_cnt_shift = 0,2433.irq_cnt_maskbit = 0xffffff,2434.irq_fs_reg = ASYS_IRQ9_CON,2435.irq_fs_shift = 24,2436.irq_fs_maskbit = 0x1ffff,2437.irq_en_reg = ASYS_IRQ9_CON,2438.irq_en_shift = 31,2439.irq_clr_reg = ASYS_IRQ_CLR,2440.irq_clr_shift = 8,2441.irq_status_shift = 8,2442},2443[MT8195_AFE_IRQ_22] = {2444.id = MT8195_AFE_IRQ_22,2445.irq_cnt_reg = ASYS_IRQ10_CON,2446.irq_cnt_shift = 0,2447.irq_cnt_maskbit = 0xffffff,2448.irq_fs_reg = ASYS_IRQ10_CON,2449.irq_fs_shift = 24,2450.irq_fs_maskbit = 0x1ffff,2451.irq_en_reg = ASYS_IRQ10_CON,2452.irq_en_shift = 31,2453.irq_clr_reg = ASYS_IRQ_CLR,2454.irq_clr_shift = 9,2455.irq_status_shift = 9,2456},2457[MT8195_AFE_IRQ_23] = {2458.id = MT8195_AFE_IRQ_23,2459.irq_cnt_reg = ASYS_IRQ11_CON,2460.irq_cnt_shift = 0,2461.irq_cnt_maskbit = 0xffffff,2462.irq_fs_reg = ASYS_IRQ11_CON,2463.irq_fs_shift = 24,2464.irq_fs_maskbit = 0x1ffff,2465.irq_en_reg = ASYS_IRQ11_CON,2466.irq_en_shift = 31,2467.irq_clr_reg = ASYS_IRQ_CLR,2468.irq_clr_shift = 10,2469.irq_status_shift = 10,2470},2471[MT8195_AFE_IRQ_24] = {2472.id = MT8195_AFE_IRQ_24,2473.irq_cnt_reg = ASYS_IRQ12_CON,2474.irq_cnt_shift = 0,2475.irq_cnt_maskbit = 0xffffff,2476.irq_fs_reg = ASYS_IRQ12_CON,2477.irq_fs_shift = 24,2478.irq_fs_maskbit = 0x1ffff,2479.irq_en_reg = ASYS_IRQ12_CON,2480.irq_en_shift = 31,2481.irq_clr_reg = ASYS_IRQ_CLR,2482.irq_clr_shift = 11,2483.irq_status_shift = 11,2484},2485[MT8195_AFE_IRQ_25] = {2486.id = MT8195_AFE_IRQ_25,2487.irq_cnt_reg = ASYS_IRQ13_CON,2488.irq_cnt_shift = 0,2489.irq_cnt_maskbit = 0xffffff,2490.irq_fs_reg = ASYS_IRQ13_CON,2491.irq_fs_shift = 24,2492.irq_fs_maskbit = 0x1ffff,2493.irq_en_reg = ASYS_IRQ13_CON,2494.irq_en_shift = 31,2495.irq_clr_reg = ASYS_IRQ_CLR,2496.irq_clr_shift = 12,2497.irq_status_shift = 12,2498},2499[MT8195_AFE_IRQ_26] = {2500.id = MT8195_AFE_IRQ_26,2501.irq_cnt_reg = ASYS_IRQ14_CON,2502.irq_cnt_shift = 0,2503.irq_cnt_maskbit = 0xffffff,2504.irq_fs_reg = ASYS_IRQ14_CON,2505.irq_fs_shift = 24,2506.irq_fs_maskbit = 0x1ffff,2507.irq_en_reg = ASYS_IRQ14_CON,2508.irq_en_shift = 31,2509.irq_clr_reg = ASYS_IRQ_CLR,2510.irq_clr_shift = 13,2511.irq_status_shift = 13,2512},2513[MT8195_AFE_IRQ_27] = {2514.id = MT8195_AFE_IRQ_27,2515.irq_cnt_reg = ASYS_IRQ15_CON,2516.irq_cnt_shift = 0,2517.irq_cnt_maskbit = 0xffffff,2518.irq_fs_reg = ASYS_IRQ15_CON,2519.irq_fs_shift = 24,2520.irq_fs_maskbit = 0x1ffff,2521.irq_en_reg = ASYS_IRQ15_CON,2522.irq_en_shift = 31,2523.irq_clr_reg = ASYS_IRQ_CLR,2524.irq_clr_shift = 14,2525.irq_status_shift = 14,2526},2527[MT8195_AFE_IRQ_28] = {2528.id = MT8195_AFE_IRQ_28,2529.irq_cnt_reg = ASYS_IRQ16_CON,2530.irq_cnt_shift = 0,2531.irq_cnt_maskbit = 0xffffff,2532.irq_fs_reg = ASYS_IRQ16_CON,2533.irq_fs_shift = 24,2534.irq_fs_maskbit = 0x1ffff,2535.irq_en_reg = ASYS_IRQ16_CON,2536.irq_en_shift = 31,2537.irq_clr_reg = ASYS_IRQ_CLR,2538.irq_clr_shift = 15,2539.irq_status_shift = 15,2540},2541};25422543static const int mt8195_afe_memif_const_irqs[MT8195_AFE_MEMIF_NUM] = {2544[MT8195_AFE_MEMIF_DL2] = MT8195_AFE_IRQ_13,2545[MT8195_AFE_MEMIF_DL3] = MT8195_AFE_IRQ_14,2546[MT8195_AFE_MEMIF_DL6] = MT8195_AFE_IRQ_15,2547[MT8195_AFE_MEMIF_DL7] = MT8195_AFE_IRQ_1,2548[MT8195_AFE_MEMIF_DL8] = MT8195_AFE_IRQ_16,2549[MT8195_AFE_MEMIF_DL10] = MT8195_AFE_IRQ_17,2550[MT8195_AFE_MEMIF_DL11] = MT8195_AFE_IRQ_18,2551[MT8195_AFE_MEMIF_UL1] = MT8195_AFE_IRQ_3,2552[MT8195_AFE_MEMIF_UL2] = MT8195_AFE_IRQ_19,2553[MT8195_AFE_MEMIF_UL3] = MT8195_AFE_IRQ_20,2554[MT8195_AFE_MEMIF_UL4] = MT8195_AFE_IRQ_21,2555[MT8195_AFE_MEMIF_UL5] = MT8195_AFE_IRQ_22,2556[MT8195_AFE_MEMIF_UL6] = MT8195_AFE_IRQ_9,2557[MT8195_AFE_MEMIF_UL8] = MT8195_AFE_IRQ_23,2558[MT8195_AFE_MEMIF_UL9] = MT8195_AFE_IRQ_24,2559[MT8195_AFE_MEMIF_UL10] = MT8195_AFE_IRQ_25,2560};25612562static bool mt8195_is_volatile_reg(struct device *dev, unsigned int reg)2563{2564/* these auto-gen reg has read-only bit, so put it as volatile */2565/* volatile reg cannot be cached, so cannot be set when power off */2566switch (reg) {2567case AUDIO_TOP_CON0:2568case AUDIO_TOP_CON1:2569case AUDIO_TOP_CON3:2570case AUDIO_TOP_CON4:2571case AUDIO_TOP_CON5:2572case AUDIO_TOP_CON6:2573case ASYS_IRQ_CLR:2574case ASYS_IRQ_STATUS:2575case ASYS_IRQ_MON1:2576case ASYS_IRQ_MON2:2577case AFE_IRQ_MCU_CLR:2578case AFE_IRQ_STATUS:2579case AFE_IRQ3_CON_MON:2580case AFE_IRQ_MCU_MON2:2581case ADSP_IRQ_STATUS:2582case AUDIO_TOP_STA0:2583case AUDIO_TOP_STA1:2584case AFE_GAIN1_CUR:2585case AFE_GAIN2_CUR:2586case AFE_IEC_BURST_INFO:2587case AFE_IEC_CHL_STAT0:2588case AFE_IEC_CHL_STAT1:2589case AFE_IEC_CHR_STAT0:2590case AFE_IEC_CHR_STAT1:2591case AFE_SPDIFIN_CHSTS1:2592case AFE_SPDIFIN_CHSTS2:2593case AFE_SPDIFIN_CHSTS3:2594case AFE_SPDIFIN_CHSTS4:2595case AFE_SPDIFIN_CHSTS5:2596case AFE_SPDIFIN_CHSTS6:2597case AFE_SPDIFIN_DEBUG1:2598case AFE_SPDIFIN_DEBUG2:2599case AFE_SPDIFIN_DEBUG3:2600case AFE_SPDIFIN_DEBUG4:2601case AFE_SPDIFIN_EC:2602case AFE_SPDIFIN_CKLOCK_CFG:2603case AFE_SPDIFIN_BR_DBG1:2604case AFE_SPDIFIN_CKFBDIV:2605case AFE_SPDIFIN_INT_EXT:2606case AFE_SPDIFIN_INT_EXT2:2607case SPDIFIN_FREQ_STATUS:2608case SPDIFIN_USERCODE1:2609case SPDIFIN_USERCODE2:2610case SPDIFIN_USERCODE3:2611case SPDIFIN_USERCODE4:2612case SPDIFIN_USERCODE5:2613case SPDIFIN_USERCODE6:2614case SPDIFIN_USERCODE7:2615case SPDIFIN_USERCODE8:2616case SPDIFIN_USERCODE9:2617case SPDIFIN_USERCODE10:2618case SPDIFIN_USERCODE11:2619case SPDIFIN_USERCODE12:2620case AFE_LINEIN_APLL_TUNER_MON:2621case AFE_EARC_APLL_TUNER_MON:2622case AFE_CM0_MON:2623case AFE_CM1_MON:2624case AFE_CM2_MON:2625case AFE_MPHONE_MULTI_DET_MON0:2626case AFE_MPHONE_MULTI_DET_MON1:2627case AFE_MPHONE_MULTI_DET_MON2:2628case AFE_MPHONE_MULTI2_DET_MON0:2629case AFE_MPHONE_MULTI2_DET_MON1:2630case AFE_MPHONE_MULTI2_DET_MON2:2631case AFE_ADDA_MTKAIF_MON0:2632case AFE_ADDA_MTKAIF_MON1:2633case AFE_AUD_PAD_TOP:2634case AFE_ADDA6_MTKAIF_MON0:2635case AFE_ADDA6_MTKAIF_MON1:2636case AFE_ADDA6_SRC_DEBUG_MON0:2637case AFE_ADDA6_UL_SRC_MON0:2638case AFE_ADDA6_UL_SRC_MON1:2639case AFE_ASRC11_NEW_CON8:2640case AFE_ASRC11_NEW_CON9:2641case AFE_ASRC12_NEW_CON8:2642case AFE_ASRC12_NEW_CON9:2643case AFE_LRCK_CNT:2644case AFE_DAC_MON0:2645case AFE_DL2_CUR:2646case AFE_DL3_CUR:2647case AFE_DL6_CUR:2648case AFE_DL7_CUR:2649case AFE_DL8_CUR:2650case AFE_DL10_CUR:2651case AFE_DL11_CUR:2652case AFE_UL1_CUR:2653case AFE_UL2_CUR:2654case AFE_UL3_CUR:2655case AFE_UL4_CUR:2656case AFE_UL5_CUR:2657case AFE_UL6_CUR:2658case AFE_UL8_CUR:2659case AFE_UL9_CUR:2660case AFE_UL10_CUR:2661case AFE_DL8_CHK_SUM1:2662case AFE_DL8_CHK_SUM2:2663case AFE_DL8_CHK_SUM3:2664case AFE_DL8_CHK_SUM4:2665case AFE_DL8_CHK_SUM5:2666case AFE_DL8_CHK_SUM6:2667case AFE_DL10_CHK_SUM1:2668case AFE_DL10_CHK_SUM2:2669case AFE_DL10_CHK_SUM3:2670case AFE_DL10_CHK_SUM4:2671case AFE_DL10_CHK_SUM5:2672case AFE_DL10_CHK_SUM6:2673case AFE_DL11_CHK_SUM1:2674case AFE_DL11_CHK_SUM2:2675case AFE_DL11_CHK_SUM3:2676case AFE_DL11_CHK_SUM4:2677case AFE_DL11_CHK_SUM5:2678case AFE_DL11_CHK_SUM6:2679case AFE_UL1_CHK_SUM1:2680case AFE_UL1_CHK_SUM2:2681case AFE_UL2_CHK_SUM1:2682case AFE_UL2_CHK_SUM2:2683case AFE_UL3_CHK_SUM1:2684case AFE_UL3_CHK_SUM2:2685case AFE_UL4_CHK_SUM1:2686case AFE_UL4_CHK_SUM2:2687case AFE_UL5_CHK_SUM1:2688case AFE_UL5_CHK_SUM2:2689case AFE_UL6_CHK_SUM1:2690case AFE_UL6_CHK_SUM2:2691case AFE_UL8_CHK_SUM1:2692case AFE_UL8_CHK_SUM2:2693case AFE_DL2_CHK_SUM1:2694case AFE_DL2_CHK_SUM2:2695case AFE_DL3_CHK_SUM1:2696case AFE_DL3_CHK_SUM2:2697case AFE_DL6_CHK_SUM1:2698case AFE_DL6_CHK_SUM2:2699case AFE_DL7_CHK_SUM1:2700case AFE_DL7_CHK_SUM2:2701case AFE_UL9_CHK_SUM1:2702case AFE_UL9_CHK_SUM2:2703case AFE_BUS_MON1:2704case UL1_MOD2AGT_CNT_LAT:2705case UL2_MOD2AGT_CNT_LAT:2706case UL3_MOD2AGT_CNT_LAT:2707case UL4_MOD2AGT_CNT_LAT:2708case UL5_MOD2AGT_CNT_LAT:2709case UL6_MOD2AGT_CNT_LAT:2710case UL8_MOD2AGT_CNT_LAT:2711case UL9_MOD2AGT_CNT_LAT:2712case UL10_MOD2AGT_CNT_LAT:2713case AFE_MEMIF_BUF_FULL_MON:2714case AFE_MEMIF_BUF_MON1:2715case AFE_MEMIF_BUF_MON3:2716case AFE_MEMIF_BUF_MON4:2717case AFE_MEMIF_BUF_MON5:2718case AFE_MEMIF_BUF_MON6:2719case AFE_MEMIF_BUF_MON7:2720case AFE_MEMIF_BUF_MON8:2721case AFE_MEMIF_BUF_MON9:2722case AFE_MEMIF_BUF_MON10:2723case DL2_AGENT2MODULE_CNT:2724case DL3_AGENT2MODULE_CNT:2725case DL6_AGENT2MODULE_CNT:2726case DL7_AGENT2MODULE_CNT:2727case DL8_AGENT2MODULE_CNT:2728case DL10_AGENT2MODULE_CNT:2729case DL11_AGENT2MODULE_CNT:2730case UL1_MODULE2AGENT_CNT:2731case UL2_MODULE2AGENT_CNT:2732case UL3_MODULE2AGENT_CNT:2733case UL4_MODULE2AGENT_CNT:2734case UL5_MODULE2AGENT_CNT:2735case UL6_MODULE2AGENT_CNT:2736case UL8_MODULE2AGENT_CNT:2737case UL9_MODULE2AGENT_CNT:2738case UL10_MODULE2AGENT_CNT:2739case AFE_DMIC0_SRC_DEBUG_MON0:2740case AFE_DMIC0_UL_SRC_MON0:2741case AFE_DMIC0_UL_SRC_MON1:2742case AFE_DMIC1_SRC_DEBUG_MON0:2743case AFE_DMIC1_UL_SRC_MON0:2744case AFE_DMIC1_UL_SRC_MON1:2745case AFE_DMIC2_SRC_DEBUG_MON0:2746case AFE_DMIC2_UL_SRC_MON0:2747case AFE_DMIC2_UL_SRC_MON1:2748case AFE_DMIC3_SRC_DEBUG_MON0:2749case AFE_DMIC3_UL_SRC_MON0:2750case AFE_DMIC3_UL_SRC_MON1:2751case DMIC_GAIN1_CUR:2752case DMIC_GAIN2_CUR:2753case DMIC_GAIN3_CUR:2754case DMIC_GAIN4_CUR:2755case ETDM_IN1_MONITOR:2756case ETDM_IN2_MONITOR:2757case ETDM_OUT1_MONITOR:2758case ETDM_OUT2_MONITOR:2759case ETDM_OUT3_MONITOR:2760case AFE_ADDA_SRC_DEBUG_MON0:2761case AFE_ADDA_SRC_DEBUG_MON1:2762case AFE_ADDA_DL_SDM_FIFO_MON:2763case AFE_ADDA_DL_SRC_LCH_MON:2764case AFE_ADDA_DL_SRC_RCH_MON:2765case AFE_ADDA_DL_SDM_OUT_MON:2766case AFE_GASRC0_NEW_CON8:2767case AFE_GASRC0_NEW_CON9:2768case AFE_GASRC0_NEW_CON12:2769case AFE_GASRC1_NEW_CON8:2770case AFE_GASRC1_NEW_CON9:2771case AFE_GASRC1_NEW_CON12:2772case AFE_GASRC2_NEW_CON8:2773case AFE_GASRC2_NEW_CON9:2774case AFE_GASRC2_NEW_CON12:2775case AFE_GASRC3_NEW_CON8:2776case AFE_GASRC3_NEW_CON9:2777case AFE_GASRC3_NEW_CON12:2778case AFE_GASRC4_NEW_CON8:2779case AFE_GASRC4_NEW_CON9:2780case AFE_GASRC4_NEW_CON12:2781case AFE_GASRC5_NEW_CON8:2782case AFE_GASRC5_NEW_CON9:2783case AFE_GASRC5_NEW_CON12:2784case AFE_GASRC6_NEW_CON8:2785case AFE_GASRC6_NEW_CON9:2786case AFE_GASRC6_NEW_CON12:2787case AFE_GASRC7_NEW_CON8:2788case AFE_GASRC7_NEW_CON9:2789case AFE_GASRC7_NEW_CON12:2790case AFE_GASRC8_NEW_CON8:2791case AFE_GASRC8_NEW_CON9:2792case AFE_GASRC8_NEW_CON12:2793case AFE_GASRC9_NEW_CON8:2794case AFE_GASRC9_NEW_CON9:2795case AFE_GASRC9_NEW_CON12:2796case AFE_GASRC10_NEW_CON8:2797case AFE_GASRC10_NEW_CON9:2798case AFE_GASRC10_NEW_CON12:2799case AFE_GASRC11_NEW_CON8:2800case AFE_GASRC11_NEW_CON9:2801case AFE_GASRC11_NEW_CON12:2802case AFE_GASRC12_NEW_CON8:2803case AFE_GASRC12_NEW_CON9:2804case AFE_GASRC12_NEW_CON12:2805case AFE_GASRC13_NEW_CON8:2806case AFE_GASRC13_NEW_CON9:2807case AFE_GASRC13_NEW_CON12:2808case AFE_GASRC14_NEW_CON8:2809case AFE_GASRC14_NEW_CON9:2810case AFE_GASRC14_NEW_CON12:2811case AFE_GASRC15_NEW_CON8:2812case AFE_GASRC15_NEW_CON9:2813case AFE_GASRC15_NEW_CON12:2814case AFE_GASRC16_NEW_CON8:2815case AFE_GASRC16_NEW_CON9:2816case AFE_GASRC16_NEW_CON12:2817case AFE_GASRC17_NEW_CON8:2818case AFE_GASRC17_NEW_CON9:2819case AFE_GASRC17_NEW_CON12:2820case AFE_GASRC18_NEW_CON8:2821case AFE_GASRC18_NEW_CON9:2822case AFE_GASRC18_NEW_CON12:2823case AFE_GASRC19_NEW_CON8:2824case AFE_GASRC19_NEW_CON9:2825case AFE_GASRC19_NEW_CON12:2826return true;2827default:2828return false;2829};2830}28312832static const struct regmap_config mt8195_afe_regmap_config = {2833.reg_bits = 32,2834.reg_stride = 4,2835.val_bits = 32,2836.volatile_reg = mt8195_is_volatile_reg,2837.max_register = AFE_MAX_REGISTER,2838.num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1),2839.cache_type = REGCACHE_FLAT,2840};28412842#define AFE_IRQ_CLR_BITS (0x387)2843#define ASYS_IRQ_CLR_BITS (0xffff)28442845static irqreturn_t mt8195_afe_irq_handler(int irq_id, void *dev_id)2846{2847struct mtk_base_afe *afe = dev_id;2848unsigned int val = 0;2849unsigned int asys_irq_clr_bits = 0;2850unsigned int afe_irq_clr_bits = 0;2851unsigned int irq_status_bits = 0;2852unsigned int irq_clr_bits = 0;2853unsigned int mcu_irq_mask = 0;2854int i = 0;2855int ret = 0;28562857ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val);2858if (ret) {2859dev_info(afe->dev, "%s irq status err\n", __func__);2860afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2861asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2862goto err_irq;2863}28642865ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask);2866if (ret) {2867dev_info(afe->dev, "%s read irq mask err\n", __func__);2868afe_irq_clr_bits = AFE_IRQ_CLR_BITS;2869asys_irq_clr_bits = ASYS_IRQ_CLR_BITS;2870goto err_irq;2871}28722873/* only clr cpu irq */2874val &= mcu_irq_mask;28752876for (i = 0; i < MT8195_AFE_MEMIF_NUM; i++) {2877struct mtk_base_afe_memif *memif = &afe->memif[i];2878struct mtk_base_irq_data const *irq_data;28792880if (memif->irq_usage < 0)2881continue;28822883irq_data = afe->irqs[memif->irq_usage].irq_data;28842885irq_status_bits = BIT(irq_data->irq_status_shift);2886irq_clr_bits = BIT(irq_data->irq_clr_shift);28872888if (!(val & irq_status_bits))2889continue;28902891if (irq_data->irq_clr_reg == ASYS_IRQ_CLR)2892asys_irq_clr_bits |= irq_clr_bits;2893else2894afe_irq_clr_bits |= irq_clr_bits;28952896snd_pcm_period_elapsed(memif->substream);2897}28982899err_irq:2900/* clear irq */2901if (asys_irq_clr_bits)2902regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits);2903if (afe_irq_clr_bits)2904regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits);29052906return IRQ_HANDLED;2907}29082909static int mt8195_afe_runtime_suspend(struct device *dev)2910{2911struct mtk_base_afe *afe = dev_get_drvdata(dev);2912struct mt8195_afe_private *afe_priv = afe->platform_priv;29132914if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)2915goto skip_regmap;29162917mt8195_afe_disable_main_clock(afe);29182919regcache_cache_only(afe->regmap, true);2920regcache_mark_dirty(afe->regmap);29212922skip_regmap:2923mt8195_afe_disable_reg_rw_clk(afe);29242925return 0;2926}29272928static int mt8195_afe_runtime_resume(struct device *dev)2929{2930struct mtk_base_afe *afe = dev_get_drvdata(dev);2931struct mt8195_afe_private *afe_priv = afe->platform_priv;29322933mt8195_afe_enable_reg_rw_clk(afe);29342935if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl)2936goto skip_regmap;29372938regcache_cache_only(afe->regmap, false);2939regcache_sync(afe->regmap);29402941mt8195_afe_enable_main_clock(afe);2942skip_regmap:2943return 0;2944}29452946static int init_memif_priv_data(struct mtk_base_afe *afe)2947{2948struct mt8195_afe_private *afe_priv = afe->platform_priv;2949struct mtk_dai_memif_priv *memif_priv;2950int i;29512952for (i = MT8195_AFE_MEMIF_START; i < MT8195_AFE_MEMIF_END; i++) {2953memif_priv = devm_kzalloc(afe->dev,2954sizeof(struct mtk_dai_memif_priv),2955GFP_KERNEL);2956if (!memif_priv)2957return -ENOMEM;29582959afe_priv->dai_priv[i] = memif_priv;2960}29612962return 0;2963}29642965static int mt8195_dai_memif_register(struct mtk_base_afe *afe)2966{2967struct mtk_base_afe_dai *dai;29682969dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);2970if (!dai)2971return -ENOMEM;29722973list_add(&dai->list, &afe->sub_dais);29742975dai->dai_drivers = mt8195_memif_dai_driver;2976dai->num_dai_drivers = ARRAY_SIZE(mt8195_memif_dai_driver);29772978dai->dapm_widgets = mt8195_memif_widgets;2979dai->num_dapm_widgets = ARRAY_SIZE(mt8195_memif_widgets);2980dai->dapm_routes = mt8195_memif_routes;2981dai->num_dapm_routes = ARRAY_SIZE(mt8195_memif_routes);2982dai->controls = mt8195_memif_controls;2983dai->num_controls = ARRAY_SIZE(mt8195_memif_controls);29842985return init_memif_priv_data(afe);2986}29872988typedef int (*dai_register_cb)(struct mtk_base_afe *);2989static const dai_register_cb dai_register_cbs[] = {2990mt8195_dai_adda_register,2991mt8195_dai_etdm_register,2992mt8195_dai_pcm_register,2993mt8195_dai_memif_register,2994};29952996static const struct reg_sequence mt8195_afe_reg_defaults[] = {2997{ AFE_IRQ_MASK, 0x387ffff },2998{ AFE_IRQ3_CON, BIT(30) },2999{ AFE_IRQ9_CON, BIT(30) },3000{ ETDM_IN1_CON4, 0x12000100 },3001{ ETDM_IN2_CON4, 0x12000100 },3002};30033004static const struct reg_sequence mt8195_cg_patch[] = {3005{ AUDIO_TOP_CON0, 0xfffffffb },3006{ AUDIO_TOP_CON1, 0xfffffff8 },3007};30083009static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)3010{3011struct mtk_base_afe *afe;3012struct mt8195_afe_private *afe_priv;3013struct device *dev = &pdev->dev;3014struct reset_control *rstc;3015int i, irq_id, ret;30163017ret = of_reserved_mem_device_init(dev);3018if (ret)3019return dev_err_probe(dev, ret, "failed to assign memory region\n");30203021ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(33));3022if (ret)3023return ret;30243025afe = devm_kzalloc(dev, sizeof(*afe), GFP_KERNEL);3026if (!afe)3027return -ENOMEM;30283029afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv),3030GFP_KERNEL);3031if (!afe->platform_priv)3032return -ENOMEM;30333034afe_priv = afe->platform_priv;3035afe->dev = &pdev->dev;30363037afe->base_addr = devm_platform_ioremap_resource(pdev, 0);3038if (IS_ERR(afe->base_addr))3039return PTR_ERR(afe->base_addr);30403041/* initial audio related clock */3042ret = mt8195_afe_init_clock(afe);3043if (ret)3044return dev_err_probe(dev, ret, "init clock error\n");30453046/* reset controller to reset audio regs before regmap cache */3047rstc = devm_reset_control_get_exclusive(dev, "audiosys");3048if (IS_ERR(rstc))3049return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n");30503051ret = reset_control_reset(rstc);3052if (ret)3053return dev_err_probe(dev, ret, "failed to trigger audio reset\n");30543055spin_lock_init(&afe_priv->afe_ctrl_lock);30563057mutex_init(&afe->irq_alloc_lock);30583059/* irq initialize */3060afe->irqs_size = MT8195_AFE_IRQ_NUM;3061afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs),3062GFP_KERNEL);3063if (!afe->irqs)3064return -ENOMEM;30653066for (i = 0; i < afe->irqs_size; i++)3067afe->irqs[i].irq_data = &irq_data_array[i];30683069/* init memif */3070afe->memif_size = MT8195_AFE_MEMIF_NUM;3071afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif),3072GFP_KERNEL);3073if (!afe->memif)3074return -ENOMEM;30753076for (i = 0; i < afe->memif_size; i++) {3077afe->memif[i].data = &memif_data[i];3078afe->memif[i].irq_usage = mt8195_afe_memif_const_irqs[i];3079afe->memif[i].const_irq = 1;3080afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true;3081}30823083/* request irq */3084irq_id = platform_get_irq(pdev, 0);3085if (irq_id < 0)3086return -ENXIO;30873088ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler,3089IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);3090if (ret)3091return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");30923093/* init sub_dais */3094INIT_LIST_HEAD(&afe->sub_dais);30953096for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {3097ret = dai_register_cbs[i](afe);3098if (ret)3099return dev_err_probe(dev, ret, "dai cb%i register fail\n", i);3100}31013102/* init dai_driver and component_driver */3103ret = mtk_afe_combine_sub_dai(afe);3104if (ret)3105return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");31063107afe->mtk_afe_hardware = &mt8195_afe_hardware;3108afe->memif_fs = mt8195_memif_fs;3109afe->irq_fs = mt8195_irq_fs;31103111afe->runtime_resume = mt8195_afe_runtime_resume;3112afe->runtime_suspend = mt8195_afe_runtime_suspend;31133114platform_set_drvdata(pdev, afe);31153116afe_priv->topckgen = syscon_regmap_lookup_by_phandle(dev->of_node, "mediatek,topckgen");3117if (IS_ERR(afe_priv->topckgen))3118dev_dbg(afe->dev, "Cannot find topckgen controller: %ld\n",3119PTR_ERR(afe_priv->topckgen));31203121/* enable clock for regcache get default value from hw */3122afe_priv->pm_runtime_bypass_reg_ctl = true;31233124ret = devm_pm_runtime_enable(dev);3125if (ret)3126return ret;31273128ret = pm_runtime_resume_and_get(dev);3129if (ret)3130return dev_err_probe(dev, ret, "Failed to resume device\n");31313132afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,3133&mt8195_afe_regmap_config);3134if (IS_ERR(afe->regmap)) {3135ret = PTR_ERR(afe->regmap);3136goto err_pm_put;3137}31383139ret = regmap_register_patch(afe->regmap, mt8195_cg_patch,3140ARRAY_SIZE(mt8195_cg_patch));3141if (ret < 0) {3142dev_err(dev, "Failed to apply cg patch\n");3143goto err_pm_put;3144}31453146/* register component */3147ret = devm_snd_soc_register_component(dev, &mtk_afe_pcm_platform,3148afe->dai_drivers, afe->num_dai_drivers);3149if (ret) {3150dev_warn(dev, "err_platform\n");3151goto err_pm_put;3152}31533154ret = regmap_multi_reg_write(afe->regmap, mt8195_afe_reg_defaults,3155ARRAY_SIZE(mt8195_afe_reg_defaults));3156if (ret)3157goto err_pm_put;31583159ret = pm_runtime_put_sync(dev);3160if (ret)3161return dev_err_probe(dev, ret, "Failed to suspend device\n");31623163afe_priv->pm_runtime_bypass_reg_ctl = false;31643165regcache_cache_only(afe->regmap, true);3166regcache_mark_dirty(afe->regmap);31673168return 0;31693170err_pm_put:3171pm_runtime_put_sync(dev);31723173return ret;3174}31753176static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)3177{3178pm_runtime_disable(&pdev->dev);3179if (!pm_runtime_status_suspended(&pdev->dev))3180mt8195_afe_runtime_suspend(&pdev->dev);3181}31823183static const struct of_device_id mt8195_afe_pcm_dt_match[] = {3184{.compatible = "mediatek,mt8195-audio", },3185{},3186};3187MODULE_DEVICE_TABLE(of, mt8195_afe_pcm_dt_match);31883189static const struct dev_pm_ops mt8195_afe_pm_ops = {3190RUNTIME_PM_OPS(mt8195_afe_runtime_suspend,3191mt8195_afe_runtime_resume, NULL)3192};31933194static struct platform_driver mt8195_afe_pcm_driver = {3195.driver = {3196.name = "mt8195-audio",3197.of_match_table = mt8195_afe_pcm_dt_match,3198.pm = pm_ptr(&mt8195_afe_pm_ops),3199},3200.probe = mt8195_afe_pcm_dev_probe,3201.remove = mt8195_afe_pcm_dev_remove,3202};32033204module_platform_driver(mt8195_afe_pcm_driver);32053206MODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8195");3207MODULE_AUTHOR("Bicycle Tsai <[email protected]>");3208MODULE_LICENSE("GPL v2");320932103211