162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci// 362306a36Sopenharmony_ci// MediaTek ALSA SoC Audio DAI I2S Control 462306a36Sopenharmony_ci// 562306a36Sopenharmony_ci// Copyright (c) 2020 MediaTek Inc. 662306a36Sopenharmony_ci// Author: Shane Chien <shane.chien@mediatek.com> 762306a36Sopenharmony_ci// 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/bitops.h> 1062306a36Sopenharmony_ci#include <linux/regmap.h> 1162306a36Sopenharmony_ci#include <sound/pcm_params.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include "mt8192-afe-clk.h" 1462306a36Sopenharmony_ci#include "mt8192-afe-common.h" 1562306a36Sopenharmony_ci#include "mt8192-afe-gpio.h" 1662306a36Sopenharmony_ci#include "mt8192-interconnection.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cienum { 1962306a36Sopenharmony_ci I2S_FMT_EIAJ = 0, 2062306a36Sopenharmony_ci I2S_FMT_I2S = 1, 2162306a36Sopenharmony_ci}; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cienum { 2462306a36Sopenharmony_ci I2S_WLEN_16_BIT = 0, 2562306a36Sopenharmony_ci I2S_WLEN_32_BIT = 1, 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cienum { 2962306a36Sopenharmony_ci I2S_HD_NORMAL = 0, 3062306a36Sopenharmony_ci I2S_HD_LOW_JITTER = 1, 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cienum { 3462306a36Sopenharmony_ci I2S1_SEL_O28_O29 = 0, 3562306a36Sopenharmony_ci I2S1_SEL_O03_O04 = 1, 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cienum { 3962306a36Sopenharmony_ci I2S_IN_PAD_CONNSYS = 0, 4062306a36Sopenharmony_ci I2S_IN_PAD_IO_MUX = 1, 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct mtk_afe_i2s_priv { 4462306a36Sopenharmony_ci int id; 4562306a36Sopenharmony_ci int rate; /* for determine which apll to use */ 4662306a36Sopenharmony_ci int low_jitter_en; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci int share_i2s_id; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci int mclk_id; 5162306a36Sopenharmony_ci int mclk_rate; 5262306a36Sopenharmony_ci int mclk_apll; 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistatic unsigned int get_i2s_wlen(snd_pcm_format_t format) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci return snd_pcm_format_physical_width(format) <= 16 ? 5862306a36Sopenharmony_ci I2S_WLEN_16_BIT : I2S_WLEN_32_BIT; 5962306a36Sopenharmony_ci} 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci#define MTK_AFE_I2S0_KCONTROL_NAME "I2S0_HD_Mux" 6262306a36Sopenharmony_ci#define MTK_AFE_I2S1_KCONTROL_NAME "I2S1_HD_Mux" 6362306a36Sopenharmony_ci#define MTK_AFE_I2S2_KCONTROL_NAME "I2S2_HD_Mux" 6462306a36Sopenharmony_ci#define MTK_AFE_I2S3_KCONTROL_NAME "I2S3_HD_Mux" 6562306a36Sopenharmony_ci#define MTK_AFE_I2S5_KCONTROL_NAME "I2S5_HD_Mux" 6662306a36Sopenharmony_ci#define MTK_AFE_I2S6_KCONTROL_NAME "I2S6_HD_Mux" 6762306a36Sopenharmony_ci#define MTK_AFE_I2S7_KCONTROL_NAME "I2S7_HD_Mux" 6862306a36Sopenharmony_ci#define MTK_AFE_I2S8_KCONTROL_NAME "I2S8_HD_Mux" 6962306a36Sopenharmony_ci#define MTK_AFE_I2S9_KCONTROL_NAME "I2S9_HD_Mux" 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci#define I2S0_HD_EN_W_NAME "I2S0_HD_EN" 7262306a36Sopenharmony_ci#define I2S1_HD_EN_W_NAME "I2S1_HD_EN" 7362306a36Sopenharmony_ci#define I2S2_HD_EN_W_NAME "I2S2_HD_EN" 7462306a36Sopenharmony_ci#define I2S3_HD_EN_W_NAME "I2S3_HD_EN" 7562306a36Sopenharmony_ci#define I2S5_HD_EN_W_NAME "I2S5_HD_EN" 7662306a36Sopenharmony_ci#define I2S6_HD_EN_W_NAME "I2S6_HD_EN" 7762306a36Sopenharmony_ci#define I2S7_HD_EN_W_NAME "I2S7_HD_EN" 7862306a36Sopenharmony_ci#define I2S8_HD_EN_W_NAME "I2S8_HD_EN" 7962306a36Sopenharmony_ci#define I2S9_HD_EN_W_NAME "I2S9_HD_EN" 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define I2S0_MCLK_EN_W_NAME "I2S0_MCLK_EN" 8262306a36Sopenharmony_ci#define I2S1_MCLK_EN_W_NAME "I2S1_MCLK_EN" 8362306a36Sopenharmony_ci#define I2S2_MCLK_EN_W_NAME "I2S2_MCLK_EN" 8462306a36Sopenharmony_ci#define I2S3_MCLK_EN_W_NAME "I2S3_MCLK_EN" 8562306a36Sopenharmony_ci#define I2S5_MCLK_EN_W_NAME "I2S5_MCLK_EN" 8662306a36Sopenharmony_ci#define I2S6_MCLK_EN_W_NAME "I2S6_MCLK_EN" 8762306a36Sopenharmony_ci#define I2S7_MCLK_EN_W_NAME "I2S7_MCLK_EN" 8862306a36Sopenharmony_ci#define I2S8_MCLK_EN_W_NAME "I2S8_MCLK_EN" 8962306a36Sopenharmony_ci#define I2S9_MCLK_EN_W_NAME "I2S9_MCLK_EN" 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cistatic int get_i2s_id_by_name(struct mtk_base_afe *afe, 9262306a36Sopenharmony_ci const char *name) 9362306a36Sopenharmony_ci{ 9462306a36Sopenharmony_ci if (strncmp(name, "I2S0", 4) == 0) 9562306a36Sopenharmony_ci return MT8192_DAI_I2S_0; 9662306a36Sopenharmony_ci else if (strncmp(name, "I2S1", 4) == 0) 9762306a36Sopenharmony_ci return MT8192_DAI_I2S_1; 9862306a36Sopenharmony_ci else if (strncmp(name, "I2S2", 4) == 0) 9962306a36Sopenharmony_ci return MT8192_DAI_I2S_2; 10062306a36Sopenharmony_ci else if (strncmp(name, "I2S3", 4) == 0) 10162306a36Sopenharmony_ci return MT8192_DAI_I2S_3; 10262306a36Sopenharmony_ci else if (strncmp(name, "I2S5", 4) == 0) 10362306a36Sopenharmony_ci return MT8192_DAI_I2S_5; 10462306a36Sopenharmony_ci else if (strncmp(name, "I2S6", 4) == 0) 10562306a36Sopenharmony_ci return MT8192_DAI_I2S_6; 10662306a36Sopenharmony_ci else if (strncmp(name, "I2S7", 4) == 0) 10762306a36Sopenharmony_ci return MT8192_DAI_I2S_7; 10862306a36Sopenharmony_ci else if (strncmp(name, "I2S8", 4) == 0) 10962306a36Sopenharmony_ci return MT8192_DAI_I2S_8; 11062306a36Sopenharmony_ci else if (strncmp(name, "I2S9", 4) == 0) 11162306a36Sopenharmony_ci return MT8192_DAI_I2S_9; 11262306a36Sopenharmony_ci else 11362306a36Sopenharmony_ci return -EINVAL; 11462306a36Sopenharmony_ci} 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cistatic struct mtk_afe_i2s_priv *get_i2s_priv_by_name(struct mtk_base_afe *afe, 11762306a36Sopenharmony_ci const char *name) 11862306a36Sopenharmony_ci{ 11962306a36Sopenharmony_ci struct mt8192_afe_private *afe_priv = afe->platform_priv; 12062306a36Sopenharmony_ci int dai_id = get_i2s_id_by_name(afe, name); 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci if (dai_id < 0) 12362306a36Sopenharmony_ci return NULL; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci return afe_priv->dai_priv[dai_id]; 12662306a36Sopenharmony_ci} 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci/* low jitter control */ 12962306a36Sopenharmony_cistatic const char * const mt8192_i2s_hd_str[] = { 13062306a36Sopenharmony_ci "Normal", "Low_Jitter" 13162306a36Sopenharmony_ci}; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_EXT_DECL(mt8192_i2s_enum, mt8192_i2s_hd_str); 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_cistatic int mt8192_i2s_hd_get(struct snd_kcontrol *kcontrol, 13662306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 13762306a36Sopenharmony_ci{ 13862306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol); 13962306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 14062306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, kcontrol->id.name); 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci if (!i2s_priv) { 14562306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 14662306a36Sopenharmony_ci return -EINVAL; 14762306a36Sopenharmony_ci } 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci ucontrol->value.integer.value[0] = i2s_priv->low_jitter_en; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci return 0; 15262306a36Sopenharmony_ci} 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_cistatic int mt8192_i2s_hd_set(struct snd_kcontrol *kcontrol, 15562306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 15662306a36Sopenharmony_ci{ 15762306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol); 15862306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 15962306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 16062306a36Sopenharmony_ci struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 16162306a36Sopenharmony_ci int hd_en; 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci if (ucontrol->value.enumerated.item[0] >= e->items) 16462306a36Sopenharmony_ci return -EINVAL; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci hd_en = ucontrol->value.integer.value[0]; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), kcontrol name %s, hd_en %d\n", 16962306a36Sopenharmony_ci __func__, kcontrol->id.name, hd_en); 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, kcontrol->id.name); 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci if (!i2s_priv) { 17462306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 17562306a36Sopenharmony_ci return -EINVAL; 17662306a36Sopenharmony_ci } 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci i2s_priv->low_jitter_en = hd_en; 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci return 0; 18162306a36Sopenharmony_ci} 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_dai_i2s_controls[] = { 18462306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S0_KCONTROL_NAME, mt8192_i2s_enum, 18562306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 18662306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S1_KCONTROL_NAME, mt8192_i2s_enum, 18762306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 18862306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S2_KCONTROL_NAME, mt8192_i2s_enum, 18962306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 19062306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S3_KCONTROL_NAME, mt8192_i2s_enum, 19162306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 19262306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S5_KCONTROL_NAME, mt8192_i2s_enum, 19362306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 19462306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S6_KCONTROL_NAME, mt8192_i2s_enum, 19562306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 19662306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S7_KCONTROL_NAME, mt8192_i2s_enum, 19762306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 19862306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S8_KCONTROL_NAME, mt8192_i2s_enum, 19962306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 20062306a36Sopenharmony_ci SOC_ENUM_EXT(MTK_AFE_I2S9_KCONTROL_NAME, mt8192_i2s_enum, 20162306a36Sopenharmony_ci mt8192_i2s_hd_get, mt8192_i2s_hd_set), 20262306a36Sopenharmony_ci}; 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci/* dai component */ 20562306a36Sopenharmony_ci/* i2s virtual mux to output widget */ 20662306a36Sopenharmony_cistatic const char * const i2s_mux_map[] = { 20762306a36Sopenharmony_ci "Normal", "Dummy_Widget", 20862306a36Sopenharmony_ci}; 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_cistatic int i2s_mux_map_value[] = { 21162306a36Sopenharmony_ci 0, 1, 21262306a36Sopenharmony_ci}; 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(i2s_mux_map_enum, 21562306a36Sopenharmony_ci SND_SOC_NOPM, 21662306a36Sopenharmony_ci 0, 21762306a36Sopenharmony_ci 1, 21862306a36Sopenharmony_ci i2s_mux_map, 21962306a36Sopenharmony_ci i2s_mux_map_value); 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s0_in_mux_control = 22262306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S0 In Select", i2s_mux_map_enum); 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s8_in_mux_control = 22562306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S8 In Select", i2s_mux_map_enum); 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s1_out_mux_control = 22862306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S1 Out Select", i2s_mux_map_enum); 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s3_out_mux_control = 23162306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S3 Out Select", i2s_mux_map_enum); 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s5_out_mux_control = 23462306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S5 Out Select", i2s_mux_map_enum); 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s7_out_mux_control = 23762306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S7 Out Select", i2s_mux_map_enum); 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s9_out_mux_control = 24062306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S9 Out Select", i2s_mux_map_enum); 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci/* Tinyconn Mux */ 24362306a36Sopenharmony_cienum { 24462306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL1 = 0x0, 24562306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL1 = 0x1, 24662306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL12 = 0x2, 24762306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL12 = 0x3, 24862306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL2 = 0x4, 24962306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL2 = 0x5, 25062306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL3 = 0x6, 25162306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL3 = 0x7, 25262306a36Sopenharmony_ci TINYCONN_MUX_NONE = 0x1f, 25362306a36Sopenharmony_ci}; 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_cistatic const char * const tinyconn_mux_map[] = { 25662306a36Sopenharmony_ci "NONE", 25762306a36Sopenharmony_ci "DL1_CH1", 25862306a36Sopenharmony_ci "DL1_CH2", 25962306a36Sopenharmony_ci "DL12_CH1", 26062306a36Sopenharmony_ci "DL12_CH2", 26162306a36Sopenharmony_ci "DL2_CH1", 26262306a36Sopenharmony_ci "DL2_CH2", 26362306a36Sopenharmony_ci "DL3_CH1", 26462306a36Sopenharmony_ci "DL3_CH2", 26562306a36Sopenharmony_ci}; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_cistatic int tinyconn_mux_map_value[] = { 26862306a36Sopenharmony_ci TINYCONN_MUX_NONE, 26962306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL1, 27062306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL1, 27162306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL12, 27262306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL12, 27362306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL2, 27462306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL2, 27562306a36Sopenharmony_ci TINYCONN_CH1_MUX_DL3, 27662306a36Sopenharmony_ci TINYCONN_CH2_MUX_DL3, 27762306a36Sopenharmony_ci}; 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(i2s1_tinyconn_ch1_mux_map_enum, 28062306a36Sopenharmony_ci AFE_TINY_CONN5, 28162306a36Sopenharmony_ci O_20_CFG_SFT, 28262306a36Sopenharmony_ci O_20_CFG_MASK, 28362306a36Sopenharmony_ci tinyconn_mux_map, 28462306a36Sopenharmony_ci tinyconn_mux_map_value); 28562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s1_tinyconn_ch1_mux_control = 28662306a36Sopenharmony_ci SOC_DAPM_ENUM("i2s1 ch1 tinyconn Select", 28762306a36Sopenharmony_ci i2s1_tinyconn_ch1_mux_map_enum); 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(i2s1_tinyconn_ch2_mux_map_enum, 29062306a36Sopenharmony_ci AFE_TINY_CONN5, 29162306a36Sopenharmony_ci O_21_CFG_SFT, 29262306a36Sopenharmony_ci O_21_CFG_MASK, 29362306a36Sopenharmony_ci tinyconn_mux_map, 29462306a36Sopenharmony_ci tinyconn_mux_map_value); 29562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s1_tinyconn_ch2_mux_control = 29662306a36Sopenharmony_ci SOC_DAPM_ENUM("i2s1 ch2 tinyconn Select", 29762306a36Sopenharmony_ci i2s1_tinyconn_ch2_mux_map_enum); 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(i2s3_tinyconn_ch1_mux_map_enum, 30062306a36Sopenharmony_ci AFE_TINY_CONN5, 30162306a36Sopenharmony_ci O_22_CFG_SFT, 30262306a36Sopenharmony_ci O_22_CFG_MASK, 30362306a36Sopenharmony_ci tinyconn_mux_map, 30462306a36Sopenharmony_ci tinyconn_mux_map_value); 30562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s3_tinyconn_ch1_mux_control = 30662306a36Sopenharmony_ci SOC_DAPM_ENUM("i2s3 ch1 tinyconn Select", 30762306a36Sopenharmony_ci i2s3_tinyconn_ch1_mux_map_enum); 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_DECL(i2s3_tinyconn_ch2_mux_map_enum, 31062306a36Sopenharmony_ci AFE_TINY_CONN5, 31162306a36Sopenharmony_ci O_23_CFG_SFT, 31262306a36Sopenharmony_ci O_23_CFG_MASK, 31362306a36Sopenharmony_ci tinyconn_mux_map, 31462306a36Sopenharmony_ci tinyconn_mux_map_value); 31562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s3_tinyconn_ch2_mux_control = 31662306a36Sopenharmony_ci SOC_DAPM_ENUM("i2s3 ch2 tinyconn Select", 31762306a36Sopenharmony_ci i2s3_tinyconn_ch2_mux_map_enum); 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci/* i2s in lpbk */ 32062306a36Sopenharmony_cistatic const char * const i2s_lpbk_mux_map[] = { 32162306a36Sopenharmony_ci "Normal", "Lpbk", 32262306a36Sopenharmony_ci}; 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_cistatic int i2s_lpbk_mux_map_value[] = { 32562306a36Sopenharmony_ci 0, 1, 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(i2s0_lpbk_mux_map_enum, 32962306a36Sopenharmony_ci AFE_I2S_CON, 33062306a36Sopenharmony_ci I2S_LOOPBACK_SFT, 33162306a36Sopenharmony_ci 1, 33262306a36Sopenharmony_ci i2s_lpbk_mux_map, 33362306a36Sopenharmony_ci i2s_lpbk_mux_map_value); 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s0_lpbk_mux_control = 33662306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S Lpbk Select", i2s0_lpbk_mux_map_enum); 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_cistatic SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(i2s2_lpbk_mux_map_enum, 33962306a36Sopenharmony_ci AFE_I2S_CON2, 34062306a36Sopenharmony_ci I2S3_LOOPBACK_SFT, 34162306a36Sopenharmony_ci 1, 34262306a36Sopenharmony_ci i2s_lpbk_mux_map, 34362306a36Sopenharmony_ci i2s_lpbk_mux_map_value); 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_cistatic const struct snd_kcontrol_new i2s2_lpbk_mux_control = 34662306a36Sopenharmony_ci SOC_DAPM_ENUM("I2S Lpbk Select", i2s2_lpbk_mux_map_enum); 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci/* interconnection */ 34962306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s3_ch1_mix[] = { 35062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN0, I_DL1_CH1, 1, 0), 35162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN0, I_DL2_CH1, 1, 0), 35262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN0, I_DL3_CH1, 1, 0), 35362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN0, I_DL12_CH1, 1, 0), 35462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN0_1, I_DL6_CH1, 1, 0), 35562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN0_1, I_DL4_CH1, 1, 0), 35662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN0_1, I_DL5_CH1, 1, 0), 35762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH1", AFE_CONN0_1, I_DL8_CH1, 1, 0), 35862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH1", AFE_CONN0_1, I_DL9_CH1, 1, 0), 35962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1", AFE_CONN0, 36062306a36Sopenharmony_ci I_GAIN1_OUT_CH1, 1, 0), 36162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN0, 36262306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 36362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN0, 36462306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 36562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN0, 36662306a36Sopenharmony_ci I_ADDA_UL_CH3, 1, 0), 36762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN0, 36862306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 36962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN0, 37062306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 37162306a36Sopenharmony_ci}; 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s3_ch2_mix[] = { 37462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN1, I_DL1_CH2, 1, 0), 37562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN1, I_DL2_CH2, 1, 0), 37662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN1, I_DL3_CH2, 1, 0), 37762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN1, I_DL12_CH2, 1, 0), 37862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN1_1, I_DL6_CH2, 1, 0), 37962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN1_1, I_DL4_CH2, 1, 0), 38062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN1_1, I_DL5_CH2, 1, 0), 38162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH2", AFE_CONN1_1, I_DL8_CH2, 1, 0), 38262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH2", AFE_CONN1_1, I_DL9_CH2, 1, 0), 38362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2", AFE_CONN1, 38462306a36Sopenharmony_ci I_GAIN1_OUT_CH2, 1, 0), 38562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN1, 38662306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 38762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN1, 38862306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 38962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH3", AFE_CONN1, 39062306a36Sopenharmony_ci I_ADDA_UL_CH3, 1, 0), 39162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN1, 39262306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 39362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN1, 39462306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 39562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2", AFE_CONN1, 39662306a36Sopenharmony_ci I_PCM_1_CAP_CH2, 1, 0), 39762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH2", AFE_CONN1, 39862306a36Sopenharmony_ci I_PCM_2_CAP_CH2, 1, 0), 39962306a36Sopenharmony_ci}; 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s1_ch1_mix[] = { 40262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN28, I_DL1_CH1, 1, 0), 40362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN28, I_DL2_CH1, 1, 0), 40462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN28, I_DL3_CH1, 1, 0), 40562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN28, I_DL12_CH1, 1, 0), 40662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN28_1, I_DL6_CH1, 1, 0), 40762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN28_1, I_DL4_CH1, 1, 0), 40862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN28_1, I_DL5_CH1, 1, 0), 40962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH1", AFE_CONN28_1, I_DL8_CH1, 1, 0), 41062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH1", AFE_CONN28_1, I_DL9_CH1, 1, 0), 41162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1", AFE_CONN28, 41262306a36Sopenharmony_ci I_GAIN1_OUT_CH1, 1, 0), 41362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN28, 41462306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 41562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN28, 41662306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 41762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN28, 41862306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 41962306a36Sopenharmony_ci}; 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s1_ch2_mix[] = { 42262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN29, I_DL1_CH2, 1, 0), 42362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN29, I_DL2_CH2, 1, 0), 42462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN29, I_DL3_CH2, 1, 0), 42562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN29, I_DL12_CH2, 1, 0), 42662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN29_1, I_DL6_CH2, 1, 0), 42762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN29_1, I_DL4_CH2, 1, 0), 42862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN29_1, I_DL5_CH2, 1, 0), 42962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH2", AFE_CONN29_1, I_DL8_CH2, 1, 0), 43062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH2", AFE_CONN29_1, I_DL9_CH2, 1, 0), 43162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2", AFE_CONN29, 43262306a36Sopenharmony_ci I_GAIN1_OUT_CH2, 1, 0), 43362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN29, 43462306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 43562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN29, 43662306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 43762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN29, 43862306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 43962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2", AFE_CONN29, 44062306a36Sopenharmony_ci I_PCM_1_CAP_CH2, 1, 0), 44162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH2", AFE_CONN29, 44262306a36Sopenharmony_ci I_PCM_2_CAP_CH2, 1, 0), 44362306a36Sopenharmony_ci}; 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s5_ch1_mix[] = { 44662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN30, I_DL1_CH1, 1, 0), 44762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN30, I_DL2_CH1, 1, 0), 44862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN30, I_DL3_CH1, 1, 0), 44962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN30, I_DL12_CH1, 1, 0), 45062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN30_1, I_DL6_CH1, 1, 0), 45162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN30_1, I_DL4_CH1, 1, 0), 45262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN30_1, I_DL5_CH1, 1, 0), 45362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH1", AFE_CONN30_1, I_DL8_CH1, 1, 0), 45462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH1", AFE_CONN30_1, I_DL9_CH1, 1, 0), 45562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1", AFE_CONN30, 45662306a36Sopenharmony_ci I_GAIN1_OUT_CH1, 1, 0), 45762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN30, 45862306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 45962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN30, 46062306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 46162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN30, 46262306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 46362306a36Sopenharmony_ci}; 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s5_ch2_mix[] = { 46662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN31, I_DL1_CH2, 1, 0), 46762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN31, I_DL2_CH2, 1, 0), 46862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN31, I_DL3_CH2, 1, 0), 46962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN31, I_DL12_CH2, 1, 0), 47062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN31_1, I_DL6_CH2, 1, 0), 47162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN31_1, I_DL4_CH2, 1, 0), 47262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN31_1, I_DL5_CH2, 1, 0), 47362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH2", AFE_CONN31_1, I_DL8_CH2, 1, 0), 47462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH2", AFE_CONN31_1, I_DL9_CH2, 1, 0), 47562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2", AFE_CONN31, 47662306a36Sopenharmony_ci I_GAIN1_OUT_CH2, 1, 0), 47762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN31, 47862306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 47962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN31, 48062306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 48162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN31, 48262306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 48362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2", AFE_CONN31, 48462306a36Sopenharmony_ci I_PCM_1_CAP_CH2, 1, 0), 48562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH2", AFE_CONN31, 48662306a36Sopenharmony_ci I_PCM_2_CAP_CH2, 1, 0), 48762306a36Sopenharmony_ci}; 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s7_ch1_mix[] = { 49062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN54, I_DL1_CH1, 1, 0), 49162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN54, I_DL2_CH1, 1, 0), 49262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN54, I_DL3_CH1, 1, 0), 49362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN54, I_DL12_CH1, 1, 0), 49462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN54_1, I_DL6_CH1, 1, 0), 49562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN54_1, I_DL4_CH1, 1, 0), 49662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN54_1, I_DL5_CH1, 1, 0), 49762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH1", AFE_CONN54_1, I_DL9_CH1, 1, 0), 49862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1", AFE_CONN54, 49962306a36Sopenharmony_ci I_GAIN1_OUT_CH1, 1, 0), 50062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN54, 50162306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 50262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN54, 50362306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 50462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN54, 50562306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 50662306a36Sopenharmony_ci}; 50762306a36Sopenharmony_ci 50862306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s7_ch2_mix[] = { 50962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN55, I_DL1_CH2, 1, 0), 51062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN55, I_DL2_CH2, 1, 0), 51162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN55, I_DL3_CH2, 1, 0), 51262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN55, I_DL12_CH2, 1, 0), 51362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN55_1, I_DL6_CH2, 1, 0), 51462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN55_1, I_DL4_CH2, 1, 0), 51562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN55_1, I_DL5_CH2, 1, 0), 51662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH2", AFE_CONN55_1, I_DL9_CH2, 1, 0), 51762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2", AFE_CONN55, 51862306a36Sopenharmony_ci I_GAIN1_OUT_CH2, 1, 0), 51962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN55, 52062306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 52162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN55, 52262306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 52362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN55, 52462306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 52562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2", AFE_CONN55, 52662306a36Sopenharmony_ci I_PCM_1_CAP_CH2, 1, 0), 52762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH2", AFE_CONN55, 52862306a36Sopenharmony_ci I_PCM_2_CAP_CH2, 1, 0), 52962306a36Sopenharmony_ci}; 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s9_ch1_mix[] = { 53262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH1", AFE_CONN56, I_DL1_CH1, 1, 0), 53362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH1", AFE_CONN56, I_DL2_CH1, 1, 0), 53462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH1", AFE_CONN56, I_DL3_CH1, 1, 0), 53562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH1", AFE_CONN56, I_DL12_CH1, 1, 0), 53662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH1", AFE_CONN56_1, I_DL6_CH1, 1, 0), 53762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH1", AFE_CONN56_1, I_DL4_CH1, 1, 0), 53862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH1", AFE_CONN56_1, I_DL5_CH1, 1, 0), 53962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH1", AFE_CONN56_1, I_DL8_CH1, 1, 0), 54062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH1", AFE_CONN56_1, I_DL9_CH1, 1, 0), 54162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH1", AFE_CONN56, 54262306a36Sopenharmony_ci I_GAIN1_OUT_CH1, 1, 0), 54362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH1", AFE_CONN56, 54462306a36Sopenharmony_ci I_ADDA_UL_CH1, 1, 0), 54562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN56, 54662306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 54762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN56, 54862306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 54962306a36Sopenharmony_ci}; 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_cistatic const struct snd_kcontrol_new mtk_i2s9_ch2_mix[] = { 55262306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL1_CH2", AFE_CONN57, I_DL1_CH2, 1, 0), 55362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL2_CH2", AFE_CONN57, I_DL2_CH2, 1, 0), 55462306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL3_CH2", AFE_CONN57, I_DL3_CH2, 1, 0), 55562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL12_CH2", AFE_CONN57, I_DL12_CH2, 1, 0), 55662306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL6_CH2", AFE_CONN57_1, I_DL6_CH2, 1, 0), 55762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL4_CH2", AFE_CONN57_1, I_DL4_CH2, 1, 0), 55862306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL5_CH2", AFE_CONN57_1, I_DL5_CH2, 1, 0), 55962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL8_CH2", AFE_CONN57_1, I_DL8_CH2, 1, 0), 56062306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("DL9_CH2", AFE_CONN57_1, I_DL9_CH2, 1, 0), 56162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("GAIN1_OUT_CH2", AFE_CONN57, 56262306a36Sopenharmony_ci I_GAIN1_OUT_CH2, 1, 0), 56362306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("ADDA_UL_CH2", AFE_CONN57, 56462306a36Sopenharmony_ci I_ADDA_UL_CH2, 1, 0), 56562306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH1", AFE_CONN57, 56662306a36Sopenharmony_ci I_PCM_1_CAP_CH1, 1, 0), 56762306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH1", AFE_CONN57, 56862306a36Sopenharmony_ci I_PCM_2_CAP_CH1, 1, 0), 56962306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_1_CAP_CH2", AFE_CONN57, 57062306a36Sopenharmony_ci I_PCM_1_CAP_CH2, 1, 0), 57162306a36Sopenharmony_ci SOC_DAPM_SINGLE_AUTODISABLE("PCM_2_CAP_CH2", AFE_CONN57, 57262306a36Sopenharmony_ci I_PCM_2_CAP_CH2, 1, 0), 57362306a36Sopenharmony_ci}; 57462306a36Sopenharmony_ci 57562306a36Sopenharmony_cienum { 57662306a36Sopenharmony_ci SUPPLY_SEQ_APLL, 57762306a36Sopenharmony_ci SUPPLY_SEQ_I2S_MCLK_EN, 57862306a36Sopenharmony_ci SUPPLY_SEQ_I2S_HD_EN, 57962306a36Sopenharmony_ci SUPPLY_SEQ_I2S_EN, 58062306a36Sopenharmony_ci}; 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_cistatic int mtk_i2s_en_event(struct snd_soc_dapm_widget *w, 58362306a36Sopenharmony_ci struct snd_kcontrol *kcontrol, 58462306a36Sopenharmony_ci int event) 58562306a36Sopenharmony_ci{ 58662306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 58762306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 58862306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 58962306a36Sopenharmony_ci 59062306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, w->name); 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_ci if (!i2s_priv) { 59362306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 59462306a36Sopenharmony_ci return -EINVAL; 59562306a36Sopenharmony_ci } 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci dev_dbg(cmpnt->dev, "%s(), name %s, event 0x%x\n", 59862306a36Sopenharmony_ci __func__, w->name, event); 59962306a36Sopenharmony_ci 60062306a36Sopenharmony_ci switch (event) { 60162306a36Sopenharmony_ci case SND_SOC_DAPM_PRE_PMU: 60262306a36Sopenharmony_ci mt8192_afe_gpio_request(afe->dev, true, i2s_priv->id, 0); 60362306a36Sopenharmony_ci break; 60462306a36Sopenharmony_ci case SND_SOC_DAPM_POST_PMD: 60562306a36Sopenharmony_ci mt8192_afe_gpio_request(afe->dev, false, i2s_priv->id, 0); 60662306a36Sopenharmony_ci break; 60762306a36Sopenharmony_ci default: 60862306a36Sopenharmony_ci break; 60962306a36Sopenharmony_ci } 61062306a36Sopenharmony_ci 61162306a36Sopenharmony_ci return 0; 61262306a36Sopenharmony_ci} 61362306a36Sopenharmony_ci 61462306a36Sopenharmony_cistatic int mtk_apll_event(struct snd_soc_dapm_widget *w, 61562306a36Sopenharmony_ci struct snd_kcontrol *kcontrol, 61662306a36Sopenharmony_ci int event) 61762306a36Sopenharmony_ci{ 61862306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 61962306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_ci dev_dbg(cmpnt->dev, "%s(), name %s, event 0x%x\n", 62262306a36Sopenharmony_ci __func__, w->name, event); 62362306a36Sopenharmony_ci 62462306a36Sopenharmony_ci switch (event) { 62562306a36Sopenharmony_ci case SND_SOC_DAPM_PRE_PMU: 62662306a36Sopenharmony_ci if (strcmp(w->name, APLL1_W_NAME) == 0) 62762306a36Sopenharmony_ci mt8192_apll1_enable(afe); 62862306a36Sopenharmony_ci else 62962306a36Sopenharmony_ci mt8192_apll2_enable(afe); 63062306a36Sopenharmony_ci break; 63162306a36Sopenharmony_ci case SND_SOC_DAPM_POST_PMD: 63262306a36Sopenharmony_ci if (strcmp(w->name, APLL1_W_NAME) == 0) 63362306a36Sopenharmony_ci mt8192_apll1_disable(afe); 63462306a36Sopenharmony_ci else 63562306a36Sopenharmony_ci mt8192_apll2_disable(afe); 63662306a36Sopenharmony_ci break; 63762306a36Sopenharmony_ci default: 63862306a36Sopenharmony_ci break; 63962306a36Sopenharmony_ci } 64062306a36Sopenharmony_ci 64162306a36Sopenharmony_ci return 0; 64262306a36Sopenharmony_ci} 64362306a36Sopenharmony_ci 64462306a36Sopenharmony_cistatic int i2s_out_tinyconn_event(struct snd_soc_dapm_widget *w, 64562306a36Sopenharmony_ci struct snd_kcontrol *kcontrol, 64662306a36Sopenharmony_ci int event) 64762306a36Sopenharmony_ci{ 64862306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 64962306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 65062306a36Sopenharmony_ci unsigned int reg; 65162306a36Sopenharmony_ci unsigned int reg_shift; 65262306a36Sopenharmony_ci unsigned int reg_mask_shift; 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), event 0x%x\n", __func__, event); 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_ci if (strstr(w->name, "I2S1")) { 65762306a36Sopenharmony_ci reg = AFE_I2S_CON1; 65862306a36Sopenharmony_ci reg_shift = I2S2_32BIT_EN_SFT; 65962306a36Sopenharmony_ci reg_mask_shift = I2S2_32BIT_EN_MASK_SFT; 66062306a36Sopenharmony_ci } else if (strstr(w->name, "I2S3")) { 66162306a36Sopenharmony_ci reg = AFE_I2S_CON3; 66262306a36Sopenharmony_ci reg_shift = I2S4_32BIT_EN_SFT; 66362306a36Sopenharmony_ci reg_mask_shift = I2S4_32BIT_EN_MASK_SFT; 66462306a36Sopenharmony_ci } else if (strstr(w->name, "I2S5")) { 66562306a36Sopenharmony_ci reg = AFE_I2S_CON4; 66662306a36Sopenharmony_ci reg_shift = I2S5_32BIT_EN_SFT; 66762306a36Sopenharmony_ci reg_mask_shift = I2S5_32BIT_EN_MASK_SFT; 66862306a36Sopenharmony_ci } else if (strstr(w->name, "I2S7")) { 66962306a36Sopenharmony_ci reg = AFE_I2S_CON7; 67062306a36Sopenharmony_ci reg_shift = I2S7_32BIT_EN_SFT; 67162306a36Sopenharmony_ci reg_mask_shift = I2S7_32BIT_EN_MASK_SFT; 67262306a36Sopenharmony_ci } else if (strstr(w->name, "I2S9")) { 67362306a36Sopenharmony_ci reg = AFE_I2S_CON9; 67462306a36Sopenharmony_ci reg_shift = I2S9_32BIT_EN_SFT; 67562306a36Sopenharmony_ci reg_mask_shift = I2S9_32BIT_EN_MASK_SFT; 67662306a36Sopenharmony_ci } else { 67762306a36Sopenharmony_ci reg = AFE_I2S_CON1; 67862306a36Sopenharmony_ci reg_shift = I2S2_32BIT_EN_SFT; 67962306a36Sopenharmony_ci reg_mask_shift = I2S2_32BIT_EN_MASK_SFT; 68062306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), error widget name %s, use i2s1\n", 68162306a36Sopenharmony_ci __func__, w->name); 68262306a36Sopenharmony_ci } 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_ci switch (event) { 68562306a36Sopenharmony_ci case SND_SOC_DAPM_PRE_PMU: 68662306a36Sopenharmony_ci regmap_update_bits(afe->regmap, reg, reg_mask_shift, 68762306a36Sopenharmony_ci 0x1 << reg_shift); 68862306a36Sopenharmony_ci break; 68962306a36Sopenharmony_ci case SND_SOC_DAPM_PRE_PMD: 69062306a36Sopenharmony_ci regmap_update_bits(afe->regmap, reg, reg_mask_shift, 69162306a36Sopenharmony_ci 0x0 << reg_shift); 69262306a36Sopenharmony_ci break; 69362306a36Sopenharmony_ci default: 69462306a36Sopenharmony_ci break; 69562306a36Sopenharmony_ci } 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci return 0; 69862306a36Sopenharmony_ci} 69962306a36Sopenharmony_ci 70062306a36Sopenharmony_cistatic int mtk_mclk_en_event(struct snd_soc_dapm_widget *w, 70162306a36Sopenharmony_ci struct snd_kcontrol *kcontrol, 70262306a36Sopenharmony_ci int event) 70362306a36Sopenharmony_ci{ 70462306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 70562306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 70662306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 70762306a36Sopenharmony_ci 70862306a36Sopenharmony_ci dev_dbg(cmpnt->dev, "%s(), name %s, event 0x%x\n", 70962306a36Sopenharmony_ci __func__, w->name, event); 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, w->name); 71262306a36Sopenharmony_ci if (!i2s_priv) { 71362306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 71462306a36Sopenharmony_ci return -EINVAL; 71562306a36Sopenharmony_ci } 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci switch (event) { 71862306a36Sopenharmony_ci case SND_SOC_DAPM_PRE_PMU: 71962306a36Sopenharmony_ci mt8192_mck_enable(afe, i2s_priv->mclk_id, i2s_priv->mclk_rate); 72062306a36Sopenharmony_ci break; 72162306a36Sopenharmony_ci case SND_SOC_DAPM_POST_PMD: 72262306a36Sopenharmony_ci i2s_priv->mclk_rate = 0; 72362306a36Sopenharmony_ci mt8192_mck_disable(afe, i2s_priv->mclk_id); 72462306a36Sopenharmony_ci break; 72562306a36Sopenharmony_ci default: 72662306a36Sopenharmony_ci break; 72762306a36Sopenharmony_ci } 72862306a36Sopenharmony_ci 72962306a36Sopenharmony_ci return 0; 73062306a36Sopenharmony_ci} 73162306a36Sopenharmony_ci 73262306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget mtk_dai_i2s_widgets[] = { 73362306a36Sopenharmony_ci SND_SOC_DAPM_INPUT("CONNSYS"), 73462306a36Sopenharmony_ci 73562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S1_CH1", SND_SOC_NOPM, 0, 0, 73662306a36Sopenharmony_ci mtk_i2s1_ch1_mix, 73762306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s1_ch1_mix)), 73862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S1_CH2", SND_SOC_NOPM, 0, 0, 73962306a36Sopenharmony_ci mtk_i2s1_ch2_mix, 74062306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s1_ch2_mix)), 74162306a36Sopenharmony_ci 74262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S3_CH1", SND_SOC_NOPM, 0, 0, 74362306a36Sopenharmony_ci mtk_i2s3_ch1_mix, 74462306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s3_ch1_mix)), 74562306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S3_CH2", SND_SOC_NOPM, 0, 0, 74662306a36Sopenharmony_ci mtk_i2s3_ch2_mix, 74762306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s3_ch2_mix)), 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S5_CH1", SND_SOC_NOPM, 0, 0, 75062306a36Sopenharmony_ci mtk_i2s5_ch1_mix, 75162306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s5_ch1_mix)), 75262306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S5_CH2", SND_SOC_NOPM, 0, 0, 75362306a36Sopenharmony_ci mtk_i2s5_ch2_mix, 75462306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s5_ch2_mix)), 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S7_CH1", SND_SOC_NOPM, 0, 0, 75762306a36Sopenharmony_ci mtk_i2s7_ch1_mix, 75862306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s7_ch1_mix)), 75962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S7_CH2", SND_SOC_NOPM, 0, 0, 76062306a36Sopenharmony_ci mtk_i2s7_ch2_mix, 76162306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s7_ch2_mix)), 76262306a36Sopenharmony_ci 76362306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S9_CH1", SND_SOC_NOPM, 0, 0, 76462306a36Sopenharmony_ci mtk_i2s9_ch1_mix, 76562306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s9_ch1_mix)), 76662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER("I2S9_CH2", SND_SOC_NOPM, 0, 0, 76762306a36Sopenharmony_ci mtk_i2s9_ch2_mix, 76862306a36Sopenharmony_ci ARRAY_SIZE(mtk_i2s9_ch2_mix)), 76962306a36Sopenharmony_ci 77062306a36Sopenharmony_ci SND_SOC_DAPM_MUX_E("I2S1_TINYCONN_CH1_MUX", SND_SOC_NOPM, 0, 0, 77162306a36Sopenharmony_ci &i2s1_tinyconn_ch1_mux_control, 77262306a36Sopenharmony_ci i2s_out_tinyconn_event, 77362306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), 77462306a36Sopenharmony_ci SND_SOC_DAPM_MUX_E("I2S1_TINYCONN_CH2_MUX", SND_SOC_NOPM, 0, 0, 77562306a36Sopenharmony_ci &i2s1_tinyconn_ch2_mux_control, 77662306a36Sopenharmony_ci i2s_out_tinyconn_event, 77762306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), 77862306a36Sopenharmony_ci SND_SOC_DAPM_MUX_E("I2S3_TINYCONN_CH1_MUX", SND_SOC_NOPM, 0, 0, 77962306a36Sopenharmony_ci &i2s3_tinyconn_ch1_mux_control, 78062306a36Sopenharmony_ci i2s_out_tinyconn_event, 78162306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), 78262306a36Sopenharmony_ci SND_SOC_DAPM_MUX_E("I2S3_TINYCONN_CH2_MUX", SND_SOC_NOPM, 0, 0, 78362306a36Sopenharmony_ci &i2s3_tinyconn_ch2_mux_control, 78462306a36Sopenharmony_ci i2s_out_tinyconn_event, 78562306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD), 78662306a36Sopenharmony_ci 78762306a36Sopenharmony_ci /* i2s en*/ 78862306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S0_EN", SUPPLY_SEQ_I2S_EN, 78962306a36Sopenharmony_ci AFE_I2S_CON, I2S_EN_SFT, 0, 79062306a36Sopenharmony_ci mtk_i2s_en_event, 79162306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 79262306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S1_EN", SUPPLY_SEQ_I2S_EN, 79362306a36Sopenharmony_ci AFE_I2S_CON1, I2S_EN_SFT, 0, 79462306a36Sopenharmony_ci mtk_i2s_en_event, 79562306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 79662306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S2_EN", SUPPLY_SEQ_I2S_EN, 79762306a36Sopenharmony_ci AFE_I2S_CON2, I2S_EN_SFT, 0, 79862306a36Sopenharmony_ci mtk_i2s_en_event, 79962306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 80062306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S3_EN", SUPPLY_SEQ_I2S_EN, 80162306a36Sopenharmony_ci AFE_I2S_CON3, I2S_EN_SFT, 0, 80262306a36Sopenharmony_ci mtk_i2s_en_event, 80362306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 80462306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S5_EN", SUPPLY_SEQ_I2S_EN, 80562306a36Sopenharmony_ci AFE_I2S_CON4, I2S5_EN_SFT, 0, 80662306a36Sopenharmony_ci mtk_i2s_en_event, 80762306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 80862306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S6_EN", SUPPLY_SEQ_I2S_EN, 80962306a36Sopenharmony_ci AFE_I2S_CON6, I2S6_EN_SFT, 0, 81062306a36Sopenharmony_ci mtk_i2s_en_event, 81162306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 81262306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S7_EN", SUPPLY_SEQ_I2S_EN, 81362306a36Sopenharmony_ci AFE_I2S_CON7, I2S7_EN_SFT, 0, 81462306a36Sopenharmony_ci mtk_i2s_en_event, 81562306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 81662306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S8_EN", SUPPLY_SEQ_I2S_EN, 81762306a36Sopenharmony_ci AFE_I2S_CON8, I2S8_EN_SFT, 0, 81862306a36Sopenharmony_ci mtk_i2s_en_event, 81962306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 82062306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S("I2S9_EN", SUPPLY_SEQ_I2S_EN, 82162306a36Sopenharmony_ci AFE_I2S_CON9, I2S9_EN_SFT, 0, 82262306a36Sopenharmony_ci mtk_i2s_en_event, 82362306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 82462306a36Sopenharmony_ci /* i2s hd en */ 82562306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S0_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 82662306a36Sopenharmony_ci AFE_I2S_CON, I2S1_HD_EN_SFT, 0, NULL, 0), 82762306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S1_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 82862306a36Sopenharmony_ci AFE_I2S_CON1, I2S2_HD_EN_SFT, 0, NULL, 0), 82962306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S2_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 83062306a36Sopenharmony_ci AFE_I2S_CON2, I2S3_HD_EN_SFT, 0, NULL, 0), 83162306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S3_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 83262306a36Sopenharmony_ci AFE_I2S_CON3, I2S4_HD_EN_SFT, 0, NULL, 0), 83362306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S5_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 83462306a36Sopenharmony_ci AFE_I2S_CON4, I2S5_HD_EN_SFT, 0, NULL, 0), 83562306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S6_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 83662306a36Sopenharmony_ci AFE_I2S_CON6, I2S6_HD_EN_SFT, 0, NULL, 0), 83762306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S7_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 83862306a36Sopenharmony_ci AFE_I2S_CON7, I2S7_HD_EN_SFT, 0, NULL, 0), 83962306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S8_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 84062306a36Sopenharmony_ci AFE_I2S_CON8, I2S8_HD_EN_SFT, 0, NULL, 0), 84162306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S9_HD_EN_W_NAME, SUPPLY_SEQ_I2S_HD_EN, 84262306a36Sopenharmony_ci AFE_I2S_CON9, I2S9_HD_EN_SFT, 0, NULL, 0), 84362306a36Sopenharmony_ci 84462306a36Sopenharmony_ci /* i2s mclk en */ 84562306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S0_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 84662306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 84762306a36Sopenharmony_ci mtk_mclk_en_event, 84862306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 84962306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S1_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 85062306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 85162306a36Sopenharmony_ci mtk_mclk_en_event, 85262306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 85362306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S2_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 85462306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 85562306a36Sopenharmony_ci mtk_mclk_en_event, 85662306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 85762306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S3_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 85862306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 85962306a36Sopenharmony_ci mtk_mclk_en_event, 86062306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 86162306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S5_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 86262306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 86362306a36Sopenharmony_ci mtk_mclk_en_event, 86462306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 86562306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S6_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 86662306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 86762306a36Sopenharmony_ci mtk_mclk_en_event, 86862306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 86962306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S7_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 87062306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 87162306a36Sopenharmony_ci mtk_mclk_en_event, 87262306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 87362306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S8_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 87462306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 87562306a36Sopenharmony_ci mtk_mclk_en_event, 87662306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 87762306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(I2S9_MCLK_EN_W_NAME, SUPPLY_SEQ_I2S_MCLK_EN, 87862306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 87962306a36Sopenharmony_ci mtk_mclk_en_event, 88062306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 88162306a36Sopenharmony_ci 88262306a36Sopenharmony_ci /* apll */ 88362306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(APLL1_W_NAME, SUPPLY_SEQ_APLL, 88462306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 88562306a36Sopenharmony_ci mtk_apll_event, 88662306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 88762306a36Sopenharmony_ci SND_SOC_DAPM_SUPPLY_S(APLL2_W_NAME, SUPPLY_SEQ_APLL, 88862306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, 88962306a36Sopenharmony_ci mtk_apll_event, 89062306a36Sopenharmony_ci SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 89162306a36Sopenharmony_ci 89262306a36Sopenharmony_ci /* allow i2s on without codec on */ 89362306a36Sopenharmony_ci SND_SOC_DAPM_OUTPUT("I2S_DUMMY_OUT"), 89462306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S1_Out_Mux", 89562306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s1_out_mux_control), 89662306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S3_Out_Mux", 89762306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s3_out_mux_control), 89862306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S5_Out_Mux", 89962306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s5_out_mux_control), 90062306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S7_Out_Mux", 90162306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s7_out_mux_control), 90262306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S9_Out_Mux", 90362306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s9_out_mux_control), 90462306a36Sopenharmony_ci 90562306a36Sopenharmony_ci SND_SOC_DAPM_INPUT("I2S_DUMMY_IN"), 90662306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S0_In_Mux", 90762306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s0_in_mux_control), 90862306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S8_In_Mux", 90962306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s8_in_mux_control), 91062306a36Sopenharmony_ci 91162306a36Sopenharmony_ci /* i2s in lpbk */ 91262306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S0_Lpbk_Mux", 91362306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s0_lpbk_mux_control), 91462306a36Sopenharmony_ci SND_SOC_DAPM_MUX("I2S2_Lpbk_Mux", 91562306a36Sopenharmony_ci SND_SOC_NOPM, 0, 0, &i2s2_lpbk_mux_control), 91662306a36Sopenharmony_ci}; 91762306a36Sopenharmony_ci 91862306a36Sopenharmony_cistatic int mtk_afe_i2s_share_connect(struct snd_soc_dapm_widget *source, 91962306a36Sopenharmony_ci struct snd_soc_dapm_widget *sink) 92062306a36Sopenharmony_ci{ 92162306a36Sopenharmony_ci struct snd_soc_dapm_widget *w = sink; 92262306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 92362306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 92462306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 92562306a36Sopenharmony_ci 92662306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, sink->name); 92762306a36Sopenharmony_ci if (!i2s_priv) { 92862306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 92962306a36Sopenharmony_ci return 0; 93062306a36Sopenharmony_ci } 93162306a36Sopenharmony_ci 93262306a36Sopenharmony_ci if (i2s_priv->share_i2s_id < 0) 93362306a36Sopenharmony_ci return 0; 93462306a36Sopenharmony_ci 93562306a36Sopenharmony_ci return i2s_priv->share_i2s_id == get_i2s_id_by_name(afe, source->name); 93662306a36Sopenharmony_ci} 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_cistatic int mtk_afe_i2s_hd_connect(struct snd_soc_dapm_widget *source, 93962306a36Sopenharmony_ci struct snd_soc_dapm_widget *sink) 94062306a36Sopenharmony_ci{ 94162306a36Sopenharmony_ci struct snd_soc_dapm_widget *w = sink; 94262306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 94362306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 94462306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 94562306a36Sopenharmony_ci 94662306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, sink->name); 94762306a36Sopenharmony_ci if (!i2s_priv) { 94862306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 94962306a36Sopenharmony_ci return 0; 95062306a36Sopenharmony_ci } 95162306a36Sopenharmony_ci 95262306a36Sopenharmony_ci if (get_i2s_id_by_name(afe, sink->name) == 95362306a36Sopenharmony_ci get_i2s_id_by_name(afe, source->name)) 95462306a36Sopenharmony_ci return i2s_priv->low_jitter_en; 95562306a36Sopenharmony_ci 95662306a36Sopenharmony_ci /* check if share i2s need hd en */ 95762306a36Sopenharmony_ci if (i2s_priv->share_i2s_id < 0) 95862306a36Sopenharmony_ci return 0; 95962306a36Sopenharmony_ci 96062306a36Sopenharmony_ci if (i2s_priv->share_i2s_id == get_i2s_id_by_name(afe, source->name)) 96162306a36Sopenharmony_ci return i2s_priv->low_jitter_en; 96262306a36Sopenharmony_ci 96362306a36Sopenharmony_ci return 0; 96462306a36Sopenharmony_ci} 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_cistatic int mtk_afe_i2s_apll_connect(struct snd_soc_dapm_widget *source, 96762306a36Sopenharmony_ci struct snd_soc_dapm_widget *sink) 96862306a36Sopenharmony_ci{ 96962306a36Sopenharmony_ci struct snd_soc_dapm_widget *w = sink; 97062306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 97162306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 97262306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 97362306a36Sopenharmony_ci int cur_apll; 97462306a36Sopenharmony_ci int i2s_need_apll; 97562306a36Sopenharmony_ci 97662306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, w->name); 97762306a36Sopenharmony_ci if (!i2s_priv) { 97862306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 97962306a36Sopenharmony_ci return 0; 98062306a36Sopenharmony_ci } 98162306a36Sopenharmony_ci 98262306a36Sopenharmony_ci /* which apll */ 98362306a36Sopenharmony_ci cur_apll = mt8192_get_apll_by_name(afe, source->name); 98462306a36Sopenharmony_ci 98562306a36Sopenharmony_ci /* choose APLL from i2s rate */ 98662306a36Sopenharmony_ci i2s_need_apll = mt8192_get_apll_by_rate(afe, i2s_priv->rate); 98762306a36Sopenharmony_ci 98862306a36Sopenharmony_ci if (i2s_need_apll == cur_apll) 98962306a36Sopenharmony_ci return 1; 99062306a36Sopenharmony_ci 99162306a36Sopenharmony_ci return 0; 99262306a36Sopenharmony_ci} 99362306a36Sopenharmony_ci 99462306a36Sopenharmony_cistatic int mtk_afe_i2s_mclk_connect(struct snd_soc_dapm_widget *source, 99562306a36Sopenharmony_ci struct snd_soc_dapm_widget *sink) 99662306a36Sopenharmony_ci{ 99762306a36Sopenharmony_ci struct snd_soc_dapm_widget *w = sink; 99862306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 99962306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 100062306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 100162306a36Sopenharmony_ci 100262306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, sink->name); 100362306a36Sopenharmony_ci if (!i2s_priv) { 100462306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 100562306a36Sopenharmony_ci return 0; 100662306a36Sopenharmony_ci } 100762306a36Sopenharmony_ci 100862306a36Sopenharmony_ci if (get_i2s_id_by_name(afe, sink->name) == 100962306a36Sopenharmony_ci get_i2s_id_by_name(afe, source->name)) 101062306a36Sopenharmony_ci return (i2s_priv->mclk_rate > 0) ? 1 : 0; 101162306a36Sopenharmony_ci 101262306a36Sopenharmony_ci /* check if share i2s need mclk */ 101362306a36Sopenharmony_ci if (i2s_priv->share_i2s_id < 0) 101462306a36Sopenharmony_ci return 0; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci if (i2s_priv->share_i2s_id == get_i2s_id_by_name(afe, source->name)) 101762306a36Sopenharmony_ci return (i2s_priv->mclk_rate > 0) ? 1 : 0; 101862306a36Sopenharmony_ci 101962306a36Sopenharmony_ci return 0; 102062306a36Sopenharmony_ci} 102162306a36Sopenharmony_ci 102262306a36Sopenharmony_cistatic int mtk_afe_mclk_apll_connect(struct snd_soc_dapm_widget *source, 102362306a36Sopenharmony_ci struct snd_soc_dapm_widget *sink) 102462306a36Sopenharmony_ci{ 102562306a36Sopenharmony_ci struct snd_soc_dapm_widget *w = sink; 102662306a36Sopenharmony_ci struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 102762306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt); 102862306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv; 102962306a36Sopenharmony_ci int cur_apll; 103062306a36Sopenharmony_ci 103162306a36Sopenharmony_ci i2s_priv = get_i2s_priv_by_name(afe, w->name); 103262306a36Sopenharmony_ci if (!i2s_priv) { 103362306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 103462306a36Sopenharmony_ci return 0; 103562306a36Sopenharmony_ci } 103662306a36Sopenharmony_ci 103762306a36Sopenharmony_ci /* which apll */ 103862306a36Sopenharmony_ci cur_apll = mt8192_get_apll_by_name(afe, source->name); 103962306a36Sopenharmony_ci 104062306a36Sopenharmony_ci if (i2s_priv->mclk_apll == cur_apll) 104162306a36Sopenharmony_ci return 1; 104262306a36Sopenharmony_ci 104362306a36Sopenharmony_ci return 0; 104462306a36Sopenharmony_ci} 104562306a36Sopenharmony_ci 104662306a36Sopenharmony_cistatic const struct snd_soc_dapm_route mtk_dai_i2s_routes[] = { 104762306a36Sopenharmony_ci {"Connsys I2S", NULL, "CONNSYS"}, 104862306a36Sopenharmony_ci 104962306a36Sopenharmony_ci /* i2s0 */ 105062306a36Sopenharmony_ci {"I2S0", NULL, "I2S0_EN"}, 105162306a36Sopenharmony_ci {"I2S0", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 105262306a36Sopenharmony_ci {"I2S0", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 105362306a36Sopenharmony_ci {"I2S0", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 105462306a36Sopenharmony_ci {"I2S0", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 105562306a36Sopenharmony_ci {"I2S0", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 105662306a36Sopenharmony_ci {"I2S0", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 105762306a36Sopenharmony_ci {"I2S0", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 105862306a36Sopenharmony_ci {"I2S0", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 105962306a36Sopenharmony_ci 106062306a36Sopenharmony_ci {"I2S0", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106162306a36Sopenharmony_ci {"I2S0", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106262306a36Sopenharmony_ci {"I2S0", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106362306a36Sopenharmony_ci {"I2S0", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106462306a36Sopenharmony_ci {"I2S0", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106562306a36Sopenharmony_ci {"I2S0", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106662306a36Sopenharmony_ci {"I2S0", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106762306a36Sopenharmony_ci {"I2S0", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106862306a36Sopenharmony_ci {"I2S0", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 106962306a36Sopenharmony_ci {I2S0_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 107062306a36Sopenharmony_ci {I2S0_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 107162306a36Sopenharmony_ci 107262306a36Sopenharmony_ci {"I2S0", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107362306a36Sopenharmony_ci {"I2S0", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107462306a36Sopenharmony_ci {"I2S0", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107562306a36Sopenharmony_ci {"I2S0", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107662306a36Sopenharmony_ci {"I2S0", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107762306a36Sopenharmony_ci {"I2S0", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107862306a36Sopenharmony_ci {"I2S0", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 107962306a36Sopenharmony_ci {"I2S0", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 108062306a36Sopenharmony_ci {"I2S0", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 108162306a36Sopenharmony_ci {I2S0_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 108262306a36Sopenharmony_ci {I2S0_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 108362306a36Sopenharmony_ci 108462306a36Sopenharmony_ci /* i2s1 */ 108562306a36Sopenharmony_ci {"I2S1_CH1", "DL1_CH1", "DL1"}, 108662306a36Sopenharmony_ci {"I2S1_CH2", "DL1_CH2", "DL1"}, 108762306a36Sopenharmony_ci {"I2S1_TINYCONN_CH1_MUX", "DL1_CH1", "DL1"}, 108862306a36Sopenharmony_ci {"I2S1_TINYCONN_CH2_MUX", "DL1_CH2", "DL1"}, 108962306a36Sopenharmony_ci 109062306a36Sopenharmony_ci {"I2S1_CH1", "DL2_CH1", "DL2"}, 109162306a36Sopenharmony_ci {"I2S1_CH2", "DL2_CH2", "DL2"}, 109262306a36Sopenharmony_ci {"I2S1_TINYCONN_CH1_MUX", "DL2_CH1", "DL2"}, 109362306a36Sopenharmony_ci {"I2S1_TINYCONN_CH2_MUX", "DL2_CH2", "DL2"}, 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_ci {"I2S1_CH1", "DL3_CH1", "DL3"}, 109662306a36Sopenharmony_ci {"I2S1_CH2", "DL3_CH2", "DL3"}, 109762306a36Sopenharmony_ci {"I2S1_TINYCONN_CH1_MUX", "DL3_CH1", "DL3"}, 109862306a36Sopenharmony_ci {"I2S1_TINYCONN_CH2_MUX", "DL3_CH2", "DL3"}, 109962306a36Sopenharmony_ci 110062306a36Sopenharmony_ci {"I2S1_CH1", "DL12_CH1", "DL12"}, 110162306a36Sopenharmony_ci {"I2S1_CH2", "DL12_CH2", "DL12"}, 110262306a36Sopenharmony_ci {"I2S1_TINYCONN_CH1_MUX", "DL12_CH1", "DL12"}, 110362306a36Sopenharmony_ci {"I2S1_TINYCONN_CH2_MUX", "DL12_CH2", "DL12"}, 110462306a36Sopenharmony_ci 110562306a36Sopenharmony_ci {"I2S1_CH1", "DL4_CH1", "DL4"}, 110662306a36Sopenharmony_ci {"I2S1_CH2", "DL4_CH2", "DL4"}, 110762306a36Sopenharmony_ci 110862306a36Sopenharmony_ci {"I2S1_CH1", "DL5_CH1", "DL5"}, 110962306a36Sopenharmony_ci {"I2S1_CH2", "DL5_CH2", "DL5"}, 111062306a36Sopenharmony_ci 111162306a36Sopenharmony_ci {"I2S1_CH1", "DL6_CH1", "DL6"}, 111262306a36Sopenharmony_ci {"I2S1_CH2", "DL6_CH2", "DL6"}, 111362306a36Sopenharmony_ci 111462306a36Sopenharmony_ci {"I2S1_CH1", "DL8_CH1", "DL8"}, 111562306a36Sopenharmony_ci {"I2S1_CH2", "DL8_CH2", "DL8"}, 111662306a36Sopenharmony_ci 111762306a36Sopenharmony_ci {"I2S1", NULL, "I2S1_CH1"}, 111862306a36Sopenharmony_ci {"I2S1", NULL, "I2S1_CH2"}, 111962306a36Sopenharmony_ci {"I2S1", NULL, "I2S3_TINYCONN_CH1_MUX"}, 112062306a36Sopenharmony_ci {"I2S1", NULL, "I2S3_TINYCONN_CH2_MUX"}, 112162306a36Sopenharmony_ci 112262306a36Sopenharmony_ci {"I2S1", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 112362306a36Sopenharmony_ci {"I2S1", NULL, "I2S1_EN"}, 112462306a36Sopenharmony_ci {"I2S1", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 112562306a36Sopenharmony_ci {"I2S1", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 112662306a36Sopenharmony_ci {"I2S1", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 112762306a36Sopenharmony_ci {"I2S1", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 112862306a36Sopenharmony_ci {"I2S1", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 112962306a36Sopenharmony_ci {"I2S1", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 113062306a36Sopenharmony_ci {"I2S1", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci {"I2S1", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113362306a36Sopenharmony_ci {"I2S1", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113462306a36Sopenharmony_ci {"I2S1", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113562306a36Sopenharmony_ci {"I2S1", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113662306a36Sopenharmony_ci {"I2S1", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113762306a36Sopenharmony_ci {"I2S1", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113862306a36Sopenharmony_ci {"I2S1", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 113962306a36Sopenharmony_ci {"I2S1", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 114062306a36Sopenharmony_ci {"I2S1", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 114162306a36Sopenharmony_ci {I2S1_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 114262306a36Sopenharmony_ci {I2S1_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 114362306a36Sopenharmony_ci 114462306a36Sopenharmony_ci {"I2S1", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 114562306a36Sopenharmony_ci {"I2S1", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 114662306a36Sopenharmony_ci {"I2S1", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 114762306a36Sopenharmony_ci {"I2S1", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 114862306a36Sopenharmony_ci {"I2S1", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 114962306a36Sopenharmony_ci {"I2S1", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 115062306a36Sopenharmony_ci {"I2S1", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 115162306a36Sopenharmony_ci {"I2S1", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 115262306a36Sopenharmony_ci {"I2S1", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 115362306a36Sopenharmony_ci {I2S1_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 115462306a36Sopenharmony_ci {I2S1_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 115562306a36Sopenharmony_ci 115662306a36Sopenharmony_ci /* i2s2 */ 115762306a36Sopenharmony_ci {"I2S2", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 115862306a36Sopenharmony_ci {"I2S2", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 115962306a36Sopenharmony_ci {"I2S2", NULL, "I2S2_EN"}, 116062306a36Sopenharmony_ci {"I2S2", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 116162306a36Sopenharmony_ci {"I2S2", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 116262306a36Sopenharmony_ci {"I2S2", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 116362306a36Sopenharmony_ci {"I2S2", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 116462306a36Sopenharmony_ci {"I2S2", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 116562306a36Sopenharmony_ci {"I2S2", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 116662306a36Sopenharmony_ci 116762306a36Sopenharmony_ci {"I2S2", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 116862306a36Sopenharmony_ci {"I2S2", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 116962306a36Sopenharmony_ci {"I2S2", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117062306a36Sopenharmony_ci {"I2S2", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117162306a36Sopenharmony_ci {"I2S2", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117262306a36Sopenharmony_ci {"I2S2", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117362306a36Sopenharmony_ci {"I2S2", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117462306a36Sopenharmony_ci {"I2S2", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117562306a36Sopenharmony_ci {"I2S2", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 117662306a36Sopenharmony_ci {I2S2_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 117762306a36Sopenharmony_ci {I2S2_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_ci {"I2S2", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118062306a36Sopenharmony_ci {"I2S2", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118162306a36Sopenharmony_ci {"I2S2", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118262306a36Sopenharmony_ci {"I2S2", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118362306a36Sopenharmony_ci {"I2S2", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118462306a36Sopenharmony_ci {"I2S2", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118562306a36Sopenharmony_ci {"I2S2", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118662306a36Sopenharmony_ci {"I2S2", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118762306a36Sopenharmony_ci {"I2S2", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 118862306a36Sopenharmony_ci {I2S2_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 118962306a36Sopenharmony_ci {I2S2_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 119062306a36Sopenharmony_ci 119162306a36Sopenharmony_ci /* i2s3 */ 119262306a36Sopenharmony_ci {"I2S3_CH1", "DL1_CH1", "DL1"}, 119362306a36Sopenharmony_ci {"I2S3_CH2", "DL1_CH2", "DL1"}, 119462306a36Sopenharmony_ci {"I2S3_TINYCONN_CH1_MUX", "DL1_CH1", "DL1"}, 119562306a36Sopenharmony_ci {"I2S3_TINYCONN_CH2_MUX", "DL1_CH2", "DL1"}, 119662306a36Sopenharmony_ci 119762306a36Sopenharmony_ci {"I2S3_CH1", "DL2_CH1", "DL2"}, 119862306a36Sopenharmony_ci {"I2S3_CH2", "DL2_CH2", "DL2"}, 119962306a36Sopenharmony_ci {"I2S3_TINYCONN_CH1_MUX", "DL2_CH1", "DL2"}, 120062306a36Sopenharmony_ci {"I2S3_TINYCONN_CH2_MUX", "DL2_CH2", "DL2"}, 120162306a36Sopenharmony_ci 120262306a36Sopenharmony_ci {"I2S3_CH1", "DL3_CH1", "DL3"}, 120362306a36Sopenharmony_ci {"I2S3_CH2", "DL3_CH2", "DL3"}, 120462306a36Sopenharmony_ci {"I2S3_TINYCONN_CH1_MUX", "DL3_CH1", "DL3"}, 120562306a36Sopenharmony_ci {"I2S3_TINYCONN_CH2_MUX", "DL3_CH2", "DL3"}, 120662306a36Sopenharmony_ci 120762306a36Sopenharmony_ci {"I2S3_CH1", "DL12_CH1", "DL12"}, 120862306a36Sopenharmony_ci {"I2S3_CH2", "DL12_CH2", "DL12"}, 120962306a36Sopenharmony_ci {"I2S3_TINYCONN_CH1_MUX", "DL12_CH1", "DL12"}, 121062306a36Sopenharmony_ci {"I2S3_TINYCONN_CH2_MUX", "DL12_CH2", "DL12"}, 121162306a36Sopenharmony_ci 121262306a36Sopenharmony_ci {"I2S3_CH1", "DL4_CH1", "DL4"}, 121362306a36Sopenharmony_ci {"I2S3_CH2", "DL4_CH2", "DL4"}, 121462306a36Sopenharmony_ci 121562306a36Sopenharmony_ci {"I2S3_CH1", "DL5_CH1", "DL5"}, 121662306a36Sopenharmony_ci {"I2S3_CH2", "DL5_CH2", "DL5"}, 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_ci {"I2S3_CH1", "DL6_CH1", "DL6"}, 121962306a36Sopenharmony_ci {"I2S3_CH2", "DL6_CH2", "DL6"}, 122062306a36Sopenharmony_ci 122162306a36Sopenharmony_ci {"I2S3_CH1", "DL8_CH1", "DL8"}, 122262306a36Sopenharmony_ci {"I2S3_CH2", "DL8_CH2", "DL8"}, 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci {"I2S3", NULL, "I2S3_CH1"}, 122562306a36Sopenharmony_ci {"I2S3", NULL, "I2S3_CH2"}, 122662306a36Sopenharmony_ci {"I2S3", NULL, "I2S3_TINYCONN_CH1_MUX"}, 122762306a36Sopenharmony_ci {"I2S3", NULL, "I2S3_TINYCONN_CH2_MUX"}, 122862306a36Sopenharmony_ci 122962306a36Sopenharmony_ci {"I2S3", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 123062306a36Sopenharmony_ci {"I2S3", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 123162306a36Sopenharmony_ci {"I2S3", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 123262306a36Sopenharmony_ci {"I2S3", NULL, "I2S3_EN"}, 123362306a36Sopenharmony_ci {"I2S3", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 123462306a36Sopenharmony_ci {"I2S3", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 123562306a36Sopenharmony_ci {"I2S3", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 123662306a36Sopenharmony_ci {"I2S3", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 123762306a36Sopenharmony_ci {"I2S3", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 123862306a36Sopenharmony_ci 123962306a36Sopenharmony_ci {"I2S3", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124062306a36Sopenharmony_ci {"I2S3", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124162306a36Sopenharmony_ci {"I2S3", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124262306a36Sopenharmony_ci {"I2S3", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124362306a36Sopenharmony_ci {"I2S3", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124462306a36Sopenharmony_ci {"I2S3", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124562306a36Sopenharmony_ci {"I2S3", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124662306a36Sopenharmony_ci {"I2S3", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124762306a36Sopenharmony_ci {"I2S3", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 124862306a36Sopenharmony_ci {I2S3_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 124962306a36Sopenharmony_ci {I2S3_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 125062306a36Sopenharmony_ci 125162306a36Sopenharmony_ci {"I2S3", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125262306a36Sopenharmony_ci {"I2S3", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125362306a36Sopenharmony_ci {"I2S3", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125462306a36Sopenharmony_ci {"I2S3", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125562306a36Sopenharmony_ci {"I2S3", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125662306a36Sopenharmony_ci {"I2S3", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125762306a36Sopenharmony_ci {"I2S3", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125862306a36Sopenharmony_ci {"I2S3", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 125962306a36Sopenharmony_ci {"I2S3", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 126062306a36Sopenharmony_ci {I2S3_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 126162306a36Sopenharmony_ci {I2S3_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 126262306a36Sopenharmony_ci 126362306a36Sopenharmony_ci /* i2s5 */ 126462306a36Sopenharmony_ci {"I2S5_CH1", "DL1_CH1", "DL1"}, 126562306a36Sopenharmony_ci {"I2S5_CH2", "DL1_CH2", "DL1"}, 126662306a36Sopenharmony_ci 126762306a36Sopenharmony_ci {"I2S5_CH1", "DL2_CH1", "DL2"}, 126862306a36Sopenharmony_ci {"I2S5_CH2", "DL2_CH2", "DL2"}, 126962306a36Sopenharmony_ci 127062306a36Sopenharmony_ci {"I2S5_CH1", "DL3_CH1", "DL3"}, 127162306a36Sopenharmony_ci {"I2S5_CH2", "DL3_CH2", "DL3"}, 127262306a36Sopenharmony_ci 127362306a36Sopenharmony_ci {"I2S5_CH1", "DL12_CH1", "DL12"}, 127462306a36Sopenharmony_ci {"I2S5_CH2", "DL12_CH2", "DL12"}, 127562306a36Sopenharmony_ci 127662306a36Sopenharmony_ci {"I2S5_CH1", "DL4_CH1", "DL4"}, 127762306a36Sopenharmony_ci {"I2S5_CH2", "DL4_CH2", "DL4"}, 127862306a36Sopenharmony_ci 127962306a36Sopenharmony_ci {"I2S5_CH1", "DL5_CH1", "DL5"}, 128062306a36Sopenharmony_ci {"I2S5_CH2", "DL5_CH2", "DL5"}, 128162306a36Sopenharmony_ci 128262306a36Sopenharmony_ci {"I2S5_CH1", "DL6_CH1", "DL6"}, 128362306a36Sopenharmony_ci {"I2S5_CH2", "DL6_CH2", "DL6"}, 128462306a36Sopenharmony_ci 128562306a36Sopenharmony_ci {"I2S5_CH1", "DL8_CH1", "DL8"}, 128662306a36Sopenharmony_ci {"I2S5_CH2", "DL8_CH2", "DL8"}, 128762306a36Sopenharmony_ci 128862306a36Sopenharmony_ci {"I2S5", NULL, "I2S5_CH1"}, 128962306a36Sopenharmony_ci {"I2S5", NULL, "I2S5_CH2"}, 129062306a36Sopenharmony_ci 129162306a36Sopenharmony_ci {"I2S5", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 129262306a36Sopenharmony_ci {"I2S5", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 129362306a36Sopenharmony_ci {"I2S5", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 129462306a36Sopenharmony_ci {"I2S5", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 129562306a36Sopenharmony_ci {"I2S5", NULL, "I2S5_EN"}, 129662306a36Sopenharmony_ci {"I2S5", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 129762306a36Sopenharmony_ci {"I2S5", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 129862306a36Sopenharmony_ci {"I2S5", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 129962306a36Sopenharmony_ci {"I2S5", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 130062306a36Sopenharmony_ci 130162306a36Sopenharmony_ci {"I2S5", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130262306a36Sopenharmony_ci {"I2S5", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130362306a36Sopenharmony_ci {"I2S5", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130462306a36Sopenharmony_ci {"I2S5", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130562306a36Sopenharmony_ci {"I2S5", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130662306a36Sopenharmony_ci {"I2S5", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130762306a36Sopenharmony_ci {"I2S5", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130862306a36Sopenharmony_ci {"I2S5", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 130962306a36Sopenharmony_ci {"I2S5", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 131062306a36Sopenharmony_ci {I2S5_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 131162306a36Sopenharmony_ci {I2S5_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 131262306a36Sopenharmony_ci 131362306a36Sopenharmony_ci {"I2S5", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131462306a36Sopenharmony_ci {"I2S5", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131562306a36Sopenharmony_ci {"I2S5", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131662306a36Sopenharmony_ci {"I2S5", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131762306a36Sopenharmony_ci {"I2S5", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131862306a36Sopenharmony_ci {"I2S5", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 131962306a36Sopenharmony_ci {"I2S5", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 132062306a36Sopenharmony_ci {"I2S5", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 132162306a36Sopenharmony_ci {"I2S5", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 132262306a36Sopenharmony_ci {I2S5_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 132362306a36Sopenharmony_ci {I2S5_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 132462306a36Sopenharmony_ci 132562306a36Sopenharmony_ci /* i2s6 */ 132662306a36Sopenharmony_ci {"I2S6", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 132762306a36Sopenharmony_ci {"I2S6", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 132862306a36Sopenharmony_ci {"I2S6", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 132962306a36Sopenharmony_ci {"I2S6", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 133062306a36Sopenharmony_ci {"I2S6", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 133162306a36Sopenharmony_ci {"I2S6", NULL, "I2S6_EN"}, 133262306a36Sopenharmony_ci {"I2S6", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 133362306a36Sopenharmony_ci {"I2S6", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 133462306a36Sopenharmony_ci {"I2S6", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 133562306a36Sopenharmony_ci 133662306a36Sopenharmony_ci {"I2S6", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 133762306a36Sopenharmony_ci {"I2S6", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 133862306a36Sopenharmony_ci {"I2S6", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 133962306a36Sopenharmony_ci {"I2S6", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134062306a36Sopenharmony_ci {"I2S6", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134162306a36Sopenharmony_ci {"I2S6", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134262306a36Sopenharmony_ci {"I2S6", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134362306a36Sopenharmony_ci {"I2S6", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134462306a36Sopenharmony_ci {"I2S6", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 134562306a36Sopenharmony_ci {I2S6_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 134662306a36Sopenharmony_ci {I2S6_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 134762306a36Sopenharmony_ci 134862306a36Sopenharmony_ci {"I2S6", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 134962306a36Sopenharmony_ci {"I2S6", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135062306a36Sopenharmony_ci {"I2S6", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135162306a36Sopenharmony_ci {"I2S6", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135262306a36Sopenharmony_ci {"I2S6", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135362306a36Sopenharmony_ci {"I2S6", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135462306a36Sopenharmony_ci {"I2S6", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135562306a36Sopenharmony_ci {"I2S6", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135662306a36Sopenharmony_ci {"I2S6", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 135762306a36Sopenharmony_ci {I2S6_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 135862306a36Sopenharmony_ci {I2S6_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 135962306a36Sopenharmony_ci 136062306a36Sopenharmony_ci /* i2s7 */ 136162306a36Sopenharmony_ci {"I2S7", NULL, "I2S7_CH1"}, 136262306a36Sopenharmony_ci {"I2S7", NULL, "I2S7_CH2"}, 136362306a36Sopenharmony_ci 136462306a36Sopenharmony_ci {"I2S7", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 136562306a36Sopenharmony_ci {"I2S7", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 136662306a36Sopenharmony_ci {"I2S7", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 136762306a36Sopenharmony_ci {"I2S7", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 136862306a36Sopenharmony_ci {"I2S7", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 136962306a36Sopenharmony_ci {"I2S7", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 137062306a36Sopenharmony_ci {"I2S7", NULL, "I2S7_EN"}, 137162306a36Sopenharmony_ci {"I2S7", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 137262306a36Sopenharmony_ci {"I2S7", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 137362306a36Sopenharmony_ci 137462306a36Sopenharmony_ci {"I2S7", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 137562306a36Sopenharmony_ci {"I2S7", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 137662306a36Sopenharmony_ci {"I2S7", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 137762306a36Sopenharmony_ci {"I2S7", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 137862306a36Sopenharmony_ci {"I2S7", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 137962306a36Sopenharmony_ci {"I2S7", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 138062306a36Sopenharmony_ci {"I2S7", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 138162306a36Sopenharmony_ci {"I2S7", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 138262306a36Sopenharmony_ci {"I2S7", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 138362306a36Sopenharmony_ci {I2S7_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 138462306a36Sopenharmony_ci {I2S7_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 138562306a36Sopenharmony_ci 138662306a36Sopenharmony_ci {"I2S7", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 138762306a36Sopenharmony_ci {"I2S7", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 138862306a36Sopenharmony_ci {"I2S7", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 138962306a36Sopenharmony_ci {"I2S7", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139062306a36Sopenharmony_ci {"I2S7", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139162306a36Sopenharmony_ci {"I2S7", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139262306a36Sopenharmony_ci {"I2S7", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139362306a36Sopenharmony_ci {"I2S7", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139462306a36Sopenharmony_ci {"I2S7", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 139562306a36Sopenharmony_ci {I2S7_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 139662306a36Sopenharmony_ci {I2S7_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 139762306a36Sopenharmony_ci 139862306a36Sopenharmony_ci /* i2s8 */ 139962306a36Sopenharmony_ci {"I2S8", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 140062306a36Sopenharmony_ci {"I2S8", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 140162306a36Sopenharmony_ci {"I2S8", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 140262306a36Sopenharmony_ci {"I2S8", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 140362306a36Sopenharmony_ci {"I2S8", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 140462306a36Sopenharmony_ci {"I2S8", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 140562306a36Sopenharmony_ci {"I2S8", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 140662306a36Sopenharmony_ci {"I2S8", NULL, "I2S8_EN"}, 140762306a36Sopenharmony_ci {"I2S8", NULL, "I2S9_EN", mtk_afe_i2s_share_connect}, 140862306a36Sopenharmony_ci 140962306a36Sopenharmony_ci {"I2S8", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141062306a36Sopenharmony_ci {"I2S8", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141162306a36Sopenharmony_ci {"I2S8", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141262306a36Sopenharmony_ci {"I2S8", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141362306a36Sopenharmony_ci {"I2S8", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141462306a36Sopenharmony_ci {"I2S8", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141562306a36Sopenharmony_ci {"I2S8", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141662306a36Sopenharmony_ci {"I2S8", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141762306a36Sopenharmony_ci {"I2S8", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 141862306a36Sopenharmony_ci {I2S8_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 141962306a36Sopenharmony_ci {I2S8_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 142062306a36Sopenharmony_ci 142162306a36Sopenharmony_ci {"I2S8", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142262306a36Sopenharmony_ci {"I2S8", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142362306a36Sopenharmony_ci {"I2S8", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142462306a36Sopenharmony_ci {"I2S8", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142562306a36Sopenharmony_ci {"I2S8", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142662306a36Sopenharmony_ci {"I2S8", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142762306a36Sopenharmony_ci {"I2S8", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142862306a36Sopenharmony_ci {"I2S8", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 142962306a36Sopenharmony_ci {"I2S8", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 143062306a36Sopenharmony_ci {I2S8_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 143162306a36Sopenharmony_ci {I2S8_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 143262306a36Sopenharmony_ci 143362306a36Sopenharmony_ci /* i2s9 */ 143462306a36Sopenharmony_ci {"I2S9_CH1", "DL1_CH1", "DL1"}, 143562306a36Sopenharmony_ci {"I2S9_CH2", "DL1_CH2", "DL1"}, 143662306a36Sopenharmony_ci 143762306a36Sopenharmony_ci {"I2S9_CH1", "DL2_CH1", "DL2"}, 143862306a36Sopenharmony_ci {"I2S9_CH2", "DL2_CH2", "DL2"}, 143962306a36Sopenharmony_ci 144062306a36Sopenharmony_ci {"I2S9_CH1", "DL3_CH1", "DL3"}, 144162306a36Sopenharmony_ci {"I2S9_CH2", "DL3_CH2", "DL3"}, 144262306a36Sopenharmony_ci 144362306a36Sopenharmony_ci {"I2S9_CH1", "DL12_CH1", "DL12"}, 144462306a36Sopenharmony_ci {"I2S9_CH2", "DL12_CH2", "DL12"}, 144562306a36Sopenharmony_ci 144662306a36Sopenharmony_ci {"I2S9_CH1", "DL4_CH1", "DL4"}, 144762306a36Sopenharmony_ci {"I2S9_CH2", "DL4_CH2", "DL4"}, 144862306a36Sopenharmony_ci 144962306a36Sopenharmony_ci {"I2S9_CH1", "DL5_CH1", "DL5"}, 145062306a36Sopenharmony_ci {"I2S9_CH2", "DL5_CH2", "DL5"}, 145162306a36Sopenharmony_ci 145262306a36Sopenharmony_ci {"I2S9_CH1", "DL6_CH1", "DL6"}, 145362306a36Sopenharmony_ci {"I2S9_CH2", "DL6_CH2", "DL6"}, 145462306a36Sopenharmony_ci 145562306a36Sopenharmony_ci {"I2S9_CH1", "DL8_CH1", "DL8"}, 145662306a36Sopenharmony_ci {"I2S9_CH2", "DL8_CH2", "DL8"}, 145762306a36Sopenharmony_ci 145862306a36Sopenharmony_ci {"I2S9_CH1", "DL9_CH1", "DL9"}, 145962306a36Sopenharmony_ci {"I2S9_CH2", "DL9_CH2", "DL9"}, 146062306a36Sopenharmony_ci 146162306a36Sopenharmony_ci {"I2S9", NULL, "I2S9_CH1"}, 146262306a36Sopenharmony_ci {"I2S9", NULL, "I2S9_CH2"}, 146362306a36Sopenharmony_ci 146462306a36Sopenharmony_ci {"I2S9", NULL, "I2S0_EN", mtk_afe_i2s_share_connect}, 146562306a36Sopenharmony_ci {"I2S9", NULL, "I2S1_EN", mtk_afe_i2s_share_connect}, 146662306a36Sopenharmony_ci {"I2S9", NULL, "I2S2_EN", mtk_afe_i2s_share_connect}, 146762306a36Sopenharmony_ci {"I2S9", NULL, "I2S3_EN", mtk_afe_i2s_share_connect}, 146862306a36Sopenharmony_ci {"I2S9", NULL, "I2S5_EN", mtk_afe_i2s_share_connect}, 146962306a36Sopenharmony_ci {"I2S9", NULL, "I2S6_EN", mtk_afe_i2s_share_connect}, 147062306a36Sopenharmony_ci {"I2S9", NULL, "I2S7_EN", mtk_afe_i2s_share_connect}, 147162306a36Sopenharmony_ci {"I2S9", NULL, "I2S8_EN", mtk_afe_i2s_share_connect}, 147262306a36Sopenharmony_ci {"I2S9", NULL, "I2S9_EN"}, 147362306a36Sopenharmony_ci 147462306a36Sopenharmony_ci {"I2S9", NULL, I2S0_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 147562306a36Sopenharmony_ci {"I2S9", NULL, I2S1_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 147662306a36Sopenharmony_ci {"I2S9", NULL, I2S2_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 147762306a36Sopenharmony_ci {"I2S9", NULL, I2S3_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 147862306a36Sopenharmony_ci {"I2S9", NULL, I2S5_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 147962306a36Sopenharmony_ci {"I2S9", NULL, I2S6_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 148062306a36Sopenharmony_ci {"I2S9", NULL, I2S7_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 148162306a36Sopenharmony_ci {"I2S9", NULL, I2S8_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 148262306a36Sopenharmony_ci {"I2S9", NULL, I2S9_HD_EN_W_NAME, mtk_afe_i2s_hd_connect}, 148362306a36Sopenharmony_ci {I2S9_HD_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_i2s_apll_connect}, 148462306a36Sopenharmony_ci {I2S9_HD_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_i2s_apll_connect}, 148562306a36Sopenharmony_ci 148662306a36Sopenharmony_ci {"I2S9", NULL, I2S0_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 148762306a36Sopenharmony_ci {"I2S9", NULL, I2S1_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 148862306a36Sopenharmony_ci {"I2S9", NULL, I2S2_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 148962306a36Sopenharmony_ci {"I2S9", NULL, I2S3_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149062306a36Sopenharmony_ci {"I2S9", NULL, I2S5_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149162306a36Sopenharmony_ci {"I2S9", NULL, I2S6_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149262306a36Sopenharmony_ci {"I2S9", NULL, I2S7_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149362306a36Sopenharmony_ci {"I2S9", NULL, I2S8_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149462306a36Sopenharmony_ci {"I2S9", NULL, I2S9_MCLK_EN_W_NAME, mtk_afe_i2s_mclk_connect}, 149562306a36Sopenharmony_ci {I2S9_MCLK_EN_W_NAME, NULL, APLL1_W_NAME, mtk_afe_mclk_apll_connect}, 149662306a36Sopenharmony_ci {I2S9_MCLK_EN_W_NAME, NULL, APLL2_W_NAME, mtk_afe_mclk_apll_connect}, 149762306a36Sopenharmony_ci 149862306a36Sopenharmony_ci /* allow i2s on without codec on */ 149962306a36Sopenharmony_ci {"I2S0", NULL, "I2S0_In_Mux"}, 150062306a36Sopenharmony_ci {"I2S0_In_Mux", "Dummy_Widget", "I2S_DUMMY_IN"}, 150162306a36Sopenharmony_ci 150262306a36Sopenharmony_ci {"I2S8", NULL, "I2S8_In_Mux"}, 150362306a36Sopenharmony_ci {"I2S8_In_Mux", "Dummy_Widget", "I2S_DUMMY_IN"}, 150462306a36Sopenharmony_ci 150562306a36Sopenharmony_ci {"I2S1_Out_Mux", "Dummy_Widget", "I2S1"}, 150662306a36Sopenharmony_ci {"I2S_DUMMY_OUT", NULL, "I2S1_Out_Mux"}, 150762306a36Sopenharmony_ci 150862306a36Sopenharmony_ci {"I2S3_Out_Mux", "Dummy_Widget", "I2S3"}, 150962306a36Sopenharmony_ci {"I2S_DUMMY_OUT", NULL, "I2S3_Out_Mux"}, 151062306a36Sopenharmony_ci 151162306a36Sopenharmony_ci {"I2S5_Out_Mux", "Dummy_Widget", "I2S5"}, 151262306a36Sopenharmony_ci {"I2S_DUMMY_OUT", NULL, "I2S5_Out_Mux"}, 151362306a36Sopenharmony_ci 151462306a36Sopenharmony_ci {"I2S7_Out_Mux", "Dummy_Widget", "I2S7"}, 151562306a36Sopenharmony_ci {"I2S_DUMMY_OUT", NULL, "I2S7_Out_Mux"}, 151662306a36Sopenharmony_ci 151762306a36Sopenharmony_ci {"I2S9_Out_Mux", "Dummy_Widget", "I2S9"}, 151862306a36Sopenharmony_ci {"I2S_DUMMY_OUT", NULL, "I2S9_Out_Mux"}, 151962306a36Sopenharmony_ci 152062306a36Sopenharmony_ci /* i2s in lpbk */ 152162306a36Sopenharmony_ci {"I2S0_Lpbk_Mux", "Lpbk", "I2S3"}, 152262306a36Sopenharmony_ci {"I2S2_Lpbk_Mux", "Lpbk", "I2S1"}, 152362306a36Sopenharmony_ci {"I2S0", NULL, "I2S0_Lpbk_Mux"}, 152462306a36Sopenharmony_ci {"I2S2", NULL, "I2S2_Lpbk_Mux"}, 152562306a36Sopenharmony_ci}; 152662306a36Sopenharmony_ci 152762306a36Sopenharmony_ci/* dai ops */ 152862306a36Sopenharmony_cistatic int mtk_dai_connsys_i2s_hw_params(struct snd_pcm_substream *substream, 152962306a36Sopenharmony_ci struct snd_pcm_hw_params *params, 153062306a36Sopenharmony_ci struct snd_soc_dai *dai) 153162306a36Sopenharmony_ci{ 153262306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 153362306a36Sopenharmony_ci unsigned int rate = params_rate(params); 153462306a36Sopenharmony_ci unsigned int rate_reg = mt8192_rate_transform(afe->dev, 153562306a36Sopenharmony_ci rate, dai->id); 153662306a36Sopenharmony_ci unsigned int i2s_con = 0; 153762306a36Sopenharmony_ci 153862306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %d\n", 153962306a36Sopenharmony_ci __func__, dai->id, substream->stream, rate); 154062306a36Sopenharmony_ci 154162306a36Sopenharmony_ci /* non-inverse, i2s mode, proxy mode, 16bits, from connsys */ 154262306a36Sopenharmony_ci i2s_con |= 0 << INV_PAD_CTRL_SFT; 154362306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S_FMT_SFT; 154462306a36Sopenharmony_ci i2s_con |= 1 << I2S_SRC_SFT; 154562306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(SNDRV_PCM_FORMAT_S16_LE) << I2S_WLEN_SFT; 154662306a36Sopenharmony_ci i2s_con |= 0 << I2SIN_PAD_SEL_SFT; 154762306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_CONNSYS_I2S_CON, i2s_con); 154862306a36Sopenharmony_ci 154962306a36Sopenharmony_ci /* use asrc */ 155062306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 155162306a36Sopenharmony_ci AFE_CONNSYS_I2S_CON, 155262306a36Sopenharmony_ci I2S_BYPSRC_MASK_SFT, 155362306a36Sopenharmony_ci 0x0 << I2S_BYPSRC_SFT); 155462306a36Sopenharmony_ci 155562306a36Sopenharmony_ci /* proxy mode, set i2s for asrc */ 155662306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 155762306a36Sopenharmony_ci AFE_CONNSYS_I2S_CON, 155862306a36Sopenharmony_ci I2S_MODE_MASK_SFT, 155962306a36Sopenharmony_ci rate_reg << I2S_MODE_SFT); 156062306a36Sopenharmony_ci 156162306a36Sopenharmony_ci switch (rate) { 156262306a36Sopenharmony_ci case 32000: 156362306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON3, 0x140000); 156462306a36Sopenharmony_ci break; 156562306a36Sopenharmony_ci case 44100: 156662306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON3, 0x001B9000); 156762306a36Sopenharmony_ci break; 156862306a36Sopenharmony_ci default: 156962306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON3, 0x001E0000); 157062306a36Sopenharmony_ci break; 157162306a36Sopenharmony_ci } 157262306a36Sopenharmony_ci 157362306a36Sopenharmony_ci /* Calibration setting */ 157462306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON4, 0x00140000); 157562306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON9, 0x00036000); 157662306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON10, 0x0002FC00); 157762306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON6, 0x00007EF4); 157862306a36Sopenharmony_ci regmap_write(afe->regmap, AFE_ASRC_2CH_CON5, 0x00FF5986); 157962306a36Sopenharmony_ci 158062306a36Sopenharmony_ci /* 0:Stereo 1:Mono */ 158162306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 158262306a36Sopenharmony_ci AFE_ASRC_2CH_CON2, 158362306a36Sopenharmony_ci CHSET_IS_MONO_MASK_SFT, 158462306a36Sopenharmony_ci 0x0 << CHSET_IS_MONO_SFT); 158562306a36Sopenharmony_ci 158662306a36Sopenharmony_ci return 0; 158762306a36Sopenharmony_ci} 158862306a36Sopenharmony_ci 158962306a36Sopenharmony_cistatic int mtk_dai_connsys_i2s_trigger(struct snd_pcm_substream *substream, 159062306a36Sopenharmony_ci int cmd, struct snd_soc_dai *dai) 159162306a36Sopenharmony_ci{ 159262306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 159362306a36Sopenharmony_ci struct mt8192_afe_private *afe_priv = afe->platform_priv; 159462306a36Sopenharmony_ci 159562306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), cmd %d, stream %d\n", 159662306a36Sopenharmony_ci __func__, cmd, substream->stream); 159762306a36Sopenharmony_ci 159862306a36Sopenharmony_ci switch (cmd) { 159962306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_START: 160062306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_RESUME: 160162306a36Sopenharmony_ci /* i2s enable */ 160262306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 160362306a36Sopenharmony_ci AFE_CONNSYS_I2S_CON, 160462306a36Sopenharmony_ci I2S_EN_MASK_SFT, 160562306a36Sopenharmony_ci 0x1 << I2S_EN_SFT); 160662306a36Sopenharmony_ci 160762306a36Sopenharmony_ci /* calibrator enable */ 160862306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 160962306a36Sopenharmony_ci AFE_ASRC_2CH_CON5, 161062306a36Sopenharmony_ci CALI_EN_MASK_SFT, 161162306a36Sopenharmony_ci 0x1 << CALI_EN_SFT); 161262306a36Sopenharmony_ci 161362306a36Sopenharmony_ci /* asrc enable */ 161462306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 161562306a36Sopenharmony_ci AFE_ASRC_2CH_CON0, 161662306a36Sopenharmony_ci CON0_CHSET_STR_CLR_MASK_SFT, 161762306a36Sopenharmony_ci 0x1 << CON0_CHSET_STR_CLR_SFT); 161862306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 161962306a36Sopenharmony_ci AFE_ASRC_2CH_CON0, 162062306a36Sopenharmony_ci CON0_ASM_ON_MASK_SFT, 162162306a36Sopenharmony_ci 0x1 << CON0_ASM_ON_SFT); 162262306a36Sopenharmony_ci 162362306a36Sopenharmony_ci afe_priv->dai_on[dai->id] = true; 162462306a36Sopenharmony_ci break; 162562306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_STOP: 162662306a36Sopenharmony_ci case SNDRV_PCM_TRIGGER_SUSPEND: 162762306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 162862306a36Sopenharmony_ci AFE_ASRC_2CH_CON0, 162962306a36Sopenharmony_ci CON0_ASM_ON_MASK_SFT, 163062306a36Sopenharmony_ci 0 << CON0_ASM_ON_SFT); 163162306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 163262306a36Sopenharmony_ci AFE_ASRC_2CH_CON5, 163362306a36Sopenharmony_ci CALI_EN_MASK_SFT, 163462306a36Sopenharmony_ci 0 << CALI_EN_SFT); 163562306a36Sopenharmony_ci 163662306a36Sopenharmony_ci /* i2s disable */ 163762306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 163862306a36Sopenharmony_ci AFE_CONNSYS_I2S_CON, 163962306a36Sopenharmony_ci I2S_EN_MASK_SFT, 164062306a36Sopenharmony_ci 0x0 << I2S_EN_SFT); 164162306a36Sopenharmony_ci 164262306a36Sopenharmony_ci /* bypass asrc */ 164362306a36Sopenharmony_ci regmap_update_bits(afe->regmap, 164462306a36Sopenharmony_ci AFE_CONNSYS_I2S_CON, 164562306a36Sopenharmony_ci I2S_BYPSRC_MASK_SFT, 164662306a36Sopenharmony_ci 0x1 << I2S_BYPSRC_SFT); 164762306a36Sopenharmony_ci 164862306a36Sopenharmony_ci afe_priv->dai_on[dai->id] = false; 164962306a36Sopenharmony_ci break; 165062306a36Sopenharmony_ci default: 165162306a36Sopenharmony_ci return -EINVAL; 165262306a36Sopenharmony_ci } 165362306a36Sopenharmony_ci return 0; 165462306a36Sopenharmony_ci} 165562306a36Sopenharmony_ci 165662306a36Sopenharmony_cistatic const struct snd_soc_dai_ops mtk_dai_connsys_i2s_ops = { 165762306a36Sopenharmony_ci .hw_params = mtk_dai_connsys_i2s_hw_params, 165862306a36Sopenharmony_ci .trigger = mtk_dai_connsys_i2s_trigger, 165962306a36Sopenharmony_ci}; 166062306a36Sopenharmony_ci 166162306a36Sopenharmony_ci/* i2s */ 166262306a36Sopenharmony_cistatic int mtk_dai_i2s_config(struct mtk_base_afe *afe, 166362306a36Sopenharmony_ci struct snd_pcm_hw_params *params, 166462306a36Sopenharmony_ci int i2s_id) 166562306a36Sopenharmony_ci{ 166662306a36Sopenharmony_ci struct mt8192_afe_private *afe_priv = afe->platform_priv; 166762306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv = afe_priv->dai_priv[i2s_id]; 166862306a36Sopenharmony_ci 166962306a36Sopenharmony_ci unsigned int rate = params_rate(params); 167062306a36Sopenharmony_ci unsigned int rate_reg = mt8192_rate_transform(afe->dev, 167162306a36Sopenharmony_ci rate, i2s_id); 167262306a36Sopenharmony_ci snd_pcm_format_t format = params_format(params); 167362306a36Sopenharmony_ci unsigned int i2s_con = 0; 167462306a36Sopenharmony_ci int ret = 0; 167562306a36Sopenharmony_ci 167662306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), id %d, rate %d, format %d\n", 167762306a36Sopenharmony_ci __func__, i2s_id, rate, format); 167862306a36Sopenharmony_ci 167962306a36Sopenharmony_ci if (i2s_priv) 168062306a36Sopenharmony_ci i2s_priv->rate = rate; 168162306a36Sopenharmony_ci else 168262306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 168362306a36Sopenharmony_ci 168462306a36Sopenharmony_ci switch (i2s_id) { 168562306a36Sopenharmony_ci case MT8192_DAI_I2S_0: 168662306a36Sopenharmony_ci i2s_con = I2S_IN_PAD_IO_MUX << I2SIN_PAD_SEL_SFT; 168762306a36Sopenharmony_ci i2s_con |= rate_reg << I2S_OUT_MODE_SFT; 168862306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S_FMT_SFT; 168962306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S_WLEN_SFT; 169062306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON, 169162306a36Sopenharmony_ci 0xffffeffe, i2s_con); 169262306a36Sopenharmony_ci break; 169362306a36Sopenharmony_ci case MT8192_DAI_I2S_1: 169462306a36Sopenharmony_ci i2s_con = I2S1_SEL_O28_O29 << I2S2_SEL_O03_O04_SFT; 169562306a36Sopenharmony_ci i2s_con |= rate_reg << I2S2_OUT_MODE_SFT; 169662306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S2_FMT_SFT; 169762306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S2_WLEN_SFT; 169862306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON1, 169962306a36Sopenharmony_ci 0xffffeffe, i2s_con); 170062306a36Sopenharmony_ci break; 170162306a36Sopenharmony_ci case MT8192_DAI_I2S_2: 170262306a36Sopenharmony_ci i2s_con = 8 << I2S3_UPDATE_WORD_SFT; 170362306a36Sopenharmony_ci i2s_con |= rate_reg << I2S3_OUT_MODE_SFT; 170462306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S3_FMT_SFT; 170562306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S3_WLEN_SFT; 170662306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON2, 170762306a36Sopenharmony_ci 0xffffeffe, i2s_con); 170862306a36Sopenharmony_ci break; 170962306a36Sopenharmony_ci case MT8192_DAI_I2S_3: 171062306a36Sopenharmony_ci i2s_con = rate_reg << I2S4_OUT_MODE_SFT; 171162306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S4_FMT_SFT; 171262306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S4_WLEN_SFT; 171362306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON3, 171462306a36Sopenharmony_ci 0xffffeffe, i2s_con); 171562306a36Sopenharmony_ci break; 171662306a36Sopenharmony_ci case MT8192_DAI_I2S_5: 171762306a36Sopenharmony_ci i2s_con = rate_reg << I2S5_OUT_MODE_SFT; 171862306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S5_FMT_SFT; 171962306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S5_WLEN_SFT; 172062306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON4, 172162306a36Sopenharmony_ci 0xffffeffe, i2s_con); 172262306a36Sopenharmony_ci break; 172362306a36Sopenharmony_ci case MT8192_DAI_I2S_6: 172462306a36Sopenharmony_ci i2s_con = rate_reg << I2S6_OUT_MODE_SFT; 172562306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S6_FMT_SFT; 172662306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S6_WLEN_SFT; 172762306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON6, 172862306a36Sopenharmony_ci 0xffffeffe, i2s_con); 172962306a36Sopenharmony_ci break; 173062306a36Sopenharmony_ci case MT8192_DAI_I2S_7: 173162306a36Sopenharmony_ci i2s_con = rate_reg << I2S7_OUT_MODE_SFT; 173262306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S7_FMT_SFT; 173362306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S7_WLEN_SFT; 173462306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON7, 173562306a36Sopenharmony_ci 0xffffeffe, i2s_con); 173662306a36Sopenharmony_ci break; 173762306a36Sopenharmony_ci case MT8192_DAI_I2S_8: 173862306a36Sopenharmony_ci i2s_con = rate_reg << I2S8_OUT_MODE_SFT; 173962306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S8_FMT_SFT; 174062306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S8_WLEN_SFT; 174162306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON8, 174262306a36Sopenharmony_ci 0xffffeffe, i2s_con); 174362306a36Sopenharmony_ci break; 174462306a36Sopenharmony_ci case MT8192_DAI_I2S_9: 174562306a36Sopenharmony_ci i2s_con = rate_reg << I2S9_OUT_MODE_SFT; 174662306a36Sopenharmony_ci i2s_con |= I2S_FMT_I2S << I2S9_FMT_SFT; 174762306a36Sopenharmony_ci i2s_con |= get_i2s_wlen(format) << I2S9_WLEN_SFT; 174862306a36Sopenharmony_ci regmap_update_bits(afe->regmap, AFE_I2S_CON9, 174962306a36Sopenharmony_ci 0xffffeffe, i2s_con); 175062306a36Sopenharmony_ci break; 175162306a36Sopenharmony_ci default: 175262306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), id %d not support\n", 175362306a36Sopenharmony_ci __func__, i2s_id); 175462306a36Sopenharmony_ci return -EINVAL; 175562306a36Sopenharmony_ci } 175662306a36Sopenharmony_ci 175762306a36Sopenharmony_ci /* set share i2s */ 175862306a36Sopenharmony_ci if (i2s_priv && i2s_priv->share_i2s_id >= 0) 175962306a36Sopenharmony_ci ret = mtk_dai_i2s_config(afe, params, i2s_priv->share_i2s_id); 176062306a36Sopenharmony_ci 176162306a36Sopenharmony_ci return ret; 176262306a36Sopenharmony_ci} 176362306a36Sopenharmony_ci 176462306a36Sopenharmony_cistatic int mtk_dai_i2s_hw_params(struct snd_pcm_substream *substream, 176562306a36Sopenharmony_ci struct snd_pcm_hw_params *params, 176662306a36Sopenharmony_ci struct snd_soc_dai *dai) 176762306a36Sopenharmony_ci{ 176862306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); 176962306a36Sopenharmony_ci 177062306a36Sopenharmony_ci return mtk_dai_i2s_config(afe, params, dai->id); 177162306a36Sopenharmony_ci} 177262306a36Sopenharmony_ci 177362306a36Sopenharmony_cistatic int mtk_dai_i2s_set_sysclk(struct snd_soc_dai *dai, 177462306a36Sopenharmony_ci int clk_id, unsigned int freq, int dir) 177562306a36Sopenharmony_ci{ 177662306a36Sopenharmony_ci struct mtk_base_afe *afe = dev_get_drvdata(dai->dev); 177762306a36Sopenharmony_ci struct mt8192_afe_private *afe_priv = afe->platform_priv; 177862306a36Sopenharmony_ci struct mtk_afe_i2s_priv *i2s_priv = afe_priv->dai_priv[dai->id]; 177962306a36Sopenharmony_ci int apll; 178062306a36Sopenharmony_ci int apll_rate; 178162306a36Sopenharmony_ci 178262306a36Sopenharmony_ci if (!i2s_priv) { 178362306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), i2s_priv == NULL", __func__); 178462306a36Sopenharmony_ci return -EINVAL; 178562306a36Sopenharmony_ci } 178662306a36Sopenharmony_ci 178762306a36Sopenharmony_ci if (dir != SND_SOC_CLOCK_OUT) { 178862306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), dir != SND_SOC_CLOCK_OUT", __func__); 178962306a36Sopenharmony_ci return -EINVAL; 179062306a36Sopenharmony_ci } 179162306a36Sopenharmony_ci 179262306a36Sopenharmony_ci dev_dbg(afe->dev, "%s(), freq %d\n", __func__, freq); 179362306a36Sopenharmony_ci 179462306a36Sopenharmony_ci apll = mt8192_get_apll_by_rate(afe, freq); 179562306a36Sopenharmony_ci apll_rate = mt8192_get_apll_rate(afe, apll); 179662306a36Sopenharmony_ci 179762306a36Sopenharmony_ci if (freq > apll_rate) { 179862306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), freq > apll rate", __func__); 179962306a36Sopenharmony_ci return -EINVAL; 180062306a36Sopenharmony_ci } 180162306a36Sopenharmony_ci 180262306a36Sopenharmony_ci if (apll_rate % freq != 0) { 180362306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), APLL can't gen freq Hz", __func__); 180462306a36Sopenharmony_ci return -EINVAL; 180562306a36Sopenharmony_ci } 180662306a36Sopenharmony_ci 180762306a36Sopenharmony_ci i2s_priv->mclk_rate = freq; 180862306a36Sopenharmony_ci i2s_priv->mclk_apll = apll; 180962306a36Sopenharmony_ci 181062306a36Sopenharmony_ci if (i2s_priv->share_i2s_id > 0) { 181162306a36Sopenharmony_ci struct mtk_afe_i2s_priv *share_i2s_priv; 181262306a36Sopenharmony_ci 181362306a36Sopenharmony_ci share_i2s_priv = afe_priv->dai_priv[i2s_priv->share_i2s_id]; 181462306a36Sopenharmony_ci if (!share_i2s_priv) { 181562306a36Sopenharmony_ci dev_warn(afe->dev, "%s(), share_i2s_priv = NULL", 181662306a36Sopenharmony_ci __func__); 181762306a36Sopenharmony_ci return -EINVAL; 181862306a36Sopenharmony_ci } 181962306a36Sopenharmony_ci 182062306a36Sopenharmony_ci share_i2s_priv->mclk_rate = i2s_priv->mclk_rate; 182162306a36Sopenharmony_ci share_i2s_priv->mclk_apll = i2s_priv->mclk_apll; 182262306a36Sopenharmony_ci } 182362306a36Sopenharmony_ci 182462306a36Sopenharmony_ci return 0; 182562306a36Sopenharmony_ci} 182662306a36Sopenharmony_ci 182762306a36Sopenharmony_cistatic const struct snd_soc_dai_ops mtk_dai_i2s_ops = { 182862306a36Sopenharmony_ci .hw_params = mtk_dai_i2s_hw_params, 182962306a36Sopenharmony_ci .set_sysclk = mtk_dai_i2s_set_sysclk, 183062306a36Sopenharmony_ci}; 183162306a36Sopenharmony_ci 183262306a36Sopenharmony_ci/* dai driver */ 183362306a36Sopenharmony_ci#define MTK_CONNSYS_I2S_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000) 183462306a36Sopenharmony_ci 183562306a36Sopenharmony_ci#define MTK_I2S_RATES (SNDRV_PCM_RATE_8000_48000 |\ 183662306a36Sopenharmony_ci SNDRV_PCM_RATE_88200 |\ 183762306a36Sopenharmony_ci SNDRV_PCM_RATE_96000 |\ 183862306a36Sopenharmony_ci SNDRV_PCM_RATE_176400 |\ 183962306a36Sopenharmony_ci SNDRV_PCM_RATE_192000) 184062306a36Sopenharmony_ci 184162306a36Sopenharmony_ci#define MTK_I2S_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ 184262306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S24_LE |\ 184362306a36Sopenharmony_ci SNDRV_PCM_FMTBIT_S32_LE) 184462306a36Sopenharmony_ci 184562306a36Sopenharmony_cistatic struct snd_soc_dai_driver mtk_dai_i2s_driver[] = { 184662306a36Sopenharmony_ci { 184762306a36Sopenharmony_ci .name = "CONNSYS_I2S", 184862306a36Sopenharmony_ci .id = MT8192_DAI_CONNSYS_I2S, 184962306a36Sopenharmony_ci .capture = { 185062306a36Sopenharmony_ci .stream_name = "Connsys I2S", 185162306a36Sopenharmony_ci .channels_min = 1, 185262306a36Sopenharmony_ci .channels_max = 2, 185362306a36Sopenharmony_ci .rates = MTK_CONNSYS_I2S_RATES, 185462306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 185562306a36Sopenharmony_ci }, 185662306a36Sopenharmony_ci .ops = &mtk_dai_connsys_i2s_ops, 185762306a36Sopenharmony_ci }, 185862306a36Sopenharmony_ci { 185962306a36Sopenharmony_ci .name = "I2S0", 186062306a36Sopenharmony_ci .id = MT8192_DAI_I2S_0, 186162306a36Sopenharmony_ci .capture = { 186262306a36Sopenharmony_ci .stream_name = "I2S0", 186362306a36Sopenharmony_ci .channels_min = 1, 186462306a36Sopenharmony_ci .channels_max = 2, 186562306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 186662306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 186762306a36Sopenharmony_ci }, 186862306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 186962306a36Sopenharmony_ci }, 187062306a36Sopenharmony_ci { 187162306a36Sopenharmony_ci .name = "I2S1", 187262306a36Sopenharmony_ci .id = MT8192_DAI_I2S_1, 187362306a36Sopenharmony_ci .playback = { 187462306a36Sopenharmony_ci .stream_name = "I2S1", 187562306a36Sopenharmony_ci .channels_min = 1, 187662306a36Sopenharmony_ci .channels_max = 2, 187762306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 187862306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 187962306a36Sopenharmony_ci }, 188062306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 188162306a36Sopenharmony_ci }, 188262306a36Sopenharmony_ci { 188362306a36Sopenharmony_ci .name = "I2S2", 188462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_2, 188562306a36Sopenharmony_ci .capture = { 188662306a36Sopenharmony_ci .stream_name = "I2S2", 188762306a36Sopenharmony_ci .channels_min = 1, 188862306a36Sopenharmony_ci .channels_max = 2, 188962306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 189062306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 189162306a36Sopenharmony_ci }, 189262306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 189362306a36Sopenharmony_ci }, 189462306a36Sopenharmony_ci { 189562306a36Sopenharmony_ci .name = "I2S3", 189662306a36Sopenharmony_ci .id = MT8192_DAI_I2S_3, 189762306a36Sopenharmony_ci .playback = { 189862306a36Sopenharmony_ci .stream_name = "I2S3", 189962306a36Sopenharmony_ci .channels_min = 1, 190062306a36Sopenharmony_ci .channels_max = 2, 190162306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 190262306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 190362306a36Sopenharmony_ci }, 190462306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 190562306a36Sopenharmony_ci }, 190662306a36Sopenharmony_ci { 190762306a36Sopenharmony_ci .name = "I2S5", 190862306a36Sopenharmony_ci .id = MT8192_DAI_I2S_5, 190962306a36Sopenharmony_ci .playback = { 191062306a36Sopenharmony_ci .stream_name = "I2S5", 191162306a36Sopenharmony_ci .channels_min = 1, 191262306a36Sopenharmony_ci .channels_max = 2, 191362306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 191462306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 191562306a36Sopenharmony_ci }, 191662306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 191762306a36Sopenharmony_ci }, 191862306a36Sopenharmony_ci { 191962306a36Sopenharmony_ci .name = "I2S6", 192062306a36Sopenharmony_ci .id = MT8192_DAI_I2S_6, 192162306a36Sopenharmony_ci .capture = { 192262306a36Sopenharmony_ci .stream_name = "I2S6", 192362306a36Sopenharmony_ci .channels_min = 1, 192462306a36Sopenharmony_ci .channels_max = 2, 192562306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 192662306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 192762306a36Sopenharmony_ci }, 192862306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 192962306a36Sopenharmony_ci }, 193062306a36Sopenharmony_ci { 193162306a36Sopenharmony_ci .name = "I2S7", 193262306a36Sopenharmony_ci .id = MT8192_DAI_I2S_7, 193362306a36Sopenharmony_ci .playback = { 193462306a36Sopenharmony_ci .stream_name = "I2S7", 193562306a36Sopenharmony_ci .channels_min = 1, 193662306a36Sopenharmony_ci .channels_max = 2, 193762306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 193862306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 193962306a36Sopenharmony_ci }, 194062306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 194162306a36Sopenharmony_ci }, 194262306a36Sopenharmony_ci { 194362306a36Sopenharmony_ci .name = "I2S8", 194462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_8, 194562306a36Sopenharmony_ci .capture = { 194662306a36Sopenharmony_ci .stream_name = "I2S8", 194762306a36Sopenharmony_ci .channels_min = 1, 194862306a36Sopenharmony_ci .channels_max = 2, 194962306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 195062306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 195162306a36Sopenharmony_ci }, 195262306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 195362306a36Sopenharmony_ci }, 195462306a36Sopenharmony_ci { 195562306a36Sopenharmony_ci .name = "I2S9", 195662306a36Sopenharmony_ci .id = MT8192_DAI_I2S_9, 195762306a36Sopenharmony_ci .playback = { 195862306a36Sopenharmony_ci .stream_name = "I2S9", 195962306a36Sopenharmony_ci .channels_min = 1, 196062306a36Sopenharmony_ci .channels_max = 2, 196162306a36Sopenharmony_ci .rates = MTK_I2S_RATES, 196262306a36Sopenharmony_ci .formats = MTK_I2S_FORMATS, 196362306a36Sopenharmony_ci }, 196462306a36Sopenharmony_ci .ops = &mtk_dai_i2s_ops, 196562306a36Sopenharmony_ci } 196662306a36Sopenharmony_ci}; 196762306a36Sopenharmony_ci 196862306a36Sopenharmony_ci/* this enum is merely for mtk_afe_i2s_priv declare */ 196962306a36Sopenharmony_cienum { 197062306a36Sopenharmony_ci DAI_I2S0 = 0, 197162306a36Sopenharmony_ci DAI_I2S1, 197262306a36Sopenharmony_ci DAI_I2S2, 197362306a36Sopenharmony_ci DAI_I2S3, 197462306a36Sopenharmony_ci DAI_I2S5, 197562306a36Sopenharmony_ci DAI_I2S6, 197662306a36Sopenharmony_ci DAI_I2S7, 197762306a36Sopenharmony_ci DAI_I2S8, 197862306a36Sopenharmony_ci DAI_I2S9, 197962306a36Sopenharmony_ci DAI_I2S_NUM, 198062306a36Sopenharmony_ci}; 198162306a36Sopenharmony_ci 198262306a36Sopenharmony_cistatic const struct mtk_afe_i2s_priv mt8192_i2s_priv[DAI_I2S_NUM] = { 198362306a36Sopenharmony_ci [DAI_I2S0] = { 198462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_0, 198562306a36Sopenharmony_ci .mclk_id = MT8192_I2S0_MCK, 198662306a36Sopenharmony_ci .share_i2s_id = -1, 198762306a36Sopenharmony_ci }, 198862306a36Sopenharmony_ci [DAI_I2S1] = { 198962306a36Sopenharmony_ci .id = MT8192_DAI_I2S_1, 199062306a36Sopenharmony_ci .mclk_id = MT8192_I2S1_MCK, 199162306a36Sopenharmony_ci .share_i2s_id = -1, 199262306a36Sopenharmony_ci }, 199362306a36Sopenharmony_ci [DAI_I2S2] = { 199462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_2, 199562306a36Sopenharmony_ci .mclk_id = MT8192_I2S2_MCK, 199662306a36Sopenharmony_ci .share_i2s_id = -1, 199762306a36Sopenharmony_ci }, 199862306a36Sopenharmony_ci [DAI_I2S3] = { 199962306a36Sopenharmony_ci .id = MT8192_DAI_I2S_3, 200062306a36Sopenharmony_ci .mclk_id = MT8192_I2S3_MCK, 200162306a36Sopenharmony_ci .share_i2s_id = -1, 200262306a36Sopenharmony_ci }, 200362306a36Sopenharmony_ci [DAI_I2S5] = { 200462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_5, 200562306a36Sopenharmony_ci .mclk_id = MT8192_I2S5_MCK, 200662306a36Sopenharmony_ci .share_i2s_id = -1, 200762306a36Sopenharmony_ci }, 200862306a36Sopenharmony_ci [DAI_I2S6] = { 200962306a36Sopenharmony_ci .id = MT8192_DAI_I2S_6, 201062306a36Sopenharmony_ci .mclk_id = MT8192_I2S6_MCK, 201162306a36Sopenharmony_ci .share_i2s_id = -1, 201262306a36Sopenharmony_ci }, 201362306a36Sopenharmony_ci [DAI_I2S7] = { 201462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_7, 201562306a36Sopenharmony_ci .mclk_id = MT8192_I2S7_MCK, 201662306a36Sopenharmony_ci .share_i2s_id = -1, 201762306a36Sopenharmony_ci }, 201862306a36Sopenharmony_ci [DAI_I2S8] = { 201962306a36Sopenharmony_ci .id = MT8192_DAI_I2S_8, 202062306a36Sopenharmony_ci .mclk_id = MT8192_I2S8_MCK, 202162306a36Sopenharmony_ci .share_i2s_id = -1, 202262306a36Sopenharmony_ci }, 202362306a36Sopenharmony_ci [DAI_I2S9] = { 202462306a36Sopenharmony_ci .id = MT8192_DAI_I2S_9, 202562306a36Sopenharmony_ci .mclk_id = MT8192_I2S9_MCK, 202662306a36Sopenharmony_ci .share_i2s_id = -1, 202762306a36Sopenharmony_ci }, 202862306a36Sopenharmony_ci}; 202962306a36Sopenharmony_ci 203062306a36Sopenharmony_ci/** 203162306a36Sopenharmony_ci * mt8192_dai_i2s_set_share() - Set up I2S ports to share a single clock. 203262306a36Sopenharmony_ci * @afe: Pointer to &struct mtk_base_afe 203362306a36Sopenharmony_ci * @main_i2s_name: The name of the I2S port that will provide the clock 203462306a36Sopenharmony_ci * @secondary_i2s_name: The name of the I2S port that will use this clock 203562306a36Sopenharmony_ci */ 203662306a36Sopenharmony_ciint mt8192_dai_i2s_set_share(struct mtk_base_afe *afe, const char *main_i2s_name, 203762306a36Sopenharmony_ci const char *secondary_i2s_name) 203862306a36Sopenharmony_ci{ 203962306a36Sopenharmony_ci struct mtk_afe_i2s_priv *secondary_i2s_priv; 204062306a36Sopenharmony_ci int main_i2s_id; 204162306a36Sopenharmony_ci 204262306a36Sopenharmony_ci secondary_i2s_priv = get_i2s_priv_by_name(afe, secondary_i2s_name); 204362306a36Sopenharmony_ci if (!secondary_i2s_priv) 204462306a36Sopenharmony_ci return -EINVAL; 204562306a36Sopenharmony_ci 204662306a36Sopenharmony_ci main_i2s_id = get_i2s_id_by_name(afe, main_i2s_name); 204762306a36Sopenharmony_ci if (main_i2s_id < 0) 204862306a36Sopenharmony_ci return main_i2s_id; 204962306a36Sopenharmony_ci 205062306a36Sopenharmony_ci secondary_i2s_priv->share_i2s_id = main_i2s_id; 205162306a36Sopenharmony_ci 205262306a36Sopenharmony_ci return 0; 205362306a36Sopenharmony_ci} 205462306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(mt8192_dai_i2s_set_share); 205562306a36Sopenharmony_ci 205662306a36Sopenharmony_cistatic int mt8192_dai_i2s_set_priv(struct mtk_base_afe *afe) 205762306a36Sopenharmony_ci{ 205862306a36Sopenharmony_ci int i; 205962306a36Sopenharmony_ci int ret; 206062306a36Sopenharmony_ci 206162306a36Sopenharmony_ci for (i = 0; i < DAI_I2S_NUM; i++) { 206262306a36Sopenharmony_ci ret = mt8192_dai_set_priv(afe, mt8192_i2s_priv[i].id, 206362306a36Sopenharmony_ci sizeof(struct mtk_afe_i2s_priv), 206462306a36Sopenharmony_ci &mt8192_i2s_priv[i]); 206562306a36Sopenharmony_ci if (ret) 206662306a36Sopenharmony_ci return ret; 206762306a36Sopenharmony_ci } 206862306a36Sopenharmony_ci 206962306a36Sopenharmony_ci return 0; 207062306a36Sopenharmony_ci} 207162306a36Sopenharmony_ci 207262306a36Sopenharmony_ciint mt8192_dai_i2s_register(struct mtk_base_afe *afe) 207362306a36Sopenharmony_ci{ 207462306a36Sopenharmony_ci struct mtk_base_afe_dai *dai; 207562306a36Sopenharmony_ci int ret; 207662306a36Sopenharmony_ci 207762306a36Sopenharmony_ci dev_dbg(afe->dev, "%s()\n", __func__); 207862306a36Sopenharmony_ci 207962306a36Sopenharmony_ci dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); 208062306a36Sopenharmony_ci if (!dai) 208162306a36Sopenharmony_ci return -ENOMEM; 208262306a36Sopenharmony_ci 208362306a36Sopenharmony_ci list_add(&dai->list, &afe->sub_dais); 208462306a36Sopenharmony_ci 208562306a36Sopenharmony_ci dai->dai_drivers = mtk_dai_i2s_driver; 208662306a36Sopenharmony_ci dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_i2s_driver); 208762306a36Sopenharmony_ci 208862306a36Sopenharmony_ci dai->controls = mtk_dai_i2s_controls; 208962306a36Sopenharmony_ci dai->num_controls = ARRAY_SIZE(mtk_dai_i2s_controls); 209062306a36Sopenharmony_ci dai->dapm_widgets = mtk_dai_i2s_widgets; 209162306a36Sopenharmony_ci dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_i2s_widgets); 209262306a36Sopenharmony_ci dai->dapm_routes = mtk_dai_i2s_routes; 209362306a36Sopenharmony_ci dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_i2s_routes); 209462306a36Sopenharmony_ci 209562306a36Sopenharmony_ci /* set all dai i2s private data */ 209662306a36Sopenharmony_ci ret = mt8192_dai_i2s_set_priv(afe); 209762306a36Sopenharmony_ci if (ret) 209862306a36Sopenharmony_ci return ret; 209962306a36Sopenharmony_ci 210062306a36Sopenharmony_ci return 0; 210162306a36Sopenharmony_ci} 2102