1*33eda2c1SDarren Ye /* SPDX-License-Identifier: GPL-2.0 */ 2*33eda2c1SDarren Ye /* 3*33eda2c1SDarren Ye * mt8196-afe-common.h -- Mediatek 8196 audio driver definitions 4*33eda2c1SDarren Ye * 5*33eda2c1SDarren Ye * Copyright (c) 2025 MediaTek Inc. 6*33eda2c1SDarren Ye * Author: Darren Ye <darren.ye@mediatek.com> 7*33eda2c1SDarren Ye */ 8*33eda2c1SDarren Ye 9*33eda2c1SDarren Ye #ifndef _MT_8196_AFE_COMMON_H_ 10*33eda2c1SDarren Ye #define _MT_8196_AFE_COMMON_H_ 11*33eda2c1SDarren Ye #include <sound/pcm.h> 12*33eda2c1SDarren Ye #include <sound/soc.h> 13*33eda2c1SDarren Ye 14*33eda2c1SDarren Ye #include "mt8196-reg.h" 15*33eda2c1SDarren Ye #include "../common/mtk-base-afe.h" 16*33eda2c1SDarren Ye 17*33eda2c1SDarren Ye /* HW IPM 2.0 */ 18*33eda2c1SDarren Ye enum { 19*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_8K = 0x0, 20*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_11K = 0x1, 21*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_12K = 0x2, 22*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_16K = 0x4, 23*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_22K = 0x5, 24*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_24K = 0x6, 25*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_32K = 0x8, 26*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_44K = 0x9, 27*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_48K = 0xa, 28*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_88K = 0xd, 29*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_96K = 0xe, 30*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_176K = 0x11, 31*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_192K = 0x12, 32*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_352K = 0x15, 33*33eda2c1SDarren Ye MTK_AFE_IPM2P0_RATE_384K = 0x16, 34*33eda2c1SDarren Ye }; 35*33eda2c1SDarren Ye 36*33eda2c1SDarren Ye enum { 37*33eda2c1SDarren Ye MTKAIF_PROTOCOL_1, 38*33eda2c1SDarren Ye MTKAIF_PROTOCOL_2, 39*33eda2c1SDarren Ye MTKAIF_PROTOCOL_2_CLK_P2, 40*33eda2c1SDarren Ye }; 41*33eda2c1SDarren Ye 42*33eda2c1SDarren Ye enum { 43*33eda2c1SDarren Ye MT8196_MEMIF_DL0, 44*33eda2c1SDarren Ye MT8196_MEMIF_DL1, 45*33eda2c1SDarren Ye MT8196_MEMIF_DL2, 46*33eda2c1SDarren Ye MT8196_MEMIF_DL3, 47*33eda2c1SDarren Ye MT8196_MEMIF_DL4, 48*33eda2c1SDarren Ye MT8196_MEMIF_DL5, 49*33eda2c1SDarren Ye MT8196_MEMIF_DL6, 50*33eda2c1SDarren Ye MT8196_MEMIF_DL7, 51*33eda2c1SDarren Ye MT8196_MEMIF_DL8, 52*33eda2c1SDarren Ye MT8196_MEMIF_DL23, 53*33eda2c1SDarren Ye MT8196_MEMIF_DL24, 54*33eda2c1SDarren Ye MT8196_MEMIF_DL25, 55*33eda2c1SDarren Ye MT8196_MEMIF_DL26, 56*33eda2c1SDarren Ye MT8196_MEMIF_DL_4CH, 57*33eda2c1SDarren Ye MT8196_MEMIF_DL_24CH, 58*33eda2c1SDarren Ye MT8196_MEMIF_VUL0, 59*33eda2c1SDarren Ye MT8196_MEMIF_VUL1, 60*33eda2c1SDarren Ye MT8196_MEMIF_VUL2, 61*33eda2c1SDarren Ye MT8196_MEMIF_VUL3, 62*33eda2c1SDarren Ye MT8196_MEMIF_VUL4, 63*33eda2c1SDarren Ye MT8196_MEMIF_VUL5, 64*33eda2c1SDarren Ye MT8196_MEMIF_VUL6, 65*33eda2c1SDarren Ye MT8196_MEMIF_VUL7, 66*33eda2c1SDarren Ye MT8196_MEMIF_VUL8, 67*33eda2c1SDarren Ye MT8196_MEMIF_VUL9, 68*33eda2c1SDarren Ye MT8196_MEMIF_VUL10, 69*33eda2c1SDarren Ye MT8196_MEMIF_VUL24, 70*33eda2c1SDarren Ye MT8196_MEMIF_VUL25, 71*33eda2c1SDarren Ye MT8196_MEMIF_VUL26, 72*33eda2c1SDarren Ye MT8196_MEMIF_VUL_CM0, 73*33eda2c1SDarren Ye MT8196_MEMIF_VUL_CM1, 74*33eda2c1SDarren Ye MT8196_MEMIF_VUL_CM2, 75*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN0, 76*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN1, 77*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN2, 78*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN3, 79*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN4, 80*33eda2c1SDarren Ye MT8196_MEMIF_ETDM_IN6, 81*33eda2c1SDarren Ye MT8196_MEMIF_HDMI, 82*33eda2c1SDarren Ye MT8196_MEMIF_NUM, 83*33eda2c1SDarren Ye MT8196_DAI_ADDA = MT8196_MEMIF_NUM, 84*33eda2c1SDarren Ye MT8196_DAI_ADDA_CH34, 85*33eda2c1SDarren Ye MT8196_DAI_ADDA_CH56, 86*33eda2c1SDarren Ye MT8196_DAI_AP_DMIC, 87*33eda2c1SDarren Ye MT8196_DAI_AP_DMIC_CH34, 88*33eda2c1SDarren Ye MT8196_DAI_AP_DMIC_MULTICH, 89*33eda2c1SDarren Ye MT8196_DAI_I2S_IN0, 90*33eda2c1SDarren Ye MT8196_DAI_I2S_IN1, 91*33eda2c1SDarren Ye MT8196_DAI_I2S_IN2, 92*33eda2c1SDarren Ye MT8196_DAI_I2S_IN3, 93*33eda2c1SDarren Ye MT8196_DAI_I2S_IN4, 94*33eda2c1SDarren Ye MT8196_DAI_I2S_IN6, 95*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT0, 96*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT1, 97*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT2, 98*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT3, 99*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT4, 100*33eda2c1SDarren Ye MT8196_DAI_I2S_OUT6, 101*33eda2c1SDarren Ye MT8196_DAI_FM_I2S_MASTER, 102*33eda2c1SDarren Ye MT8196_DAI_TDM, 103*33eda2c1SDarren Ye MT8196_DAI_TDM_DPTX, 104*33eda2c1SDarren Ye MT8196_DAI_NUM, 105*33eda2c1SDarren Ye }; 106*33eda2c1SDarren Ye 107*33eda2c1SDarren Ye #define MT8196_DAI_I2S_MAX_NUM 13 //depends each platform's max i2s num 108*33eda2c1SDarren Ye 109*33eda2c1SDarren Ye /* update irq ID (= enum) from AFE_IRQ_MCU_STATUS */ 110*33eda2c1SDarren Ye enum { 111*33eda2c1SDarren Ye MT8196_IRQ_0, 112*33eda2c1SDarren Ye MT8196_IRQ_1, 113*33eda2c1SDarren Ye MT8196_IRQ_2, 114*33eda2c1SDarren Ye MT8196_IRQ_3, 115*33eda2c1SDarren Ye MT8196_IRQ_4, 116*33eda2c1SDarren Ye MT8196_IRQ_5, 117*33eda2c1SDarren Ye MT8196_IRQ_6, 118*33eda2c1SDarren Ye MT8196_IRQ_7, 119*33eda2c1SDarren Ye MT8196_IRQ_8, 120*33eda2c1SDarren Ye MT8196_IRQ_9, 121*33eda2c1SDarren Ye MT8196_IRQ_10, 122*33eda2c1SDarren Ye MT8196_IRQ_11, 123*33eda2c1SDarren Ye MT8196_IRQ_12, 124*33eda2c1SDarren Ye MT8196_IRQ_13, 125*33eda2c1SDarren Ye MT8196_IRQ_14, 126*33eda2c1SDarren Ye MT8196_IRQ_15, 127*33eda2c1SDarren Ye MT8196_IRQ_16, 128*33eda2c1SDarren Ye MT8196_IRQ_17, 129*33eda2c1SDarren Ye MT8196_IRQ_18, 130*33eda2c1SDarren Ye MT8196_IRQ_19, 131*33eda2c1SDarren Ye MT8196_IRQ_20, 132*33eda2c1SDarren Ye MT8196_IRQ_21, 133*33eda2c1SDarren Ye MT8196_IRQ_22, 134*33eda2c1SDarren Ye MT8196_IRQ_23, 135*33eda2c1SDarren Ye MT8196_IRQ_24, 136*33eda2c1SDarren Ye MT8196_IRQ_25, 137*33eda2c1SDarren Ye MT8196_IRQ_26, 138*33eda2c1SDarren Ye MT8196_IRQ_31, /* used only for TDM */ 139*33eda2c1SDarren Ye MT8196_IRQ_NUM, 140*33eda2c1SDarren Ye }; 141*33eda2c1SDarren Ye 142*33eda2c1SDarren Ye /* update irq ID (= enum) from AFE_IRQ_MCU_STATUS */ 143*33eda2c1SDarren Ye enum { 144*33eda2c1SDarren Ye MT8196_CUS_IRQ_TDM, /* used only for TDM */ 145*33eda2c1SDarren Ye MT8196_CUS_IRQ_NUM, 146*33eda2c1SDarren Ye }; 147*33eda2c1SDarren Ye 148*33eda2c1SDarren Ye enum { 149*33eda2c1SDarren Ye /* AUDIO_ENGEN_CON0 */ 150*33eda2c1SDarren Ye MT8196_AUDIO_26M_EN_ON, 151*33eda2c1SDarren Ye MT8196_AUDIO_F3P25M_EN_ON, 152*33eda2c1SDarren Ye MT8196_AUDIO_APLL1_EN_ON, 153*33eda2c1SDarren Ye MT8196_AUDIO_APLL2_EN_ON, 154*33eda2c1SDarren Ye MT8196_AUDIO_F26M_EN_RST, 155*33eda2c1SDarren Ye MT8196_MULTI_USER_RST, 156*33eda2c1SDarren Ye MT8196_MULTI_USER_BYPASS, 157*33eda2c1SDarren Ye /* AUDIO_TOP_CON4 */ 158*33eda2c1SDarren Ye MT8196_CG_AUDIO_HOPPING_CK, 159*33eda2c1SDarren Ye MT8196_CG_AUDIO_F26M_CK, 160*33eda2c1SDarren Ye MT8196_CG_APLL1_CK, 161*33eda2c1SDarren Ye MT8196_CG_APLL2_CK, 162*33eda2c1SDarren Ye MT8196_PDN_APLL_TUNER2, 163*33eda2c1SDarren Ye MT8196_PDN_APLL_TUNER1, 164*33eda2c1SDarren Ye MT8196_AUDIO_CG_NUM, 165*33eda2c1SDarren Ye }; 166*33eda2c1SDarren Ye 167*33eda2c1SDarren Ye /* MCLK */ 168*33eda2c1SDarren Ye enum { 169*33eda2c1SDarren Ye MT8196_I2SIN0_MCK, 170*33eda2c1SDarren Ye MT8196_I2SIN1_MCK, 171*33eda2c1SDarren Ye MT8196_FMI2S_MCK, 172*33eda2c1SDarren Ye MT8196_TDMOUT_MCK, 173*33eda2c1SDarren Ye MT8196_TDMOUT_BCK, 174*33eda2c1SDarren Ye MT8196_MCK_NUM, 175*33eda2c1SDarren Ye }; 176*33eda2c1SDarren Ye 177*33eda2c1SDarren Ye /* CM*/ 178*33eda2c1SDarren Ye enum { 179*33eda2c1SDarren Ye CM0, 180*33eda2c1SDarren Ye CM1, 181*33eda2c1SDarren Ye CM2, 182*33eda2c1SDarren Ye CM_NUM, 183*33eda2c1SDarren Ye }; 184*33eda2c1SDarren Ye 185*33eda2c1SDarren Ye struct clk; 186*33eda2c1SDarren Ye struct mtk_base_afe; 187*33eda2c1SDarren Ye 188*33eda2c1SDarren Ye struct mt8196_afe_private { 189*33eda2c1SDarren Ye struct clk **clk; 190*33eda2c1SDarren Ye /* dai */ 191*33eda2c1SDarren Ye void *dai_priv[MT8196_DAI_NUM]; 192*33eda2c1SDarren Ye /* mck */ 193*33eda2c1SDarren Ye int mck_rate[MT8196_MCK_NUM]; 194*33eda2c1SDarren Ye /* channel merge */ 195*33eda2c1SDarren Ye u32 cm_rate[CM_NUM]; 196*33eda2c1SDarren Ye u32 cm_channels; 197*33eda2c1SDarren Ye }; 198*33eda2c1SDarren Ye 199*33eda2c1SDarren Ye int mt8196_dai_adda_register(struct mtk_base_afe *afe); 200*33eda2c1SDarren Ye int mt8196_dai_i2s_register(struct mtk_base_afe *afe); 201*33eda2c1SDarren Ye int mt8196_dai_tdm_register(struct mtk_base_afe *afe); 202*33eda2c1SDarren Ye int mt8196_dai_set_priv(struct mtk_base_afe *afe, int id, 203*33eda2c1SDarren Ye int priv_size, const void *priv_data); 204*33eda2c1SDarren Ye 205*33eda2c1SDarren Ye #endif 206