1*81f8f29aSCyril Chao /* SPDX-License-Identifier: GPL-2.0 */ 2*81f8f29aSCyril Chao /* 3*81f8f29aSCyril Chao * mt8189-afe-common.h -- Mediatek 8189 audio driver definitions 4*81f8f29aSCyril Chao * 5*81f8f29aSCyril Chao * Copyright (c) 2025 MediaTek Inc. 6*81f8f29aSCyril Chao * Author: Darren Ye <darren.ye@mediatek.com> 7*81f8f29aSCyril Chao */ 8*81f8f29aSCyril Chao 9*81f8f29aSCyril Chao #ifndef _MT_8189_AFE_COMMON_H_ 10*81f8f29aSCyril Chao #define _MT_8189_AFE_COMMON_H_ 11*81f8f29aSCyril Chao 12*81f8f29aSCyril Chao #include <linux/regmap.h> 13*81f8f29aSCyril Chao 14*81f8f29aSCyril Chao #include <sound/soc.h> 15*81f8f29aSCyril Chao 16*81f8f29aSCyril Chao #include "mt8189-reg.h" 17*81f8f29aSCyril Chao #include "../common/mtk-base-afe.h" 18*81f8f29aSCyril Chao 19*81f8f29aSCyril Chao enum { 20*81f8f29aSCyril Chao MTK_AFE_RATE_8K, 21*81f8f29aSCyril Chao MTK_AFE_RATE_11K, 22*81f8f29aSCyril Chao MTK_AFE_RATE_12K, 23*81f8f29aSCyril Chao MTK_AFE_RATE_384K, 24*81f8f29aSCyril Chao MTK_AFE_RATE_16K, 25*81f8f29aSCyril Chao MTK_AFE_RATE_22K, 26*81f8f29aSCyril Chao MTK_AFE_RATE_24K, 27*81f8f29aSCyril Chao MTK_AFE_RATE_352K, 28*81f8f29aSCyril Chao MTK_AFE_RATE_32K, 29*81f8f29aSCyril Chao MTK_AFE_RATE_44K, 30*81f8f29aSCyril Chao MTK_AFE_RATE_48K, 31*81f8f29aSCyril Chao MTK_AFE_RATE_88K, 32*81f8f29aSCyril Chao MTK_AFE_RATE_96K, 33*81f8f29aSCyril Chao MTK_AFE_RATE_176K, 34*81f8f29aSCyril Chao MTK_AFE_RATE_192K, 35*81f8f29aSCyril Chao MTK_AFE_RATE_260K, 36*81f8f29aSCyril Chao }; 37*81f8f29aSCyril Chao 38*81f8f29aSCyril Chao /* HW IPM 2.0 */ 39*81f8f29aSCyril Chao enum { 40*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_8K = 0x0, 41*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_11K = 0x1, 42*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_12K = 0x2, 43*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_16K = 0x4, 44*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_22K = 0x5, 45*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_24K = 0x6, 46*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_32K = 0x8, 47*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_44K = 0x9, 48*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_48K = 0xa, 49*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_88K = 0xd, 50*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_96K = 0xe, 51*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_176K = 0x11, 52*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_192K = 0x12, 53*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_352K = 0x15, 54*81f8f29aSCyril Chao MTK_AFE_IPM2P0_RATE_384K = 0x16, 55*81f8f29aSCyril Chao }; 56*81f8f29aSCyril Chao 57*81f8f29aSCyril Chao enum { 58*81f8f29aSCyril Chao MTK_AFE_DAI_MEMIF_RATE_8K, 59*81f8f29aSCyril Chao MTK_AFE_DAI_MEMIF_RATE_16K, 60*81f8f29aSCyril Chao MTK_AFE_DAI_MEMIF_RATE_32K, 61*81f8f29aSCyril Chao MTK_AFE_DAI_MEMIF_RATE_48K, 62*81f8f29aSCyril Chao }; 63*81f8f29aSCyril Chao 64*81f8f29aSCyril Chao enum { 65*81f8f29aSCyril Chao MTK_AFE_PCM_RATE_8K, 66*81f8f29aSCyril Chao MTK_AFE_PCM_RATE_16K, 67*81f8f29aSCyril Chao MTK_AFE_PCM_RATE_32K, 68*81f8f29aSCyril Chao MTK_AFE_PCM_RATE_48K, 69*81f8f29aSCyril Chao }; 70*81f8f29aSCyril Chao 71*81f8f29aSCyril Chao enum { 72*81f8f29aSCyril Chao MTKAIF_PROTOCOL_1, 73*81f8f29aSCyril Chao MTKAIF_PROTOCOL_2, 74*81f8f29aSCyril Chao MTKAIF_PROTOCOL_2_CLK_P2, 75*81f8f29aSCyril Chao }; 76*81f8f29aSCyril Chao 77*81f8f29aSCyril Chao enum { 78*81f8f29aSCyril Chao MT8189_MEMIF_DL0, 79*81f8f29aSCyril Chao MT8189_MEMIF_DL1, 80*81f8f29aSCyril Chao MT8189_MEMIF_DL2, 81*81f8f29aSCyril Chao MT8189_MEMIF_DL3, 82*81f8f29aSCyril Chao MT8189_MEMIF_DL4, 83*81f8f29aSCyril Chao MT8189_MEMIF_DL5, 84*81f8f29aSCyril Chao MT8189_MEMIF_DL6, 85*81f8f29aSCyril Chao MT8189_MEMIF_DL7, 86*81f8f29aSCyril Chao MT8189_MEMIF_DL8, 87*81f8f29aSCyril Chao MT8189_MEMIF_DL23, 88*81f8f29aSCyril Chao MT8189_MEMIF_DL24, 89*81f8f29aSCyril Chao MT8189_MEMIF_DL25, 90*81f8f29aSCyril Chao MT8189_MEMIF_DL_24CH, 91*81f8f29aSCyril Chao MT8189_MEMIF_VUL0, 92*81f8f29aSCyril Chao MT8189_MEMIF_VUL1, 93*81f8f29aSCyril Chao MT8189_MEMIF_VUL2, 94*81f8f29aSCyril Chao MT8189_MEMIF_VUL3, 95*81f8f29aSCyril Chao MT8189_MEMIF_VUL4, 96*81f8f29aSCyril Chao MT8189_MEMIF_VUL5, 97*81f8f29aSCyril Chao MT8189_MEMIF_VUL6, 98*81f8f29aSCyril Chao MT8189_MEMIF_VUL7, 99*81f8f29aSCyril Chao MT8189_MEMIF_VUL8, 100*81f8f29aSCyril Chao MT8189_MEMIF_VUL9, 101*81f8f29aSCyril Chao MT8189_MEMIF_VUL10, 102*81f8f29aSCyril Chao MT8189_MEMIF_VUL24, 103*81f8f29aSCyril Chao MT8189_MEMIF_VUL25, 104*81f8f29aSCyril Chao MT8189_MEMIF_VUL_CM0, 105*81f8f29aSCyril Chao MT8189_MEMIF_VUL_CM1, 106*81f8f29aSCyril Chao MT8189_MEMIF_ETDM_IN0, 107*81f8f29aSCyril Chao MT8189_MEMIF_ETDM_IN1, 108*81f8f29aSCyril Chao MT8189_MEMIF_HDMI, 109*81f8f29aSCyril Chao MT8189_MEMIF_NUM, 110*81f8f29aSCyril Chao MT8189_DAI_ADDA = MT8189_MEMIF_NUM, 111*81f8f29aSCyril Chao MT8189_DAI_ADDA_CH34, 112*81f8f29aSCyril Chao MT8189_DAI_ADDA_CH56, 113*81f8f29aSCyril Chao MT8189_DAI_AP_DMIC, 114*81f8f29aSCyril Chao MT8189_DAI_AP_DMIC_CH34, 115*81f8f29aSCyril Chao MT8189_DAI_I2S_IN0, 116*81f8f29aSCyril Chao MT8189_DAI_I2S_IN1, 117*81f8f29aSCyril Chao MT8189_DAI_I2S_OUT0, 118*81f8f29aSCyril Chao MT8189_DAI_I2S_OUT1, 119*81f8f29aSCyril Chao MT8189_DAI_I2S_OUT4, 120*81f8f29aSCyril Chao MT8189_DAI_PCM_0, 121*81f8f29aSCyril Chao MT8189_DAI_TDM, 122*81f8f29aSCyril Chao MT8189_DAI_TDM_DPTX, 123*81f8f29aSCyril Chao MT8189_DAI_NUM, 124*81f8f29aSCyril Chao }; 125*81f8f29aSCyril Chao 126*81f8f29aSCyril Chao /* update irq ID (= enum) from AFE_IRQ_MCU_STATUS */ 127*81f8f29aSCyril Chao enum { 128*81f8f29aSCyril Chao MT8189_IRQ_0, 129*81f8f29aSCyril Chao MT8189_IRQ_1, 130*81f8f29aSCyril Chao MT8189_IRQ_2, 131*81f8f29aSCyril Chao MT8189_IRQ_3, 132*81f8f29aSCyril Chao MT8189_IRQ_4, 133*81f8f29aSCyril Chao MT8189_IRQ_5, 134*81f8f29aSCyril Chao MT8189_IRQ_6, 135*81f8f29aSCyril Chao MT8189_IRQ_7, 136*81f8f29aSCyril Chao MT8189_IRQ_8, 137*81f8f29aSCyril Chao MT8189_IRQ_9, 138*81f8f29aSCyril Chao MT8189_IRQ_10, 139*81f8f29aSCyril Chao MT8189_IRQ_11, 140*81f8f29aSCyril Chao MT8189_IRQ_12, 141*81f8f29aSCyril Chao MT8189_IRQ_13, 142*81f8f29aSCyril Chao MT8189_IRQ_14, 143*81f8f29aSCyril Chao MT8189_IRQ_15, 144*81f8f29aSCyril Chao MT8189_IRQ_16, 145*81f8f29aSCyril Chao MT8189_IRQ_17, 146*81f8f29aSCyril Chao MT8189_IRQ_18, 147*81f8f29aSCyril Chao MT8189_IRQ_19, 148*81f8f29aSCyril Chao MT8189_IRQ_20, 149*81f8f29aSCyril Chao MT8189_IRQ_21, 150*81f8f29aSCyril Chao MT8189_IRQ_22, 151*81f8f29aSCyril Chao MT8189_IRQ_23, 152*81f8f29aSCyril Chao MT8189_IRQ_24, 153*81f8f29aSCyril Chao MT8189_IRQ_25, 154*81f8f29aSCyril Chao MT8189_IRQ_26, 155*81f8f29aSCyril Chao MT8189_IRQ_31, 156*81f8f29aSCyril Chao MT8189_IRQ_NUM, 157*81f8f29aSCyril Chao }; 158*81f8f29aSCyril Chao 159*81f8f29aSCyril Chao /* update irq ID (= enum) from AFE_IRQ_MCU_STATUS */ 160*81f8f29aSCyril Chao enum { 161*81f8f29aSCyril Chao MT8189_CUS_IRQ_TDM, /* used only for TDM */ 162*81f8f29aSCyril Chao MT8189_CUS_IRQ_NUM, 163*81f8f29aSCyril Chao }; 164*81f8f29aSCyril Chao 165*81f8f29aSCyril Chao enum { 166*81f8f29aSCyril Chao /* AUDIO_ENGEN_CON0 */ 167*81f8f29aSCyril Chao MT8189_AUDIO_26M_EN_ON, 168*81f8f29aSCyril Chao MT8189_AUDIO_F3P25M_EN_ON, 169*81f8f29aSCyril Chao MT8189_AUDIO_APLL1_EN_ON, 170*81f8f29aSCyril Chao MT8189_AUDIO_APLL2_EN_ON, 171*81f8f29aSCyril Chao MT8189_AUDIO_F26M_EN_RST, 172*81f8f29aSCyril Chao MT8189_MULTI_USER_RST, 173*81f8f29aSCyril Chao MT8189_MULTI_USER_BYPASS, 174*81f8f29aSCyril Chao /* AUDIO_TOP_CON4 */ 175*81f8f29aSCyril Chao MT8189_CG_AUDIO_HOPPING_CK, 176*81f8f29aSCyril Chao MT8189_CG_AUDIO_F26M_CK, 177*81f8f29aSCyril Chao MT8189_CG_APLL1_CK, 178*81f8f29aSCyril Chao MT8189_CG_APLL2_CK, 179*81f8f29aSCyril Chao MT8189_PDN_APLL_TUNER2, 180*81f8f29aSCyril Chao MT8189_PDN_APLL_TUNER1, 181*81f8f29aSCyril Chao MT8189_AUDIO_CG_NUM, 182*81f8f29aSCyril Chao }; 183*81f8f29aSCyril Chao 184*81f8f29aSCyril Chao /* MCLK */ 185*81f8f29aSCyril Chao enum { 186*81f8f29aSCyril Chao MT8189_I2SIN0_MCK, 187*81f8f29aSCyril Chao MT8189_I2SIN1_MCK, 188*81f8f29aSCyril Chao MT8189_I2SOUT0_MCK, 189*81f8f29aSCyril Chao MT8189_I2SOUT1_MCK, 190*81f8f29aSCyril Chao MT8189_FMI2S_MCK, 191*81f8f29aSCyril Chao MT8189_TDMOUT_MCK, 192*81f8f29aSCyril Chao MT8189_TDMOUT_BCK, 193*81f8f29aSCyril Chao MT8189_MCK_NUM, 194*81f8f29aSCyril Chao }; 195*81f8f29aSCyril Chao 196*81f8f29aSCyril Chao enum { 197*81f8f29aSCyril Chao CM0, 198*81f8f29aSCyril Chao CM1, 199*81f8f29aSCyril Chao CM_NUM, 200*81f8f29aSCyril Chao }; 201*81f8f29aSCyril Chao 202*81f8f29aSCyril Chao struct clk; 203*81f8f29aSCyril Chao 204*81f8f29aSCyril Chao struct mt8189_afe_private { 205*81f8f29aSCyril Chao struct clk **clk; 206*81f8f29aSCyril Chao struct regmap *pmic_regmap; 207*81f8f29aSCyril Chao 208*81f8f29aSCyril Chao /* dai */ 209*81f8f29aSCyril Chao void *dai_priv[MT8189_DAI_NUM]; 210*81f8f29aSCyril Chao 211*81f8f29aSCyril Chao /* adda */ 212*81f8f29aSCyril Chao int mtkaif_protocol; 213*81f8f29aSCyril Chao int mtkaif_chosen_phase[4]; 214*81f8f29aSCyril Chao int mtkaif_phase_cycle[4]; 215*81f8f29aSCyril Chao int mtkaif_calibration_num_phase; 216*81f8f29aSCyril Chao int mtkaif_dmic; 217*81f8f29aSCyril Chao int mtkaif_dmic_ch34; 218*81f8f29aSCyril Chao 219*81f8f29aSCyril Chao /* add for vs1 voter */ 220*81f8f29aSCyril Chao bool is_adda_dl_on; 221*81f8f29aSCyril Chao bool is_adda_ul_on; 222*81f8f29aSCyril Chao /* adda dl vol idx is at maximum */ 223*81f8f29aSCyril Chao bool is_adda_dl_max_vol; 224*81f8f29aSCyril Chao /* current vote status of vs1 */ 225*81f8f29aSCyril Chao bool is_mt6363_vote; 226*81f8f29aSCyril Chao 227*81f8f29aSCyril Chao /* mck */ 228*81f8f29aSCyril Chao int mck_rate[MT8189_MCK_NUM]; 229*81f8f29aSCyril Chao 230*81f8f29aSCyril Chao /* channel merge */ 231*81f8f29aSCyril Chao unsigned int cm_rate[CM_NUM]; 232*81f8f29aSCyril Chao unsigned int cm_channels; 233*81f8f29aSCyril Chao }; 234*81f8f29aSCyril Chao 235*81f8f29aSCyril Chao int mt8189_dai_adda_register(struct mtk_base_afe *afe); 236*81f8f29aSCyril Chao int mt8189_dai_i2s_register(struct mtk_base_afe *afe); 237*81f8f29aSCyril Chao int mt8189_dai_pcm_register(struct mtk_base_afe *afe); 238*81f8f29aSCyril Chao int mt8189_dai_tdm_register(struct mtk_base_afe *afe); 239*81f8f29aSCyril Chao 240*81f8f29aSCyril Chao #endif 241