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