xref: /linux/sound/soc/mediatek/mt8196/mt8196-afe-common.h (revision efe86f088f48f18c27b648e5724048947f3b7fb4)
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