xref: /OK3568_Linux_fs/kernel/sound/soc/fsl/fsl_easrc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2019 NXP
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef _FSL_EASRC_H
7*4882a593Smuzhiyun #define _FSL_EASRC_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <sound/asound.h>
10*4882a593Smuzhiyun #include <linux/platform_data/dma-imx.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "fsl_asrc_common.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* EASRC Register Map */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* ASRC Input Write FIFO */
17*4882a593Smuzhiyun #define REG_EASRC_WRFIFO(ctx)		(0x000 + 4 * (ctx))
18*4882a593Smuzhiyun /* ASRC Output Read FIFO */
19*4882a593Smuzhiyun #define REG_EASRC_RDFIFO(ctx)		(0x010 + 4 * (ctx))
20*4882a593Smuzhiyun /* ASRC Context Control */
21*4882a593Smuzhiyun #define REG_EASRC_CC(ctx)		(0x020 + 4 * (ctx))
22*4882a593Smuzhiyun /* ASRC Context Control Extended 1 */
23*4882a593Smuzhiyun #define REG_EASRC_CCE1(ctx)		(0x030 + 4 * (ctx))
24*4882a593Smuzhiyun /* ASRC Context Control Extended 2 */
25*4882a593Smuzhiyun #define REG_EASRC_CCE2(ctx)		(0x040 + 4 * (ctx))
26*4882a593Smuzhiyun /* ASRC Control Input Access */
27*4882a593Smuzhiyun #define REG_EASRC_CIA(ctx)		(0x050 + 4 * (ctx))
28*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 */
29*4882a593Smuzhiyun #define REG_EASRC_DPCS0R0(ctx)		(0x060 + 4 * (ctx))
30*4882a593Smuzhiyun #define REG_EASRC_DPCS0R1(ctx)		(0x070 + 4 * (ctx))
31*4882a593Smuzhiyun #define REG_EASRC_DPCS0R2(ctx)		(0x080 + 4 * (ctx))
32*4882a593Smuzhiyun #define REG_EASRC_DPCS0R3(ctx)		(0x090 + 4 * (ctx))
33*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot1 */
34*4882a593Smuzhiyun #define REG_EASRC_DPCS1R0(ctx)		(0x0A0 + 4 * (ctx))
35*4882a593Smuzhiyun #define REG_EASRC_DPCS1R1(ctx)		(0x0B0 + 4 * (ctx))
36*4882a593Smuzhiyun #define REG_EASRC_DPCS1R2(ctx)		(0x0C0 + 4 * (ctx))
37*4882a593Smuzhiyun #define REG_EASRC_DPCS1R3(ctx)		(0x0D0 + 4 * (ctx))
38*4882a593Smuzhiyun /* ASRC Context Output Control */
39*4882a593Smuzhiyun #define REG_EASRC_COC(ctx)		(0x0E0 + 4 * (ctx))
40*4882a593Smuzhiyun /* ASRC Control Output Access */
41*4882a593Smuzhiyun #define REG_EASRC_COA(ctx)		(0x0F0 + 4 * (ctx))
42*4882a593Smuzhiyun /* ASRC Sample FIFO Status */
43*4882a593Smuzhiyun #define REG_EASRC_SFS(ctx)		(0x100 + 4 * (ctx))
44*4882a593Smuzhiyun /* ASRC Resampling Ratio Low */
45*4882a593Smuzhiyun #define REG_EASRC_RRL(ctx)		(0x110 + 8 * (ctx))
46*4882a593Smuzhiyun /* ASRC Resampling Ratio High */
47*4882a593Smuzhiyun #define REG_EASRC_RRH(ctx)		(0x114 + 8 * (ctx))
48*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Control */
49*4882a593Smuzhiyun #define REG_EASRC_RUC(ctx)		(0x130 + 4 * (ctx))
50*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Rate */
51*4882a593Smuzhiyun #define REG_EASRC_RUR(ctx)		(0x140 + 4 * (ctx))
52*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient Low */
53*4882a593Smuzhiyun #define REG_EASRC_RCTCL			(0x150)
54*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient High */
55*4882a593Smuzhiyun #define REG_EASRC_RCTCH			(0x154)
56*4882a593Smuzhiyun /* ASRC Prefilter Coefficient FIFO */
57*4882a593Smuzhiyun #define REG_EASRC_PCF(ctx)		(0x160 + 4 * (ctx))
58*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Memory */
59*4882a593Smuzhiyun #define REG_EASRC_CRCM			0x170
60*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Control*/
61*4882a593Smuzhiyun #define REG_EASRC_CRCC			0x174
62*4882a593Smuzhiyun /* ASRC Interrupt Control */
63*4882a593Smuzhiyun #define REG_EASRC_IRQC			0x178
64*4882a593Smuzhiyun /* ASRC Interrupt Status Flags */
65*4882a593Smuzhiyun #define REG_EASRC_IRQF			0x17C
66*4882a593Smuzhiyun /* ASRC Channel Status 0 */
67*4882a593Smuzhiyun #define REG_EASRC_CS0(ctx)		(0x180 + 4 * (ctx))
68*4882a593Smuzhiyun /* ASRC Channel Status 1 */
69*4882a593Smuzhiyun #define REG_EASRC_CS1(ctx)		(0x190 + 4 * (ctx))
70*4882a593Smuzhiyun /* ASRC Channel Status 2 */
71*4882a593Smuzhiyun #define REG_EASRC_CS2(ctx)		(0x1A0 + 4 * (ctx))
72*4882a593Smuzhiyun /* ASRC Channel Status 3 */
73*4882a593Smuzhiyun #define REG_EASRC_CS3(ctx)		(0x1B0 + 4 * (ctx))
74*4882a593Smuzhiyun /* ASRC Channel Status 4 */
75*4882a593Smuzhiyun #define REG_EASRC_CS4(ctx)		(0x1C0 + 4 * (ctx))
76*4882a593Smuzhiyun /* ASRC Channel Status 5 */
77*4882a593Smuzhiyun #define REG_EASRC_CS5(ctx)		(0x1D0 + 4 * (ctx))
78*4882a593Smuzhiyun /* ASRC Debug Control Register */
79*4882a593Smuzhiyun #define REG_EASRC_DBGC			0x1E0
80*4882a593Smuzhiyun /* ASRC Debug Status Register */
81*4882a593Smuzhiyun #define REG_EASRC_DBGS			0x1E4
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define REG_EASRC_FIFO(x, ctx)		(x == IN ? REG_EASRC_WRFIFO(ctx) \
84*4882a593Smuzhiyun 						: REG_EASRC_RDFIFO(ctx))
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* ASRC Context Control (CC) */
87*4882a593Smuzhiyun #define EASRC_CC_EN_SHIFT		31
88*4882a593Smuzhiyun #define EASRC_CC_EN_MASK		BIT(EASRC_CC_EN_SHIFT)
89*4882a593Smuzhiyun #define EASRC_CC_EN			BIT(EASRC_CC_EN_SHIFT)
90*4882a593Smuzhiyun #define EASRC_CC_STOP_SHIFT		29
91*4882a593Smuzhiyun #define EASRC_CC_STOP_MASK		BIT(EASRC_CC_STOP_SHIFT)
92*4882a593Smuzhiyun #define EASRC_CC_STOP			BIT(EASRC_CC_STOP_SHIFT)
93*4882a593Smuzhiyun #define EASRC_CC_FWMDE_SHIFT		28
94*4882a593Smuzhiyun #define EASRC_CC_FWMDE_MASK		BIT(EASRC_CC_FWMDE_SHIFT)
95*4882a593Smuzhiyun #define EASRC_CC_FWMDE			BIT(EASRC_CC_FWMDE_SHIFT)
96*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_SHIFT	16
97*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_WIDTH	7
98*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_MASK		((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \
99*4882a593Smuzhiyun 					 << EASRC_CC_FIFO_WTMK_SHIFT)
100*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK(v)		(((v) << EASRC_CC_FIFO_WTMK_SHIFT) \
101*4882a593Smuzhiyun 					 & EASRC_CC_FIFO_WTMK_MASK)
102*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_SHIFT	11
103*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_WIDTH	5
104*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_MASK	((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \
105*4882a593Smuzhiyun 					 << EASRC_CC_SAMPLE_POS_SHIFT)
106*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS(v)		(((v) << EASRC_CC_SAMPLE_POS_SHIFT) \
107*4882a593Smuzhiyun 					 & EASRC_CC_SAMPLE_POS_MASK)
108*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS_SHIFT	10
109*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS_MASK	BIT(EASRC_CC_ENDIANNESS_SHIFT)
110*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS		BIT(EASRC_CC_ENDIANNESS_SHIFT)
111*4882a593Smuzhiyun #define EASRC_CC_BPS_SHIFT		8
112*4882a593Smuzhiyun #define EASRC_CC_BPS_WIDTH		2
113*4882a593Smuzhiyun #define EASRC_CC_BPS_MASK		((BIT(EASRC_CC_BPS_WIDTH) - 1) \
114*4882a593Smuzhiyun 					 << EASRC_CC_BPS_SHIFT)
115*4882a593Smuzhiyun #define EASRC_CC_BPS(v)			(((v) << EASRC_CC_BPS_SHIFT) \
116*4882a593Smuzhiyun 					 & EASRC_CC_BPS_MASK)
117*4882a593Smuzhiyun #define EASRC_CC_FMT_SHIFT		7
118*4882a593Smuzhiyun #define EASRC_CC_FMT_MASK		BIT(EASRC_CC_FMT_SHIFT)
119*4882a593Smuzhiyun #define EASRC_CC_FMT			BIT(EASRC_CC_FMT_SHIFT)
120*4882a593Smuzhiyun #define EASRC_CC_INSIGN_SHIFT		6
121*4882a593Smuzhiyun #define EASRC_CC_INSIGN_MASK		BIT(EASRC_CC_INSIGN_SHIFT)
122*4882a593Smuzhiyun #define EASRC_CC_INSIGN			BIT(EASRC_CC_INSIGN_SHIFT)
123*4882a593Smuzhiyun #define EASRC_CC_CHEN_SHIFT		0
124*4882a593Smuzhiyun #define EASRC_CC_CHEN_WIDTH		5
125*4882a593Smuzhiyun #define EASRC_CC_CHEN_MASK		((BIT(EASRC_CC_CHEN_WIDTH) - 1) \
126*4882a593Smuzhiyun 					 << EASRC_CC_CHEN_SHIFT)
127*4882a593Smuzhiyun #define EASRC_CC_CHEN(v)		(((v) << EASRC_CC_CHEN_SHIFT) \
128*4882a593Smuzhiyun 					 & EASRC_CC_CHEN_MASK)
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* ASRC Context Control Extended 1 (CCE1) */
131*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS_SHIFT	25
132*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS_MASK		BIT(EASRC_CCE1_COEF_WS_SHIFT)
133*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS		BIT(EASRC_CCE1_COEF_WS_SHIFT)
134*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST_SHIFT	24
135*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST_MASK	BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
136*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST		BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
137*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_SHIFT		16
138*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_WIDTH		8
139*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_MASK		((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \
140*4882a593Smuzhiyun 					 << EASRC_CCE1_PF_EXP_SHIFT)
141*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP(v)		(((v) << EASRC_CCE1_PF_EXP_SHIFT) \
142*4882a593Smuzhiyun 					 & EASRC_CCE1_PF_EXP_MASK)
143*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP_SHIFT	9
144*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP_MASK	BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
145*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP		BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
146*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN_SHIFT	8
147*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN_MASK		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
148*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
149*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS_SHIFT	7
150*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS_MASK	BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
151*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS		BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
152*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS_SHIFT	6
153*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS_MASK	BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
154*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS		BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
155*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP_SHIFT	5
156*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP_MASK		BIT(EASRC_CCE1_RS_STOP_SHIFT)
157*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP		BIT(EASRC_CCE1_RS_STOP_SHIFT)
158*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP_SHIFT	4
159*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP_MASK		BIT(EASRC_CCE1_PF_STOP_SHIFT)
160*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP		BIT(EASRC_CCE1_PF_STOP_SHIFT)
161*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_SHIFT	2
162*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_WIDTH	2
163*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_MASK		((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \
164*4882a593Smuzhiyun 					 << EASRC_CCE1_RS_INIT_SHIFT)
165*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT(v)		(((v) << EASRC_CCE1_RS_INIT_SHIFT) \
166*4882a593Smuzhiyun 					 & EASRC_CCE1_RS_INIT_MASK)
167*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_SHIFT	0
168*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_WIDTH	2
169*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_MASK		((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \
170*4882a593Smuzhiyun 					 << EASRC_CCE1_PF_INIT_SHIFT)
171*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT(v)		(((v) << EASRC_CCE1_PF_INIT_SHIFT) \
172*4882a593Smuzhiyun 					 & EASRC_CCE1_PF_INIT_MASK)
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun /* ASRC Context Control Extended 2 (CCE2) */
175*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_SHIFT	16
176*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_WIDTH	9
177*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_MASK	((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \
178*4882a593Smuzhiyun 					 << EASRC_CCE2_ST2_TAPS_SHIFT)
179*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS(v)		(((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \
180*4882a593Smuzhiyun 					 & EASRC_CCE2_ST2_TAPS_MASK)
181*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_SHIFT	0
182*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_WIDTH	9
183*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_MASK	((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \
184*4882a593Smuzhiyun 					 << EASRC_CCE2_ST1_TAPS_SHIFT)
185*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS(v)		(((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \
186*4882a593Smuzhiyun 					 & EASRC_CCE2_ST1_TAPS_MASK)
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /* ASRC Control Input Access (CIA) */
189*4882a593Smuzhiyun #define EASRC_CIA_ITER_SHIFT		16
190*4882a593Smuzhiyun #define EASRC_CIA_ITER_WIDTH		6
191*4882a593Smuzhiyun #define EASRC_CIA_ITER_MASK		((BIT(EASRC_CIA_ITER_WIDTH) - 1) \
192*4882a593Smuzhiyun 					 << EASRC_CIA_ITER_SHIFT)
193*4882a593Smuzhiyun #define EASRC_CIA_ITER(v)		(((v) << EASRC_CIA_ITER_SHIFT) \
194*4882a593Smuzhiyun 					 & EASRC_CIA_ITER_MASK)
195*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_SHIFT		8
196*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_WIDTH		6
197*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_MASK		((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \
198*4882a593Smuzhiyun 					 << EASRC_CIA_GRLEN_SHIFT)
199*4882a593Smuzhiyun #define EASRC_CIA_GRLEN(v)		(((v) << EASRC_CIA_GRLEN_SHIFT) \
200*4882a593Smuzhiyun 					 & EASRC_CIA_GRLEN_MASK)
201*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_SHIFT		0
202*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_WIDTH		6
203*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_MASK		((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \
204*4882a593Smuzhiyun 					 << EASRC_CIA_ACCLEN_SHIFT)
205*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN(v)		(((v) << EASRC_CIA_ACCLEN_SHIFT) \
206*4882a593Smuzhiyun 					 & EASRC_CIA_ACCLEN_MASK)
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register0 (DPCS0R0) */
209*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_SHIFT	24
210*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_WIDTH	5
211*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_MASK	((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \
212*4882a593Smuzhiyun 					 << EASRC_DPCS0R0_MAXCH_SHIFT)
213*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH(v)		(((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \
214*4882a593Smuzhiyun 					 & EASRC_DPCS0R0_MAXCH_MASK)
215*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_SHIFT	16
216*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_WIDTH	5
217*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_MASK	((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \
218*4882a593Smuzhiyun 					 << EASRC_DPCS0R0_MINCH_SHIFT)
219*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH(v)		(((v) << EASRC_DPCS0R0_MINCH_SHIFT) \
220*4882a593Smuzhiyun 					 & EASRC_DPCS0R0_MINCH_MASK)
221*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_SHIFT	8
222*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_WIDTH	5
223*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_MASK	((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \
224*4882a593Smuzhiyun 					 << EASRC_DPCS0R0_NUMCH_SHIFT)
225*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH(v)		(((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \
226*4882a593Smuzhiyun 					 & EASRC_DPCS0R0_NUMCH_MASK)
227*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_SHIFT	1
228*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_WIDTH	2
229*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_MASK	((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \
230*4882a593Smuzhiyun 					 << EASRC_DPCS0R0_CTXNUM_SHIFT)
231*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM(v)		(((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \
232*4882a593Smuzhiyun 					 & EASRC_DPCS0R0_CTXNUM_MASK)
233*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN_SHIFT		0
234*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN_MASK		BIT(EASRC_DPCS0R0_EN_SHIFT)
235*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN		BIT(EASRC_DPCS0R0_EN_SHIFT)
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register1 (DPCS0R1) */
238*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_SHIFT	0
239*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_WIDTH	13
240*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_MASK	((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \
241*4882a593Smuzhiyun 					 << EASRC_DPCS0R1_ST1_EXP_SHIFT)
242*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP(v)	(((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \
243*4882a593Smuzhiyun 					 & EASRC_DPCS0R1_ST1_EXP_MASK)
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register2 (DPCS0R2) */
246*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_SHIFT	16
247*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_WIDTH	13
248*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_MASK	((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \
249*4882a593Smuzhiyun 					 << EASRC_DPCS0R2_ST1_MA_SHIFT)
250*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA(v)		(((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \
251*4882a593Smuzhiyun 					 & EASRC_DPCS0R2_ST1_MA_MASK)
252*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_SHIFT	0
253*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_WIDTH	13
254*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_MASK	((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \
255*4882a593Smuzhiyun 					 << EASRC_DPCS0R2_ST1_SA_SHIFT)
256*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA(v)		(((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \
257*4882a593Smuzhiyun 					 & EASRC_DPCS0R2_ST1_SA_MASK)
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register3 (DPCS0R3) */
260*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_SHIFT	16
261*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_WIDTH	13
262*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_MASK	((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \
263*4882a593Smuzhiyun 					 << EASRC_DPCS0R3_ST2_MA_SHIFT)
264*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA(v)		(((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \
265*4882a593Smuzhiyun 					 & EASRC_DPCS0R3_ST2_MA_MASK)
266*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_SHIFT	0
267*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_WIDTH	13
268*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_MASK	((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \
269*4882a593Smuzhiyun 					 << EASRC_DPCS0R3_ST2_SA_SHIFT)
270*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA(v)		(((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \
271*4882a593Smuzhiyun 						 & EASRC_DPCS0R3_ST2_SA_MASK)
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun /* ASRC Context Output Control (COC) */
274*4882a593Smuzhiyun #define EASRC_COC_FWMDE_SHIFT		28
275*4882a593Smuzhiyun #define EASRC_COC_FWMDE_MASK		BIT(EASRC_COC_FWMDE_SHIFT)
276*4882a593Smuzhiyun #define EASRC_COC_FWMDE			BIT(EASRC_COC_FWMDE_SHIFT)
277*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_SHIFT	16
278*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_WIDTH	7
279*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_MASK	((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \
280*4882a593Smuzhiyun 					 << EASRC_COC_FIFO_WTMK_SHIFT)
281*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK(v)		(((v) << EASRC_COC_FIFO_WTMK_SHIFT) \
282*4882a593Smuzhiyun 					 & EASRC_COC_FIFO_WTMK_MASK)
283*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_SHIFT	11
284*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_WIDTH	5
285*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_MASK	((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \
286*4882a593Smuzhiyun 					 << EASRC_COC_SAMPLE_POS_SHIFT)
287*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS(v)		(((v) << EASRC_COC_SAMPLE_POS_SHIFT) \
288*4882a593Smuzhiyun 					 & EASRC_COC_SAMPLE_POS_MASK)
289*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS_SHIFT	10
290*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS_MASK	BIT(EASRC_COC_ENDIANNESS_SHIFT)
291*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS		BIT(EASRC_COC_ENDIANNESS_SHIFT)
292*4882a593Smuzhiyun #define EASRC_COC_BPS_SHIFT		8
293*4882a593Smuzhiyun #define EASRC_COC_BPS_WIDTH		2
294*4882a593Smuzhiyun #define EASRC_COC_BPS_MASK		((BIT(EASRC_COC_BPS_WIDTH) - 1) \
295*4882a593Smuzhiyun 					 << EASRC_COC_BPS_SHIFT)
296*4882a593Smuzhiyun #define EASRC_COC_BPS(v)		(((v) << EASRC_COC_BPS_SHIFT) \
297*4882a593Smuzhiyun 					 & EASRC_COC_BPS_MASK)
298*4882a593Smuzhiyun #define EASRC_COC_FMT_SHIFT		7
299*4882a593Smuzhiyun #define EASRC_COC_FMT_MASK		BIT(EASRC_COC_FMT_SHIFT)
300*4882a593Smuzhiyun #define EASRC_COC_FMT			BIT(EASRC_COC_FMT_SHIFT)
301*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_SHIFT		6
302*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_MASK		BIT(EASRC_COC_OUTSIGN_SHIFT)
303*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_OUT		BIT(EASRC_COC_OUTSIGN_SHIFT)
304*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA_SHIFT	2
305*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA_MASK	BIT(EASRC_COC_IEC_VDATA_SHIFT)
306*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA		BIT(EASRC_COC_IEC_VDATA_SHIFT)
307*4882a593Smuzhiyun #define EASRC_COC_IEC_EN_SHIFT		1
308*4882a593Smuzhiyun #define EASRC_COC_IEC_EN_MASK		BIT(EASRC_COC_IEC_EN_SHIFT)
309*4882a593Smuzhiyun #define EASRC_COC_IEC_EN		BIT(EASRC_COC_IEC_EN_SHIFT)
310*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN_SHIFT	0
311*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN_MASK	BIT(EASRC_COC_DITHER_EN_SHIFT)
312*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN		BIT(EASRC_COC_DITHER_EN_SHIFT)
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun /* ASRC Control Output Access (COA) */
315*4882a593Smuzhiyun #define EASRC_COA_ITER_SHIFT		16
316*4882a593Smuzhiyun #define EASRC_COA_ITER_WIDTH		6
317*4882a593Smuzhiyun #define EASRC_COA_ITER_MASK		((BIT(EASRC_COA_ITER_WIDTH) - 1) \
318*4882a593Smuzhiyun 					 << EASRC_COA_ITER_SHIFT)
319*4882a593Smuzhiyun #define EASRC_COA_ITER(v)		(((v) << EASRC_COA_ITER_SHIFT) \
320*4882a593Smuzhiyun 					 & EASRC_COA_ITER_MASK)
321*4882a593Smuzhiyun #define EASRC_COA_GRLEN_SHIFT		8
322*4882a593Smuzhiyun #define EASRC_COA_GRLEN_WIDTH		6
323*4882a593Smuzhiyun #define EASRC_COA_GRLEN_MASK		((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \
324*4882a593Smuzhiyun 					 << EASRC_COA_GRLEN_SHIFT)
325*4882a593Smuzhiyun #define EASRC_COA_GRLEN(v)		(((v) << EASRC_COA_GRLEN_SHIFT) \
326*4882a593Smuzhiyun 					 & EASRC_COA_GRLEN_MASK)
327*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_SHIFT		0
328*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_WIDTH		6
329*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_MASK		((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \
330*4882a593Smuzhiyun 					 << EASRC_COA_ACCLEN_SHIFT)
331*4882a593Smuzhiyun #define EASRC_COA_ACCLEN(v)		(((v) << EASRC_COA_ACCLEN_SHIFT) \
332*4882a593Smuzhiyun 					 & EASRC_COA_ACCLEN_MASK)
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun /* ASRC Sample FIFO Status (SFS) */
335*4882a593Smuzhiyun #define EASRC_SFS_IWTMK_SHIFT		23
336*4882a593Smuzhiyun #define EASRC_SFS_IWTMK_MASK		BIT(EASRC_SFS_IWTMK_SHIFT)
337*4882a593Smuzhiyun #define EASRC_SFS_IWTMK			BIT(EASRC_SFS_IWTMK_SHIFT)
338*4882a593Smuzhiyun #define EASRC_SFS_NSGI_SHIFT		16
339*4882a593Smuzhiyun #define EASRC_SFS_NSGI_WIDTH		7
340*4882a593Smuzhiyun #define EASRC_SFS_NSGI_MASK		((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \
341*4882a593Smuzhiyun 					 << EASRC_SFS_NSGI_SHIFT)
342*4882a593Smuzhiyun #define EASRC_SFS_NSGI(v)		(((v) << EASRC_SFS_NSGI_SHIFT) \
343*4882a593Smuzhiyun 					 & EASRC_SFS_NSGI_MASK)
344*4882a593Smuzhiyun #define EASRC_SFS_OWTMK_SHIFT		7
345*4882a593Smuzhiyun #define EASRC_SFS_OWTMK_MASK		BIT(EASRC_SFS_OWTMK_SHIFT)
346*4882a593Smuzhiyun #define EASRC_SFS_OWTMK			BIT(EASRC_SFS_OWTMK_SHIFT)
347*4882a593Smuzhiyun #define EASRC_SFS_NSGO_SHIFT		0
348*4882a593Smuzhiyun #define EASRC_SFS_NSGO_WIDTH		7
349*4882a593Smuzhiyun #define EASRC_SFS_NSGO_MASK		((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \
350*4882a593Smuzhiyun 					 << EASRC_SFS_NSGO_SHIFT)
351*4882a593Smuzhiyun #define EASRC_SFS_NSGO(v)		(((v) << EASRC_SFS_NSGO_SHIFT) \
352*4882a593Smuzhiyun 					 & EASRC_SFS_NSGO_MASK)
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun /* ASRC Resampling Ratio Low (RRL) */
355*4882a593Smuzhiyun #define EASRC_RRL_RS_RL_SHIFT		0
356*4882a593Smuzhiyun #define EASRC_RRL_RS_RL_WIDTH		32
357*4882a593Smuzhiyun #define EASRC_RRL_RS_RL(v)		((v) << EASRC_RRL_RS_RL_SHIFT)
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun /* ASRC Resampling Ratio High (RRH) */
360*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD_SHIFT		31
361*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD_MASK		BIT(EASRC_RRH_RS_VLD_SHIFT)
362*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD		BIT(EASRC_RRH_RS_VLD_SHIFT)
363*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_SHIFT		0
364*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_WIDTH		12
365*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_MASK		((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \
366*4882a593Smuzhiyun 					 << EASRC_RRH_RS_RH_SHIFT)
367*4882a593Smuzhiyun #define EASRC_RRH_RS_RH(v)		(((v) << EASRC_RRH_RS_RH_SHIFT) \
368*4882a593Smuzhiyun 					 & EASRC_RRH_RS_RH_MASK)
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Control (RSUC) */
371*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM_SHIFT		0
372*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM_WIDTH		32
373*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM(v)		((v) << EASRC_RSUC_RS_RM_SHIFT)
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Rate (RRUR) */
376*4882a593Smuzhiyun #define EASRC_RRUR_RRR_SHIFT		0
377*4882a593Smuzhiyun #define EASRC_RRUR_RRR_WIDTH		31
378*4882a593Smuzhiyun #define EASRC_RRUR_RRR_MASK		((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \
379*4882a593Smuzhiyun 					 << EASRC_RRUR_RRR_SHIFT)
380*4882a593Smuzhiyun #define EASRC_RRUR_RRR(v)		(((v) << EASRC_RRUR_RRR_SHIFT) \
381*4882a593Smuzhiyun 					 & EASRC_RRUR_RRR_MASK)
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient Low (RCTCL) */
384*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL_SHIFT		0
385*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL_WIDTH		32
386*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL(v)		((v) << EASRC_RCTCL_RS_CL_SHIFT)
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient High (RCTCH) */
389*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH_SHIFT		0
390*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH_WIDTH		32
391*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH(v)		((v) << EASRC_RCTCH_RS_CH_SHIFT)
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun /* ASRC Prefilter Coefficient FIFO (PCF) */
394*4882a593Smuzhiyun #define EASRC_PCF_CD_SHIFT		0
395*4882a593Smuzhiyun #define EASRC_PCF_CD_WIDTH		32
396*4882a593Smuzhiyun #define EASRC_PCF_CD(v)			((v) << EASRC_PCF_CD_SHIFT)
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Memory (CRCM) */
399*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD_SHIFT		0
400*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD_WIDTH		32
401*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD(v)		((v) << EASRC_CRCM_RS_CWD_SHIFT)
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Control (CRCC) */
404*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_SHIFT		16
405*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_WIDTH		11
406*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_MASK		((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \
407*4882a593Smuzhiyun 					 << EASRC_CRCC_RS_CA_SHIFT)
408*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA(v)		(((v) << EASRC_CRCC_RS_CA_SHIFT) \
409*4882a593Smuzhiyun 					 & EASRC_CRCC_RS_CA_MASK)
410*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_SHIFT	1
411*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_WIDTH	2
412*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_MASK		((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \
413*4882a593Smuzhiyun 					 << EASRC_CRCC_RS_TAPS_SHIFT)
414*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS(v)		(((v) << EASRC_CRCC_RS_TAPS_SHIFT) \
415*4882a593Smuzhiyun 					 & EASRC_CRCC_RS_TAPS_MASK)
416*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR_SHIFT		0
417*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR_MASK		BIT(EASRC_CRCC_RS_CPR_SHIFT)
418*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR		BIT(EASRC_CRCC_RS_CPR_SHIFT)
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun /* ASRC Interrupt_Control (IC) */
421*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_SHIFT		8
422*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_WIDTH		4
423*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_MASK		((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \
424*4882a593Smuzhiyun 					 << EASRC_IRQC_RSDM_SHIFT)
425*4882a593Smuzhiyun #define EASRC_IRQC_RSDM(v)		(((v) << EASRC_IRQC_RSDM_SHIFT) \
426*4882a593Smuzhiyun 					 & EASRC_IRQC_RSDM_MASK)
427*4882a593Smuzhiyun #define EASRC_IRQC_OERM_SHIFT		4
428*4882a593Smuzhiyun #define EASRC_IRQC_OERM_WIDTH		4
429*4882a593Smuzhiyun #define EASRC_IRQC_OERM_MASK		((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \
430*4882a593Smuzhiyun 					 << EASRC_IRQC_OERM_SHIFT)
431*4882a593Smuzhiyun #define EASRC_IRQC_OERM(v)		(((v) << EASRC_IRQC_OERM_SHIFT) \
432*4882a593Smuzhiyun 					 & EASRC_IEQC_OERM_MASK)
433*4882a593Smuzhiyun #define EASRC_IRQC_IOM_SHIFT		0
434*4882a593Smuzhiyun #define EASRC_IRQC_IOM_WIDTH		4
435*4882a593Smuzhiyun #define EASRC_IRQC_IOM_MASK		((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \
436*4882a593Smuzhiyun 					 << EASRC_IRQC_IOM_SHIFT)
437*4882a593Smuzhiyun #define EASRC_IRQC_IOM(v)		(((v) << EASRC_IRQC_IOM_SHIFT) \
438*4882a593Smuzhiyun 					 & EASRC_IRQC_IOM_MASK)
439*4882a593Smuzhiyun 
440*4882a593Smuzhiyun /* ASRC Interrupt Status Flags (ISF) */
441*4882a593Smuzhiyun #define EASRC_IRQF_RSD_SHIFT		8
442*4882a593Smuzhiyun #define EASRC_IRQF_RSD_WIDTH		4
443*4882a593Smuzhiyun #define EASRC_IRQF_RSD_MASK		((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \
444*4882a593Smuzhiyun 					 << EASRC_IRQF_RSD_SHIFT)
445*4882a593Smuzhiyun #define EASRC_IRQF_RSD(v)		(((v) << EASRC_IRQF_RSD_SHIFT) \
446*4882a593Smuzhiyun 					 & EASRC_IRQF_RSD_MASK)
447*4882a593Smuzhiyun #define EASRC_IRQF_OER_SHIFT		4
448*4882a593Smuzhiyun #define EASRC_IRQF_OER_WIDTH		4
449*4882a593Smuzhiyun #define EASRC_IRQF_OER_MASK		((BIT(EASRC_IRQF_OER_WIDTH) - 1) \
450*4882a593Smuzhiyun 					 << EASRC_IRQF_OER_SHIFT)
451*4882a593Smuzhiyun #define EASRC_IRQF_OER(v)		(((v) << EASRC_IRQF_OER_SHIFT) \
452*4882a593Smuzhiyun 					 & EASRC_IRQF_OER_MASK)
453*4882a593Smuzhiyun #define EASRC_IRQF_IFO_SHIFT		0
454*4882a593Smuzhiyun #define EASRC_IRQF_IFO_WIDTH		4
455*4882a593Smuzhiyun #define EASRC_IRQF_IFO_MASK		((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \
456*4882a593Smuzhiyun 					 << EASRC_IRQF_IFO_SHIFT)
457*4882a593Smuzhiyun #define EASRC_IRQF_IFO(v)		(((v) << EASRC_IRQF_IFO_SHIFT) \
458*4882a593Smuzhiyun 					 & EASRC_IRQF_IFO_MASK)
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun /* ASRC Context Channel STAT */
461*4882a593Smuzhiyun #define EASRC_CSx_CSx_SHIFT		0
462*4882a593Smuzhiyun #define EASRC_CSx_CSx_WIDTH		32
463*4882a593Smuzhiyun #define EASRC_CSx_CSx(v)		((v) << EASRC_CSx_CSx_SHIFT)
464*4882a593Smuzhiyun 
465*4882a593Smuzhiyun /* ASRC Debug Control Register */
466*4882a593Smuzhiyun #define EASRC_DBGC_DMS_SHIFT		0
467*4882a593Smuzhiyun #define EASRC_DBGC_DMS_WIDTH		6
468*4882a593Smuzhiyun #define EASRC_DBGC_DMS_MASK		((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \
469*4882a593Smuzhiyun 					 << EASRC_DBGC_DMS_SHIFT)
470*4882a593Smuzhiyun #define EASRC_DBGC_DMS(v)		(((v) << EASRC_DBGC_DMS_SHIFT) \
471*4882a593Smuzhiyun 					 & EASRC_DBGC_DMS_MASK)
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun /* ASRC Debug Status Register */
474*4882a593Smuzhiyun #define EASRC_DBGS_DS_SHIFT		0
475*4882a593Smuzhiyun #define EASRC_DBGS_DS_WIDTH		32
476*4882a593Smuzhiyun #define EASRC_DBGS_DS(v)		((v) << EASRC_DBGS_DS_SHIFT)
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun /* General Constants */
479*4882a593Smuzhiyun #define EASRC_CTX_MAX_NUM		4
480*4882a593Smuzhiyun #define EASRC_RS_COEFF_MEM		0
481*4882a593Smuzhiyun #define EASRC_PF_COEFF_MEM		1
482*4882a593Smuzhiyun 
483*4882a593Smuzhiyun /* Prefilter constants */
484*4882a593Smuzhiyun #define EASRC_PF_ST1_ONLY		0
485*4882a593Smuzhiyun #define EASRC_PF_TWO_STAGE_MODE		1
486*4882a593Smuzhiyun #define EASRC_PF_ST1_COEFF_WR		0
487*4882a593Smuzhiyun #define EASRC_PF_ST2_COEFF_WR		1
488*4882a593Smuzhiyun #define EASRC_MAX_PF_TAPS		384
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun /* Resampling constants */
491*4882a593Smuzhiyun #define EASRC_RS_32_TAPS		0
492*4882a593Smuzhiyun #define EASRC_RS_64_TAPS		1
493*4882a593Smuzhiyun #define EASRC_RS_128_TAPS		2
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun /* Initialization mode */
496*4882a593Smuzhiyun #define EASRC_INIT_MODE_SW_CONTROL	0
497*4882a593Smuzhiyun #define EASRC_INIT_MODE_REPLICATE	1
498*4882a593Smuzhiyun #define EASRC_INIT_MODE_ZERO_FILL	2
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun /* FIFO watermarks */
501*4882a593Smuzhiyun #define FSL_EASRC_INPUTFIFO_WML		0x4
502*4882a593Smuzhiyun #define FSL_EASRC_OUTPUTFIFO_WML	0x1
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun #define EASRC_INPUTFIFO_THRESHOLD_MIN	0
505*4882a593Smuzhiyun #define EASRC_INPUTFIFO_THRESHOLD_MAX	127
506*4882a593Smuzhiyun #define EASRC_OUTPUTFIFO_THRESHOLD_MIN	0
507*4882a593Smuzhiyun #define EASRC_OUTPUTFIFO_THRESHOLD_MAX	63
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun #define EASRC_DMA_BUFFER_SIZE		(1024 * 48 * 9)
510*4882a593Smuzhiyun #define EASRC_MAX_BUFFER_SIZE		(1024 * 48)
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun #define FIRMWARE_MAGIC			0xDEAD
513*4882a593Smuzhiyun #define FIRMWARE_VERSION		1
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun #define PREFILTER_MEM_LEN		0x1800
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun enum easrc_word_width {
518*4882a593Smuzhiyun 	EASRC_WIDTH_16_BIT = 0,
519*4882a593Smuzhiyun 	EASRC_WIDTH_20_BIT = 1,
520*4882a593Smuzhiyun 	EASRC_WIDTH_24_BIT = 2,
521*4882a593Smuzhiyun 	EASRC_WIDTH_32_BIT = 3,
522*4882a593Smuzhiyun };
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun struct __attribute__((__packed__))  asrc_firmware_hdr {
525*4882a593Smuzhiyun 	u32 magic;
526*4882a593Smuzhiyun 	u32 interp_scen;
527*4882a593Smuzhiyun 	u32 prefil_scen;
528*4882a593Smuzhiyun 	u32 firmware_version;
529*4882a593Smuzhiyun };
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun struct __attribute__((__packed__)) interp_params {
532*4882a593Smuzhiyun 	u32 magic;
533*4882a593Smuzhiyun 	u32 num_taps;
534*4882a593Smuzhiyun 	u32 num_phases;
535*4882a593Smuzhiyun 	u64 center_tap;
536*4882a593Smuzhiyun 	u64 coeff[8192];
537*4882a593Smuzhiyun };
538*4882a593Smuzhiyun 
539*4882a593Smuzhiyun struct __attribute__((__packed__)) prefil_params {
540*4882a593Smuzhiyun 	u32 magic;
541*4882a593Smuzhiyun 	u32 insr;
542*4882a593Smuzhiyun 	u32 outsr;
543*4882a593Smuzhiyun 	u32 st1_taps;
544*4882a593Smuzhiyun 	u32 st2_taps;
545*4882a593Smuzhiyun 	u32 st1_exp;
546*4882a593Smuzhiyun 	u64 coeff[256];
547*4882a593Smuzhiyun };
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun struct dma_block {
550*4882a593Smuzhiyun 	void *dma_vaddr;
551*4882a593Smuzhiyun 	unsigned int length;
552*4882a593Smuzhiyun 	unsigned int max_buf_size;
553*4882a593Smuzhiyun };
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun struct fsl_easrc_data_fmt {
556*4882a593Smuzhiyun 	unsigned int width : 2;
557*4882a593Smuzhiyun 	unsigned int endianness : 1;
558*4882a593Smuzhiyun 	unsigned int unsign : 1;
559*4882a593Smuzhiyun 	unsigned int floating_point : 1;
560*4882a593Smuzhiyun 	unsigned int iec958: 1;
561*4882a593Smuzhiyun 	unsigned int sample_pos: 5;
562*4882a593Smuzhiyun 	unsigned int addexp;
563*4882a593Smuzhiyun };
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun struct fsl_easrc_io_params {
566*4882a593Smuzhiyun 	struct fsl_easrc_data_fmt fmt;
567*4882a593Smuzhiyun 	unsigned int group_len;
568*4882a593Smuzhiyun 	unsigned int iterations;
569*4882a593Smuzhiyun 	unsigned int access_len;
570*4882a593Smuzhiyun 	unsigned int fifo_wtmk;
571*4882a593Smuzhiyun 	unsigned int sample_rate;
572*4882a593Smuzhiyun 	snd_pcm_format_t sample_format;
573*4882a593Smuzhiyun 	unsigned int norm_rate;
574*4882a593Smuzhiyun };
575*4882a593Smuzhiyun 
576*4882a593Smuzhiyun struct fsl_easrc_slot {
577*4882a593Smuzhiyun 	bool busy;
578*4882a593Smuzhiyun 	int ctx_index;
579*4882a593Smuzhiyun 	int slot_index;
580*4882a593Smuzhiyun 	int num_channel;  /* maximum is 8 */
581*4882a593Smuzhiyun 	int min_channel;
582*4882a593Smuzhiyun 	int max_channel;
583*4882a593Smuzhiyun 	int pf_mem_used;
584*4882a593Smuzhiyun };
585*4882a593Smuzhiyun 
586*4882a593Smuzhiyun /**
587*4882a593Smuzhiyun  * fsl_easrc_ctx_priv: EASRC context private data
588*4882a593Smuzhiyun  *
589*4882a593Smuzhiyun  * @in_params: input parameter
590*4882a593Smuzhiyun  * @out_params:  output parameter
591*4882a593Smuzhiyun  * @st1_num_taps: tap number of stage 1
592*4882a593Smuzhiyun  * @st2_num_taps: tap number of stage 2
593*4882a593Smuzhiyun  * @st1_num_exp: exponent number of stage 1
594*4882a593Smuzhiyun  * @pf_init_mode: prefilter init mode
595*4882a593Smuzhiyun  * @rs_init_mode:  resample filter init mode
596*4882a593Smuzhiyun  * @ctx_streams: stream flag of ctx
597*4882a593Smuzhiyun  * @rs_ratio: resampler ratio
598*4882a593Smuzhiyun  * @st1_coeff: pointer of stage 1 coeff
599*4882a593Smuzhiyun  * @st2_coeff: pointer of stage 2 coeff
600*4882a593Smuzhiyun  * @in_filled_sample: input filled sample
601*4882a593Smuzhiyun  * @out_missed_sample: sample missed in output
602*4882a593Smuzhiyun  * @st1_addexp: exponent added for stage1
603*4882a593Smuzhiyun  * @st2_addexp: exponent added for stage2
604*4882a593Smuzhiyun  */
605*4882a593Smuzhiyun struct fsl_easrc_ctx_priv {
606*4882a593Smuzhiyun 	struct fsl_easrc_io_params in_params;
607*4882a593Smuzhiyun 	struct fsl_easrc_io_params out_params;
608*4882a593Smuzhiyun 	unsigned int st1_num_taps;
609*4882a593Smuzhiyun 	unsigned int st2_num_taps;
610*4882a593Smuzhiyun 	unsigned int st1_num_exp;
611*4882a593Smuzhiyun 	unsigned int pf_init_mode;
612*4882a593Smuzhiyun 	unsigned int rs_init_mode;
613*4882a593Smuzhiyun 	unsigned int ctx_streams;
614*4882a593Smuzhiyun 	u64 rs_ratio;
615*4882a593Smuzhiyun 	u64 *st1_coeff;
616*4882a593Smuzhiyun 	u64 *st2_coeff;
617*4882a593Smuzhiyun 	int in_filled_sample;
618*4882a593Smuzhiyun 	int out_missed_sample;
619*4882a593Smuzhiyun 	int st1_addexp;
620*4882a593Smuzhiyun 	int st2_addexp;
621*4882a593Smuzhiyun };
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun /**
624*4882a593Smuzhiyun  * fsl_easrc_priv: EASRC private data
625*4882a593Smuzhiyun  *
626*4882a593Smuzhiyun  * @slot: slot setting
627*4882a593Smuzhiyun  * @firmware_hdr:  the header of firmware
628*4882a593Smuzhiyun  * @interp: pointer to interpolation filter coeff
629*4882a593Smuzhiyun  * @prefil: pointer to prefilter coeff
630*4882a593Smuzhiyun  * @fw: firmware of coeff table
631*4882a593Smuzhiyun  * @fw_name: firmware name
632*4882a593Smuzhiyun  * @rs_num_taps:  resample filter taps, 32, 64, or 128
633*4882a593Smuzhiyun  * @bps_iec958: bits per sample of iec958
634*4882a593Smuzhiyun  * @rs_coeff: resampler coefficient
635*4882a593Smuzhiyun  * @const_coeff: one tap prefilter coefficient
636*4882a593Smuzhiyun  * @firmware_loaded: firmware is loaded
637*4882a593Smuzhiyun  */
638*4882a593Smuzhiyun struct fsl_easrc_priv {
639*4882a593Smuzhiyun 	struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2];
640*4882a593Smuzhiyun 	struct asrc_firmware_hdr *firmware_hdr;
641*4882a593Smuzhiyun 	struct interp_params *interp;
642*4882a593Smuzhiyun 	struct prefil_params *prefil;
643*4882a593Smuzhiyun 	const struct firmware *fw;
644*4882a593Smuzhiyun 	const char *fw_name;
645*4882a593Smuzhiyun 	unsigned int rs_num_taps;
646*4882a593Smuzhiyun 	unsigned int bps_iec958[EASRC_CTX_MAX_NUM];
647*4882a593Smuzhiyun 	u64 *rs_coeff;
648*4882a593Smuzhiyun 	u64 const_coeff;
649*4882a593Smuzhiyun 	int firmware_loaded;
650*4882a593Smuzhiyun };
651*4882a593Smuzhiyun #endif /* _FSL_EASRC_H */
652