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