162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Mediatek ALSA SoC AFE platform driver for 8195 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2021 MediaTek Inc. 662306a36Sopenharmony_ci * Author: Bicycle Tsai <bicycle.tsai@mediatek.com> 762306a36Sopenharmony_ci * Trevor Wu <trevor.wu@mediatek.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/delay.h> 1162306a36Sopenharmony_ci#include <linux/dma-mapping.h> 1262306a36Sopenharmony_ci#include <linux/module.h> 1362306a36Sopenharmony_ci#include <linux/mfd/syscon.h> 1462306a36Sopenharmony_ci#include <linux/of.h> 1562306a36Sopenharmony_ci#include <linux/of_address.h> 1662306a36Sopenharmony_ci#include <linux/of_platform.h> 1762306a36Sopenharmony_ci#include <linux/of_reserved_mem.h> 1862306a36Sopenharmony_ci#include <linux/pm_runtime.h> 1962306a36Sopenharmony_ci#include <linux/reset.h> 2062306a36Sopenharmony_ci#include "mt8195-afe-common.h" 2162306a36Sopenharmony_ci#include "mt8195-afe-clk.h" 2262306a36Sopenharmony_ci#include "mt8195-reg.h" 2362306a36Sopenharmony_ci#include "../common/mtk-afe-platform-driver.h" 2462306a36Sopenharmony_ci#include "../common/mtk-afe-fe-dai.h" 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define MT8195_MEMIF_BUFFER_BYTES_ALIGN (0x40) 2762306a36Sopenharmony_ci#define MT8195_MEMIF_DL7_MAX_PERIOD_SIZE (0x3fff) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistruct mtk_dai_memif_priv { 3062306a36Sopenharmony_ci unsigned int asys_timing_sel; 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic const struct snd_pcm_hardware mt8195_afe_hardware = { 3462306a36Sopenharmony_ci .info = SNDRV_PCM_INFO_MMAP | 3562306a36Sopenharmony_ci SNDRV_PCM_INFO_INTERLEAVED | 3662306a36Sopenharmony_ci SNDRV_PCM_INFO_MMAP_VALID, 3762306a36Sopenharmony_ci .formats = SNDRV_PCM_FMTBIT_S16_LE | 3862306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S24_LE | 3962306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S32_LE, 4062306a36Sopenharmony_ci .period_bytes_min = 64, 4162306a36Sopenharmony_ci .period_bytes_max = 256 * 1024, 4262306a36Sopenharmony_ci .periods_min = 2, 4362306a36Sopenharmony_ci .periods_max = 256, 4462306a36Sopenharmony_ci .buffer_bytes_max = 256 * 2 * 1024, 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistruct mt8195_afe_rate { 4862306a36Sopenharmony_ci unsigned int rate; 4962306a36Sopenharmony_ci unsigned int reg_value; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistatic const struct mt8195_afe_rate mt8195_afe_rates[] = { 5362306a36Sopenharmony_ci { .rate = 8000, .reg_value = 0, }, 5462306a36Sopenharmony_ci { .rate = 12000, .reg_value = 1, }, 5562306a36Sopenharmony_ci { .rate = 16000, .reg_value = 2, }, 5662306a36Sopenharmony_ci { .rate = 24000, .reg_value = 3, }, 5762306a36Sopenharmony_ci { .rate = 32000, .reg_value = 4, }, 5862306a36Sopenharmony_ci { .rate = 48000, .reg_value = 5, }, 5962306a36Sopenharmony_ci { .rate = 96000, .reg_value = 6, }, 6062306a36Sopenharmony_ci { .rate = 192000, .reg_value = 7, }, 6162306a36Sopenharmony_ci { .rate = 384000, .reg_value = 8, }, 6262306a36Sopenharmony_ci { .rate = 7350, .reg_value = 16, }, 6362306a36Sopenharmony_ci { .rate = 11025, .reg_value = 17, }, 6462306a36Sopenharmony_ci { .rate = 14700, .reg_value = 18, }, 6562306a36Sopenharmony_ci { .rate = 22050, .reg_value = 19, }, 6662306a36Sopenharmony_ci { .rate = 29400, .reg_value = 20, }, 6762306a36Sopenharmony_ci { .rate = 44100, .reg_value = 21, }, 6862306a36Sopenharmony_ci { .rate = 88200, .reg_value = 22, }, 6962306a36Sopenharmony_ci { .rate = 176400, .reg_value = 23, }, 7062306a36Sopenharmony_ci { .rate = 352800, .reg_value = 24, }, 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ciint mt8195_afe_fs_timing(unsigned int rate) 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci int i; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(mt8195_afe_rates); i++) 7862306a36Sopenharmony_ci if (mt8195_afe_rates[i].rate == rate) 7962306a36Sopenharmony_ci return mt8195_afe_rates[i].reg_value; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci return -EINVAL; 8262306a36Sopenharmony_ci} 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistatic int mt8195_memif_fs(struct snd_pcm_substream *substream, 8562306a36Sopenharmony_ci unsigned int rate) 8662306a36Sopenharmony_ci{ 8762306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 8862306a36Sopenharmony_ci struct snd_soc_component *component = 8962306a36Sopenharmony_ci snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME); 9062306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); 9162306a36Sopenharmony_ci int id = asoc_rtd_to_cpu(rtd, 0)->id; 9262306a36Sopenharmony_ci struct mtk_base_afe_memif *memif = &afe->memif[id]; 9362306a36Sopenharmony_ci int fs = mt8195_afe_fs_timing(rate); 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci switch (memif->data->id) { 9662306a36Sopenharmony_ci case MT8195_AFE_MEMIF_DL10: 9762306a36Sopenharmony_ci fs = MT8195_ETDM_OUT3_1X_EN; 9862306a36Sopenharmony_ci break; 9962306a36Sopenharmony_ci case MT8195_AFE_MEMIF_UL8: 10062306a36Sopenharmony_ci fs = MT8195_ETDM_IN1_NX_EN; 10162306a36Sopenharmony_ci break; 10262306a36Sopenharmony_ci case MT8195_AFE_MEMIF_UL3: 10362306a36Sopenharmony_ci fs = MT8195_ETDM_IN2_NX_EN; 10462306a36Sopenharmony_ci break; 10562306a36Sopenharmony_ci default: 10662306a36Sopenharmony_ci break; 10762306a36Sopenharmony_ci } 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci return fs; 11062306a36Sopenharmony_ci} 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_cistatic int mt8195_irq_fs(struct snd_pcm_substream *substream, 11362306a36Sopenharmony_ci unsigned int rate) 11462306a36Sopenharmony_ci{ 11562306a36Sopenharmony_ci int fs = mt8195_memif_fs(substream, rate); 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci switch (fs) { 11862306a36Sopenharmony_ci case MT8195_ETDM_IN1_NX_EN: 11962306a36Sopenharmony_ci fs = MT8195_ETDM_IN1_1X_EN; 12062306a36Sopenharmony_ci break; 12162306a36Sopenharmony_ci case MT8195_ETDM_IN2_NX_EN: 12262306a36Sopenharmony_ci fs = MT8195_ETDM_IN2_1X_EN; 12362306a36Sopenharmony_ci break; 12462306a36Sopenharmony_ci default: 12562306a36Sopenharmony_ci break; 12662306a36Sopenharmony_ci } 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci return fs; 12962306a36Sopenharmony_ci} 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cienum { 13262306a36Sopenharmony_ci MT8195_AFE_CM0, 13362306a36Sopenharmony_ci MT8195_AFE_CM1, 13462306a36Sopenharmony_ci MT8195_AFE_CM2, 13562306a36Sopenharmony_ci MT8195_AFE_CM_NUM, 13662306a36Sopenharmony_ci}; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_cistruct mt8195_afe_channel_merge { 13962306a36Sopenharmony_ci int id; 14062306a36Sopenharmony_ci int reg; 14162306a36Sopenharmony_ci unsigned int sel_shift; 14262306a36Sopenharmony_ci unsigned int sel_maskbit; 14362306a36Sopenharmony_ci unsigned int sel_default; 14462306a36Sopenharmony_ci unsigned int ch_num_shift; 14562306a36Sopenharmony_ci unsigned int ch_num_maskbit; 14662306a36Sopenharmony_ci unsigned int en_shift; 14762306a36Sopenharmony_ci unsigned int en_maskbit; 14862306a36Sopenharmony_ci unsigned int update_cnt_shift; 14962306a36Sopenharmony_ci unsigned int update_cnt_maskbit; 15062306a36Sopenharmony_ci unsigned int update_cnt_default; 15162306a36Sopenharmony_ci}; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_cistatic const struct mt8195_afe_channel_merge 15462306a36Sopenharmony_ci mt8195_afe_cm[MT8195_AFE_CM_NUM] = { 15562306a36Sopenharmony_ci [MT8195_AFE_CM0] = { 15662306a36Sopenharmony_ci .id = MT8195_AFE_CM0, 15762306a36Sopenharmony_ci .reg = AFE_CM0_CON, 15862306a36Sopenharmony_ci .sel_shift = 30, 15962306a36Sopenharmony_ci .sel_maskbit = 0x1, 16062306a36Sopenharmony_ci .sel_default = 1, 16162306a36Sopenharmony_ci .ch_num_shift = 2, 16262306a36Sopenharmony_ci .ch_num_maskbit = 0x3f, 16362306a36Sopenharmony_ci .en_shift = 0, 16462306a36Sopenharmony_ci .en_maskbit = 0x1, 16562306a36Sopenharmony_ci .update_cnt_shift = 16, 16662306a36Sopenharmony_ci .update_cnt_maskbit = 0x1fff, 16762306a36Sopenharmony_ci .update_cnt_default = 0x3, 16862306a36Sopenharmony_ci }, 16962306a36Sopenharmony_ci [MT8195_AFE_CM1] = { 17062306a36Sopenharmony_ci .id = MT8195_AFE_CM1, 17162306a36Sopenharmony_ci .reg = AFE_CM1_CON, 17262306a36Sopenharmony_ci .sel_shift = 30, 17362306a36Sopenharmony_ci .sel_maskbit = 0x1, 17462306a36Sopenharmony_ci .sel_default = 1, 17562306a36Sopenharmony_ci .ch_num_shift = 2, 17662306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 17762306a36Sopenharmony_ci .en_shift = 0, 17862306a36Sopenharmony_ci .en_maskbit = 0x1, 17962306a36Sopenharmony_ci .update_cnt_shift = 16, 18062306a36Sopenharmony_ci .update_cnt_maskbit = 0x1fff, 18162306a36Sopenharmony_ci .update_cnt_default = 0x3, 18262306a36Sopenharmony_ci }, 18362306a36Sopenharmony_ci [MT8195_AFE_CM2] = { 18462306a36Sopenharmony_ci .id = MT8195_AFE_CM2, 18562306a36Sopenharmony_ci .reg = AFE_CM2_CON, 18662306a36Sopenharmony_ci .sel_shift = 30, 18762306a36Sopenharmony_ci .sel_maskbit = 0x1, 18862306a36Sopenharmony_ci .sel_default = 1, 18962306a36Sopenharmony_ci .ch_num_shift = 2, 19062306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 19162306a36Sopenharmony_ci .en_shift = 0, 19262306a36Sopenharmony_ci .en_maskbit = 0x1, 19362306a36Sopenharmony_ci .update_cnt_shift = 16, 19462306a36Sopenharmony_ci .update_cnt_maskbit = 0x1fff, 19562306a36Sopenharmony_ci .update_cnt_default = 0x3, 19662306a36Sopenharmony_ci }, 19762306a36Sopenharmony_ci}; 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_cistatic int mt8195_afe_memif_is_ul(int id) 20062306a36Sopenharmony_ci{ 20162306a36Sopenharmony_ci if (id >= MT8195_AFE_MEMIF_UL_START && id < MT8195_AFE_MEMIF_END) 20262306a36Sopenharmony_ci return 1; 20362306a36Sopenharmony_ci else 20462306a36Sopenharmony_ci return 0; 20562306a36Sopenharmony_ci} 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_cistatic const struct mt8195_afe_channel_merge* 20862306a36Sopenharmony_cimt8195_afe_found_cm(struct snd_soc_dai *dai) 20962306a36Sopenharmony_ci{ 21062306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 21162306a36Sopenharmony_ci int id = -EINVAL; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci if (mt8195_afe_memif_is_ul(dai->id) == 0) 21462306a36Sopenharmony_ci return NULL; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci switch (dai->id) { 21762306a36Sopenharmony_ci case MT8195_AFE_MEMIF_UL9: 21862306a36Sopenharmony_ci id = MT8195_AFE_CM0; 21962306a36Sopenharmony_ci break; 22062306a36Sopenharmony_ci case MT8195_AFE_MEMIF_UL2: 22162306a36Sopenharmony_ci id = MT8195_AFE_CM1; 22262306a36Sopenharmony_ci break; 22362306a36Sopenharmony_ci case MT8195_AFE_MEMIF_UL10: 22462306a36Sopenharmony_ci id = MT8195_AFE_CM2; 22562306a36Sopenharmony_ci break; 22662306a36Sopenharmony_ci default: 22762306a36Sopenharmony_ci break; 22862306a36Sopenharmony_ci } 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci if (id < 0) { 23162306a36Sopenharmony_ci dev_dbg(afe->dev, "%s, memif %d cannot find CM!\n", 23262306a36Sopenharmony_ci __func__, dai->id); 23362306a36Sopenharmony_ci return NULL; 23462306a36Sopenharmony_ci } 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci return &mt8195_afe_cm[id]; 23762306a36Sopenharmony_ci} 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cistatic int mt8195_afe_config_cm(struct mtk_base_afe *afe, 24062306a36Sopenharmony_ci const struct mt8195_afe_channel_merge *cm, 24162306a36Sopenharmony_ci unsigned int channels) 24262306a36Sopenharmony_ci{ 24362306a36Sopenharmony_ci if (!cm) 24462306a36Sopenharmony_ci return -EINVAL; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 24762306a36Sopenharmony_ci cm->reg, 24862306a36Sopenharmony_ci cm->sel_maskbit << cm->sel_shift, 24962306a36Sopenharmony_ci cm->sel_default << cm->sel_shift); 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 25262306a36Sopenharmony_ci cm->reg, 25362306a36Sopenharmony_ci cm->ch_num_maskbit << cm->ch_num_shift, 25462306a36Sopenharmony_ci (channels - 1) << cm->ch_num_shift); 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 25762306a36Sopenharmony_ci cm->reg, 25862306a36Sopenharmony_ci cm->update_cnt_maskbit << cm->update_cnt_shift, 25962306a36Sopenharmony_ci cm->update_cnt_default << cm->update_cnt_shift); 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci return 0; 26262306a36Sopenharmony_ci} 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cistatic int mt8195_afe_enable_cm(struct mtk_base_afe *afe, 26562306a36Sopenharmony_ci const struct mt8195_afe_channel_merge *cm, 26662306a36Sopenharmony_ci bool enable) 26762306a36Sopenharmony_ci{ 26862306a36Sopenharmony_ci if (!cm) 26962306a36Sopenharmony_ci return -EINVAL; 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 27262306a36Sopenharmony_ci cm->reg, 27362306a36Sopenharmony_ci cm->en_maskbit << cm->en_shift, 27462306a36Sopenharmony_ci enable << cm->en_shift); 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci return 0; 27762306a36Sopenharmony_ci} 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_cistatic int 28062306a36Sopenharmony_cimt8195_afe_paired_memif_clk_prepare(struct snd_pcm_substream *substream, 28162306a36Sopenharmony_ci struct snd_soc_dai *dai, 28262306a36Sopenharmony_ci int enable) 28362306a36Sopenharmony_ci{ 28462306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 28562306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 28662306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 28762306a36Sopenharmony_ci int id = asoc_rtd_to_cpu(rtd, 0)->id; 28862306a36Sopenharmony_ci int clk_id; 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci if (id != MT8195_AFE_MEMIF_DL8 && id != MT8195_AFE_MEMIF_DL10) 29162306a36Sopenharmony_ci return 0; 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci if (enable) { 29462306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL10; 29562306a36Sopenharmony_ci mt8195_afe_prepare_clk(afe, afe_priv->clk[clk_id]); 29662306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL8; 29762306a36Sopenharmony_ci mt8195_afe_prepare_clk(afe, afe_priv->clk[clk_id]); 29862306a36Sopenharmony_ci } else { 29962306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL8; 30062306a36Sopenharmony_ci mt8195_afe_unprepare_clk(afe, afe_priv->clk[clk_id]); 30162306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL10; 30262306a36Sopenharmony_ci mt8195_afe_unprepare_clk(afe, afe_priv->clk[clk_id]); 30362306a36Sopenharmony_ci } 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci return 0; 30662306a36Sopenharmony_ci} 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_cistatic int 30962306a36Sopenharmony_cimt8195_afe_paired_memif_clk_enable(struct snd_pcm_substream *substream, 31062306a36Sopenharmony_ci struct snd_soc_dai *dai, 31162306a36Sopenharmony_ci int enable) 31262306a36Sopenharmony_ci{ 31362306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 31462306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 31562306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 31662306a36Sopenharmony_ci int id = asoc_rtd_to_cpu(rtd, 0)->id; 31762306a36Sopenharmony_ci int clk_id; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci if (id != MT8195_AFE_MEMIF_DL8 && id != MT8195_AFE_MEMIF_DL10) 32062306a36Sopenharmony_ci return 0; 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci if (enable) { 32362306a36Sopenharmony_ci /* DL8_DL10_MEM */ 32462306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL10; 32562306a36Sopenharmony_ci mt8195_afe_enable_clk_atomic(afe, afe_priv->clk[clk_id]); 32662306a36Sopenharmony_ci udelay(1); 32762306a36Sopenharmony_ci /* DL8_DL10_AGENT */ 32862306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL8; 32962306a36Sopenharmony_ci mt8195_afe_enable_clk_atomic(afe, afe_priv->clk[clk_id]); 33062306a36Sopenharmony_ci } else { 33162306a36Sopenharmony_ci /* DL8_DL10_AGENT */ 33262306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL8; 33362306a36Sopenharmony_ci mt8195_afe_disable_clk_atomic(afe, afe_priv->clk[clk_id]); 33462306a36Sopenharmony_ci /* DL8_DL10_MEM */ 33562306a36Sopenharmony_ci clk_id = MT8195_CLK_AUD_MEMIF_DL10; 33662306a36Sopenharmony_ci mt8195_afe_disable_clk_atomic(afe, afe_priv->clk[clk_id]); 33762306a36Sopenharmony_ci } 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci return 0; 34062306a36Sopenharmony_ci} 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_cistatic int mt8195_afe_fe_startup(struct snd_pcm_substream *substream, 34362306a36Sopenharmony_ci struct snd_soc_dai *dai) 34462306a36Sopenharmony_ci{ 34562306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 34662306a36Sopenharmony_ci struct snd_pcm_runtime *runtime = substream->runtime; 34762306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 34862306a36Sopenharmony_ci int id = asoc_rtd_to_cpu(rtd, 0)->id; 34962306a36Sopenharmony_ci int ret = 0; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci mt8195_afe_paired_memif_clk_prepare(substream, dai, 1); 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci ret = mtk_afe_fe_startup(substream, dai); 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ci snd_pcm_hw_constraint_step(runtime, 0, 35662306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 35762306a36Sopenharmony_ci MT8195_MEMIF_BUFFER_BYTES_ALIGN); 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci if (id != MT8195_AFE_MEMIF_DL7) 36062306a36Sopenharmony_ci goto out; 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci ret = snd_pcm_hw_constraint_minmax(runtime, 36362306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 36462306a36Sopenharmony_ci 1, 36562306a36Sopenharmony_ci MT8195_MEMIF_DL7_MAX_PERIOD_SIZE); 36662306a36Sopenharmony_ci if (ret < 0) 36762306a36Sopenharmony_ci dev_dbg(afe->dev, "hw_constraint_minmax failed\n"); 36862306a36Sopenharmony_ciout: 36962306a36Sopenharmony_ci return ret; 37062306a36Sopenharmony_ci} 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_cistatic void mt8195_afe_fe_shutdown(struct snd_pcm_substream *substream, 37362306a36Sopenharmony_ci struct snd_soc_dai *dai) 37462306a36Sopenharmony_ci{ 37562306a36Sopenharmony_ci mtk_afe_fe_shutdown(substream, dai); 37662306a36Sopenharmony_ci mt8195_afe_paired_memif_clk_prepare(substream, dai, 0); 37762306a36Sopenharmony_ci} 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_cistatic int mt8195_afe_fe_hw_params(struct snd_pcm_substream *substream, 38062306a36Sopenharmony_ci struct snd_pcm_hw_params *params, 38162306a36Sopenharmony_ci struct snd_soc_dai *dai) 38262306a36Sopenharmony_ci{ 38362306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 38462306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 38562306a36Sopenharmony_ci int id = asoc_rtd_to_cpu(rtd, 0)->id; 38662306a36Sopenharmony_ci struct mtk_base_afe_memif *memif = &afe->memif[id]; 38762306a36Sopenharmony_ci const struct mtk_base_memif_data *data = memif->data; 38862306a36Sopenharmony_ci const struct mt8195_afe_channel_merge *cm = mt8195_afe_found_cm(dai); 38962306a36Sopenharmony_ci unsigned int ch_num = params_channels(params); 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci mt8195_afe_config_cm(afe, cm, params_channels(params)); 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci if (data->ch_num_reg >= 0) { 39462306a36Sopenharmony_ci regmap_update_bits(afe->regmap, data->ch_num_reg, 39562306a36Sopenharmony_ci data->ch_num_maskbit << data->ch_num_shift, 39662306a36Sopenharmony_ci ch_num << data->ch_num_shift); 39762306a36Sopenharmony_ci } 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci return mtk_afe_fe_hw_params(substream, params, dai); 40062306a36Sopenharmony_ci} 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_cistatic int mt8195_afe_fe_hw_free(struct snd_pcm_substream *substream, 40362306a36Sopenharmony_ci struct snd_soc_dai *dai) 40462306a36Sopenharmony_ci{ 40562306a36Sopenharmony_ci return mtk_afe_fe_hw_free(substream, dai); 40662306a36Sopenharmony_ci} 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_cistatic int mt8195_afe_fe_prepare(struct snd_pcm_substream *substream, 40962306a36Sopenharmony_ci struct snd_soc_dai *dai) 41062306a36Sopenharmony_ci{ 41162306a36Sopenharmony_ci return mtk_afe_fe_prepare(substream, dai); 41262306a36Sopenharmony_ci} 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_cistatic int mt8195_afe_fe_trigger(struct snd_pcm_substream *substream, int cmd, 41562306a36Sopenharmony_ci struct snd_soc_dai *dai) 41662306a36Sopenharmony_ci{ 41762306a36Sopenharmony_ci int ret = 0; 41862306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 41962306a36Sopenharmony_ci const struct mt8195_afe_channel_merge *cm = mt8195_afe_found_cm(dai); 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci switch (cmd) { 42262306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_START: 42362306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_RESUME: 42462306a36Sopenharmony_ci mt8195_afe_enable_cm(afe, cm, true); 42562306a36Sopenharmony_ci break; 42662306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_STOP: 42762306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_SUSPEND: 42862306a36Sopenharmony_ci mt8195_afe_enable_cm(afe, cm, false); 42962306a36Sopenharmony_ci break; 43062306a36Sopenharmony_ci default: 43162306a36Sopenharmony_ci break; 43262306a36Sopenharmony_ci } 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci ret = mtk_afe_fe_trigger(substream, cmd, dai); 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci switch (cmd) { 43762306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_START: 43862306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_RESUME: 43962306a36Sopenharmony_ci mt8195_afe_paired_memif_clk_enable(substream, dai, 1); 44062306a36Sopenharmony_ci break; 44162306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_STOP: 44262306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_SUSPEND: 44362306a36Sopenharmony_ci mt8195_afe_paired_memif_clk_enable(substream, dai, 0); 44462306a36Sopenharmony_ci break; 44562306a36Sopenharmony_ci default: 44662306a36Sopenharmony_ci break; 44762306a36Sopenharmony_ci } 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci return ret; 45062306a36Sopenharmony_ci} 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistatic int mt8195_afe_fe_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 45362306a36Sopenharmony_ci{ 45462306a36Sopenharmony_ci return 0; 45562306a36Sopenharmony_ci} 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_cistatic const struct snd_soc_dai_ops mt8195_afe_fe_dai_ops = { 45862306a36Sopenharmony_ci .startup = mt8195_afe_fe_startup, 45962306a36Sopenharmony_ci .shutdown = mt8195_afe_fe_shutdown, 46062306a36Sopenharmony_ci .hw_params = mt8195_afe_fe_hw_params, 46162306a36Sopenharmony_ci .hw_free = mt8195_afe_fe_hw_free, 46262306a36Sopenharmony_ci .prepare = mt8195_afe_fe_prepare, 46362306a36Sopenharmony_ci .trigger = mt8195_afe_fe_trigger, 46462306a36Sopenharmony_ci .set_fmt = mt8195_afe_fe_set_fmt, 46562306a36Sopenharmony_ci}; 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci#define MTK_PCM_RATES (SNDRV_PCM_RATE_8000_48000 |\ 46862306a36Sopenharmony_ci SNDRV_PCM_RATE_88200 |\ 46962306a36Sopenharmony_ci SNDRV_PCM_RATE_96000 |\ 47062306a36Sopenharmony_ci SNDRV_PCM_RATE_176400 |\ 47162306a36Sopenharmony_ci SNDRV_PCM_RATE_192000 |\ 47262306a36Sopenharmony_ci SNDRV_PCM_RATE_352800 |\ 47362306a36Sopenharmony_ci SNDRV_PCM_RATE_384000) 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci#define MTK_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ 47662306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S24_LE |\ 47762306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S32_LE) 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_cistatic struct snd_soc_dai_driver mt8195_memif_dai_driver[] = { 48062306a36Sopenharmony_ci /* FE DAIs: memory intefaces to CPU */ 48162306a36Sopenharmony_ci { 48262306a36Sopenharmony_ci .name = "DL2", 48362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL2, 48462306a36Sopenharmony_ci .playback = { 48562306a36Sopenharmony_ci .stream_name = "DL2", 48662306a36Sopenharmony_ci .channels_min = 1, 48762306a36Sopenharmony_ci .channels_max = 2, 48862306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 48962306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 49062306a36Sopenharmony_ci }, 49162306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 49262306a36Sopenharmony_ci }, 49362306a36Sopenharmony_ci { 49462306a36Sopenharmony_ci .name = "DL3", 49562306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL3, 49662306a36Sopenharmony_ci .playback = { 49762306a36Sopenharmony_ci .stream_name = "DL3", 49862306a36Sopenharmony_ci .channels_min = 1, 49962306a36Sopenharmony_ci .channels_max = 2, 50062306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 50162306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 50262306a36Sopenharmony_ci }, 50362306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 50462306a36Sopenharmony_ci }, 50562306a36Sopenharmony_ci { 50662306a36Sopenharmony_ci .name = "DL6", 50762306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL6, 50862306a36Sopenharmony_ci .playback = { 50962306a36Sopenharmony_ci .stream_name = "DL6", 51062306a36Sopenharmony_ci .channels_min = 1, 51162306a36Sopenharmony_ci .channels_max = 2, 51262306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 51362306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 51462306a36Sopenharmony_ci }, 51562306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 51662306a36Sopenharmony_ci }, 51762306a36Sopenharmony_ci { 51862306a36Sopenharmony_ci .name = "DL7", 51962306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL7, 52062306a36Sopenharmony_ci .playback = { 52162306a36Sopenharmony_ci .stream_name = "DL7", 52262306a36Sopenharmony_ci .channels_min = 1, 52362306a36Sopenharmony_ci .channels_max = 2, 52462306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 52562306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 52662306a36Sopenharmony_ci }, 52762306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 52862306a36Sopenharmony_ci }, 52962306a36Sopenharmony_ci { 53062306a36Sopenharmony_ci .name = "DL8", 53162306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL8, 53262306a36Sopenharmony_ci .playback = { 53362306a36Sopenharmony_ci .stream_name = "DL8", 53462306a36Sopenharmony_ci .channels_min = 1, 53562306a36Sopenharmony_ci .channels_max = 24, 53662306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 53762306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 53862306a36Sopenharmony_ci }, 53962306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 54062306a36Sopenharmony_ci }, 54162306a36Sopenharmony_ci { 54262306a36Sopenharmony_ci .name = "DL10", 54362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL10, 54462306a36Sopenharmony_ci .playback = { 54562306a36Sopenharmony_ci .stream_name = "DL10", 54662306a36Sopenharmony_ci .channels_min = 1, 54762306a36Sopenharmony_ci .channels_max = 8, 54862306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 54962306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 55062306a36Sopenharmony_ci }, 55162306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 55262306a36Sopenharmony_ci }, 55362306a36Sopenharmony_ci { 55462306a36Sopenharmony_ci .name = "DL11", 55562306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL11, 55662306a36Sopenharmony_ci .playback = { 55762306a36Sopenharmony_ci .stream_name = "DL11", 55862306a36Sopenharmony_ci .channels_min = 1, 55962306a36Sopenharmony_ci .channels_max = 48, 56062306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 56162306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 56262306a36Sopenharmony_ci }, 56362306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 56462306a36Sopenharmony_ci }, 56562306a36Sopenharmony_ci { 56662306a36Sopenharmony_ci .name = "UL1", 56762306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL1, 56862306a36Sopenharmony_ci .capture = { 56962306a36Sopenharmony_ci .stream_name = "UL1", 57062306a36Sopenharmony_ci .channels_min = 1, 57162306a36Sopenharmony_ci .channels_max = 8, 57262306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 57362306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 57462306a36Sopenharmony_ci }, 57562306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 57662306a36Sopenharmony_ci }, 57762306a36Sopenharmony_ci { 57862306a36Sopenharmony_ci .name = "UL2", 57962306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL2, 58062306a36Sopenharmony_ci .capture = { 58162306a36Sopenharmony_ci .stream_name = "UL2", 58262306a36Sopenharmony_ci .channels_min = 1, 58362306a36Sopenharmony_ci .channels_max = 8, 58462306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 58562306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 58662306a36Sopenharmony_ci }, 58762306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 58862306a36Sopenharmony_ci }, 58962306a36Sopenharmony_ci { 59062306a36Sopenharmony_ci .name = "UL3", 59162306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL3, 59262306a36Sopenharmony_ci .capture = { 59362306a36Sopenharmony_ci .stream_name = "UL3", 59462306a36Sopenharmony_ci .channels_min = 1, 59562306a36Sopenharmony_ci .channels_max = 16, 59662306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 59762306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 59862306a36Sopenharmony_ci }, 59962306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 60062306a36Sopenharmony_ci }, 60162306a36Sopenharmony_ci { 60262306a36Sopenharmony_ci .name = "UL4", 60362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL4, 60462306a36Sopenharmony_ci .capture = { 60562306a36Sopenharmony_ci .stream_name = "UL4", 60662306a36Sopenharmony_ci .channels_min = 1, 60762306a36Sopenharmony_ci .channels_max = 2, 60862306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 60962306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 61062306a36Sopenharmony_ci }, 61162306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 61262306a36Sopenharmony_ci }, 61362306a36Sopenharmony_ci { 61462306a36Sopenharmony_ci .name = "UL5", 61562306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL5, 61662306a36Sopenharmony_ci .capture = { 61762306a36Sopenharmony_ci .stream_name = "UL5", 61862306a36Sopenharmony_ci .channels_min = 1, 61962306a36Sopenharmony_ci .channels_max = 2, 62062306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 62162306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 62262306a36Sopenharmony_ci }, 62362306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 62462306a36Sopenharmony_ci }, 62562306a36Sopenharmony_ci { 62662306a36Sopenharmony_ci .name = "UL6", 62762306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL6, 62862306a36Sopenharmony_ci .capture = { 62962306a36Sopenharmony_ci .stream_name = "UL6", 63062306a36Sopenharmony_ci .channels_min = 1, 63162306a36Sopenharmony_ci .channels_max = 8, 63262306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 63362306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 63462306a36Sopenharmony_ci }, 63562306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 63662306a36Sopenharmony_ci }, 63762306a36Sopenharmony_ci { 63862306a36Sopenharmony_ci .name = "UL8", 63962306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL8, 64062306a36Sopenharmony_ci .capture = { 64162306a36Sopenharmony_ci .stream_name = "UL8", 64262306a36Sopenharmony_ci .channels_min = 1, 64362306a36Sopenharmony_ci .channels_max = 24, 64462306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 64562306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 64662306a36Sopenharmony_ci }, 64762306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 64862306a36Sopenharmony_ci }, 64962306a36Sopenharmony_ci { 65062306a36Sopenharmony_ci .name = "UL9", 65162306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL9, 65262306a36Sopenharmony_ci .capture = { 65362306a36Sopenharmony_ci .stream_name = "UL9", 65462306a36Sopenharmony_ci .channels_min = 1, 65562306a36Sopenharmony_ci .channels_max = 32, 65662306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 65762306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 65862306a36Sopenharmony_ci }, 65962306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 66062306a36Sopenharmony_ci }, 66162306a36Sopenharmony_ci { 66262306a36Sopenharmony_ci .name = "UL10", 66362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL10, 66462306a36Sopenharmony_ci .capture = { 66562306a36Sopenharmony_ci .stream_name = "UL10", 66662306a36Sopenharmony_ci .channels_min = 1, 66762306a36Sopenharmony_ci .channels_max = 4, 66862306a36Sopenharmony_ci .rates = MTK_PCM_RATES, 66962306a36Sopenharmony_ci .formats = MTK_PCM_FORMATS, 67062306a36Sopenharmony_ci }, 67162306a36Sopenharmony_ci .ops = &mt8195_afe_fe_dai_ops, 67262306a36Sopenharmony_ci }, 67362306a36Sopenharmony_ci}; 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o002_mix[] = { 67662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN2, 0, 1, 0), 67762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN2, 12, 1, 0), 67862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN2, 20, 1, 0), 67962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN2, 22, 1, 0), 68062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN2_2, 6, 1, 0), 68162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN2_2, 8, 1, 0), 68262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN2_5, 8, 1, 0), 68362306a36Sopenharmony_ci}; 68462306a36Sopenharmony_ci 68562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o003_mix[] = { 68662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN3, 1, 1, 0), 68762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN3, 13, 1, 0), 68862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN3, 21, 1, 0), 68962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN3, 23, 1, 0), 69062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN3_2, 7, 1, 0), 69162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN3_2, 9, 1, 0), 69262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN3_5, 9, 1, 0), 69362306a36Sopenharmony_ci}; 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o004_mix[] = { 69662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN4, 0, 1, 0), 69762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN4, 14, 1, 0), 69862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN4, 24, 1, 0), 69962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN4_2, 10, 1, 0), 70062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN4_5, 10, 1, 0), 70162306a36Sopenharmony_ci}; 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o005_mix[] = { 70462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN5, 1, 1, 0), 70562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN5, 15, 1, 0), 70662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN5, 25, 1, 0), 70762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN5_2, 11, 1, 0), 70862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN5_5, 11, 1, 0), 70962306a36Sopenharmony_ci}; 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_cistatic const struct snd_kcontrol_new o006_mix[] = { 71262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN6, 0, 1, 0), 71362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN6, 16, 1, 0), 71462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN6, 26, 1, 0), 71562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN6_2, 12, 1, 0), 71662306a36Sopenharmony_ci}; 71762306a36Sopenharmony_ci 71862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o007_mix[] = { 71962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN7, 1, 1, 0), 72062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN7, 17, 1, 0), 72162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN7, 27, 1, 0), 72262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN7_2, 13, 1, 0), 72362306a36Sopenharmony_ci}; 72462306a36Sopenharmony_ci 72562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o008_mix[] = { 72662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN8, 18, 1, 0), 72762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN8, 28, 1, 0), 72862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN8_2, 14, 1, 0), 72962306a36Sopenharmony_ci}; 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_cistatic const struct snd_kcontrol_new o009_mix[] = { 73262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN9, 19, 1, 0), 73362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN9, 29, 1, 0), 73462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN9_2, 15, 1, 0), 73562306a36Sopenharmony_ci}; 73662306a36Sopenharmony_ci 73762306a36Sopenharmony_cistatic const struct snd_kcontrol_new o010_mix[] = { 73862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN10, 22, 1, 0), 73962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I030 Switch", AFE_CONN10, 30, 1, 0), 74062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN10_1, 14, 1, 0), 74162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN10_2, 8, 1, 0), 74262306a36Sopenharmony_ci}; 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_cistatic const struct snd_kcontrol_new o011_mix[] = { 74562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN11, 23, 1, 0), 74662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I031 Switch", AFE_CONN11, 31, 1, 0), 74762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN11_1, 15, 1, 0), 74862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN11_2, 9, 1, 0), 74962306a36Sopenharmony_ci}; 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_cistatic const struct snd_kcontrol_new o012_mix[] = { 75262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN12, 24, 1, 0), 75362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I032 Switch", AFE_CONN12_1, 0, 1, 0), 75462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN12_1, 16, 1, 0), 75562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I074 Switch", AFE_CONN12_2, 10, 1, 0), 75662306a36Sopenharmony_ci}; 75762306a36Sopenharmony_ci 75862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o013_mix[] = { 75962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN13, 25, 1, 0), 76062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I033 Switch", AFE_CONN13_1, 1, 1, 0), 76162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN13_1, 17, 1, 0), 76262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I075 Switch", AFE_CONN13_2, 11, 1, 0), 76362306a36Sopenharmony_ci}; 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o014_mix[] = { 76662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN14, 26, 1, 0), 76762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I034 Switch", AFE_CONN14_1, 2, 1, 0), 76862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN14_1, 18, 1, 0), 76962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I076 Switch", AFE_CONN14_2, 12, 1, 0), 77062306a36Sopenharmony_ci}; 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_cistatic const struct snd_kcontrol_new o015_mix[] = { 77362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN15, 27, 1, 0), 77462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I035 Switch", AFE_CONN15_1, 3, 1, 0), 77562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN15_1, 19, 1, 0), 77662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I077 Switch", AFE_CONN15_2, 13, 1, 0), 77762306a36Sopenharmony_ci}; 77862306a36Sopenharmony_ci 77962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o016_mix[] = { 78062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN16, 28, 1, 0), 78162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I036 Switch", AFE_CONN16_1, 4, 1, 0), 78262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN16_1, 20, 1, 0), 78362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I078 Switch", AFE_CONN16_2, 14, 1, 0), 78462306a36Sopenharmony_ci}; 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_cistatic const struct snd_kcontrol_new o017_mix[] = { 78762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN17, 29, 1, 0), 78862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I037 Switch", AFE_CONN17_1, 5, 1, 0), 78962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN17_1, 21, 1, 0), 79062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I079 Switch", AFE_CONN17_2, 15, 1, 0), 79162306a36Sopenharmony_ci}; 79262306a36Sopenharmony_ci 79362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o018_mix[] = { 79462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I038 Switch", AFE_CONN18_1, 6, 1, 0), 79562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I080 Switch", AFE_CONN18_2, 16, 1, 0), 79662306a36Sopenharmony_ci}; 79762306a36Sopenharmony_ci 79862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o019_mix[] = { 79962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I039 Switch", AFE_CONN19_1, 7, 1, 0), 80062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I081 Switch", AFE_CONN19_2, 17, 1, 0), 80162306a36Sopenharmony_ci}; 80262306a36Sopenharmony_ci 80362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o020_mix[] = { 80462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I040 Switch", AFE_CONN20_1, 8, 1, 0), 80562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I082 Switch", AFE_CONN20_2, 18, 1, 0), 80662306a36Sopenharmony_ci}; 80762306a36Sopenharmony_ci 80862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o021_mix[] = { 80962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I041 Switch", AFE_CONN21_1, 9, 1, 0), 81062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I083 Switch", AFE_CONN21_2, 19, 1, 0), 81162306a36Sopenharmony_ci}; 81262306a36Sopenharmony_ci 81362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o022_mix[] = { 81462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I042 Switch", AFE_CONN22_1, 10, 1, 0), 81562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I084 Switch", AFE_CONN22_2, 20, 1, 0), 81662306a36Sopenharmony_ci}; 81762306a36Sopenharmony_ci 81862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o023_mix[] = { 81962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I043 Switch", AFE_CONN23_1, 11, 1, 0), 82062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I085 Switch", AFE_CONN23_2, 21, 1, 0), 82162306a36Sopenharmony_ci}; 82262306a36Sopenharmony_ci 82362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o024_mix[] = { 82462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I044 Switch", AFE_CONN24_1, 12, 1, 0), 82562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I086 Switch", AFE_CONN24_2, 22, 1, 0), 82662306a36Sopenharmony_ci}; 82762306a36Sopenharmony_ci 82862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o025_mix[] = { 82962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I045 Switch", AFE_CONN25_1, 13, 1, 0), 83062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I087 Switch", AFE_CONN25_2, 23, 1, 0), 83162306a36Sopenharmony_ci}; 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o026_mix[] = { 83462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I046 Switch", AFE_CONN26_1, 14, 1, 0), 83562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I088 Switch", AFE_CONN26_2, 24, 1, 0), 83662306a36Sopenharmony_ci}; 83762306a36Sopenharmony_ci 83862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o027_mix[] = { 83962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I047 Switch", AFE_CONN27_1, 15, 1, 0), 84062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I089 Switch", AFE_CONN27_2, 25, 1, 0), 84162306a36Sopenharmony_ci}; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o028_mix[] = { 84462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I048 Switch", AFE_CONN28_1, 16, 1, 0), 84562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I090 Switch", AFE_CONN28_2, 26, 1, 0), 84662306a36Sopenharmony_ci}; 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o029_mix[] = { 84962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I049 Switch", AFE_CONN29_1, 17, 1, 0), 85062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I091 Switch", AFE_CONN29_2, 27, 1, 0), 85162306a36Sopenharmony_ci}; 85262306a36Sopenharmony_ci 85362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o030_mix[] = { 85462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I050 Switch", AFE_CONN30_1, 18, 1, 0), 85562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I092 Switch", AFE_CONN30_2, 28, 1, 0), 85662306a36Sopenharmony_ci}; 85762306a36Sopenharmony_ci 85862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o031_mix[] = { 85962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I051 Switch", AFE_CONN31_1, 19, 1, 0), 86062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I093 Switch", AFE_CONN31_2, 29, 1, 0), 86162306a36Sopenharmony_ci}; 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o032_mix[] = { 86462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I052 Switch", AFE_CONN32_1, 20, 1, 0), 86562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I094 Switch", AFE_CONN32_2, 30, 1, 0), 86662306a36Sopenharmony_ci}; 86762306a36Sopenharmony_ci 86862306a36Sopenharmony_cistatic const struct snd_kcontrol_new o033_mix[] = { 86962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I053 Switch", AFE_CONN33_1, 21, 1, 0), 87062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I095 Switch", AFE_CONN33_2, 31, 1, 0), 87162306a36Sopenharmony_ci}; 87262306a36Sopenharmony_ci 87362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o034_mix[] = { 87462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN34, 0, 1, 0), 87562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN34, 2, 1, 0), 87662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN34, 12, 1, 0), 87762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN34, 20, 1, 0), 87862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN34_2, 6, 1, 0), 87962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I072 Switch", AFE_CONN34_2, 8, 1, 0), 88062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN34_5, 8, 1, 0), 88162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN34_5, 10, 1, 0), 88262306a36Sopenharmony_ci}; 88362306a36Sopenharmony_ci 88462306a36Sopenharmony_cistatic const struct snd_kcontrol_new o035_mix[] = { 88562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN35, 1, 1, 0), 88662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN35, 3, 1, 0), 88762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN35, 13, 1, 0), 88862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN35, 21, 1, 0), 88962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN35_2, 7, 1, 0), 89062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I073 Switch", AFE_CONN35_2, 9, 1, 0), 89162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I137 Switch", AFE_CONN35_4, 9, 1, 0), 89262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I139 Switch", AFE_CONN35_4, 11, 1, 0), 89362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN35_5, 8, 1, 0), 89462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN35_5, 9, 1, 0), 89562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN35_5, 10, 1, 0), 89662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN35_5, 11, 1, 0), 89762306a36Sopenharmony_ci}; 89862306a36Sopenharmony_ci 89962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o036_mix[] = { 90062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I000 Switch", AFE_CONN36, 0, 1, 0), 90162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN36, 12, 1, 0), 90262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I020 Switch", AFE_CONN36, 20, 1, 0), 90362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I070 Switch", AFE_CONN36_2, 6, 1, 0), 90462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN36_5, 8, 1, 0), 90562306a36Sopenharmony_ci}; 90662306a36Sopenharmony_ci 90762306a36Sopenharmony_cistatic const struct snd_kcontrol_new o037_mix[] = { 90862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I001 Switch", AFE_CONN37, 1, 1, 0), 90962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN37, 13, 1, 0), 91062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I021 Switch", AFE_CONN37, 21, 1, 0), 91162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I071 Switch", AFE_CONN37_2, 7, 1, 0), 91262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN37_5, 9, 1, 0), 91362306a36Sopenharmony_ci}; 91462306a36Sopenharmony_ci 91562306a36Sopenharmony_cistatic const struct snd_kcontrol_new o038_mix[] = { 91662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN38, 22, 1, 0), 91762306a36Sopenharmony_ci}; 91862306a36Sopenharmony_ci 91962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o039_mix[] = { 92062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN39, 23, 1, 0), 92162306a36Sopenharmony_ci}; 92262306a36Sopenharmony_ci 92362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o040_mix[] = { 92462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I002 Switch", AFE_CONN40, 2, 1, 0), 92562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I012 Switch", AFE_CONN40, 12, 1, 0), 92662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I022 Switch", AFE_CONN40, 22, 1, 0), 92762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I168 Switch", AFE_CONN40_5, 8, 1, 0), 92862306a36Sopenharmony_ci}; 92962306a36Sopenharmony_ci 93062306a36Sopenharmony_cistatic const struct snd_kcontrol_new o041_mix[] = { 93162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I003 Switch", AFE_CONN41, 3, 1, 0), 93262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I013 Switch", AFE_CONN41, 13, 1, 0), 93362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I023 Switch", AFE_CONN41, 23, 1, 0), 93462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I169 Switch", AFE_CONN41_5, 9, 1, 0), 93562306a36Sopenharmony_ci}; 93662306a36Sopenharmony_ci 93762306a36Sopenharmony_cistatic const struct snd_kcontrol_new o042_mix[] = { 93862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I014 Switch", AFE_CONN42, 14, 1, 0), 93962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN42, 24, 1, 0), 94062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I170 Switch", AFE_CONN42_5, 10, 1, 0), 94162306a36Sopenharmony_ci}; 94262306a36Sopenharmony_ci 94362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o043_mix[] = { 94462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I015 Switch", AFE_CONN43, 15, 1, 0), 94562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN43, 25, 1, 0), 94662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I171 Switch", AFE_CONN43_5, 11, 1, 0), 94762306a36Sopenharmony_ci}; 94862306a36Sopenharmony_ci 94962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o044_mix[] = { 95062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I016 Switch", AFE_CONN44, 16, 1, 0), 95162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I026 Switch", AFE_CONN44, 26, 1, 0), 95262306a36Sopenharmony_ci}; 95362306a36Sopenharmony_ci 95462306a36Sopenharmony_cistatic const struct snd_kcontrol_new o045_mix[] = { 95562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I017 Switch", AFE_CONN45, 17, 1, 0), 95662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I027 Switch", AFE_CONN45, 27, 1, 0), 95762306a36Sopenharmony_ci}; 95862306a36Sopenharmony_ci 95962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o046_mix[] = { 96062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I018 Switch", AFE_CONN46, 18, 1, 0), 96162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I028 Switch", AFE_CONN46, 28, 1, 0), 96262306a36Sopenharmony_ci}; 96362306a36Sopenharmony_ci 96462306a36Sopenharmony_cistatic const struct snd_kcontrol_new o047_mix[] = { 96562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I019 Switch", AFE_CONN47, 19, 1, 0), 96662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I029 Switch", AFE_CONN47, 29, 1, 0), 96762306a36Sopenharmony_ci}; 96862306a36Sopenharmony_ci 96962306a36Sopenharmony_cistatic const struct snd_kcontrol_new o182_mix[] = { 97062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I024 Switch", AFE_CONN182, 24, 1, 0), 97162306a36Sopenharmony_ci}; 97262306a36Sopenharmony_ci 97362306a36Sopenharmony_cistatic const struct snd_kcontrol_new o183_mix[] = { 97462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("I025 Switch", AFE_CONN183, 25, 1, 0), 97562306a36Sopenharmony_ci}; 97662306a36Sopenharmony_ci 97762306a36Sopenharmony_cistatic const char * const dl8_dl11_data_sel_mux_text[] = { 97862306a36Sopenharmony_ci "dl8", "dl11", 97962306a36Sopenharmony_ci}; 98062306a36Sopenharmony_ci 98162306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(dl8_dl11_data_sel_mux_enum, 98262306a36Sopenharmony_ci AFE_DAC_CON2, 0, dl8_dl11_data_sel_mux_text); 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_cistatic const struct snd_kcontrol_new dl8_dl11_data_sel_mux = 98562306a36Sopenharmony_ci SOC_DAPM_ENUM("DL8_DL11 Sink", dl8_dl11_data_sel_mux_enum); 98662306a36Sopenharmony_ci 98762306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget mt8195_memif_widgets[] = { 98862306a36Sopenharmony_ci /* DL6 */ 98962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I000", SND_SOC_NOPM, 0, 0, NULL, 0), 99062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I001", SND_SOC_NOPM, 0, 0, NULL, 0), 99162306a36Sopenharmony_ci 99262306a36Sopenharmony_ci /* DL3 */ 99362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I020", SND_SOC_NOPM, 0, 0, NULL, 0), 99462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I021", SND_SOC_NOPM, 0, 0, NULL, 0), 99562306a36Sopenharmony_ci 99662306a36Sopenharmony_ci /* DL11 */ 99762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I022", SND_SOC_NOPM, 0, 0, NULL, 0), 99862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I023", SND_SOC_NOPM, 0, 0, NULL, 0), 99962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I024", SND_SOC_NOPM, 0, 0, NULL, 0), 100062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I025", SND_SOC_NOPM, 0, 0, NULL, 0), 100162306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I026", SND_SOC_NOPM, 0, 0, NULL, 0), 100262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I027", SND_SOC_NOPM, 0, 0, NULL, 0), 100362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I028", SND_SOC_NOPM, 0, 0, NULL, 0), 100462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I029", SND_SOC_NOPM, 0, 0, NULL, 0), 100562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I030", SND_SOC_NOPM, 0, 0, NULL, 0), 100662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I031", SND_SOC_NOPM, 0, 0, NULL, 0), 100762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I032", SND_SOC_NOPM, 0, 0, NULL, 0), 100862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I033", SND_SOC_NOPM, 0, 0, NULL, 0), 100962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I034", SND_SOC_NOPM, 0, 0, NULL, 0), 101062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I035", SND_SOC_NOPM, 0, 0, NULL, 0), 101162306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I036", SND_SOC_NOPM, 0, 0, NULL, 0), 101262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I037", SND_SOC_NOPM, 0, 0, NULL, 0), 101362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I038", SND_SOC_NOPM, 0, 0, NULL, 0), 101462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I039", SND_SOC_NOPM, 0, 0, NULL, 0), 101562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I040", SND_SOC_NOPM, 0, 0, NULL, 0), 101662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I041", SND_SOC_NOPM, 0, 0, NULL, 0), 101762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I042", SND_SOC_NOPM, 0, 0, NULL, 0), 101862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I043", SND_SOC_NOPM, 0, 0, NULL, 0), 101962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I044", SND_SOC_NOPM, 0, 0, NULL, 0), 102062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I045", SND_SOC_NOPM, 0, 0, NULL, 0), 102162306a36Sopenharmony_ci 102262306a36Sopenharmony_ci /* DL11/DL8 */ 102362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I046", SND_SOC_NOPM, 0, 0, NULL, 0), 102462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I047", SND_SOC_NOPM, 0, 0, NULL, 0), 102562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I048", SND_SOC_NOPM, 0, 0, NULL, 0), 102662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I049", SND_SOC_NOPM, 0, 0, NULL, 0), 102762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I050", SND_SOC_NOPM, 0, 0, NULL, 0), 102862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I051", SND_SOC_NOPM, 0, 0, NULL, 0), 102962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I052", SND_SOC_NOPM, 0, 0, NULL, 0), 103062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I053", SND_SOC_NOPM, 0, 0, NULL, 0), 103162306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I054", SND_SOC_NOPM, 0, 0, NULL, 0), 103262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I055", SND_SOC_NOPM, 0, 0, NULL, 0), 103362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I056", SND_SOC_NOPM, 0, 0, NULL, 0), 103462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I057", SND_SOC_NOPM, 0, 0, NULL, 0), 103562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I058", SND_SOC_NOPM, 0, 0, NULL, 0), 103662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I059", SND_SOC_NOPM, 0, 0, NULL, 0), 103762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I060", SND_SOC_NOPM, 0, 0, NULL, 0), 103862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I061", SND_SOC_NOPM, 0, 0, NULL, 0), 103962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I062", SND_SOC_NOPM, 0, 0, NULL, 0), 104062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I063", SND_SOC_NOPM, 0, 0, NULL, 0), 104162306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I064", SND_SOC_NOPM, 0, 0, NULL, 0), 104262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I065", SND_SOC_NOPM, 0, 0, NULL, 0), 104362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I066", SND_SOC_NOPM, 0, 0, NULL, 0), 104462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I067", SND_SOC_NOPM, 0, 0, NULL, 0), 104562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I068", SND_SOC_NOPM, 0, 0, NULL, 0), 104662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I069", SND_SOC_NOPM, 0, 0, NULL, 0), 104762306a36Sopenharmony_ci 104862306a36Sopenharmony_ci /* DL2 */ 104962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I070", SND_SOC_NOPM, 0, 0, NULL, 0), 105062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I071", SND_SOC_NOPM, 0, 0, NULL, 0), 105162306a36Sopenharmony_ci 105262306a36Sopenharmony_ci SND_SOC_DAPM_MUX("DL8_DL11 Mux", 105362306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &dl8_dl11_data_sel_mux), 105462306a36Sopenharmony_ci 105562306a36Sopenharmony_ci /* UL9 */ 105662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O002", SND_SOC_NOPM, 0, 0, 105762306a36Sopenharmony_ci o002_mix, ARRAY_SIZE(o002_mix)), 105862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O003", SND_SOC_NOPM, 0, 0, 105962306a36Sopenharmony_ci o003_mix, ARRAY_SIZE(o003_mix)), 106062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O004", SND_SOC_NOPM, 0, 0, 106162306a36Sopenharmony_ci o004_mix, ARRAY_SIZE(o004_mix)), 106262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O005", SND_SOC_NOPM, 0, 0, 106362306a36Sopenharmony_ci o005_mix, ARRAY_SIZE(o005_mix)), 106462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O006", SND_SOC_NOPM, 0, 0, 106562306a36Sopenharmony_ci o006_mix, ARRAY_SIZE(o006_mix)), 106662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O007", SND_SOC_NOPM, 0, 0, 106762306a36Sopenharmony_ci o007_mix, ARRAY_SIZE(o007_mix)), 106862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O008", SND_SOC_NOPM, 0, 0, 106962306a36Sopenharmony_ci o008_mix, ARRAY_SIZE(o008_mix)), 107062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O009", SND_SOC_NOPM, 0, 0, 107162306a36Sopenharmony_ci o009_mix, ARRAY_SIZE(o009_mix)), 107262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O010", SND_SOC_NOPM, 0, 0, 107362306a36Sopenharmony_ci o010_mix, ARRAY_SIZE(o010_mix)), 107462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O011", SND_SOC_NOPM, 0, 0, 107562306a36Sopenharmony_ci o011_mix, ARRAY_SIZE(o011_mix)), 107662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O012", SND_SOC_NOPM, 0, 0, 107762306a36Sopenharmony_ci o012_mix, ARRAY_SIZE(o012_mix)), 107862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O013", SND_SOC_NOPM, 0, 0, 107962306a36Sopenharmony_ci o013_mix, ARRAY_SIZE(o013_mix)), 108062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O014", SND_SOC_NOPM, 0, 0, 108162306a36Sopenharmony_ci o014_mix, ARRAY_SIZE(o014_mix)), 108262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O015", SND_SOC_NOPM, 0, 0, 108362306a36Sopenharmony_ci o015_mix, ARRAY_SIZE(o015_mix)), 108462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O016", SND_SOC_NOPM, 0, 0, 108562306a36Sopenharmony_ci o016_mix, ARRAY_SIZE(o016_mix)), 108662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O017", SND_SOC_NOPM, 0, 0, 108762306a36Sopenharmony_ci o017_mix, ARRAY_SIZE(o017_mix)), 108862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O018", SND_SOC_NOPM, 0, 0, 108962306a36Sopenharmony_ci o018_mix, ARRAY_SIZE(o018_mix)), 109062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O019", SND_SOC_NOPM, 0, 0, 109162306a36Sopenharmony_ci o019_mix, ARRAY_SIZE(o019_mix)), 109262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O020", SND_SOC_NOPM, 0, 0, 109362306a36Sopenharmony_ci o020_mix, ARRAY_SIZE(o020_mix)), 109462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O021", SND_SOC_NOPM, 0, 0, 109562306a36Sopenharmony_ci o021_mix, ARRAY_SIZE(o021_mix)), 109662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O022", SND_SOC_NOPM, 0, 0, 109762306a36Sopenharmony_ci o022_mix, ARRAY_SIZE(o022_mix)), 109862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O023", SND_SOC_NOPM, 0, 0, 109962306a36Sopenharmony_ci o023_mix, ARRAY_SIZE(o023_mix)), 110062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O024", SND_SOC_NOPM, 0, 0, 110162306a36Sopenharmony_ci o024_mix, ARRAY_SIZE(o024_mix)), 110262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O025", SND_SOC_NOPM, 0, 0, 110362306a36Sopenharmony_ci o025_mix, ARRAY_SIZE(o025_mix)), 110462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O026", SND_SOC_NOPM, 0, 0, 110562306a36Sopenharmony_ci o026_mix, ARRAY_SIZE(o026_mix)), 110662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O027", SND_SOC_NOPM, 0, 0, 110762306a36Sopenharmony_ci o027_mix, ARRAY_SIZE(o027_mix)), 110862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O028", SND_SOC_NOPM, 0, 0, 110962306a36Sopenharmony_ci o028_mix, ARRAY_SIZE(o028_mix)), 111062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O029", SND_SOC_NOPM, 0, 0, 111162306a36Sopenharmony_ci o029_mix, ARRAY_SIZE(o029_mix)), 111262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O030", SND_SOC_NOPM, 0, 0, 111362306a36Sopenharmony_ci o030_mix, ARRAY_SIZE(o030_mix)), 111462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O031", SND_SOC_NOPM, 0, 0, 111562306a36Sopenharmony_ci o031_mix, ARRAY_SIZE(o031_mix)), 111662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O032", SND_SOC_NOPM, 0, 0, 111762306a36Sopenharmony_ci o032_mix, ARRAY_SIZE(o032_mix)), 111862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O033", SND_SOC_NOPM, 0, 0, 111962306a36Sopenharmony_ci o033_mix, ARRAY_SIZE(o033_mix)), 112062306a36Sopenharmony_ci 112162306a36Sopenharmony_ci /* UL4 */ 112262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O034", SND_SOC_NOPM, 0, 0, 112362306a36Sopenharmony_ci o034_mix, ARRAY_SIZE(o034_mix)), 112462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O035", SND_SOC_NOPM, 0, 0, 112562306a36Sopenharmony_ci o035_mix, ARRAY_SIZE(o035_mix)), 112662306a36Sopenharmony_ci 112762306a36Sopenharmony_ci /* UL5 */ 112862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O036", SND_SOC_NOPM, 0, 0, 112962306a36Sopenharmony_ci o036_mix, ARRAY_SIZE(o036_mix)), 113062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O037", SND_SOC_NOPM, 0, 0, 113162306a36Sopenharmony_ci o037_mix, ARRAY_SIZE(o037_mix)), 113262306a36Sopenharmony_ci 113362306a36Sopenharmony_ci /* UL10 */ 113462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O038", SND_SOC_NOPM, 0, 0, 113562306a36Sopenharmony_ci o038_mix, ARRAY_SIZE(o038_mix)), 113662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O039", SND_SOC_NOPM, 0, 0, 113762306a36Sopenharmony_ci o039_mix, ARRAY_SIZE(o039_mix)), 113862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O182", SND_SOC_NOPM, 0, 0, 113962306a36Sopenharmony_ci o182_mix, ARRAY_SIZE(o182_mix)), 114062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O183", SND_SOC_NOPM, 0, 0, 114162306a36Sopenharmony_ci o183_mix, ARRAY_SIZE(o183_mix)), 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_ci /* UL2 */ 114462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O040", SND_SOC_NOPM, 0, 0, 114562306a36Sopenharmony_ci o040_mix, ARRAY_SIZE(o040_mix)), 114662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O041", SND_SOC_NOPM, 0, 0, 114762306a36Sopenharmony_ci o041_mix, ARRAY_SIZE(o041_mix)), 114862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O042", SND_SOC_NOPM, 0, 0, 114962306a36Sopenharmony_ci o042_mix, ARRAY_SIZE(o042_mix)), 115062306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O043", SND_SOC_NOPM, 0, 0, 115162306a36Sopenharmony_ci o043_mix, ARRAY_SIZE(o043_mix)), 115262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O044", SND_SOC_NOPM, 0, 0, 115362306a36Sopenharmony_ci o044_mix, ARRAY_SIZE(o044_mix)), 115462306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O045", SND_SOC_NOPM, 0, 0, 115562306a36Sopenharmony_ci o045_mix, ARRAY_SIZE(o045_mix)), 115662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O046", SND_SOC_NOPM, 0, 0, 115762306a36Sopenharmony_ci o046_mix, ARRAY_SIZE(o046_mix)), 115862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("O047", SND_SOC_NOPM, 0, 0, 115962306a36Sopenharmony_ci o047_mix, ARRAY_SIZE(o047_mix)), 116062306a36Sopenharmony_ci}; 116162306a36Sopenharmony_ci 116262306a36Sopenharmony_cistatic const struct snd_soc_dapm_route mt8195_memif_routes[] = { 116362306a36Sopenharmony_ci {"I000", NULL, "DL6"}, 116462306a36Sopenharmony_ci {"I001", NULL, "DL6"}, 116562306a36Sopenharmony_ci 116662306a36Sopenharmony_ci {"I020", NULL, "DL3"}, 116762306a36Sopenharmony_ci {"I021", NULL, "DL3"}, 116862306a36Sopenharmony_ci 116962306a36Sopenharmony_ci {"I022", NULL, "DL11"}, 117062306a36Sopenharmony_ci {"I023", NULL, "DL11"}, 117162306a36Sopenharmony_ci {"I024", NULL, "DL11"}, 117262306a36Sopenharmony_ci {"I025", NULL, "DL11"}, 117362306a36Sopenharmony_ci {"I026", NULL, "DL11"}, 117462306a36Sopenharmony_ci {"I027", NULL, "DL11"}, 117562306a36Sopenharmony_ci {"I028", NULL, "DL11"}, 117662306a36Sopenharmony_ci {"I029", NULL, "DL11"}, 117762306a36Sopenharmony_ci {"I030", NULL, "DL11"}, 117862306a36Sopenharmony_ci {"I031", NULL, "DL11"}, 117962306a36Sopenharmony_ci {"I032", NULL, "DL11"}, 118062306a36Sopenharmony_ci {"I033", NULL, "DL11"}, 118162306a36Sopenharmony_ci {"I034", NULL, "DL11"}, 118262306a36Sopenharmony_ci {"I035", NULL, "DL11"}, 118362306a36Sopenharmony_ci {"I036", NULL, "DL11"}, 118462306a36Sopenharmony_ci {"I037", NULL, "DL11"}, 118562306a36Sopenharmony_ci {"I038", NULL, "DL11"}, 118662306a36Sopenharmony_ci {"I039", NULL, "DL11"}, 118762306a36Sopenharmony_ci {"I040", NULL, "DL11"}, 118862306a36Sopenharmony_ci {"I041", NULL, "DL11"}, 118962306a36Sopenharmony_ci {"I042", NULL, "DL11"}, 119062306a36Sopenharmony_ci {"I043", NULL, "DL11"}, 119162306a36Sopenharmony_ci {"I044", NULL, "DL11"}, 119262306a36Sopenharmony_ci {"I045", NULL, "DL11"}, 119362306a36Sopenharmony_ci 119462306a36Sopenharmony_ci {"DL8_DL11 Mux", "dl8", "DL8"}, 119562306a36Sopenharmony_ci {"DL8_DL11 Mux", "dl11", "DL11"}, 119662306a36Sopenharmony_ci 119762306a36Sopenharmony_ci {"I046", NULL, "DL8_DL11 Mux"}, 119862306a36Sopenharmony_ci {"I047", NULL, "DL8_DL11 Mux"}, 119962306a36Sopenharmony_ci {"I048", NULL, "DL8_DL11 Mux"}, 120062306a36Sopenharmony_ci {"I049", NULL, "DL8_DL11 Mux"}, 120162306a36Sopenharmony_ci {"I050", NULL, "DL8_DL11 Mux"}, 120262306a36Sopenharmony_ci {"I051", NULL, "DL8_DL11 Mux"}, 120362306a36Sopenharmony_ci {"I052", NULL, "DL8_DL11 Mux"}, 120462306a36Sopenharmony_ci {"I053", NULL, "DL8_DL11 Mux"}, 120562306a36Sopenharmony_ci {"I054", NULL, "DL8_DL11 Mux"}, 120662306a36Sopenharmony_ci {"I055", NULL, "DL8_DL11 Mux"}, 120762306a36Sopenharmony_ci {"I056", NULL, "DL8_DL11 Mux"}, 120862306a36Sopenharmony_ci {"I057", NULL, "DL8_DL11 Mux"}, 120962306a36Sopenharmony_ci {"I058", NULL, "DL8_DL11 Mux"}, 121062306a36Sopenharmony_ci {"I059", NULL, "DL8_DL11 Mux"}, 121162306a36Sopenharmony_ci {"I060", NULL, "DL8_DL11 Mux"}, 121262306a36Sopenharmony_ci {"I061", NULL, "DL8_DL11 Mux"}, 121362306a36Sopenharmony_ci {"I062", NULL, "DL8_DL11 Mux"}, 121462306a36Sopenharmony_ci {"I063", NULL, "DL8_DL11 Mux"}, 121562306a36Sopenharmony_ci {"I064", NULL, "DL8_DL11 Mux"}, 121662306a36Sopenharmony_ci {"I065", NULL, "DL8_DL11 Mux"}, 121762306a36Sopenharmony_ci {"I066", NULL, "DL8_DL11 Mux"}, 121862306a36Sopenharmony_ci {"I067", NULL, "DL8_DL11 Mux"}, 121962306a36Sopenharmony_ci {"I068", NULL, "DL8_DL11 Mux"}, 122062306a36Sopenharmony_ci {"I069", NULL, "DL8_DL11 Mux"}, 122162306a36Sopenharmony_ci 122262306a36Sopenharmony_ci {"I070", NULL, "DL2"}, 122362306a36Sopenharmony_ci {"I071", NULL, "DL2"}, 122462306a36Sopenharmony_ci 122562306a36Sopenharmony_ci {"UL9", NULL, "O002"}, 122662306a36Sopenharmony_ci {"UL9", NULL, "O003"}, 122762306a36Sopenharmony_ci {"UL9", NULL, "O004"}, 122862306a36Sopenharmony_ci {"UL9", NULL, "O005"}, 122962306a36Sopenharmony_ci {"UL9", NULL, "O006"}, 123062306a36Sopenharmony_ci {"UL9", NULL, "O007"}, 123162306a36Sopenharmony_ci {"UL9", NULL, "O008"}, 123262306a36Sopenharmony_ci {"UL9", NULL, "O009"}, 123362306a36Sopenharmony_ci {"UL9", NULL, "O010"}, 123462306a36Sopenharmony_ci {"UL9", NULL, "O011"}, 123562306a36Sopenharmony_ci {"UL9", NULL, "O012"}, 123662306a36Sopenharmony_ci {"UL9", NULL, "O013"}, 123762306a36Sopenharmony_ci {"UL9", NULL, "O014"}, 123862306a36Sopenharmony_ci {"UL9", NULL, "O015"}, 123962306a36Sopenharmony_ci {"UL9", NULL, "O016"}, 124062306a36Sopenharmony_ci {"UL9", NULL, "O017"}, 124162306a36Sopenharmony_ci {"UL9", NULL, "O018"}, 124262306a36Sopenharmony_ci {"UL9", NULL, "O019"}, 124362306a36Sopenharmony_ci {"UL9", NULL, "O020"}, 124462306a36Sopenharmony_ci {"UL9", NULL, "O021"}, 124562306a36Sopenharmony_ci {"UL9", NULL, "O022"}, 124662306a36Sopenharmony_ci {"UL9", NULL, "O023"}, 124762306a36Sopenharmony_ci {"UL9", NULL, "O024"}, 124862306a36Sopenharmony_ci {"UL9", NULL, "O025"}, 124962306a36Sopenharmony_ci {"UL9", NULL, "O026"}, 125062306a36Sopenharmony_ci {"UL9", NULL, "O027"}, 125162306a36Sopenharmony_ci {"UL9", NULL, "O028"}, 125262306a36Sopenharmony_ci {"UL9", NULL, "O029"}, 125362306a36Sopenharmony_ci {"UL9", NULL, "O030"}, 125462306a36Sopenharmony_ci {"UL9", NULL, "O031"}, 125562306a36Sopenharmony_ci {"UL9", NULL, "O032"}, 125662306a36Sopenharmony_ci {"UL9", NULL, "O033"}, 125762306a36Sopenharmony_ci 125862306a36Sopenharmony_ci {"UL4", NULL, "O034"}, 125962306a36Sopenharmony_ci {"UL4", NULL, "O035"}, 126062306a36Sopenharmony_ci 126162306a36Sopenharmony_ci {"UL5", NULL, "O036"}, 126262306a36Sopenharmony_ci {"UL5", NULL, "O037"}, 126362306a36Sopenharmony_ci 126462306a36Sopenharmony_ci {"UL10", NULL, "O038"}, 126562306a36Sopenharmony_ci {"UL10", NULL, "O039"}, 126662306a36Sopenharmony_ci {"UL10", NULL, "O182"}, 126762306a36Sopenharmony_ci {"UL10", NULL, "O183"}, 126862306a36Sopenharmony_ci 126962306a36Sopenharmony_ci {"UL2", NULL, "O040"}, 127062306a36Sopenharmony_ci {"UL2", NULL, "O041"}, 127162306a36Sopenharmony_ci {"UL2", NULL, "O042"}, 127262306a36Sopenharmony_ci {"UL2", NULL, "O043"}, 127362306a36Sopenharmony_ci {"UL2", NULL, "O044"}, 127462306a36Sopenharmony_ci {"UL2", NULL, "O045"}, 127562306a36Sopenharmony_ci {"UL2", NULL, "O046"}, 127662306a36Sopenharmony_ci {"UL2", NULL, "O047"}, 127762306a36Sopenharmony_ci 127862306a36Sopenharmony_ci {"O004", "I000 Switch", "I000"}, 127962306a36Sopenharmony_ci {"O005", "I001 Switch", "I001"}, 128062306a36Sopenharmony_ci 128162306a36Sopenharmony_ci {"O006", "I000 Switch", "I000"}, 128262306a36Sopenharmony_ci {"O007", "I001 Switch", "I001"}, 128362306a36Sopenharmony_ci 128462306a36Sopenharmony_ci {"O010", "I022 Switch", "I022"}, 128562306a36Sopenharmony_ci {"O011", "I023 Switch", "I023"}, 128662306a36Sopenharmony_ci {"O012", "I024 Switch", "I024"}, 128762306a36Sopenharmony_ci {"O013", "I025 Switch", "I025"}, 128862306a36Sopenharmony_ci {"O014", "I026 Switch", "I026"}, 128962306a36Sopenharmony_ci {"O015", "I027 Switch", "I027"}, 129062306a36Sopenharmony_ci {"O016", "I028 Switch", "I028"}, 129162306a36Sopenharmony_ci {"O017", "I029 Switch", "I029"}, 129262306a36Sopenharmony_ci 129362306a36Sopenharmony_ci {"O010", "I046 Switch", "I046"}, 129462306a36Sopenharmony_ci {"O011", "I047 Switch", "I047"}, 129562306a36Sopenharmony_ci {"O012", "I048 Switch", "I048"}, 129662306a36Sopenharmony_ci {"O013", "I049 Switch", "I049"}, 129762306a36Sopenharmony_ci {"O014", "I050 Switch", "I050"}, 129862306a36Sopenharmony_ci {"O015", "I051 Switch", "I051"}, 129962306a36Sopenharmony_ci {"O016", "I052 Switch", "I052"}, 130062306a36Sopenharmony_ci {"O017", "I053 Switch", "I053"}, 130162306a36Sopenharmony_ci {"O002", "I022 Switch", "I022"}, 130262306a36Sopenharmony_ci {"O003", "I023 Switch", "I023"}, 130362306a36Sopenharmony_ci {"O004", "I024 Switch", "I024"}, 130462306a36Sopenharmony_ci {"O005", "I025 Switch", "I025"}, 130562306a36Sopenharmony_ci {"O006", "I026 Switch", "I026"}, 130662306a36Sopenharmony_ci {"O007", "I027 Switch", "I027"}, 130762306a36Sopenharmony_ci {"O008", "I028 Switch", "I028"}, 130862306a36Sopenharmony_ci {"O009", "I029 Switch", "I029"}, 130962306a36Sopenharmony_ci {"O010", "I030 Switch", "I030"}, 131062306a36Sopenharmony_ci {"O011", "I031 Switch", "I031"}, 131162306a36Sopenharmony_ci {"O012", "I032 Switch", "I032"}, 131262306a36Sopenharmony_ci {"O013", "I033 Switch", "I033"}, 131362306a36Sopenharmony_ci {"O014", "I034 Switch", "I034"}, 131462306a36Sopenharmony_ci {"O015", "I035 Switch", "I035"}, 131562306a36Sopenharmony_ci {"O016", "I036 Switch", "I036"}, 131662306a36Sopenharmony_ci {"O017", "I037 Switch", "I037"}, 131762306a36Sopenharmony_ci {"O018", "I038 Switch", "I038"}, 131862306a36Sopenharmony_ci {"O019", "I039 Switch", "I039"}, 131962306a36Sopenharmony_ci {"O020", "I040 Switch", "I040"}, 132062306a36Sopenharmony_ci {"O021", "I041 Switch", "I041"}, 132162306a36Sopenharmony_ci {"O022", "I042 Switch", "I042"}, 132262306a36Sopenharmony_ci {"O023", "I043 Switch", "I043"}, 132362306a36Sopenharmony_ci {"O024", "I044 Switch", "I044"}, 132462306a36Sopenharmony_ci {"O025", "I045 Switch", "I045"}, 132562306a36Sopenharmony_ci {"O026", "I046 Switch", "I046"}, 132662306a36Sopenharmony_ci {"O027", "I047 Switch", "I047"}, 132762306a36Sopenharmony_ci {"O028", "I048 Switch", "I048"}, 132862306a36Sopenharmony_ci {"O029", "I049 Switch", "I049"}, 132962306a36Sopenharmony_ci {"O030", "I050 Switch", "I050"}, 133062306a36Sopenharmony_ci {"O031", "I051 Switch", "I051"}, 133162306a36Sopenharmony_ci {"O032", "I052 Switch", "I052"}, 133262306a36Sopenharmony_ci {"O033", "I053 Switch", "I053"}, 133362306a36Sopenharmony_ci 133462306a36Sopenharmony_ci {"O002", "I000 Switch", "I000"}, 133562306a36Sopenharmony_ci {"O003", "I001 Switch", "I001"}, 133662306a36Sopenharmony_ci {"O002", "I020 Switch", "I020"}, 133762306a36Sopenharmony_ci {"O003", "I021 Switch", "I021"}, 133862306a36Sopenharmony_ci {"O002", "I070 Switch", "I070"}, 133962306a36Sopenharmony_ci {"O003", "I071 Switch", "I071"}, 134062306a36Sopenharmony_ci 134162306a36Sopenharmony_ci {"O034", "I000 Switch", "I000"}, 134262306a36Sopenharmony_ci {"O035", "I001 Switch", "I001"}, 134362306a36Sopenharmony_ci {"O034", "I002 Switch", "I002"}, 134462306a36Sopenharmony_ci {"O035", "I003 Switch", "I003"}, 134562306a36Sopenharmony_ci {"O034", "I012 Switch", "I012"}, 134662306a36Sopenharmony_ci {"O035", "I013 Switch", "I013"}, 134762306a36Sopenharmony_ci {"O034", "I020 Switch", "I020"}, 134862306a36Sopenharmony_ci {"O035", "I021 Switch", "I021"}, 134962306a36Sopenharmony_ci {"O034", "I070 Switch", "I070"}, 135062306a36Sopenharmony_ci {"O035", "I071 Switch", "I071"}, 135162306a36Sopenharmony_ci {"O034", "I072 Switch", "I072"}, 135262306a36Sopenharmony_ci {"O035", "I073 Switch", "I073"}, 135362306a36Sopenharmony_ci 135462306a36Sopenharmony_ci {"O036", "I000 Switch", "I000"}, 135562306a36Sopenharmony_ci {"O037", "I001 Switch", "I001"}, 135662306a36Sopenharmony_ci {"O036", "I012 Switch", "I012"}, 135762306a36Sopenharmony_ci {"O037", "I013 Switch", "I013"}, 135862306a36Sopenharmony_ci {"O036", "I020 Switch", "I020"}, 135962306a36Sopenharmony_ci {"O037", "I021 Switch", "I021"}, 136062306a36Sopenharmony_ci {"O036", "I070 Switch", "I070"}, 136162306a36Sopenharmony_ci {"O037", "I071 Switch", "I071"}, 136262306a36Sopenharmony_ci {"O036", "I168 Switch", "I168"}, 136362306a36Sopenharmony_ci {"O037", "I169 Switch", "I169"}, 136462306a36Sopenharmony_ci 136562306a36Sopenharmony_ci {"O038", "I022 Switch", "I022"}, 136662306a36Sopenharmony_ci {"O039", "I023 Switch", "I023"}, 136762306a36Sopenharmony_ci {"O182", "I024 Switch", "I024"}, 136862306a36Sopenharmony_ci {"O183", "I025 Switch", "I025"}, 136962306a36Sopenharmony_ci 137062306a36Sopenharmony_ci {"O040", "I022 Switch", "I022"}, 137162306a36Sopenharmony_ci {"O041", "I023 Switch", "I023"}, 137262306a36Sopenharmony_ci {"O042", "I024 Switch", "I024"}, 137362306a36Sopenharmony_ci {"O043", "I025 Switch", "I025"}, 137462306a36Sopenharmony_ci {"O044", "I026 Switch", "I026"}, 137562306a36Sopenharmony_ci {"O045", "I027 Switch", "I027"}, 137662306a36Sopenharmony_ci {"O046", "I028 Switch", "I028"}, 137762306a36Sopenharmony_ci {"O047", "I029 Switch", "I029"}, 137862306a36Sopenharmony_ci 137962306a36Sopenharmony_ci {"O040", "I002 Switch", "I002"}, 138062306a36Sopenharmony_ci {"O041", "I003 Switch", "I003"}, 138162306a36Sopenharmony_ci {"O002", "I012 Switch", "I012"}, 138262306a36Sopenharmony_ci {"O003", "I013 Switch", "I013"}, 138362306a36Sopenharmony_ci {"O004", "I014 Switch", "I014"}, 138462306a36Sopenharmony_ci {"O005", "I015 Switch", "I015"}, 138562306a36Sopenharmony_ci {"O006", "I016 Switch", "I016"}, 138662306a36Sopenharmony_ci {"O007", "I017 Switch", "I017"}, 138762306a36Sopenharmony_ci {"O008", "I018 Switch", "I018"}, 138862306a36Sopenharmony_ci {"O009", "I019 Switch", "I019"}, 138962306a36Sopenharmony_ci 139062306a36Sopenharmony_ci {"O040", "I012 Switch", "I012"}, 139162306a36Sopenharmony_ci {"O041", "I013 Switch", "I013"}, 139262306a36Sopenharmony_ci {"O042", "I014 Switch", "I014"}, 139362306a36Sopenharmony_ci {"O043", "I015 Switch", "I015"}, 139462306a36Sopenharmony_ci {"O044", "I016 Switch", "I016"}, 139562306a36Sopenharmony_ci {"O045", "I017 Switch", "I017"}, 139662306a36Sopenharmony_ci {"O046", "I018 Switch", "I018"}, 139762306a36Sopenharmony_ci {"O047", "I019 Switch", "I019"}, 139862306a36Sopenharmony_ci 139962306a36Sopenharmony_ci {"O002", "I072 Switch", "I072"}, 140062306a36Sopenharmony_ci {"O003", "I073 Switch", "I073"}, 140162306a36Sopenharmony_ci {"O004", "I074 Switch", "I074"}, 140262306a36Sopenharmony_ci {"O005", "I075 Switch", "I075"}, 140362306a36Sopenharmony_ci {"O006", "I076 Switch", "I076"}, 140462306a36Sopenharmony_ci {"O007", "I077 Switch", "I077"}, 140562306a36Sopenharmony_ci {"O008", "I078 Switch", "I078"}, 140662306a36Sopenharmony_ci {"O009", "I079 Switch", "I079"}, 140762306a36Sopenharmony_ci 140862306a36Sopenharmony_ci {"O010", "I072 Switch", "I072"}, 140962306a36Sopenharmony_ci {"O011", "I073 Switch", "I073"}, 141062306a36Sopenharmony_ci {"O012", "I074 Switch", "I074"}, 141162306a36Sopenharmony_ci {"O013", "I075 Switch", "I075"}, 141262306a36Sopenharmony_ci {"O014", "I076 Switch", "I076"}, 141362306a36Sopenharmony_ci {"O015", "I077 Switch", "I077"}, 141462306a36Sopenharmony_ci {"O016", "I078 Switch", "I078"}, 141562306a36Sopenharmony_ci {"O017", "I079 Switch", "I079"}, 141662306a36Sopenharmony_ci {"O018", "I080 Switch", "I080"}, 141762306a36Sopenharmony_ci {"O019", "I081 Switch", "I081"}, 141862306a36Sopenharmony_ci {"O020", "I082 Switch", "I082"}, 141962306a36Sopenharmony_ci {"O021", "I083 Switch", "I083"}, 142062306a36Sopenharmony_ci {"O022", "I084 Switch", "I084"}, 142162306a36Sopenharmony_ci {"O023", "I085 Switch", "I085"}, 142262306a36Sopenharmony_ci {"O024", "I086 Switch", "I086"}, 142362306a36Sopenharmony_ci {"O025", "I087 Switch", "I087"}, 142462306a36Sopenharmony_ci {"O026", "I088 Switch", "I088"}, 142562306a36Sopenharmony_ci {"O027", "I089 Switch", "I089"}, 142662306a36Sopenharmony_ci {"O028", "I090 Switch", "I090"}, 142762306a36Sopenharmony_ci {"O029", "I091 Switch", "I091"}, 142862306a36Sopenharmony_ci {"O030", "I092 Switch", "I092"}, 142962306a36Sopenharmony_ci {"O031", "I093 Switch", "I093"}, 143062306a36Sopenharmony_ci {"O032", "I094 Switch", "I094"}, 143162306a36Sopenharmony_ci {"O033", "I095 Switch", "I095"}, 143262306a36Sopenharmony_ci 143362306a36Sopenharmony_ci {"O002", "I168 Switch", "I168"}, 143462306a36Sopenharmony_ci {"O003", "I169 Switch", "I169"}, 143562306a36Sopenharmony_ci {"O004", "I170 Switch", "I170"}, 143662306a36Sopenharmony_ci {"O005", "I171 Switch", "I171"}, 143762306a36Sopenharmony_ci 143862306a36Sopenharmony_ci {"O034", "I168 Switch", "I168"}, 143962306a36Sopenharmony_ci {"O035", "I168 Switch", "I168"}, 144062306a36Sopenharmony_ci {"O035", "I169 Switch", "I169"}, 144162306a36Sopenharmony_ci 144262306a36Sopenharmony_ci {"O034", "I170 Switch", "I170"}, 144362306a36Sopenharmony_ci {"O035", "I170 Switch", "I170"}, 144462306a36Sopenharmony_ci {"O035", "I171 Switch", "I171"}, 144562306a36Sopenharmony_ci 144662306a36Sopenharmony_ci {"O040", "I168 Switch", "I168"}, 144762306a36Sopenharmony_ci {"O041", "I169 Switch", "I169"}, 144862306a36Sopenharmony_ci {"O042", "I170 Switch", "I170"}, 144962306a36Sopenharmony_ci {"O043", "I171 Switch", "I171"}, 145062306a36Sopenharmony_ci}; 145162306a36Sopenharmony_ci 145262306a36Sopenharmony_cistatic const char * const mt8195_afe_1x_en_sel_text[] = { 145362306a36Sopenharmony_ci "a1sys_a2sys", "a3sys", "a4sys", 145462306a36Sopenharmony_ci}; 145562306a36Sopenharmony_ci 145662306a36Sopenharmony_cistatic const unsigned int mt8195_afe_1x_en_sel_values[] = { 145762306a36Sopenharmony_ci 0, 1, 2, 145862306a36Sopenharmony_ci}; 145962306a36Sopenharmony_ci 146062306a36Sopenharmony_cistatic int mt8195_memif_1x_en_sel_put(struct snd_kcontrol *kcontrol, 146162306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 146262306a36Sopenharmony_ci{ 146362306a36Sopenharmony_ci struct snd_soc_component *component = 146462306a36Sopenharmony_ci snd_soc_kcontrol_component(kcontrol); 146562306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); 146662306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 146762306a36Sopenharmony_ci struct mtk_dai_memif_priv *memif_priv; 146862306a36Sopenharmony_ci unsigned int dai_id = kcontrol->id.device; 146962306a36Sopenharmony_ci long val = ucontrol->value.integer.value[0]; 147062306a36Sopenharmony_ci int ret = 0; 147162306a36Sopenharmony_ci 147262306a36Sopenharmony_ci memif_priv = afe_priv->dai_priv[dai_id]; 147362306a36Sopenharmony_ci 147462306a36Sopenharmony_ci if (val == memif_priv->asys_timing_sel) 147562306a36Sopenharmony_ci return 0; 147662306a36Sopenharmony_ci 147762306a36Sopenharmony_ci ret = snd_soc_put_enum_double(kcontrol, ucontrol); 147862306a36Sopenharmony_ci 147962306a36Sopenharmony_ci memif_priv->asys_timing_sel = val; 148062306a36Sopenharmony_ci 148162306a36Sopenharmony_ci return ret; 148262306a36Sopenharmony_ci} 148362306a36Sopenharmony_ci 148462306a36Sopenharmony_cistatic int mt8195_asys_irq_1x_en_sel_put(struct snd_kcontrol *kcontrol, 148562306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 148662306a36Sopenharmony_ci{ 148762306a36Sopenharmony_ci struct snd_soc_component *component = 148862306a36Sopenharmony_ci snd_soc_kcontrol_component(kcontrol); 148962306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); 149062306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 149162306a36Sopenharmony_ci unsigned int id = kcontrol->id.device; 149262306a36Sopenharmony_ci long val = ucontrol->value.integer.value[0]; 149362306a36Sopenharmony_ci int ret = 0; 149462306a36Sopenharmony_ci 149562306a36Sopenharmony_ci if (val == afe_priv->irq_priv[id].asys_timing_sel) 149662306a36Sopenharmony_ci return 0; 149762306a36Sopenharmony_ci 149862306a36Sopenharmony_ci ret = snd_soc_put_enum_double(kcontrol, ucontrol); 149962306a36Sopenharmony_ci 150062306a36Sopenharmony_ci afe_priv->irq_priv[id].asys_timing_sel = val; 150162306a36Sopenharmony_ci 150262306a36Sopenharmony_ci return ret; 150362306a36Sopenharmony_ci} 150462306a36Sopenharmony_ci 150562306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl2_1x_en_sel_enum, 150662306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 18, 0x3, 150762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 150862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 150962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl3_1x_en_sel_enum, 151062306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 20, 0x3, 151162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 151262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 151362306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl6_1x_en_sel_enum, 151462306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 22, 0x3, 151562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 151662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 151762306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl7_1x_en_sel_enum, 151862306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 24, 0x3, 151962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 152062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 152162306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl8_1x_en_sel_enum, 152262306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 26, 0x3, 152362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 152462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 152562306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl10_1x_en_sel_enum, 152662306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 28, 0x3, 152762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 152862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 152962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(dl11_1x_en_sel_enum, 153062306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 30, 0x3, 153162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 153262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 153362306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul1_1x_en_sel_enum, 153462306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 0, 0x3, 153562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 153662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 153762306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul2_1x_en_sel_enum, 153862306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 2, 0x3, 153962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 154062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 154162306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul3_1x_en_sel_enum, 154262306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 4, 0x3, 154362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 154462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 154562306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul4_1x_en_sel_enum, 154662306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 6, 0x3, 154762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 154862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 154962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul5_1x_en_sel_enum, 155062306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 8, 0x3, 155162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 155262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 155362306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul6_1x_en_sel_enum, 155462306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 10, 0x3, 155562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 155662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 155762306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul8_1x_en_sel_enum, 155862306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 12, 0x3, 155962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 156062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 156162306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul9_1x_en_sel_enum, 156262306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 14, 0x3, 156362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 156462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 156562306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(ul10_1x_en_sel_enum, 156662306a36Sopenharmony_ci A3_A4_TIMING_SEL1, 16, 0x3, 156762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 156862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 156962306a36Sopenharmony_ci 157062306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq1_1x_en_sel_enum, 157162306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 0, 0x3, 157262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 157362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 157462306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq2_1x_en_sel_enum, 157562306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 2, 0x3, 157662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 157762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 157862306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq3_1x_en_sel_enum, 157962306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 4, 0x3, 158062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 158162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 158262306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq4_1x_en_sel_enum, 158362306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 6, 0x3, 158462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 158562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 158662306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq5_1x_en_sel_enum, 158762306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 8, 0x3, 158862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 158962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 159062306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq6_1x_en_sel_enum, 159162306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 10, 0x3, 159262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 159362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 159462306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq7_1x_en_sel_enum, 159562306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 12, 0x3, 159662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 159762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 159862306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq8_1x_en_sel_enum, 159962306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 14, 0x3, 160062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 160162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 160262306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq9_1x_en_sel_enum, 160362306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 16, 0x3, 160462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 160562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 160662306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq10_1x_en_sel_enum, 160762306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 18, 0x3, 160862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 160962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 161062306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq11_1x_en_sel_enum, 161162306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 20, 0x3, 161262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 161362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 161462306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq12_1x_en_sel_enum, 161562306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 22, 0x3, 161662306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 161762306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 161862306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq13_1x_en_sel_enum, 161962306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 24, 0x3, 162062306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 162162306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 162262306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq14_1x_en_sel_enum, 162362306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 26, 0x3, 162462306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 162562306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 162662306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq15_1x_en_sel_enum, 162762306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 28, 0x3, 162862306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 162962306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 163062306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(asys_irq16_1x_en_sel_enum, 163162306a36Sopenharmony_ci A3_A4_TIMING_SEL6, 30, 0x3, 163262306a36Sopenharmony_ci mt8195_afe_1x_en_sel_text, 163362306a36Sopenharmony_ci mt8195_afe_1x_en_sel_values); 163462306a36Sopenharmony_ci 163562306a36Sopenharmony_cistatic const struct snd_kcontrol_new mt8195_memif_controls[] = { 163662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl2_1x_en_sel", 163762306a36Sopenharmony_ci dl2_1x_en_sel_enum, 163862306a36Sopenharmony_ci snd_soc_get_enum_double, 163962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 164062306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL2), 164162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl3_1x_en_sel", 164262306a36Sopenharmony_ci dl3_1x_en_sel_enum, 164362306a36Sopenharmony_ci snd_soc_get_enum_double, 164462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 164562306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL3), 164662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl6_1x_en_sel", 164762306a36Sopenharmony_ci dl6_1x_en_sel_enum, 164862306a36Sopenharmony_ci snd_soc_get_enum_double, 164962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 165062306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL6), 165162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl7_1x_en_sel", 165262306a36Sopenharmony_ci dl7_1x_en_sel_enum, 165362306a36Sopenharmony_ci snd_soc_get_enum_double, 165462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 165562306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL7), 165662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl8_1x_en_sel", 165762306a36Sopenharmony_ci dl8_1x_en_sel_enum, 165862306a36Sopenharmony_ci snd_soc_get_enum_double, 165962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 166062306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL8), 166162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl10_1x_en_sel", 166262306a36Sopenharmony_ci dl10_1x_en_sel_enum, 166362306a36Sopenharmony_ci snd_soc_get_enum_double, 166462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 166562306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL10), 166662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("dl11_1x_en_sel", 166762306a36Sopenharmony_ci dl11_1x_en_sel_enum, 166862306a36Sopenharmony_ci snd_soc_get_enum_double, 166962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 167062306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL11), 167162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul1_1x_en_sel", 167262306a36Sopenharmony_ci ul1_1x_en_sel_enum, 167362306a36Sopenharmony_ci snd_soc_get_enum_double, 167462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 167562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL1), 167662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul2_1x_en_sel", 167762306a36Sopenharmony_ci ul2_1x_en_sel_enum, 167862306a36Sopenharmony_ci snd_soc_get_enum_double, 167962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 168062306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL2), 168162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul3_1x_en_sel", 168262306a36Sopenharmony_ci ul3_1x_en_sel_enum, 168362306a36Sopenharmony_ci snd_soc_get_enum_double, 168462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 168562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL3), 168662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul4_1x_en_sel", 168762306a36Sopenharmony_ci ul4_1x_en_sel_enum, 168862306a36Sopenharmony_ci snd_soc_get_enum_double, 168962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 169062306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL4), 169162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul5_1x_en_sel", 169262306a36Sopenharmony_ci ul5_1x_en_sel_enum, 169362306a36Sopenharmony_ci snd_soc_get_enum_double, 169462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 169562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL5), 169662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul6_1x_en_sel", 169762306a36Sopenharmony_ci ul6_1x_en_sel_enum, 169862306a36Sopenharmony_ci snd_soc_get_enum_double, 169962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 170062306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL6), 170162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul8_1x_en_sel", 170262306a36Sopenharmony_ci ul8_1x_en_sel_enum, 170362306a36Sopenharmony_ci snd_soc_get_enum_double, 170462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 170562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL8), 170662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul9_1x_en_sel", 170762306a36Sopenharmony_ci ul9_1x_en_sel_enum, 170862306a36Sopenharmony_ci snd_soc_get_enum_double, 170962306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 171062306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL9), 171162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("ul10_1x_en_sel", 171262306a36Sopenharmony_ci ul10_1x_en_sel_enum, 171362306a36Sopenharmony_ci snd_soc_get_enum_double, 171462306a36Sopenharmony_ci mt8195_memif_1x_en_sel_put, 171562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL10), 171662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq1_1x_en_sel", 171762306a36Sopenharmony_ci asys_irq1_1x_en_sel_enum, 171862306a36Sopenharmony_ci snd_soc_get_enum_double, 171962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 172062306a36Sopenharmony_ci MT8195_AFE_IRQ_13), 172162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq2_1x_en_sel", 172262306a36Sopenharmony_ci asys_irq2_1x_en_sel_enum, 172362306a36Sopenharmony_ci snd_soc_get_enum_double, 172462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 172562306a36Sopenharmony_ci MT8195_AFE_IRQ_14), 172662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq3_1x_en_sel", 172762306a36Sopenharmony_ci asys_irq3_1x_en_sel_enum, 172862306a36Sopenharmony_ci snd_soc_get_enum_double, 172962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 173062306a36Sopenharmony_ci MT8195_AFE_IRQ_15), 173162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq4_1x_en_sel", 173262306a36Sopenharmony_ci asys_irq4_1x_en_sel_enum, 173362306a36Sopenharmony_ci snd_soc_get_enum_double, 173462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 173562306a36Sopenharmony_ci MT8195_AFE_IRQ_16), 173662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq5_1x_en_sel", 173762306a36Sopenharmony_ci asys_irq5_1x_en_sel_enum, 173862306a36Sopenharmony_ci snd_soc_get_enum_double, 173962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 174062306a36Sopenharmony_ci MT8195_AFE_IRQ_17), 174162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq6_1x_en_sel", 174262306a36Sopenharmony_ci asys_irq6_1x_en_sel_enum, 174362306a36Sopenharmony_ci snd_soc_get_enum_double, 174462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 174562306a36Sopenharmony_ci MT8195_AFE_IRQ_18), 174662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq7_1x_en_sel", 174762306a36Sopenharmony_ci asys_irq7_1x_en_sel_enum, 174862306a36Sopenharmony_ci snd_soc_get_enum_double, 174962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 175062306a36Sopenharmony_ci MT8195_AFE_IRQ_19), 175162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq8_1x_en_sel", 175262306a36Sopenharmony_ci asys_irq8_1x_en_sel_enum, 175362306a36Sopenharmony_ci snd_soc_get_enum_double, 175462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 175562306a36Sopenharmony_ci MT8195_AFE_IRQ_20), 175662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq9_1x_en_sel", 175762306a36Sopenharmony_ci asys_irq9_1x_en_sel_enum, 175862306a36Sopenharmony_ci snd_soc_get_enum_double, 175962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 176062306a36Sopenharmony_ci MT8195_AFE_IRQ_21), 176162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq10_1x_en_sel", 176262306a36Sopenharmony_ci asys_irq10_1x_en_sel_enum, 176362306a36Sopenharmony_ci snd_soc_get_enum_double, 176462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 176562306a36Sopenharmony_ci MT8195_AFE_IRQ_22), 176662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq11_1x_en_sel", 176762306a36Sopenharmony_ci asys_irq11_1x_en_sel_enum, 176862306a36Sopenharmony_ci snd_soc_get_enum_double, 176962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 177062306a36Sopenharmony_ci MT8195_AFE_IRQ_23), 177162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq12_1x_en_sel", 177262306a36Sopenharmony_ci asys_irq12_1x_en_sel_enum, 177362306a36Sopenharmony_ci snd_soc_get_enum_double, 177462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 177562306a36Sopenharmony_ci MT8195_AFE_IRQ_24), 177662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq13_1x_en_sel", 177762306a36Sopenharmony_ci asys_irq13_1x_en_sel_enum, 177862306a36Sopenharmony_ci snd_soc_get_enum_double, 177962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 178062306a36Sopenharmony_ci MT8195_AFE_IRQ_25), 178162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq14_1x_en_sel", 178262306a36Sopenharmony_ci asys_irq14_1x_en_sel_enum, 178362306a36Sopenharmony_ci snd_soc_get_enum_double, 178462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 178562306a36Sopenharmony_ci MT8195_AFE_IRQ_26), 178662306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq15_1x_en_sel", 178762306a36Sopenharmony_ci asys_irq15_1x_en_sel_enum, 178862306a36Sopenharmony_ci snd_soc_get_enum_double, 178962306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 179062306a36Sopenharmony_ci MT8195_AFE_IRQ_27), 179162306a36Sopenharmony_ci MT8195_SOC_ENUM_EXT("asys_irq16_1x_en_sel", 179262306a36Sopenharmony_ci asys_irq16_1x_en_sel_enum, 179362306a36Sopenharmony_ci snd_soc_get_enum_double, 179462306a36Sopenharmony_ci mt8195_asys_irq_1x_en_sel_put, 179562306a36Sopenharmony_ci MT8195_AFE_IRQ_28), 179662306a36Sopenharmony_ci}; 179762306a36Sopenharmony_ci 179862306a36Sopenharmony_cistatic const struct snd_soc_component_driver mt8195_afe_pcm_dai_component = { 179962306a36Sopenharmony_ci .name = "mt8195-afe-pcm-dai", 180062306a36Sopenharmony_ci}; 180162306a36Sopenharmony_ci 180262306a36Sopenharmony_cistatic const struct mtk_base_memif_data memif_data[MT8195_AFE_MEMIF_NUM] = { 180362306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL2] = { 180462306a36Sopenharmony_ci .name = "DL2", 180562306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL2, 180662306a36Sopenharmony_ci .reg_ofs_base = AFE_DL2_BASE, 180762306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL2_CUR, 180862306a36Sopenharmony_ci .reg_ofs_end = AFE_DL2_END, 180962306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON0, 181062306a36Sopenharmony_ci .fs_shift = 10, 181162306a36Sopenharmony_ci .fs_maskbit = 0x1f, 181262306a36Sopenharmony_ci .mono_reg = -1, 181362306a36Sopenharmony_ci .mono_shift = 0, 181462306a36Sopenharmony_ci .int_odd_flag_reg = -1, 181562306a36Sopenharmony_ci .int_odd_flag_shift = 0, 181662306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 181762306a36Sopenharmony_ci .enable_shift = 18, 181862306a36Sopenharmony_ci .hd_reg = AFE_DL2_CON0, 181962306a36Sopenharmony_ci .hd_shift = 5, 182062306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 182162306a36Sopenharmony_ci .agent_disable_shift = 18, 182262306a36Sopenharmony_ci .ch_num_reg = AFE_DL2_CON0, 182362306a36Sopenharmony_ci .ch_num_shift = 0, 182462306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 182562306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 182662306a36Sopenharmony_ci .msb_shift = 18, 182762306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 182862306a36Sopenharmony_ci .msb_end_shift = 18, 182962306a36Sopenharmony_ci }, 183062306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL3] = { 183162306a36Sopenharmony_ci .name = "DL3", 183262306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL3, 183362306a36Sopenharmony_ci .reg_ofs_base = AFE_DL3_BASE, 183462306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL3_CUR, 183562306a36Sopenharmony_ci .reg_ofs_end = AFE_DL3_END, 183662306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON0, 183762306a36Sopenharmony_ci .fs_shift = 15, 183862306a36Sopenharmony_ci .fs_maskbit = 0x1f, 183962306a36Sopenharmony_ci .mono_reg = -1, 184062306a36Sopenharmony_ci .mono_shift = 0, 184162306a36Sopenharmony_ci .int_odd_flag_reg = -1, 184262306a36Sopenharmony_ci .int_odd_flag_shift = 0, 184362306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 184462306a36Sopenharmony_ci .enable_shift = 19, 184562306a36Sopenharmony_ci .hd_reg = AFE_DL3_CON0, 184662306a36Sopenharmony_ci .hd_shift = 5, 184762306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 184862306a36Sopenharmony_ci .agent_disable_shift = 19, 184962306a36Sopenharmony_ci .ch_num_reg = AFE_DL3_CON0, 185062306a36Sopenharmony_ci .ch_num_shift = 0, 185162306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 185262306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 185362306a36Sopenharmony_ci .msb_shift = 19, 185462306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 185562306a36Sopenharmony_ci .msb_end_shift = 19, 185662306a36Sopenharmony_ci }, 185762306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL6] = { 185862306a36Sopenharmony_ci .name = "DL6", 185962306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL6, 186062306a36Sopenharmony_ci .reg_ofs_base = AFE_DL6_BASE, 186162306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL6_CUR, 186262306a36Sopenharmony_ci .reg_ofs_end = AFE_DL6_END, 186362306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON1, 186462306a36Sopenharmony_ci .fs_shift = 0, 186562306a36Sopenharmony_ci .fs_maskbit = 0x1f, 186662306a36Sopenharmony_ci .mono_reg = -1, 186762306a36Sopenharmony_ci .mono_shift = 0, 186862306a36Sopenharmony_ci .int_odd_flag_reg = -1, 186962306a36Sopenharmony_ci .int_odd_flag_shift = 0, 187062306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 187162306a36Sopenharmony_ci .enable_shift = 22, 187262306a36Sopenharmony_ci .hd_reg = AFE_DL6_CON0, 187362306a36Sopenharmony_ci .hd_shift = 5, 187462306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 187562306a36Sopenharmony_ci .agent_disable_shift = 22, 187662306a36Sopenharmony_ci .ch_num_reg = AFE_DL6_CON0, 187762306a36Sopenharmony_ci .ch_num_shift = 0, 187862306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 187962306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 188062306a36Sopenharmony_ci .msb_shift = 22, 188162306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 188262306a36Sopenharmony_ci .msb_end_shift = 22, 188362306a36Sopenharmony_ci }, 188462306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL7] = { 188562306a36Sopenharmony_ci .name = "DL7", 188662306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL7, 188762306a36Sopenharmony_ci .reg_ofs_base = AFE_DL7_BASE, 188862306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL7_CUR, 188962306a36Sopenharmony_ci .reg_ofs_end = AFE_DL7_END, 189062306a36Sopenharmony_ci .fs_reg = -1, 189162306a36Sopenharmony_ci .fs_shift = 0, 189262306a36Sopenharmony_ci .fs_maskbit = 0, 189362306a36Sopenharmony_ci .mono_reg = -1, 189462306a36Sopenharmony_ci .mono_shift = 0, 189562306a36Sopenharmony_ci .int_odd_flag_reg = -1, 189662306a36Sopenharmony_ci .int_odd_flag_shift = 0, 189762306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 189862306a36Sopenharmony_ci .enable_shift = 23, 189962306a36Sopenharmony_ci .hd_reg = AFE_DL7_CON0, 190062306a36Sopenharmony_ci .hd_shift = 5, 190162306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 190262306a36Sopenharmony_ci .agent_disable_shift = 23, 190362306a36Sopenharmony_ci .ch_num_reg = AFE_DL7_CON0, 190462306a36Sopenharmony_ci .ch_num_shift = 0, 190562306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 190662306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 190762306a36Sopenharmony_ci .msb_shift = 23, 190862306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 190962306a36Sopenharmony_ci .msb_end_shift = 23, 191062306a36Sopenharmony_ci }, 191162306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL8] = { 191262306a36Sopenharmony_ci .name = "DL8", 191362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL8, 191462306a36Sopenharmony_ci .reg_ofs_base = AFE_DL8_BASE, 191562306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL8_CUR, 191662306a36Sopenharmony_ci .reg_ofs_end = AFE_DL8_END, 191762306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON1, 191862306a36Sopenharmony_ci .fs_shift = 10, 191962306a36Sopenharmony_ci .fs_maskbit = 0x1f, 192062306a36Sopenharmony_ci .mono_reg = -1, 192162306a36Sopenharmony_ci .mono_shift = 0, 192262306a36Sopenharmony_ci .int_odd_flag_reg = -1, 192362306a36Sopenharmony_ci .int_odd_flag_shift = 0, 192462306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 192562306a36Sopenharmony_ci .enable_shift = 24, 192662306a36Sopenharmony_ci .hd_reg = AFE_DL8_CON0, 192762306a36Sopenharmony_ci .hd_shift = 6, 192862306a36Sopenharmony_ci .agent_disable_reg = -1, 192962306a36Sopenharmony_ci .agent_disable_shift = 0, 193062306a36Sopenharmony_ci .ch_num_reg = AFE_DL8_CON0, 193162306a36Sopenharmony_ci .ch_num_shift = 0, 193262306a36Sopenharmony_ci .ch_num_maskbit = 0x3f, 193362306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 193462306a36Sopenharmony_ci .msb_shift = 24, 193562306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 193662306a36Sopenharmony_ci .msb_end_shift = 24, 193762306a36Sopenharmony_ci }, 193862306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL10] = { 193962306a36Sopenharmony_ci .name = "DL10", 194062306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL10, 194162306a36Sopenharmony_ci .reg_ofs_base = AFE_DL10_BASE, 194262306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL10_CUR, 194362306a36Sopenharmony_ci .reg_ofs_end = AFE_DL10_END, 194462306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON1, 194562306a36Sopenharmony_ci .fs_shift = 20, 194662306a36Sopenharmony_ci .fs_maskbit = 0x1f, 194762306a36Sopenharmony_ci .mono_reg = -1, 194862306a36Sopenharmony_ci .mono_shift = 0, 194962306a36Sopenharmony_ci .int_odd_flag_reg = -1, 195062306a36Sopenharmony_ci .int_odd_flag_shift = 0, 195162306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 195262306a36Sopenharmony_ci .enable_shift = 26, 195362306a36Sopenharmony_ci .hd_reg = AFE_DL10_CON0, 195462306a36Sopenharmony_ci .hd_shift = 5, 195562306a36Sopenharmony_ci .agent_disable_reg = -1, 195662306a36Sopenharmony_ci .agent_disable_shift = 0, 195762306a36Sopenharmony_ci .ch_num_reg = AFE_DL10_CON0, 195862306a36Sopenharmony_ci .ch_num_shift = 0, 195962306a36Sopenharmony_ci .ch_num_maskbit = 0x1f, 196062306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 196162306a36Sopenharmony_ci .msb_shift = 26, 196262306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 196362306a36Sopenharmony_ci .msb_end_shift = 26, 196462306a36Sopenharmony_ci }, 196562306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL11] = { 196662306a36Sopenharmony_ci .name = "DL11", 196762306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_DL11, 196862306a36Sopenharmony_ci .reg_ofs_base = AFE_DL11_BASE, 196962306a36Sopenharmony_ci .reg_ofs_cur = AFE_DL11_CUR, 197062306a36Sopenharmony_ci .reg_ofs_end = AFE_DL11_END, 197162306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON1, 197262306a36Sopenharmony_ci .fs_shift = 25, 197362306a36Sopenharmony_ci .fs_maskbit = 0x1f, 197462306a36Sopenharmony_ci .mono_reg = -1, 197562306a36Sopenharmony_ci .mono_shift = 0, 197662306a36Sopenharmony_ci .int_odd_flag_reg = -1, 197762306a36Sopenharmony_ci .int_odd_flag_shift = 0, 197862306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 197962306a36Sopenharmony_ci .enable_shift = 27, 198062306a36Sopenharmony_ci .hd_reg = AFE_DL11_CON0, 198162306a36Sopenharmony_ci .hd_shift = 7, 198262306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 198362306a36Sopenharmony_ci .agent_disable_shift = 27, 198462306a36Sopenharmony_ci .ch_num_reg = AFE_DL11_CON0, 198562306a36Sopenharmony_ci .ch_num_shift = 0, 198662306a36Sopenharmony_ci .ch_num_maskbit = 0x7f, 198762306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 198862306a36Sopenharmony_ci .msb_shift = 27, 198962306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 199062306a36Sopenharmony_ci .msb_end_shift = 27, 199162306a36Sopenharmony_ci }, 199262306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL1] = { 199362306a36Sopenharmony_ci .name = "UL1", 199462306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL1, 199562306a36Sopenharmony_ci .reg_ofs_base = AFE_UL1_BASE, 199662306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL1_CUR, 199762306a36Sopenharmony_ci .reg_ofs_end = AFE_UL1_END, 199862306a36Sopenharmony_ci .fs_reg = -1, 199962306a36Sopenharmony_ci .fs_shift = 0, 200062306a36Sopenharmony_ci .fs_maskbit = 0, 200162306a36Sopenharmony_ci .mono_reg = AFE_UL1_CON0, 200262306a36Sopenharmony_ci .mono_shift = 1, 200362306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL1_CON0, 200462306a36Sopenharmony_ci .int_odd_flag_shift = 0, 200562306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 200662306a36Sopenharmony_ci .enable_shift = 1, 200762306a36Sopenharmony_ci .hd_reg = AFE_UL1_CON0, 200862306a36Sopenharmony_ci .hd_shift = 5, 200962306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 201062306a36Sopenharmony_ci .agent_disable_shift = 0, 201162306a36Sopenharmony_ci .ch_num_reg = -1, 201262306a36Sopenharmony_ci .ch_num_shift = 0, 201362306a36Sopenharmony_ci .ch_num_maskbit = 0, 201462306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 201562306a36Sopenharmony_ci .msb_shift = 0, 201662306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 201762306a36Sopenharmony_ci .msb_end_shift = 0, 201862306a36Sopenharmony_ci }, 201962306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL2] = { 202062306a36Sopenharmony_ci .name = "UL2", 202162306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL2, 202262306a36Sopenharmony_ci .reg_ofs_base = AFE_UL2_BASE, 202362306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL2_CUR, 202462306a36Sopenharmony_ci .reg_ofs_end = AFE_UL2_END, 202562306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON2, 202662306a36Sopenharmony_ci .fs_shift = 5, 202762306a36Sopenharmony_ci .fs_maskbit = 0x1f, 202862306a36Sopenharmony_ci .mono_reg = AFE_UL2_CON0, 202962306a36Sopenharmony_ci .mono_shift = 1, 203062306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL2_CON0, 203162306a36Sopenharmony_ci .int_odd_flag_shift = 0, 203262306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 203362306a36Sopenharmony_ci .enable_shift = 2, 203462306a36Sopenharmony_ci .hd_reg = AFE_UL2_CON0, 203562306a36Sopenharmony_ci .hd_shift = 5, 203662306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 203762306a36Sopenharmony_ci .agent_disable_shift = 1, 203862306a36Sopenharmony_ci .ch_num_reg = -1, 203962306a36Sopenharmony_ci .ch_num_shift = 0, 204062306a36Sopenharmony_ci .ch_num_maskbit = 0, 204162306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 204262306a36Sopenharmony_ci .msb_shift = 1, 204362306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 204462306a36Sopenharmony_ci .msb_end_shift = 1, 204562306a36Sopenharmony_ci }, 204662306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL3] = { 204762306a36Sopenharmony_ci .name = "UL3", 204862306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL3, 204962306a36Sopenharmony_ci .reg_ofs_base = AFE_UL3_BASE, 205062306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL3_CUR, 205162306a36Sopenharmony_ci .reg_ofs_end = AFE_UL3_END, 205262306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON2, 205362306a36Sopenharmony_ci .fs_shift = 10, 205462306a36Sopenharmony_ci .fs_maskbit = 0x1f, 205562306a36Sopenharmony_ci .mono_reg = AFE_UL3_CON0, 205662306a36Sopenharmony_ci .mono_shift = 1, 205762306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL3_CON0, 205862306a36Sopenharmony_ci .int_odd_flag_shift = 0, 205962306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 206062306a36Sopenharmony_ci .enable_shift = 3, 206162306a36Sopenharmony_ci .hd_reg = AFE_UL3_CON0, 206262306a36Sopenharmony_ci .hd_shift = 5, 206362306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 206462306a36Sopenharmony_ci .agent_disable_shift = 2, 206562306a36Sopenharmony_ci .ch_num_reg = -1, 206662306a36Sopenharmony_ci .ch_num_shift = 0, 206762306a36Sopenharmony_ci .ch_num_maskbit = 0, 206862306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 206962306a36Sopenharmony_ci .msb_shift = 2, 207062306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 207162306a36Sopenharmony_ci .msb_end_shift = 2, 207262306a36Sopenharmony_ci }, 207362306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL4] = { 207462306a36Sopenharmony_ci .name = "UL4", 207562306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL4, 207662306a36Sopenharmony_ci .reg_ofs_base = AFE_UL4_BASE, 207762306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL4_CUR, 207862306a36Sopenharmony_ci .reg_ofs_end = AFE_UL4_END, 207962306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON2, 208062306a36Sopenharmony_ci .fs_shift = 15, 208162306a36Sopenharmony_ci .fs_maskbit = 0x1f, 208262306a36Sopenharmony_ci .mono_reg = AFE_UL4_CON0, 208362306a36Sopenharmony_ci .mono_shift = 1, 208462306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL4_CON0, 208562306a36Sopenharmony_ci .int_odd_flag_shift = 0, 208662306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 208762306a36Sopenharmony_ci .enable_shift = 4, 208862306a36Sopenharmony_ci .hd_reg = AFE_UL4_CON0, 208962306a36Sopenharmony_ci .hd_shift = 5, 209062306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 209162306a36Sopenharmony_ci .agent_disable_shift = 3, 209262306a36Sopenharmony_ci .ch_num_reg = -1, 209362306a36Sopenharmony_ci .ch_num_shift = 0, 209462306a36Sopenharmony_ci .ch_num_maskbit = 0, 209562306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 209662306a36Sopenharmony_ci .msb_shift = 3, 209762306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 209862306a36Sopenharmony_ci .msb_end_shift = 3, 209962306a36Sopenharmony_ci }, 210062306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL5] = { 210162306a36Sopenharmony_ci .name = "UL5", 210262306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL5, 210362306a36Sopenharmony_ci .reg_ofs_base = AFE_UL5_BASE, 210462306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL5_CUR, 210562306a36Sopenharmony_ci .reg_ofs_end = AFE_UL5_END, 210662306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON2, 210762306a36Sopenharmony_ci .fs_shift = 20, 210862306a36Sopenharmony_ci .fs_maskbit = 0x1f, 210962306a36Sopenharmony_ci .mono_reg = AFE_UL5_CON0, 211062306a36Sopenharmony_ci .mono_shift = 1, 211162306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL5_CON0, 211262306a36Sopenharmony_ci .int_odd_flag_shift = 0, 211362306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 211462306a36Sopenharmony_ci .enable_shift = 5, 211562306a36Sopenharmony_ci .hd_reg = AFE_UL5_CON0, 211662306a36Sopenharmony_ci .hd_shift = 5, 211762306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 211862306a36Sopenharmony_ci .agent_disable_shift = 4, 211962306a36Sopenharmony_ci .ch_num_reg = -1, 212062306a36Sopenharmony_ci .ch_num_shift = 0, 212162306a36Sopenharmony_ci .ch_num_maskbit = 0, 212262306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 212362306a36Sopenharmony_ci .msb_shift = 4, 212462306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 212562306a36Sopenharmony_ci .msb_end_shift = 4, 212662306a36Sopenharmony_ci }, 212762306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL6] = { 212862306a36Sopenharmony_ci .name = "UL6", 212962306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL6, 213062306a36Sopenharmony_ci .reg_ofs_base = AFE_UL6_BASE, 213162306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL6_CUR, 213262306a36Sopenharmony_ci .reg_ofs_end = AFE_UL6_END, 213362306a36Sopenharmony_ci .fs_reg = -1, 213462306a36Sopenharmony_ci .fs_shift = 0, 213562306a36Sopenharmony_ci .fs_maskbit = 0, 213662306a36Sopenharmony_ci .mono_reg = AFE_UL6_CON0, 213762306a36Sopenharmony_ci .mono_shift = 1, 213862306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL6_CON0, 213962306a36Sopenharmony_ci .int_odd_flag_shift = 0, 214062306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 214162306a36Sopenharmony_ci .enable_shift = 6, 214262306a36Sopenharmony_ci .hd_reg = AFE_UL6_CON0, 214362306a36Sopenharmony_ci .hd_shift = 5, 214462306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 214562306a36Sopenharmony_ci .agent_disable_shift = 5, 214662306a36Sopenharmony_ci .ch_num_reg = -1, 214762306a36Sopenharmony_ci .ch_num_shift = 0, 214862306a36Sopenharmony_ci .ch_num_maskbit = 0, 214962306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 215062306a36Sopenharmony_ci .msb_shift = 5, 215162306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 215262306a36Sopenharmony_ci .msb_end_shift = 5, 215362306a36Sopenharmony_ci }, 215462306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL8] = { 215562306a36Sopenharmony_ci .name = "UL8", 215662306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL8, 215762306a36Sopenharmony_ci .reg_ofs_base = AFE_UL8_BASE, 215862306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL8_CUR, 215962306a36Sopenharmony_ci .reg_ofs_end = AFE_UL8_END, 216062306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON3, 216162306a36Sopenharmony_ci .fs_shift = 5, 216262306a36Sopenharmony_ci .fs_maskbit = 0x1f, 216362306a36Sopenharmony_ci .mono_reg = AFE_UL8_CON0, 216462306a36Sopenharmony_ci .mono_shift = 1, 216562306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL8_CON0, 216662306a36Sopenharmony_ci .int_odd_flag_shift = 0, 216762306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 216862306a36Sopenharmony_ci .enable_shift = 8, 216962306a36Sopenharmony_ci .hd_reg = AFE_UL8_CON0, 217062306a36Sopenharmony_ci .hd_shift = 5, 217162306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 217262306a36Sopenharmony_ci .agent_disable_shift = 7, 217362306a36Sopenharmony_ci .ch_num_reg = -1, 217462306a36Sopenharmony_ci .ch_num_shift = 0, 217562306a36Sopenharmony_ci .ch_num_maskbit = 0, 217662306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 217762306a36Sopenharmony_ci .msb_shift = 7, 217862306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 217962306a36Sopenharmony_ci .msb_end_shift = 7, 218062306a36Sopenharmony_ci }, 218162306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL9] = { 218262306a36Sopenharmony_ci .name = "UL9", 218362306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL9, 218462306a36Sopenharmony_ci .reg_ofs_base = AFE_UL9_BASE, 218562306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL9_CUR, 218662306a36Sopenharmony_ci .reg_ofs_end = AFE_UL9_END, 218762306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON3, 218862306a36Sopenharmony_ci .fs_shift = 10, 218962306a36Sopenharmony_ci .fs_maskbit = 0x1f, 219062306a36Sopenharmony_ci .mono_reg = AFE_UL9_CON0, 219162306a36Sopenharmony_ci .mono_shift = 1, 219262306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL9_CON0, 219362306a36Sopenharmony_ci .int_odd_flag_shift = 0, 219462306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 219562306a36Sopenharmony_ci .enable_shift = 9, 219662306a36Sopenharmony_ci .hd_reg = AFE_UL9_CON0, 219762306a36Sopenharmony_ci .hd_shift = 5, 219862306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 219962306a36Sopenharmony_ci .agent_disable_shift = 8, 220062306a36Sopenharmony_ci .ch_num_reg = -1, 220162306a36Sopenharmony_ci .ch_num_shift = 0, 220262306a36Sopenharmony_ci .ch_num_maskbit = 0, 220362306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 220462306a36Sopenharmony_ci .msb_shift = 8, 220562306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 220662306a36Sopenharmony_ci .msb_end_shift = 8, 220762306a36Sopenharmony_ci }, 220862306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL10] = { 220962306a36Sopenharmony_ci .name = "UL10", 221062306a36Sopenharmony_ci .id = MT8195_AFE_MEMIF_UL10, 221162306a36Sopenharmony_ci .reg_ofs_base = AFE_UL10_BASE, 221262306a36Sopenharmony_ci .reg_ofs_cur = AFE_UL10_CUR, 221362306a36Sopenharmony_ci .reg_ofs_end = AFE_UL10_END, 221462306a36Sopenharmony_ci .fs_reg = AFE_MEMIF_AGENT_FS_CON3, 221562306a36Sopenharmony_ci .fs_shift = 15, 221662306a36Sopenharmony_ci .fs_maskbit = 0x1f, 221762306a36Sopenharmony_ci .mono_reg = AFE_UL10_CON0, 221862306a36Sopenharmony_ci .mono_shift = 1, 221962306a36Sopenharmony_ci .int_odd_flag_reg = AFE_UL10_CON0, 222062306a36Sopenharmony_ci .int_odd_flag_shift = 0, 222162306a36Sopenharmony_ci .enable_reg = AFE_DAC_CON0, 222262306a36Sopenharmony_ci .enable_shift = 10, 222362306a36Sopenharmony_ci .hd_reg = AFE_UL10_CON0, 222462306a36Sopenharmony_ci .hd_shift = 5, 222562306a36Sopenharmony_ci .agent_disable_reg = AUDIO_TOP_CON5, 222662306a36Sopenharmony_ci .agent_disable_shift = 9, 222762306a36Sopenharmony_ci .ch_num_reg = -1, 222862306a36Sopenharmony_ci .ch_num_shift = 0, 222962306a36Sopenharmony_ci .ch_num_maskbit = 0, 223062306a36Sopenharmony_ci .msb_reg = AFE_NORMAL_BASE_ADR_MSB, 223162306a36Sopenharmony_ci .msb_shift = 9, 223262306a36Sopenharmony_ci .msb_end_reg = AFE_NORMAL_END_ADR_MSB, 223362306a36Sopenharmony_ci .msb_end_shift = 9, 223462306a36Sopenharmony_ci }, 223562306a36Sopenharmony_ci}; 223662306a36Sopenharmony_ci 223762306a36Sopenharmony_cistatic const struct mtk_base_irq_data irq_data_array[MT8195_AFE_IRQ_NUM] = { 223862306a36Sopenharmony_ci [MT8195_AFE_IRQ_1] = { 223962306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_1, 224062306a36Sopenharmony_ci .irq_cnt_reg = -1, 224162306a36Sopenharmony_ci .irq_cnt_shift = 0, 224262306a36Sopenharmony_ci .irq_cnt_maskbit = 0, 224362306a36Sopenharmony_ci .irq_fs_reg = -1, 224462306a36Sopenharmony_ci .irq_fs_shift = 0, 224562306a36Sopenharmony_ci .irq_fs_maskbit = 0, 224662306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ1_CON, 224762306a36Sopenharmony_ci .irq_en_shift = 31, 224862306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 224962306a36Sopenharmony_ci .irq_clr_shift = 0, 225062306a36Sopenharmony_ci .irq_status_shift = 16, 225162306a36Sopenharmony_ci }, 225262306a36Sopenharmony_ci [MT8195_AFE_IRQ_2] = { 225362306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_2, 225462306a36Sopenharmony_ci .irq_cnt_reg = -1, 225562306a36Sopenharmony_ci .irq_cnt_shift = 0, 225662306a36Sopenharmony_ci .irq_cnt_maskbit = 0, 225762306a36Sopenharmony_ci .irq_fs_reg = -1, 225862306a36Sopenharmony_ci .irq_fs_shift = 0, 225962306a36Sopenharmony_ci .irq_fs_maskbit = 0, 226062306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ2_CON, 226162306a36Sopenharmony_ci .irq_en_shift = 31, 226262306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 226362306a36Sopenharmony_ci .irq_clr_shift = 1, 226462306a36Sopenharmony_ci .irq_status_shift = 17, 226562306a36Sopenharmony_ci }, 226662306a36Sopenharmony_ci [MT8195_AFE_IRQ_3] = { 226762306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_3, 226862306a36Sopenharmony_ci .irq_cnt_reg = AFE_IRQ3_CON, 226962306a36Sopenharmony_ci .irq_cnt_shift = 0, 227062306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 227162306a36Sopenharmony_ci .irq_fs_reg = -1, 227262306a36Sopenharmony_ci .irq_fs_shift = 0, 227362306a36Sopenharmony_ci .irq_fs_maskbit = 0, 227462306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ3_CON, 227562306a36Sopenharmony_ci .irq_en_shift = 31, 227662306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 227762306a36Sopenharmony_ci .irq_clr_shift = 2, 227862306a36Sopenharmony_ci .irq_status_shift = 18, 227962306a36Sopenharmony_ci }, 228062306a36Sopenharmony_ci [MT8195_AFE_IRQ_8] = { 228162306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_8, 228262306a36Sopenharmony_ci .irq_cnt_reg = -1, 228362306a36Sopenharmony_ci .irq_cnt_shift = 0, 228462306a36Sopenharmony_ci .irq_cnt_maskbit = 0, 228562306a36Sopenharmony_ci .irq_fs_reg = -1, 228662306a36Sopenharmony_ci .irq_fs_shift = 0, 228762306a36Sopenharmony_ci .irq_fs_maskbit = 0, 228862306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ8_CON, 228962306a36Sopenharmony_ci .irq_en_shift = 31, 229062306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 229162306a36Sopenharmony_ci .irq_clr_shift = 7, 229262306a36Sopenharmony_ci .irq_status_shift = 23, 229362306a36Sopenharmony_ci }, 229462306a36Sopenharmony_ci [MT8195_AFE_IRQ_9] = { 229562306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_9, 229662306a36Sopenharmony_ci .irq_cnt_reg = AFE_IRQ9_CON, 229762306a36Sopenharmony_ci .irq_cnt_shift = 0, 229862306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 229962306a36Sopenharmony_ci .irq_fs_reg = -1, 230062306a36Sopenharmony_ci .irq_fs_shift = 0, 230162306a36Sopenharmony_ci .irq_fs_maskbit = 0, 230262306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ9_CON, 230362306a36Sopenharmony_ci .irq_en_shift = 31, 230462306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 230562306a36Sopenharmony_ci .irq_clr_shift = 8, 230662306a36Sopenharmony_ci .irq_status_shift = 24, 230762306a36Sopenharmony_ci }, 230862306a36Sopenharmony_ci [MT8195_AFE_IRQ_10] = { 230962306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_10, 231062306a36Sopenharmony_ci .irq_cnt_reg = -1, 231162306a36Sopenharmony_ci .irq_cnt_shift = 0, 231262306a36Sopenharmony_ci .irq_cnt_maskbit = 0, 231362306a36Sopenharmony_ci .irq_fs_reg = -1, 231462306a36Sopenharmony_ci .irq_fs_shift = 0, 231562306a36Sopenharmony_ci .irq_fs_maskbit = 0, 231662306a36Sopenharmony_ci .irq_en_reg = AFE_IRQ10_CON, 231762306a36Sopenharmony_ci .irq_en_shift = 31, 231862306a36Sopenharmony_ci .irq_clr_reg = AFE_IRQ_MCU_CLR, 231962306a36Sopenharmony_ci .irq_clr_shift = 9, 232062306a36Sopenharmony_ci .irq_status_shift = 25, 232162306a36Sopenharmony_ci }, 232262306a36Sopenharmony_ci [MT8195_AFE_IRQ_13] = { 232362306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_13, 232462306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ1_CON, 232562306a36Sopenharmony_ci .irq_cnt_shift = 0, 232662306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 232762306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ1_CON, 232862306a36Sopenharmony_ci .irq_fs_shift = 24, 232962306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 233062306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ1_CON, 233162306a36Sopenharmony_ci .irq_en_shift = 31, 233262306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 233362306a36Sopenharmony_ci .irq_clr_shift = 0, 233462306a36Sopenharmony_ci .irq_status_shift = 0, 233562306a36Sopenharmony_ci }, 233662306a36Sopenharmony_ci [MT8195_AFE_IRQ_14] = { 233762306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_14, 233862306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ2_CON, 233962306a36Sopenharmony_ci .irq_cnt_shift = 0, 234062306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 234162306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ2_CON, 234262306a36Sopenharmony_ci .irq_fs_shift = 24, 234362306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 234462306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ2_CON, 234562306a36Sopenharmony_ci .irq_en_shift = 31, 234662306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 234762306a36Sopenharmony_ci .irq_clr_shift = 1, 234862306a36Sopenharmony_ci .irq_status_shift = 1, 234962306a36Sopenharmony_ci }, 235062306a36Sopenharmony_ci [MT8195_AFE_IRQ_15] = { 235162306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_15, 235262306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ3_CON, 235362306a36Sopenharmony_ci .irq_cnt_shift = 0, 235462306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 235562306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ3_CON, 235662306a36Sopenharmony_ci .irq_fs_shift = 24, 235762306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 235862306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ3_CON, 235962306a36Sopenharmony_ci .irq_en_shift = 31, 236062306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 236162306a36Sopenharmony_ci .irq_clr_shift = 2, 236262306a36Sopenharmony_ci .irq_status_shift = 2, 236362306a36Sopenharmony_ci }, 236462306a36Sopenharmony_ci [MT8195_AFE_IRQ_16] = { 236562306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_16, 236662306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ4_CON, 236762306a36Sopenharmony_ci .irq_cnt_shift = 0, 236862306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 236962306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ4_CON, 237062306a36Sopenharmony_ci .irq_fs_shift = 24, 237162306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 237262306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ4_CON, 237362306a36Sopenharmony_ci .irq_en_shift = 31, 237462306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 237562306a36Sopenharmony_ci .irq_clr_shift = 3, 237662306a36Sopenharmony_ci .irq_status_shift = 3, 237762306a36Sopenharmony_ci }, 237862306a36Sopenharmony_ci [MT8195_AFE_IRQ_17] = { 237962306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_17, 238062306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ5_CON, 238162306a36Sopenharmony_ci .irq_cnt_shift = 0, 238262306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 238362306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ5_CON, 238462306a36Sopenharmony_ci .irq_fs_shift = 24, 238562306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 238662306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ5_CON, 238762306a36Sopenharmony_ci .irq_en_shift = 31, 238862306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 238962306a36Sopenharmony_ci .irq_clr_shift = 4, 239062306a36Sopenharmony_ci .irq_status_shift = 4, 239162306a36Sopenharmony_ci }, 239262306a36Sopenharmony_ci [MT8195_AFE_IRQ_18] = { 239362306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_18, 239462306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ6_CON, 239562306a36Sopenharmony_ci .irq_cnt_shift = 0, 239662306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 239762306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ6_CON, 239862306a36Sopenharmony_ci .irq_fs_shift = 24, 239962306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 240062306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ6_CON, 240162306a36Sopenharmony_ci .irq_en_shift = 31, 240262306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 240362306a36Sopenharmony_ci .irq_clr_shift = 5, 240462306a36Sopenharmony_ci .irq_status_shift = 5, 240562306a36Sopenharmony_ci }, 240662306a36Sopenharmony_ci [MT8195_AFE_IRQ_19] = { 240762306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_19, 240862306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ7_CON, 240962306a36Sopenharmony_ci .irq_cnt_shift = 0, 241062306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 241162306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ7_CON, 241262306a36Sopenharmony_ci .irq_fs_shift = 24, 241362306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 241462306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ7_CON, 241562306a36Sopenharmony_ci .irq_en_shift = 31, 241662306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 241762306a36Sopenharmony_ci .irq_clr_shift = 6, 241862306a36Sopenharmony_ci .irq_status_shift = 6, 241962306a36Sopenharmony_ci }, 242062306a36Sopenharmony_ci [MT8195_AFE_IRQ_20] = { 242162306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_20, 242262306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ8_CON, 242362306a36Sopenharmony_ci .irq_cnt_shift = 0, 242462306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 242562306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ8_CON, 242662306a36Sopenharmony_ci .irq_fs_shift = 24, 242762306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 242862306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ8_CON, 242962306a36Sopenharmony_ci .irq_en_shift = 31, 243062306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 243162306a36Sopenharmony_ci .irq_clr_shift = 7, 243262306a36Sopenharmony_ci .irq_status_shift = 7, 243362306a36Sopenharmony_ci }, 243462306a36Sopenharmony_ci [MT8195_AFE_IRQ_21] = { 243562306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_21, 243662306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ9_CON, 243762306a36Sopenharmony_ci .irq_cnt_shift = 0, 243862306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 243962306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ9_CON, 244062306a36Sopenharmony_ci .irq_fs_shift = 24, 244162306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 244262306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ9_CON, 244362306a36Sopenharmony_ci .irq_en_shift = 31, 244462306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 244562306a36Sopenharmony_ci .irq_clr_shift = 8, 244662306a36Sopenharmony_ci .irq_status_shift = 8, 244762306a36Sopenharmony_ci }, 244862306a36Sopenharmony_ci [MT8195_AFE_IRQ_22] = { 244962306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_22, 245062306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ10_CON, 245162306a36Sopenharmony_ci .irq_cnt_shift = 0, 245262306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 245362306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ10_CON, 245462306a36Sopenharmony_ci .irq_fs_shift = 24, 245562306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 245662306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ10_CON, 245762306a36Sopenharmony_ci .irq_en_shift = 31, 245862306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 245962306a36Sopenharmony_ci .irq_clr_shift = 9, 246062306a36Sopenharmony_ci .irq_status_shift = 9, 246162306a36Sopenharmony_ci }, 246262306a36Sopenharmony_ci [MT8195_AFE_IRQ_23] = { 246362306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_23, 246462306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ11_CON, 246562306a36Sopenharmony_ci .irq_cnt_shift = 0, 246662306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 246762306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ11_CON, 246862306a36Sopenharmony_ci .irq_fs_shift = 24, 246962306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 247062306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ11_CON, 247162306a36Sopenharmony_ci .irq_en_shift = 31, 247262306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 247362306a36Sopenharmony_ci .irq_clr_shift = 10, 247462306a36Sopenharmony_ci .irq_status_shift = 10, 247562306a36Sopenharmony_ci }, 247662306a36Sopenharmony_ci [MT8195_AFE_IRQ_24] = { 247762306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_24, 247862306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ12_CON, 247962306a36Sopenharmony_ci .irq_cnt_shift = 0, 248062306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 248162306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ12_CON, 248262306a36Sopenharmony_ci .irq_fs_shift = 24, 248362306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 248462306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ12_CON, 248562306a36Sopenharmony_ci .irq_en_shift = 31, 248662306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 248762306a36Sopenharmony_ci .irq_clr_shift = 11, 248862306a36Sopenharmony_ci .irq_status_shift = 11, 248962306a36Sopenharmony_ci }, 249062306a36Sopenharmony_ci [MT8195_AFE_IRQ_25] = { 249162306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_25, 249262306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ13_CON, 249362306a36Sopenharmony_ci .irq_cnt_shift = 0, 249462306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 249562306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ13_CON, 249662306a36Sopenharmony_ci .irq_fs_shift = 24, 249762306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 249862306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ13_CON, 249962306a36Sopenharmony_ci .irq_en_shift = 31, 250062306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 250162306a36Sopenharmony_ci .irq_clr_shift = 12, 250262306a36Sopenharmony_ci .irq_status_shift = 12, 250362306a36Sopenharmony_ci }, 250462306a36Sopenharmony_ci [MT8195_AFE_IRQ_26] = { 250562306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_26, 250662306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ14_CON, 250762306a36Sopenharmony_ci .irq_cnt_shift = 0, 250862306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 250962306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ14_CON, 251062306a36Sopenharmony_ci .irq_fs_shift = 24, 251162306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 251262306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ14_CON, 251362306a36Sopenharmony_ci .irq_en_shift = 31, 251462306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 251562306a36Sopenharmony_ci .irq_clr_shift = 13, 251662306a36Sopenharmony_ci .irq_status_shift = 13, 251762306a36Sopenharmony_ci }, 251862306a36Sopenharmony_ci [MT8195_AFE_IRQ_27] = { 251962306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_27, 252062306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ15_CON, 252162306a36Sopenharmony_ci .irq_cnt_shift = 0, 252262306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 252362306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ15_CON, 252462306a36Sopenharmony_ci .irq_fs_shift = 24, 252562306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 252662306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ15_CON, 252762306a36Sopenharmony_ci .irq_en_shift = 31, 252862306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 252962306a36Sopenharmony_ci .irq_clr_shift = 14, 253062306a36Sopenharmony_ci .irq_status_shift = 14, 253162306a36Sopenharmony_ci }, 253262306a36Sopenharmony_ci [MT8195_AFE_IRQ_28] = { 253362306a36Sopenharmony_ci .id = MT8195_AFE_IRQ_28, 253462306a36Sopenharmony_ci .irq_cnt_reg = ASYS_IRQ16_CON, 253562306a36Sopenharmony_ci .irq_cnt_shift = 0, 253662306a36Sopenharmony_ci .irq_cnt_maskbit = 0xffffff, 253762306a36Sopenharmony_ci .irq_fs_reg = ASYS_IRQ16_CON, 253862306a36Sopenharmony_ci .irq_fs_shift = 24, 253962306a36Sopenharmony_ci .irq_fs_maskbit = 0x1ffff, 254062306a36Sopenharmony_ci .irq_en_reg = ASYS_IRQ16_CON, 254162306a36Sopenharmony_ci .irq_en_shift = 31, 254262306a36Sopenharmony_ci .irq_clr_reg = ASYS_IRQ_CLR, 254362306a36Sopenharmony_ci .irq_clr_shift = 15, 254462306a36Sopenharmony_ci .irq_status_shift = 15, 254562306a36Sopenharmony_ci }, 254662306a36Sopenharmony_ci}; 254762306a36Sopenharmony_ci 254862306a36Sopenharmony_cistatic const int mt8195_afe_memif_const_irqs[MT8195_AFE_MEMIF_NUM] = { 254962306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL2] = MT8195_AFE_IRQ_13, 255062306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL3] = MT8195_AFE_IRQ_14, 255162306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL6] = MT8195_AFE_IRQ_15, 255262306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL7] = MT8195_AFE_IRQ_1, 255362306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL8] = MT8195_AFE_IRQ_16, 255462306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL10] = MT8195_AFE_IRQ_17, 255562306a36Sopenharmony_ci [MT8195_AFE_MEMIF_DL11] = MT8195_AFE_IRQ_18, 255662306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL1] = MT8195_AFE_IRQ_3, 255762306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL2] = MT8195_AFE_IRQ_19, 255862306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL3] = MT8195_AFE_IRQ_20, 255962306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL4] = MT8195_AFE_IRQ_21, 256062306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL5] = MT8195_AFE_IRQ_22, 256162306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL6] = MT8195_AFE_IRQ_9, 256262306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL8] = MT8195_AFE_IRQ_23, 256362306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL9] = MT8195_AFE_IRQ_24, 256462306a36Sopenharmony_ci [MT8195_AFE_MEMIF_UL10] = MT8195_AFE_IRQ_25, 256562306a36Sopenharmony_ci}; 256662306a36Sopenharmony_ci 256762306a36Sopenharmony_cistatic bool mt8195_is_volatile_reg(struct device *dev, unsigned int reg) 256862306a36Sopenharmony_ci{ 256962306a36Sopenharmony_ci /* these auto-gen reg has read-only bit, so put it as volatile */ 257062306a36Sopenharmony_ci /* volatile reg cannot be cached, so cannot be set when power off */ 257162306a36Sopenharmony_ci switch (reg) { 257262306a36Sopenharmony_ci case AUDIO_TOP_CON0: 257362306a36Sopenharmony_ci case AUDIO_TOP_CON1: 257462306a36Sopenharmony_ci case AUDIO_TOP_CON3: 257562306a36Sopenharmony_ci case AUDIO_TOP_CON4: 257662306a36Sopenharmony_ci case AUDIO_TOP_CON5: 257762306a36Sopenharmony_ci case AUDIO_TOP_CON6: 257862306a36Sopenharmony_ci case ASYS_IRQ_CLR: 257962306a36Sopenharmony_ci case ASYS_IRQ_STATUS: 258062306a36Sopenharmony_ci case ASYS_IRQ_MON1: 258162306a36Sopenharmony_ci case ASYS_IRQ_MON2: 258262306a36Sopenharmony_ci case AFE_IRQ_MCU_CLR: 258362306a36Sopenharmony_ci case AFE_IRQ_STATUS: 258462306a36Sopenharmony_ci case AFE_IRQ3_CON_MON: 258562306a36Sopenharmony_ci case AFE_IRQ_MCU_MON2: 258662306a36Sopenharmony_ci case ADSP_IRQ_STATUS: 258762306a36Sopenharmony_ci case AUDIO_TOP_STA0: 258862306a36Sopenharmony_ci case AUDIO_TOP_STA1: 258962306a36Sopenharmony_ci case AFE_GAIN1_CUR: 259062306a36Sopenharmony_ci case AFE_GAIN2_CUR: 259162306a36Sopenharmony_ci case AFE_IEC_BURST_INFO: 259262306a36Sopenharmony_ci case AFE_IEC_CHL_STAT0: 259362306a36Sopenharmony_ci case AFE_IEC_CHL_STAT1: 259462306a36Sopenharmony_ci case AFE_IEC_CHR_STAT0: 259562306a36Sopenharmony_ci case AFE_IEC_CHR_STAT1: 259662306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS1: 259762306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS2: 259862306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS3: 259962306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS4: 260062306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS5: 260162306a36Sopenharmony_ci case AFE_SPDIFIN_CHSTS6: 260262306a36Sopenharmony_ci case AFE_SPDIFIN_DEBUG1: 260362306a36Sopenharmony_ci case AFE_SPDIFIN_DEBUG2: 260462306a36Sopenharmony_ci case AFE_SPDIFIN_DEBUG3: 260562306a36Sopenharmony_ci case AFE_SPDIFIN_DEBUG4: 260662306a36Sopenharmony_ci case AFE_SPDIFIN_EC: 260762306a36Sopenharmony_ci case AFE_SPDIFIN_CKLOCK_CFG: 260862306a36Sopenharmony_ci case AFE_SPDIFIN_BR_DBG1: 260962306a36Sopenharmony_ci case AFE_SPDIFIN_CKFBDIV: 261062306a36Sopenharmony_ci case AFE_SPDIFIN_INT_EXT: 261162306a36Sopenharmony_ci case AFE_SPDIFIN_INT_EXT2: 261262306a36Sopenharmony_ci case SPDIFIN_FREQ_STATUS: 261362306a36Sopenharmony_ci case SPDIFIN_USERCODE1: 261462306a36Sopenharmony_ci case SPDIFIN_USERCODE2: 261562306a36Sopenharmony_ci case SPDIFIN_USERCODE3: 261662306a36Sopenharmony_ci case SPDIFIN_USERCODE4: 261762306a36Sopenharmony_ci case SPDIFIN_USERCODE5: 261862306a36Sopenharmony_ci case SPDIFIN_USERCODE6: 261962306a36Sopenharmony_ci case SPDIFIN_USERCODE7: 262062306a36Sopenharmony_ci case SPDIFIN_USERCODE8: 262162306a36Sopenharmony_ci case SPDIFIN_USERCODE9: 262262306a36Sopenharmony_ci case SPDIFIN_USERCODE10: 262362306a36Sopenharmony_ci case SPDIFIN_USERCODE11: 262462306a36Sopenharmony_ci case SPDIFIN_USERCODE12: 262562306a36Sopenharmony_ci case AFE_LINEIN_APLL_TUNER_MON: 262662306a36Sopenharmony_ci case AFE_EARC_APLL_TUNER_MON: 262762306a36Sopenharmony_ci case AFE_CM0_MON: 262862306a36Sopenharmony_ci case AFE_CM1_MON: 262962306a36Sopenharmony_ci case AFE_CM2_MON: 263062306a36Sopenharmony_ci case AFE_MPHONE_MULTI_DET_MON0: 263162306a36Sopenharmony_ci case AFE_MPHONE_MULTI_DET_MON1: 263262306a36Sopenharmony_ci case AFE_MPHONE_MULTI_DET_MON2: 263362306a36Sopenharmony_ci case AFE_MPHONE_MULTI2_DET_MON0: 263462306a36Sopenharmony_ci case AFE_MPHONE_MULTI2_DET_MON1: 263562306a36Sopenharmony_ci case AFE_MPHONE_MULTI2_DET_MON2: 263662306a36Sopenharmony_ci case AFE_ADDA_MTKAIF_MON0: 263762306a36Sopenharmony_ci case AFE_ADDA_MTKAIF_MON1: 263862306a36Sopenharmony_ci case AFE_AUD_PAD_TOP: 263962306a36Sopenharmony_ci case AFE_ADDA6_MTKAIF_MON0: 264062306a36Sopenharmony_ci case AFE_ADDA6_MTKAIF_MON1: 264162306a36Sopenharmony_ci case AFE_ADDA6_SRC_DEBUG_MON0: 264262306a36Sopenharmony_ci case AFE_ADDA6_UL_SRC_MON0: 264362306a36Sopenharmony_ci case AFE_ADDA6_UL_SRC_MON1: 264462306a36Sopenharmony_ci case AFE_ASRC11_NEW_CON8: 264562306a36Sopenharmony_ci case AFE_ASRC11_NEW_CON9: 264662306a36Sopenharmony_ci case AFE_ASRC12_NEW_CON8: 264762306a36Sopenharmony_ci case AFE_ASRC12_NEW_CON9: 264862306a36Sopenharmony_ci case AFE_LRCK_CNT: 264962306a36Sopenharmony_ci case AFE_DAC_MON0: 265062306a36Sopenharmony_ci case AFE_DL2_CUR: 265162306a36Sopenharmony_ci case AFE_DL3_CUR: 265262306a36Sopenharmony_ci case AFE_DL6_CUR: 265362306a36Sopenharmony_ci case AFE_DL7_CUR: 265462306a36Sopenharmony_ci case AFE_DL8_CUR: 265562306a36Sopenharmony_ci case AFE_DL10_CUR: 265662306a36Sopenharmony_ci case AFE_DL11_CUR: 265762306a36Sopenharmony_ci case AFE_UL1_CUR: 265862306a36Sopenharmony_ci case AFE_UL2_CUR: 265962306a36Sopenharmony_ci case AFE_UL3_CUR: 266062306a36Sopenharmony_ci case AFE_UL4_CUR: 266162306a36Sopenharmony_ci case AFE_UL5_CUR: 266262306a36Sopenharmony_ci case AFE_UL6_CUR: 266362306a36Sopenharmony_ci case AFE_UL8_CUR: 266462306a36Sopenharmony_ci case AFE_UL9_CUR: 266562306a36Sopenharmony_ci case AFE_UL10_CUR: 266662306a36Sopenharmony_ci case AFE_DL8_CHK_SUM1: 266762306a36Sopenharmony_ci case AFE_DL8_CHK_SUM2: 266862306a36Sopenharmony_ci case AFE_DL8_CHK_SUM3: 266962306a36Sopenharmony_ci case AFE_DL8_CHK_SUM4: 267062306a36Sopenharmony_ci case AFE_DL8_CHK_SUM5: 267162306a36Sopenharmony_ci case AFE_DL8_CHK_SUM6: 267262306a36Sopenharmony_ci case AFE_DL10_CHK_SUM1: 267362306a36Sopenharmony_ci case AFE_DL10_CHK_SUM2: 267462306a36Sopenharmony_ci case AFE_DL10_CHK_SUM3: 267562306a36Sopenharmony_ci case AFE_DL10_CHK_SUM4: 267662306a36Sopenharmony_ci case AFE_DL10_CHK_SUM5: 267762306a36Sopenharmony_ci case AFE_DL10_CHK_SUM6: 267862306a36Sopenharmony_ci case AFE_DL11_CHK_SUM1: 267962306a36Sopenharmony_ci case AFE_DL11_CHK_SUM2: 268062306a36Sopenharmony_ci case AFE_DL11_CHK_SUM3: 268162306a36Sopenharmony_ci case AFE_DL11_CHK_SUM4: 268262306a36Sopenharmony_ci case AFE_DL11_CHK_SUM5: 268362306a36Sopenharmony_ci case AFE_DL11_CHK_SUM6: 268462306a36Sopenharmony_ci case AFE_UL1_CHK_SUM1: 268562306a36Sopenharmony_ci case AFE_UL1_CHK_SUM2: 268662306a36Sopenharmony_ci case AFE_UL2_CHK_SUM1: 268762306a36Sopenharmony_ci case AFE_UL2_CHK_SUM2: 268862306a36Sopenharmony_ci case AFE_UL3_CHK_SUM1: 268962306a36Sopenharmony_ci case AFE_UL3_CHK_SUM2: 269062306a36Sopenharmony_ci case AFE_UL4_CHK_SUM1: 269162306a36Sopenharmony_ci case AFE_UL4_CHK_SUM2: 269262306a36Sopenharmony_ci case AFE_UL5_CHK_SUM1: 269362306a36Sopenharmony_ci case AFE_UL5_CHK_SUM2: 269462306a36Sopenharmony_ci case AFE_UL6_CHK_SUM1: 269562306a36Sopenharmony_ci case AFE_UL6_CHK_SUM2: 269662306a36Sopenharmony_ci case AFE_UL8_CHK_SUM1: 269762306a36Sopenharmony_ci case AFE_UL8_CHK_SUM2: 269862306a36Sopenharmony_ci case AFE_DL2_CHK_SUM1: 269962306a36Sopenharmony_ci case AFE_DL2_CHK_SUM2: 270062306a36Sopenharmony_ci case AFE_DL3_CHK_SUM1: 270162306a36Sopenharmony_ci case AFE_DL3_CHK_SUM2: 270262306a36Sopenharmony_ci case AFE_DL6_CHK_SUM1: 270362306a36Sopenharmony_ci case AFE_DL6_CHK_SUM2: 270462306a36Sopenharmony_ci case AFE_DL7_CHK_SUM1: 270562306a36Sopenharmony_ci case AFE_DL7_CHK_SUM2: 270662306a36Sopenharmony_ci case AFE_UL9_CHK_SUM1: 270762306a36Sopenharmony_ci case AFE_UL9_CHK_SUM2: 270862306a36Sopenharmony_ci case AFE_BUS_MON1: 270962306a36Sopenharmony_ci case UL1_MOD2AGT_CNT_LAT: 271062306a36Sopenharmony_ci case UL2_MOD2AGT_CNT_LAT: 271162306a36Sopenharmony_ci case UL3_MOD2AGT_CNT_LAT: 271262306a36Sopenharmony_ci case UL4_MOD2AGT_CNT_LAT: 271362306a36Sopenharmony_ci case UL5_MOD2AGT_CNT_LAT: 271462306a36Sopenharmony_ci case UL6_MOD2AGT_CNT_LAT: 271562306a36Sopenharmony_ci case UL8_MOD2AGT_CNT_LAT: 271662306a36Sopenharmony_ci case UL9_MOD2AGT_CNT_LAT: 271762306a36Sopenharmony_ci case UL10_MOD2AGT_CNT_LAT: 271862306a36Sopenharmony_ci case AFE_MEMIF_BUF_FULL_MON: 271962306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON1: 272062306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON3: 272162306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON4: 272262306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON5: 272362306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON6: 272462306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON7: 272562306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON8: 272662306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON9: 272762306a36Sopenharmony_ci case AFE_MEMIF_BUF_MON10: 272862306a36Sopenharmony_ci case DL2_AGENT2MODULE_CNT: 272962306a36Sopenharmony_ci case DL3_AGENT2MODULE_CNT: 273062306a36Sopenharmony_ci case DL6_AGENT2MODULE_CNT: 273162306a36Sopenharmony_ci case DL7_AGENT2MODULE_CNT: 273262306a36Sopenharmony_ci case DL8_AGENT2MODULE_CNT: 273362306a36Sopenharmony_ci case DL10_AGENT2MODULE_CNT: 273462306a36Sopenharmony_ci case DL11_AGENT2MODULE_CNT: 273562306a36Sopenharmony_ci case UL1_MODULE2AGENT_CNT: 273662306a36Sopenharmony_ci case UL2_MODULE2AGENT_CNT: 273762306a36Sopenharmony_ci case UL3_MODULE2AGENT_CNT: 273862306a36Sopenharmony_ci case UL4_MODULE2AGENT_CNT: 273962306a36Sopenharmony_ci case UL5_MODULE2AGENT_CNT: 274062306a36Sopenharmony_ci case UL6_MODULE2AGENT_CNT: 274162306a36Sopenharmony_ci case UL8_MODULE2AGENT_CNT: 274262306a36Sopenharmony_ci case UL9_MODULE2AGENT_CNT: 274362306a36Sopenharmony_ci case UL10_MODULE2AGENT_CNT: 274462306a36Sopenharmony_ci case AFE_DMIC0_SRC_DEBUG_MON0: 274562306a36Sopenharmony_ci case AFE_DMIC0_UL_SRC_MON0: 274662306a36Sopenharmony_ci case AFE_DMIC0_UL_SRC_MON1: 274762306a36Sopenharmony_ci case AFE_DMIC1_SRC_DEBUG_MON0: 274862306a36Sopenharmony_ci case AFE_DMIC1_UL_SRC_MON0: 274962306a36Sopenharmony_ci case AFE_DMIC1_UL_SRC_MON1: 275062306a36Sopenharmony_ci case AFE_DMIC2_SRC_DEBUG_MON0: 275162306a36Sopenharmony_ci case AFE_DMIC2_UL_SRC_MON0: 275262306a36Sopenharmony_ci case AFE_DMIC2_UL_SRC_MON1: 275362306a36Sopenharmony_ci case AFE_DMIC3_SRC_DEBUG_MON0: 275462306a36Sopenharmony_ci case AFE_DMIC3_UL_SRC_MON0: 275562306a36Sopenharmony_ci case AFE_DMIC3_UL_SRC_MON1: 275662306a36Sopenharmony_ci case DMIC_GAIN1_CUR: 275762306a36Sopenharmony_ci case DMIC_GAIN2_CUR: 275862306a36Sopenharmony_ci case DMIC_GAIN3_CUR: 275962306a36Sopenharmony_ci case DMIC_GAIN4_CUR: 276062306a36Sopenharmony_ci case ETDM_IN1_MONITOR: 276162306a36Sopenharmony_ci case ETDM_IN2_MONITOR: 276262306a36Sopenharmony_ci case ETDM_OUT1_MONITOR: 276362306a36Sopenharmony_ci case ETDM_OUT2_MONITOR: 276462306a36Sopenharmony_ci case ETDM_OUT3_MONITOR: 276562306a36Sopenharmony_ci case AFE_ADDA_SRC_DEBUG_MON0: 276662306a36Sopenharmony_ci case AFE_ADDA_SRC_DEBUG_MON1: 276762306a36Sopenharmony_ci case AFE_ADDA_DL_SDM_FIFO_MON: 276862306a36Sopenharmony_ci case AFE_ADDA_DL_SRC_LCH_MON: 276962306a36Sopenharmony_ci case AFE_ADDA_DL_SRC_RCH_MON: 277062306a36Sopenharmony_ci case AFE_ADDA_DL_SDM_OUT_MON: 277162306a36Sopenharmony_ci case AFE_GASRC0_NEW_CON8: 277262306a36Sopenharmony_ci case AFE_GASRC0_NEW_CON9: 277362306a36Sopenharmony_ci case AFE_GASRC0_NEW_CON12: 277462306a36Sopenharmony_ci case AFE_GASRC1_NEW_CON8: 277562306a36Sopenharmony_ci case AFE_GASRC1_NEW_CON9: 277662306a36Sopenharmony_ci case AFE_GASRC1_NEW_CON12: 277762306a36Sopenharmony_ci case AFE_GASRC2_NEW_CON8: 277862306a36Sopenharmony_ci case AFE_GASRC2_NEW_CON9: 277962306a36Sopenharmony_ci case AFE_GASRC2_NEW_CON12: 278062306a36Sopenharmony_ci case AFE_GASRC3_NEW_CON8: 278162306a36Sopenharmony_ci case AFE_GASRC3_NEW_CON9: 278262306a36Sopenharmony_ci case AFE_GASRC3_NEW_CON12: 278362306a36Sopenharmony_ci case AFE_GASRC4_NEW_CON8: 278462306a36Sopenharmony_ci case AFE_GASRC4_NEW_CON9: 278562306a36Sopenharmony_ci case AFE_GASRC4_NEW_CON12: 278662306a36Sopenharmony_ci case AFE_GASRC5_NEW_CON8: 278762306a36Sopenharmony_ci case AFE_GASRC5_NEW_CON9: 278862306a36Sopenharmony_ci case AFE_GASRC5_NEW_CON12: 278962306a36Sopenharmony_ci case AFE_GASRC6_NEW_CON8: 279062306a36Sopenharmony_ci case AFE_GASRC6_NEW_CON9: 279162306a36Sopenharmony_ci case AFE_GASRC6_NEW_CON12: 279262306a36Sopenharmony_ci case AFE_GASRC7_NEW_CON8: 279362306a36Sopenharmony_ci case AFE_GASRC7_NEW_CON9: 279462306a36Sopenharmony_ci case AFE_GASRC7_NEW_CON12: 279562306a36Sopenharmony_ci case AFE_GASRC8_NEW_CON8: 279662306a36Sopenharmony_ci case AFE_GASRC8_NEW_CON9: 279762306a36Sopenharmony_ci case AFE_GASRC8_NEW_CON12: 279862306a36Sopenharmony_ci case AFE_GASRC9_NEW_CON8: 279962306a36Sopenharmony_ci case AFE_GASRC9_NEW_CON9: 280062306a36Sopenharmony_ci case AFE_GASRC9_NEW_CON12: 280162306a36Sopenharmony_ci case AFE_GASRC10_NEW_CON8: 280262306a36Sopenharmony_ci case AFE_GASRC10_NEW_CON9: 280362306a36Sopenharmony_ci case AFE_GASRC10_NEW_CON12: 280462306a36Sopenharmony_ci case AFE_GASRC11_NEW_CON8: 280562306a36Sopenharmony_ci case AFE_GASRC11_NEW_CON9: 280662306a36Sopenharmony_ci case AFE_GASRC11_NEW_CON12: 280762306a36Sopenharmony_ci case AFE_GASRC12_NEW_CON8: 280862306a36Sopenharmony_ci case AFE_GASRC12_NEW_CON9: 280962306a36Sopenharmony_ci case AFE_GASRC12_NEW_CON12: 281062306a36Sopenharmony_ci case AFE_GASRC13_NEW_CON8: 281162306a36Sopenharmony_ci case AFE_GASRC13_NEW_CON9: 281262306a36Sopenharmony_ci case AFE_GASRC13_NEW_CON12: 281362306a36Sopenharmony_ci case AFE_GASRC14_NEW_CON8: 281462306a36Sopenharmony_ci case AFE_GASRC14_NEW_CON9: 281562306a36Sopenharmony_ci case AFE_GASRC14_NEW_CON12: 281662306a36Sopenharmony_ci case AFE_GASRC15_NEW_CON8: 281762306a36Sopenharmony_ci case AFE_GASRC15_NEW_CON9: 281862306a36Sopenharmony_ci case AFE_GASRC15_NEW_CON12: 281962306a36Sopenharmony_ci case AFE_GASRC16_NEW_CON8: 282062306a36Sopenharmony_ci case AFE_GASRC16_NEW_CON9: 282162306a36Sopenharmony_ci case AFE_GASRC16_NEW_CON12: 282262306a36Sopenharmony_ci case AFE_GASRC17_NEW_CON8: 282362306a36Sopenharmony_ci case AFE_GASRC17_NEW_CON9: 282462306a36Sopenharmony_ci case AFE_GASRC17_NEW_CON12: 282562306a36Sopenharmony_ci case AFE_GASRC18_NEW_CON8: 282662306a36Sopenharmony_ci case AFE_GASRC18_NEW_CON9: 282762306a36Sopenharmony_ci case AFE_GASRC18_NEW_CON12: 282862306a36Sopenharmony_ci case AFE_GASRC19_NEW_CON8: 282962306a36Sopenharmony_ci case AFE_GASRC19_NEW_CON9: 283062306a36Sopenharmony_ci case AFE_GASRC19_NEW_CON12: 283162306a36Sopenharmony_ci return true; 283262306a36Sopenharmony_ci default: 283362306a36Sopenharmony_ci return false; 283462306a36Sopenharmony_ci }; 283562306a36Sopenharmony_ci} 283662306a36Sopenharmony_ci 283762306a36Sopenharmony_cistatic const struct regmap_config mt8195_afe_regmap_config = { 283862306a36Sopenharmony_ci .reg_bits = 32, 283962306a36Sopenharmony_ci .reg_stride = 4, 284062306a36Sopenharmony_ci .val_bits = 32, 284162306a36Sopenharmony_ci .volatile_reg = mt8195_is_volatile_reg, 284262306a36Sopenharmony_ci .max_register = AFE_MAX_REGISTER, 284362306a36Sopenharmony_ci .num_reg_defaults_raw = ((AFE_MAX_REGISTER / 4) + 1), 284462306a36Sopenharmony_ci .cache_type = REGCACHE_FLAT, 284562306a36Sopenharmony_ci}; 284662306a36Sopenharmony_ci 284762306a36Sopenharmony_ci#define AFE_IRQ_CLR_BITS (0x387) 284862306a36Sopenharmony_ci#define ASYS_IRQ_CLR_BITS (0xffff) 284962306a36Sopenharmony_ci 285062306a36Sopenharmony_cistatic irqreturn_t mt8195_afe_irq_handler(int irq_id, void *dev_id) 285162306a36Sopenharmony_ci{ 285262306a36Sopenharmony_ci struct mtk_base_afe *afe = dev_id; 285362306a36Sopenharmony_ci unsigned int val = 0; 285462306a36Sopenharmony_ci unsigned int asys_irq_clr_bits = 0; 285562306a36Sopenharmony_ci unsigned int afe_irq_clr_bits = 0; 285662306a36Sopenharmony_ci unsigned int irq_status_bits = 0; 285762306a36Sopenharmony_ci unsigned int irq_clr_bits = 0; 285862306a36Sopenharmony_ci unsigned int mcu_irq_mask = 0; 285962306a36Sopenharmony_ci int i = 0; 286062306a36Sopenharmony_ci int ret = 0; 286162306a36Sopenharmony_ci 286262306a36Sopenharmony_ci ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &val); 286362306a36Sopenharmony_ci if (ret) { 286462306a36Sopenharmony_ci dev_info(afe->dev, "%s irq status err\n", __func__); 286562306a36Sopenharmony_ci afe_irq_clr_bits = AFE_IRQ_CLR_BITS; 286662306a36Sopenharmony_ci asys_irq_clr_bits = ASYS_IRQ_CLR_BITS; 286762306a36Sopenharmony_ci goto err_irq; 286862306a36Sopenharmony_ci } 286962306a36Sopenharmony_ci 287062306a36Sopenharmony_ci ret = regmap_read(afe->regmap, AFE_IRQ_MASK, &mcu_irq_mask); 287162306a36Sopenharmony_ci if (ret) { 287262306a36Sopenharmony_ci dev_info(afe->dev, "%s read irq mask err\n", __func__); 287362306a36Sopenharmony_ci afe_irq_clr_bits = AFE_IRQ_CLR_BITS; 287462306a36Sopenharmony_ci asys_irq_clr_bits = ASYS_IRQ_CLR_BITS; 287562306a36Sopenharmony_ci goto err_irq; 287662306a36Sopenharmony_ci } 287762306a36Sopenharmony_ci 287862306a36Sopenharmony_ci /* only clr cpu irq */ 287962306a36Sopenharmony_ci val &= mcu_irq_mask; 288062306a36Sopenharmony_ci 288162306a36Sopenharmony_ci for (i = 0; i < MT8195_AFE_MEMIF_NUM; i++) { 288262306a36Sopenharmony_ci struct mtk_base_afe_memif *memif = &afe->memif[i]; 288362306a36Sopenharmony_ci struct mtk_base_irq_data const *irq_data; 288462306a36Sopenharmony_ci 288562306a36Sopenharmony_ci if (memif->irq_usage < 0) 288662306a36Sopenharmony_ci continue; 288762306a36Sopenharmony_ci 288862306a36Sopenharmony_ci irq_data = afe->irqs[memif->irq_usage].irq_data; 288962306a36Sopenharmony_ci 289062306a36Sopenharmony_ci irq_status_bits = BIT(irq_data->irq_status_shift); 289162306a36Sopenharmony_ci irq_clr_bits = BIT(irq_data->irq_clr_shift); 289262306a36Sopenharmony_ci 289362306a36Sopenharmony_ci if (!(val & irq_status_bits)) 289462306a36Sopenharmony_ci continue; 289562306a36Sopenharmony_ci 289662306a36Sopenharmony_ci if (irq_data->irq_clr_reg == ASYS_IRQ_CLR) 289762306a36Sopenharmony_ci asys_irq_clr_bits |= irq_clr_bits; 289862306a36Sopenharmony_ci else 289962306a36Sopenharmony_ci afe_irq_clr_bits |= irq_clr_bits; 290062306a36Sopenharmony_ci 290162306a36Sopenharmony_ci snd_pcm_period_elapsed(memif->substream); 290262306a36Sopenharmony_ci } 290362306a36Sopenharmony_ci 290462306a36Sopenharmony_cierr_irq: 290562306a36Sopenharmony_ci /* clear irq */ 290662306a36Sopenharmony_ci if (asys_irq_clr_bits) 290762306a36Sopenharmony_ci regmap_write(afe->regmap, ASYS_IRQ_CLR, asys_irq_clr_bits); 290862306a36Sopenharmony_ci if (afe_irq_clr_bits) 290962306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_IRQ_MCU_CLR, afe_irq_clr_bits); 291062306a36Sopenharmony_ci 291162306a36Sopenharmony_ci return IRQ_HANDLED; 291262306a36Sopenharmony_ci} 291362306a36Sopenharmony_ci 291462306a36Sopenharmony_cistatic int mt8195_afe_runtime_suspend(struct device *dev) 291562306a36Sopenharmony_ci{ 291662306a36Sopenharmony_ci struct mtk_base_afe *afe = dev_get_drvdata(dev); 291762306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 291862306a36Sopenharmony_ci 291962306a36Sopenharmony_ci if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) 292062306a36Sopenharmony_ci goto skip_regmap; 292162306a36Sopenharmony_ci 292262306a36Sopenharmony_ci mt8195_afe_disable_main_clock(afe); 292362306a36Sopenharmony_ci 292462306a36Sopenharmony_ci regcache_cache_only(afe->regmap, true); 292562306a36Sopenharmony_ci regcache_mark_dirty(afe->regmap); 292662306a36Sopenharmony_ci 292762306a36Sopenharmony_ciskip_regmap: 292862306a36Sopenharmony_ci mt8195_afe_disable_reg_rw_clk(afe); 292962306a36Sopenharmony_ci 293062306a36Sopenharmony_ci return 0; 293162306a36Sopenharmony_ci} 293262306a36Sopenharmony_ci 293362306a36Sopenharmony_cistatic int mt8195_afe_runtime_resume(struct device *dev) 293462306a36Sopenharmony_ci{ 293562306a36Sopenharmony_ci struct mtk_base_afe *afe = dev_get_drvdata(dev); 293662306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 293762306a36Sopenharmony_ci 293862306a36Sopenharmony_ci mt8195_afe_enable_reg_rw_clk(afe); 293962306a36Sopenharmony_ci 294062306a36Sopenharmony_ci if (!afe->regmap || afe_priv->pm_runtime_bypass_reg_ctl) 294162306a36Sopenharmony_ci goto skip_regmap; 294262306a36Sopenharmony_ci 294362306a36Sopenharmony_ci regcache_cache_only(afe->regmap, false); 294462306a36Sopenharmony_ci regcache_sync(afe->regmap); 294562306a36Sopenharmony_ci 294662306a36Sopenharmony_ci mt8195_afe_enable_main_clock(afe); 294762306a36Sopenharmony_ciskip_regmap: 294862306a36Sopenharmony_ci return 0; 294962306a36Sopenharmony_ci} 295062306a36Sopenharmony_ci 295162306a36Sopenharmony_cistatic int mt8195_afe_component_probe(struct snd_soc_component *component) 295262306a36Sopenharmony_ci{ 295362306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); 295462306a36Sopenharmony_ci int ret = 0; 295562306a36Sopenharmony_ci 295662306a36Sopenharmony_ci snd_soc_component_init_regmap(component, afe->regmap); 295762306a36Sopenharmony_ci 295862306a36Sopenharmony_ci ret = mtk_afe_add_sub_dai_control(component); 295962306a36Sopenharmony_ci 296062306a36Sopenharmony_ci return ret; 296162306a36Sopenharmony_ci} 296262306a36Sopenharmony_ci 296362306a36Sopenharmony_cistatic const struct snd_soc_component_driver mt8195_afe_component = { 296462306a36Sopenharmony_ci .name = AFE_PCM_NAME, 296562306a36Sopenharmony_ci .pointer = mtk_afe_pcm_pointer, 296662306a36Sopenharmony_ci .pcm_construct = mtk_afe_pcm_new, 296762306a36Sopenharmony_ci .probe = mt8195_afe_component_probe, 296862306a36Sopenharmony_ci}; 296962306a36Sopenharmony_ci 297062306a36Sopenharmony_cistatic int init_memif_priv_data(struct mtk_base_afe *afe) 297162306a36Sopenharmony_ci{ 297262306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv = afe->platform_priv; 297362306a36Sopenharmony_ci struct mtk_dai_memif_priv *memif_priv; 297462306a36Sopenharmony_ci int i; 297562306a36Sopenharmony_ci 297662306a36Sopenharmony_ci for (i = MT8195_AFE_MEMIF_START; i < MT8195_AFE_MEMIF_END; i++) { 297762306a36Sopenharmony_ci memif_priv = devm_kzalloc(afe->dev, 297862306a36Sopenharmony_ci sizeof(struct mtk_dai_memif_priv), 297962306a36Sopenharmony_ci GFP_KERNEL); 298062306a36Sopenharmony_ci if (!memif_priv) 298162306a36Sopenharmony_ci return -ENOMEM; 298262306a36Sopenharmony_ci 298362306a36Sopenharmony_ci afe_priv->dai_priv[i] = memif_priv; 298462306a36Sopenharmony_ci } 298562306a36Sopenharmony_ci 298662306a36Sopenharmony_ci return 0; 298762306a36Sopenharmony_ci} 298862306a36Sopenharmony_ci 298962306a36Sopenharmony_cistatic int mt8195_dai_memif_register(struct mtk_base_afe *afe) 299062306a36Sopenharmony_ci{ 299162306a36Sopenharmony_ci struct mtk_base_afe_dai *dai; 299262306a36Sopenharmony_ci 299362306a36Sopenharmony_ci dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); 299462306a36Sopenharmony_ci if (!dai) 299562306a36Sopenharmony_ci return -ENOMEM; 299662306a36Sopenharmony_ci 299762306a36Sopenharmony_ci list_add(&dai->list, &afe->sub_dais); 299862306a36Sopenharmony_ci 299962306a36Sopenharmony_ci dai->dai_drivers = mt8195_memif_dai_driver; 300062306a36Sopenharmony_ci dai->num_dai_drivers = ARRAY_SIZE(mt8195_memif_dai_driver); 300162306a36Sopenharmony_ci 300262306a36Sopenharmony_ci dai->dapm_widgets = mt8195_memif_widgets; 300362306a36Sopenharmony_ci dai->num_dapm_widgets = ARRAY_SIZE(mt8195_memif_widgets); 300462306a36Sopenharmony_ci dai->dapm_routes = mt8195_memif_routes; 300562306a36Sopenharmony_ci dai->num_dapm_routes = ARRAY_SIZE(mt8195_memif_routes); 300662306a36Sopenharmony_ci dai->controls = mt8195_memif_controls; 300762306a36Sopenharmony_ci dai->num_controls = ARRAY_SIZE(mt8195_memif_controls); 300862306a36Sopenharmony_ci 300962306a36Sopenharmony_ci return init_memif_priv_data(afe); 301062306a36Sopenharmony_ci} 301162306a36Sopenharmony_ci 301262306a36Sopenharmony_citypedef int (*dai_register_cb)(struct mtk_base_afe *); 301362306a36Sopenharmony_cistatic const dai_register_cb dai_register_cbs[] = { 301462306a36Sopenharmony_ci mt8195_dai_adda_register, 301562306a36Sopenharmony_ci mt8195_dai_etdm_register, 301662306a36Sopenharmony_ci mt8195_dai_pcm_register, 301762306a36Sopenharmony_ci mt8195_dai_memif_register, 301862306a36Sopenharmony_ci}; 301962306a36Sopenharmony_ci 302062306a36Sopenharmony_cistatic const struct reg_sequence mt8195_afe_reg_defaults[] = { 302162306a36Sopenharmony_ci { AFE_IRQ_MASK, 0x387ffff }, 302262306a36Sopenharmony_ci { AFE_IRQ3_CON, BIT(30) }, 302362306a36Sopenharmony_ci { AFE_IRQ9_CON, BIT(30) }, 302462306a36Sopenharmony_ci { ETDM_IN1_CON4, 0x12000100 }, 302562306a36Sopenharmony_ci { ETDM_IN2_CON4, 0x12000100 }, 302662306a36Sopenharmony_ci}; 302762306a36Sopenharmony_ci 302862306a36Sopenharmony_cistatic const struct reg_sequence mt8195_cg_patch[] = { 302962306a36Sopenharmony_ci { AUDIO_TOP_CON0, 0xfffffffb }, 303062306a36Sopenharmony_ci { AUDIO_TOP_CON1, 0xfffffff8 }, 303162306a36Sopenharmony_ci}; 303262306a36Sopenharmony_ci 303362306a36Sopenharmony_cistatic int mt8195_afe_pcm_dev_probe(struct platform_device *pdev) 303462306a36Sopenharmony_ci{ 303562306a36Sopenharmony_ci struct mtk_base_afe *afe; 303662306a36Sopenharmony_ci struct mt8195_afe_private *afe_priv; 303762306a36Sopenharmony_ci struct device *dev = &pdev->dev; 303862306a36Sopenharmony_ci struct reset_control *rstc; 303962306a36Sopenharmony_ci int i, irq_id, ret; 304062306a36Sopenharmony_ci struct snd_soc_component *component; 304162306a36Sopenharmony_ci 304262306a36Sopenharmony_ci ret = of_reserved_mem_device_init(dev); 304362306a36Sopenharmony_ci if (ret) 304462306a36Sopenharmony_ci return dev_err_probe(dev, ret, "failed to assign memory region\n"); 304562306a36Sopenharmony_ci 304662306a36Sopenharmony_ci ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(33)); 304762306a36Sopenharmony_ci if (ret) 304862306a36Sopenharmony_ci return ret; 304962306a36Sopenharmony_ci 305062306a36Sopenharmony_ci afe = devm_kzalloc(dev, sizeof(*afe), GFP_KERNEL); 305162306a36Sopenharmony_ci if (!afe) 305262306a36Sopenharmony_ci return -ENOMEM; 305362306a36Sopenharmony_ci 305462306a36Sopenharmony_ci afe->platform_priv = devm_kzalloc(dev, sizeof(*afe_priv), 305562306a36Sopenharmony_ci GFP_KERNEL); 305662306a36Sopenharmony_ci if (!afe->platform_priv) 305762306a36Sopenharmony_ci return -ENOMEM; 305862306a36Sopenharmony_ci 305962306a36Sopenharmony_ci afe_priv = afe->platform_priv; 306062306a36Sopenharmony_ci afe->dev = &pdev->dev; 306162306a36Sopenharmony_ci 306262306a36Sopenharmony_ci afe->base_addr = devm_platform_ioremap_resource(pdev, 0); 306362306a36Sopenharmony_ci if (IS_ERR(afe->base_addr)) 306462306a36Sopenharmony_ci return PTR_ERR(afe->base_addr); 306562306a36Sopenharmony_ci 306662306a36Sopenharmony_ci /* initial audio related clock */ 306762306a36Sopenharmony_ci ret = mt8195_afe_init_clock(afe); 306862306a36Sopenharmony_ci if (ret) 306962306a36Sopenharmony_ci return dev_err_probe(dev, ret, "init clock error\n"); 307062306a36Sopenharmony_ci 307162306a36Sopenharmony_ci /* reset controller to reset audio regs before regmap cache */ 307262306a36Sopenharmony_ci rstc = devm_reset_control_get_exclusive(dev, "audiosys"); 307362306a36Sopenharmony_ci if (IS_ERR(rstc)) 307462306a36Sopenharmony_ci return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n"); 307562306a36Sopenharmony_ci 307662306a36Sopenharmony_ci ret = reset_control_reset(rstc); 307762306a36Sopenharmony_ci if (ret) 307862306a36Sopenharmony_ci return dev_err_probe(dev, ret, "failed to trigger audio reset\n"); 307962306a36Sopenharmony_ci 308062306a36Sopenharmony_ci spin_lock_init(&afe_priv->afe_ctrl_lock); 308162306a36Sopenharmony_ci 308262306a36Sopenharmony_ci mutex_init(&afe->irq_alloc_lock); 308362306a36Sopenharmony_ci 308462306a36Sopenharmony_ci /* irq initialize */ 308562306a36Sopenharmony_ci afe->irqs_size = MT8195_AFE_IRQ_NUM; 308662306a36Sopenharmony_ci afe->irqs = devm_kcalloc(dev, afe->irqs_size, sizeof(*afe->irqs), 308762306a36Sopenharmony_ci GFP_KERNEL); 308862306a36Sopenharmony_ci if (!afe->irqs) 308962306a36Sopenharmony_ci return -ENOMEM; 309062306a36Sopenharmony_ci 309162306a36Sopenharmony_ci for (i = 0; i < afe->irqs_size; i++) 309262306a36Sopenharmony_ci afe->irqs[i].irq_data = &irq_data_array[i]; 309362306a36Sopenharmony_ci 309462306a36Sopenharmony_ci /* init memif */ 309562306a36Sopenharmony_ci afe->memif_size = MT8195_AFE_MEMIF_NUM; 309662306a36Sopenharmony_ci afe->memif = devm_kcalloc(dev, afe->memif_size, sizeof(*afe->memif), 309762306a36Sopenharmony_ci GFP_KERNEL); 309862306a36Sopenharmony_ci if (!afe->memif) 309962306a36Sopenharmony_ci return -ENOMEM; 310062306a36Sopenharmony_ci 310162306a36Sopenharmony_ci for (i = 0; i < afe->memif_size; i++) { 310262306a36Sopenharmony_ci afe->memif[i].data = &memif_data[i]; 310362306a36Sopenharmony_ci afe->memif[i].irq_usage = mt8195_afe_memif_const_irqs[i]; 310462306a36Sopenharmony_ci afe->memif[i].const_irq = 1; 310562306a36Sopenharmony_ci afe->irqs[afe->memif[i].irq_usage].irq_occupyed = true; 310662306a36Sopenharmony_ci } 310762306a36Sopenharmony_ci 310862306a36Sopenharmony_ci /* request irq */ 310962306a36Sopenharmony_ci irq_id = platform_get_irq(pdev, 0); 311062306a36Sopenharmony_ci if (irq_id < 0) 311162306a36Sopenharmony_ci return -ENXIO; 311262306a36Sopenharmony_ci 311362306a36Sopenharmony_ci ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler, 311462306a36Sopenharmony_ci IRQF_TRIGGER_NONE, "asys-isr", (void *)afe); 311562306a36Sopenharmony_ci if (ret) 311662306a36Sopenharmony_ci return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n"); 311762306a36Sopenharmony_ci 311862306a36Sopenharmony_ci /* init sub_dais */ 311962306a36Sopenharmony_ci INIT_LIST_HEAD(&afe->sub_dais); 312062306a36Sopenharmony_ci 312162306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) { 312262306a36Sopenharmony_ci ret = dai_register_cbs[i](afe); 312362306a36Sopenharmony_ci if (ret) 312462306a36Sopenharmony_ci return dev_err_probe(dev, ret, "dai cb%i register fail\n", i); 312562306a36Sopenharmony_ci } 312662306a36Sopenharmony_ci 312762306a36Sopenharmony_ci /* init dai_driver and component_driver */ 312862306a36Sopenharmony_ci ret = mtk_afe_combine_sub_dai(afe); 312962306a36Sopenharmony_ci if (ret) 313062306a36Sopenharmony_ci return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n"); 313162306a36Sopenharmony_ci 313262306a36Sopenharmony_ci afe->mtk_afe_hardware = &mt8195_afe_hardware; 313362306a36Sopenharmony_ci afe->memif_fs = mt8195_memif_fs; 313462306a36Sopenharmony_ci afe->irq_fs = mt8195_irq_fs; 313562306a36Sopenharmony_ci 313662306a36Sopenharmony_ci afe->runtime_resume = mt8195_afe_runtime_resume; 313762306a36Sopenharmony_ci afe->runtime_suspend = mt8195_afe_runtime_suspend; 313862306a36Sopenharmony_ci 313962306a36Sopenharmony_ci platform_set_drvdata(pdev, afe); 314062306a36Sopenharmony_ci 314162306a36Sopenharmony_ci afe_priv->topckgen = syscon_regmap_lookup_by_phandle(dev->of_node, "mediatek,topckgen"); 314262306a36Sopenharmony_ci if (IS_ERR(afe_priv->topckgen)) 314362306a36Sopenharmony_ci dev_dbg(afe->dev, "Cannot find topckgen controller: %ld\n", 314462306a36Sopenharmony_ci PTR_ERR(afe_priv->topckgen)); 314562306a36Sopenharmony_ci 314662306a36Sopenharmony_ci /* enable clock for regcache get default value from hw */ 314762306a36Sopenharmony_ci afe_priv->pm_runtime_bypass_reg_ctl = true; 314862306a36Sopenharmony_ci 314962306a36Sopenharmony_ci ret = devm_pm_runtime_enable(dev); 315062306a36Sopenharmony_ci if (ret) 315162306a36Sopenharmony_ci return ret; 315262306a36Sopenharmony_ci 315362306a36Sopenharmony_ci ret = pm_runtime_resume_and_get(dev); 315462306a36Sopenharmony_ci if (ret) 315562306a36Sopenharmony_ci return dev_err_probe(dev, ret, "Failed to resume device\n"); 315662306a36Sopenharmony_ci 315762306a36Sopenharmony_ci afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr, 315862306a36Sopenharmony_ci &mt8195_afe_regmap_config); 315962306a36Sopenharmony_ci if (IS_ERR(afe->regmap)) { 316062306a36Sopenharmony_ci ret = PTR_ERR(afe->regmap); 316162306a36Sopenharmony_ci goto err_pm_put; 316262306a36Sopenharmony_ci } 316362306a36Sopenharmony_ci 316462306a36Sopenharmony_ci ret = regmap_register_patch(afe->regmap, mt8195_cg_patch, 316562306a36Sopenharmony_ci ARRAY_SIZE(mt8195_cg_patch)); 316662306a36Sopenharmony_ci if (ret < 0) { 316762306a36Sopenharmony_ci dev_err(dev, "Failed to apply cg patch\n"); 316862306a36Sopenharmony_ci goto err_pm_put; 316962306a36Sopenharmony_ci } 317062306a36Sopenharmony_ci 317162306a36Sopenharmony_ci /* register component */ 317262306a36Sopenharmony_ci ret = devm_snd_soc_register_component(dev, &mt8195_afe_component, 317362306a36Sopenharmony_ci NULL, 0); 317462306a36Sopenharmony_ci if (ret) { 317562306a36Sopenharmony_ci dev_warn(dev, "err_platform\n"); 317662306a36Sopenharmony_ci goto err_pm_put; 317762306a36Sopenharmony_ci } 317862306a36Sopenharmony_ci 317962306a36Sopenharmony_ci component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL); 318062306a36Sopenharmony_ci if (!component) { 318162306a36Sopenharmony_ci ret = -ENOMEM; 318262306a36Sopenharmony_ci goto err_pm_put; 318362306a36Sopenharmony_ci } 318462306a36Sopenharmony_ci 318562306a36Sopenharmony_ci ret = snd_soc_component_initialize(component, 318662306a36Sopenharmony_ci &mt8195_afe_pcm_dai_component, 318762306a36Sopenharmony_ci dev); 318862306a36Sopenharmony_ci if (ret) 318962306a36Sopenharmony_ci goto err_pm_put; 319062306a36Sopenharmony_ci 319162306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 319262306a36Sopenharmony_ci component->debugfs_prefix = "pcm"; 319362306a36Sopenharmony_ci#endif 319462306a36Sopenharmony_ci 319562306a36Sopenharmony_ci ret = snd_soc_add_component(component, 319662306a36Sopenharmony_ci afe->dai_drivers, 319762306a36Sopenharmony_ci afe->num_dai_drivers); 319862306a36Sopenharmony_ci if (ret) { 319962306a36Sopenharmony_ci dev_warn(dev, "err_dai_component\n"); 320062306a36Sopenharmony_ci goto err_pm_put; 320162306a36Sopenharmony_ci } 320262306a36Sopenharmony_ci 320362306a36Sopenharmony_ci ret = regmap_multi_reg_write(afe->regmap, mt8195_afe_reg_defaults, 320462306a36Sopenharmony_ci ARRAY_SIZE(mt8195_afe_reg_defaults)); 320562306a36Sopenharmony_ci if (ret) 320662306a36Sopenharmony_ci goto err_pm_put; 320762306a36Sopenharmony_ci 320862306a36Sopenharmony_ci ret = pm_runtime_put_sync(dev); 320962306a36Sopenharmony_ci if (ret) 321062306a36Sopenharmony_ci return dev_err_probe(dev, ret, "Failed to suspend device\n"); 321162306a36Sopenharmony_ci 321262306a36Sopenharmony_ci afe_priv->pm_runtime_bypass_reg_ctl = false; 321362306a36Sopenharmony_ci 321462306a36Sopenharmony_ci regcache_cache_only(afe->regmap, true); 321562306a36Sopenharmony_ci regcache_mark_dirty(afe->regmap); 321662306a36Sopenharmony_ci 321762306a36Sopenharmony_ci return 0; 321862306a36Sopenharmony_ci 321962306a36Sopenharmony_cierr_pm_put: 322062306a36Sopenharmony_ci pm_runtime_put_sync(dev); 322162306a36Sopenharmony_ci 322262306a36Sopenharmony_ci return ret; 322362306a36Sopenharmony_ci} 322462306a36Sopenharmony_ci 322562306a36Sopenharmony_cistatic void mt8195_afe_pcm_dev_remove(struct platform_device *pdev) 322662306a36Sopenharmony_ci{ 322762306a36Sopenharmony_ci snd_soc_unregister_component(&pdev->dev); 322862306a36Sopenharmony_ci 322962306a36Sopenharmony_ci pm_runtime_disable(&pdev->dev); 323062306a36Sopenharmony_ci if (!pm_runtime_status_suspended(&pdev->dev)) 323162306a36Sopenharmony_ci mt8195_afe_runtime_suspend(&pdev->dev); 323262306a36Sopenharmony_ci} 323362306a36Sopenharmony_ci 323462306a36Sopenharmony_cistatic const struct of_device_id mt8195_afe_pcm_dt_match[] = { 323562306a36Sopenharmony_ci {.compatible = "mediatek,mt8195-audio", }, 323662306a36Sopenharmony_ci {}, 323762306a36Sopenharmony_ci}; 323862306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, mt8195_afe_pcm_dt_match); 323962306a36Sopenharmony_ci 324062306a36Sopenharmony_cistatic const struct dev_pm_ops mt8195_afe_pm_ops = { 324162306a36Sopenharmony_ci SET_RUNTIME_PM_OPS(mt8195_afe_runtime_suspend, 324262306a36Sopenharmony_ci mt8195_afe_runtime_resume, NULL) 324362306a36Sopenharmony_ci}; 324462306a36Sopenharmony_ci 324562306a36Sopenharmony_cistatic struct platform_driver mt8195_afe_pcm_driver = { 324662306a36Sopenharmony_ci .driver = { 324762306a36Sopenharmony_ci .name = "mt8195-audio", 324862306a36Sopenharmony_ci .of_match_table = mt8195_afe_pcm_dt_match, 324962306a36Sopenharmony_ci .pm = &mt8195_afe_pm_ops, 325062306a36Sopenharmony_ci }, 325162306a36Sopenharmony_ci .probe = mt8195_afe_pcm_dev_probe, 325262306a36Sopenharmony_ci .remove_new = mt8195_afe_pcm_dev_remove, 325362306a36Sopenharmony_ci}; 325462306a36Sopenharmony_ci 325562306a36Sopenharmony_cimodule_platform_driver(mt8195_afe_pcm_driver); 325662306a36Sopenharmony_ci 325762306a36Sopenharmony_ciMODULE_DESCRIPTION("Mediatek ALSA SoC AFE platform driver for 8195"); 325862306a36Sopenharmony_ciMODULE_AUTHOR("Bicycle Tsai <bicycle.tsai@mediatek.com>"); 325962306a36Sopenharmony_ciMODULE_LICENSE("GPL v2"); 3260