xref: /OK3568_Linux_fs/kernel/sound/soc/sirf/sirf-usp.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * arch/arm/mach-prima2/include/mach/sirfsoc_usp.h
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _SIRF_USP_H
9*4882a593Smuzhiyun #define _SIRF_USP_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /* USP Registers */
12*4882a593Smuzhiyun #define USP_MODE1		0x00
13*4882a593Smuzhiyun #define USP_MODE2		0x04
14*4882a593Smuzhiyun #define USP_TX_FRAME_CTRL	0x08
15*4882a593Smuzhiyun #define USP_RX_FRAME_CTRL	0x0C
16*4882a593Smuzhiyun #define USP_TX_RX_ENABLE	0x10
17*4882a593Smuzhiyun #define USP_INT_ENABLE		0x14
18*4882a593Smuzhiyun #define USP_INT_STATUS		0x18
19*4882a593Smuzhiyun #define USP_PIN_IO_DATA		0x1C
20*4882a593Smuzhiyun #define USP_RISC_DSP_MODE	0x20
21*4882a593Smuzhiyun #define USP_AYSNC_PARAM_REG	0x24
22*4882a593Smuzhiyun #define USP_IRDA_X_MODE_DIV	0x28
23*4882a593Smuzhiyun #define USP_SM_CFG		0x2C
24*4882a593Smuzhiyun #define USP_TX_DMA_IO_CTRL	0x100
25*4882a593Smuzhiyun #define USP_TX_DMA_IO_LEN	0x104
26*4882a593Smuzhiyun #define USP_TX_FIFO_CTRL	0x108
27*4882a593Smuzhiyun #define USP_TX_FIFO_LEVEL_CHK	0x10C
28*4882a593Smuzhiyun #define USP_TX_FIFO_OP		0x110
29*4882a593Smuzhiyun #define USP_TX_FIFO_STATUS	0x114
30*4882a593Smuzhiyun #define USP_TX_FIFO_DATA	0x118
31*4882a593Smuzhiyun #define USP_RX_DMA_IO_CTRL	0x120
32*4882a593Smuzhiyun #define USP_RX_DMA_IO_LEN	0x124
33*4882a593Smuzhiyun #define USP_RX_FIFO_CTRL	0x128
34*4882a593Smuzhiyun #define USP_RX_FIFO_LEVEL_CHK	0x12C
35*4882a593Smuzhiyun #define USP_RX_FIFO_OP		0x130
36*4882a593Smuzhiyun #define USP_RX_FIFO_STATUS	0x134
37*4882a593Smuzhiyun #define USP_RX_FIFO_DATA	0x138
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /* USP MODE register-1 */
40*4882a593Smuzhiyun #define USP_SYNC_MODE			0x00000001
41*4882a593Smuzhiyun #define USP_CLOCK_MODE_SLAVE		0x00000002
42*4882a593Smuzhiyun #define USP_LOOP_BACK_EN		0x00000004
43*4882a593Smuzhiyun #define USP_HPSIR_EN			0x00000008
44*4882a593Smuzhiyun #define USP_ENDIAN_CTRL_LSBF		0x00000010
45*4882a593Smuzhiyun #define USP_EN				0x00000020
46*4882a593Smuzhiyun #define USP_RXD_ACT_EDGE_FALLING	0x00000040
47*4882a593Smuzhiyun #define USP_TXD_ACT_EDGE_FALLING	0x00000080
48*4882a593Smuzhiyun #define USP_RFS_ACT_LEVEL_LOGIC1	0x00000100
49*4882a593Smuzhiyun #define USP_TFS_ACT_LEVEL_LOGIC1	0x00000200
50*4882a593Smuzhiyun #define USP_SCLK_IDLE_MODE_TOGGLE	0x00000400
51*4882a593Smuzhiyun #define USP_SCLK_IDLE_LEVEL_LOGIC1	0x00000800
52*4882a593Smuzhiyun #define USP_SCLK_PIN_MODE_IO	0x00001000
53*4882a593Smuzhiyun #define USP_RFS_PIN_MODE_IO	0x00002000
54*4882a593Smuzhiyun #define USP_TFS_PIN_MODE_IO	0x00004000
55*4882a593Smuzhiyun #define USP_RXD_PIN_MODE_IO	0x00008000
56*4882a593Smuzhiyun #define USP_TXD_PIN_MODE_IO	0x00010000
57*4882a593Smuzhiyun #define USP_SCLK_IO_MODE_INPUT	0x00020000
58*4882a593Smuzhiyun #define USP_RFS_IO_MODE_INPUT	0x00040000
59*4882a593Smuzhiyun #define USP_TFS_IO_MODE_INPUT	0x00080000
60*4882a593Smuzhiyun #define USP_RXD_IO_MODE_INPUT	0x00100000
61*4882a593Smuzhiyun #define USP_TXD_IO_MODE_INPUT	0x00200000
62*4882a593Smuzhiyun #define USP_IRDA_WIDTH_DIV_MASK	0x3FC00000
63*4882a593Smuzhiyun #define USP_IRDA_WIDTH_DIV_OFFSET	0
64*4882a593Smuzhiyun #define USP_IRDA_IDLE_LEVEL_HIGH	0x40000000
65*4882a593Smuzhiyun #define USP_TX_UFLOW_REPEAT_ZERO	0x80000000
66*4882a593Smuzhiyun #define USP_TX_ENDIAN_MODE		0x00000020
67*4882a593Smuzhiyun #define USP_RX_ENDIAN_MODE		0x00000020
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun /* USP Mode Register-2 */
70*4882a593Smuzhiyun #define USP_RXD_DELAY_LEN_MASK		0x000000FF
71*4882a593Smuzhiyun #define USP_RXD_DELAY_LEN_OFFSET	0
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #define USP_TXD_DELAY_LEN_MASK		0x0000FF00
74*4882a593Smuzhiyun #define USP_TXD_DELAY_LEN_OFFSET	8
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #define USP_ENA_CTRL_MODE		0x00010000
77*4882a593Smuzhiyun #define USP_FRAME_CTRL_MODE		0x00020000
78*4882a593Smuzhiyun #define USP_TFS_SOURCE_MODE             0x00040000
79*4882a593Smuzhiyun #define USP_TFS_MS_MODE                 0x00080000
80*4882a593Smuzhiyun #define USP_CLK_DIVISOR_MASK		0x7FE00000
81*4882a593Smuzhiyun #define USP_CLK_DIVISOR_OFFSET		21
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define USP_TFS_CLK_SLAVE_MODE		(1<<20)
84*4882a593Smuzhiyun #define USP_RFS_CLK_SLAVE_MODE		(1<<19)
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define USP_IRDA_DATA_WIDTH		0x80000000
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /* USP Transmit Frame Control Register */
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define USP_TXC_DATA_LEN_MASK		0x000000FF
91*4882a593Smuzhiyun #define USP_TXC_DATA_LEN_OFFSET		0
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define USP_TXC_SYNC_LEN_MASK		0x0000FF00
94*4882a593Smuzhiyun #define USP_TXC_SYNC_LEN_OFFSET		8
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #define USP_TXC_FRAME_LEN_MASK		0x00FF0000
97*4882a593Smuzhiyun #define USP_TXC_FRAME_LEN_OFFSET	16
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #define USP_TXC_SHIFTER_LEN_MASK	0x1F000000
100*4882a593Smuzhiyun #define USP_TXC_SHIFTER_LEN_OFFSET	24
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define USP_TXC_SLAVE_CLK_SAMPLE	0x20000000
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #define USP_TXC_CLK_DIVISOR_MASK	0xC0000000
105*4882a593Smuzhiyun #define USP_TXC_CLK_DIVISOR_OFFSET	30
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* USP Receive Frame Control Register */
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define USP_RXC_DATA_LEN_MASK		0x000000FF
110*4882a593Smuzhiyun #define USP_RXC_DATA_LEN_OFFSET		0
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define USP_RXC_FRAME_LEN_MASK		0x0000FF00
113*4882a593Smuzhiyun #define USP_RXC_FRAME_LEN_OFFSET	8
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun #define USP_RXC_SHIFTER_LEN_MASK	0x001F0000
116*4882a593Smuzhiyun #define USP_RXC_SHIFTER_LEN_OFFSET	16
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define USP_START_EDGE_MODE	0x00800000
119*4882a593Smuzhiyun #define USP_I2S_SYNC_CHG	0x00200000
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #define USP_RXC_CLK_DIVISOR_MASK	0x0F000000
122*4882a593Smuzhiyun #define USP_RXC_CLK_DIVISOR_OFFSET	24
123*4882a593Smuzhiyun #define USP_SINGLE_SYNC_MODE		0x00400000
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* Tx - RX Enable Register */
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun #define USP_RX_ENA		0x00000001
128*4882a593Smuzhiyun #define USP_TX_ENA		0x00000002
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* USP Interrupt Enable and status Register */
131*4882a593Smuzhiyun #define USP_RX_DONE_INT			0x00000001
132*4882a593Smuzhiyun #define USP_TX_DONE_INT			0x00000002
133*4882a593Smuzhiyun #define USP_RX_OFLOW_INT		0x00000004
134*4882a593Smuzhiyun #define USP_TX_UFLOW_INT		0x00000008
135*4882a593Smuzhiyun #define USP_RX_IO_DMA_INT		0x00000010
136*4882a593Smuzhiyun #define USP_TX_IO_DMA_INT		0x00000020
137*4882a593Smuzhiyun #define USP_RXFIFO_FULL_INT		0x00000040
138*4882a593Smuzhiyun #define USP_TXFIFO_EMPTY_INT		0x00000080
139*4882a593Smuzhiyun #define USP_RXFIFO_THD_INT		0x00000100
140*4882a593Smuzhiyun #define USP_TXFIFO_THD_INT		0x00000200
141*4882a593Smuzhiyun #define USP_UART_FRM_ERR_INT		0x00000400
142*4882a593Smuzhiyun #define USP_RX_TIMEOUT_INT		0x00000800
143*4882a593Smuzhiyun #define USP_TX_ALLOUT_INT		0x00001000
144*4882a593Smuzhiyun #define USP_RXD_BREAK_INT		0x00008000
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /* All possible TX interruots */
147*4882a593Smuzhiyun #define USP_TX_INTERRUPT		(USP_TX_DONE_INT|USP_TX_UFLOW_INT|\
148*4882a593Smuzhiyun 					USP_TX_IO_DMA_INT|\
149*4882a593Smuzhiyun 					USP_TXFIFO_EMPTY_INT|\
150*4882a593Smuzhiyun 					USP_TXFIFO_THD_INT)
151*4882a593Smuzhiyun /* All possible RX interruots */
152*4882a593Smuzhiyun #define USP_RX_INTERRUPT		(USP_RX_DONE_INT|USP_RX_OFLOW_INT|\
153*4882a593Smuzhiyun 					USP_RX_IO_DMA_INT|\
154*4882a593Smuzhiyun 					USP_RXFIFO_FULL_INT|\
155*4882a593Smuzhiyun 					USP_RXFIFO_THD_INT|\
156*4882a593Smuzhiyun 					USP_RX_TIMEOUT_INT)
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun #define USP_INT_ALL        0x1FFF
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /* USP Pin I/O Data Register */
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun #define USP_RFS_PIN_VALUE_MASK	0x00000001
163*4882a593Smuzhiyun #define USP_TFS_PIN_VALUE_MASK	0x00000002
164*4882a593Smuzhiyun #define USP_RXD_PIN_VALUE_MASK	0x00000004
165*4882a593Smuzhiyun #define USP_TXD_PIN_VALUE_MASK	0x00000008
166*4882a593Smuzhiyun #define USP_SCLK_PIN_VALUE_MASK	0x00000010
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /* USP RISC/DSP Mode Register */
169*4882a593Smuzhiyun #define USP_RISC_DSP_SEL	0x00000001
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun /* USP ASYNC PARAMETER Register*/
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define USP_ASYNC_TIMEOUT_MASK	0x0000FFFF
174*4882a593Smuzhiyun #define USP_ASYNC_TIMEOUT_OFFSET	0
175*4882a593Smuzhiyun #define USP_ASYNC_TIMEOUT(x)	(((x)&USP_ASYNC_TIMEOUT_MASK) \
176*4882a593Smuzhiyun 				<<USP_ASYNC_TIMEOUT_OFFSET)
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun #define USP_ASYNC_DIV2_MASK		0x003F0000
179*4882a593Smuzhiyun #define USP_ASYNC_DIV2_OFFSET		16
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun /* USP TX DMA I/O MODE Register */
182*4882a593Smuzhiyun #define USP_TX_MODE_IO			0x00000001
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /* USP TX DMA I/O Length Register */
185*4882a593Smuzhiyun #define USP_TX_DATA_LEN_MASK		0xFFFFFFFF
186*4882a593Smuzhiyun #define USP_TX_DATA_LEN_OFFSET		0
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /* USP TX FIFO Control Register */
189*4882a593Smuzhiyun #define USP_TX_FIFO_WIDTH_MASK		0x00000003
190*4882a593Smuzhiyun #define USP_TX_FIFO_WIDTH_OFFSET	0
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun #define USP_TX_FIFO_THD_MASK		0x000001FC
193*4882a593Smuzhiyun #define USP_TX_FIFO_THD_OFFSET		2
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun /* USP TX FIFO Level Check Register */
196*4882a593Smuzhiyun #define USP_TX_FIFO_LEVEL_CHECK_MASK	0x1F
197*4882a593Smuzhiyun #define USP_TX_FIFO_SC_OFFSET	0
198*4882a593Smuzhiyun #define USP_TX_FIFO_LC_OFFSET	10
199*4882a593Smuzhiyun #define USP_TX_FIFO_HC_OFFSET	20
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun #define TX_FIFO_SC(x)		(((x) & USP_TX_FIFO_LEVEL_CHECK_MASK) \
202*4882a593Smuzhiyun 				<< USP_TX_FIFO_SC_OFFSET)
203*4882a593Smuzhiyun #define TX_FIFO_LC(x)		(((x) & USP_TX_FIFO_LEVEL_CHECK_MASK) \
204*4882a593Smuzhiyun 				<< USP_TX_FIFO_LC_OFFSET)
205*4882a593Smuzhiyun #define TX_FIFO_HC(x)		(((x) & USP_TX_FIFO_LEVEL_CHECK_MASK) \
206*4882a593Smuzhiyun 				<< USP_TX_FIFO_HC_OFFSET)
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun /* USP TX FIFO Operation Register */
209*4882a593Smuzhiyun #define USP_TX_FIFO_RESET		0x00000001
210*4882a593Smuzhiyun #define USP_TX_FIFO_START		0x00000002
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun /* USP TX FIFO Status Register */
213*4882a593Smuzhiyun #define USP_TX_FIFO_LEVEL_MASK		0x0000007F
214*4882a593Smuzhiyun #define USP_TX_FIFO_LEVEL_OFFSET	0
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define USP_TX_FIFO_FULL		0x00000080
217*4882a593Smuzhiyun #define USP_TX_FIFO_EMPTY		0x00000100
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun /* USP TX FIFO Data Register */
220*4882a593Smuzhiyun #define USP_TX_FIFO_DATA_MASK		0xFFFFFFFF
221*4882a593Smuzhiyun #define USP_TX_FIFO_DATA_OFFSET		0
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun /* USP RX DMA I/O MODE Register */
224*4882a593Smuzhiyun #define USP_RX_MODE_IO			0x00000001
225*4882a593Smuzhiyun #define USP_RX_DMA_FLUSH		0x00000004
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun /* USP RX DMA I/O Length Register */
228*4882a593Smuzhiyun #define USP_RX_DATA_LEN_MASK		0xFFFFFFFF
229*4882a593Smuzhiyun #define USP_RX_DATA_LEN_OFFSET		0
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /* USP RX FIFO Control Register */
232*4882a593Smuzhiyun #define USP_RX_FIFO_WIDTH_MASK		0x00000003
233*4882a593Smuzhiyun #define USP_RX_FIFO_WIDTH_OFFSET	0
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #define USP_RX_FIFO_THD_MASK		0x000001FC
236*4882a593Smuzhiyun #define USP_RX_FIFO_THD_OFFSET		2
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun /* USP RX FIFO Level Check Register */
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun #define USP_RX_FIFO_LEVEL_CHECK_MASK	0x1F
241*4882a593Smuzhiyun #define USP_RX_FIFO_SC_OFFSET	0
242*4882a593Smuzhiyun #define USP_RX_FIFO_LC_OFFSET	10
243*4882a593Smuzhiyun #define USP_RX_FIFO_HC_OFFSET	20
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun #define RX_FIFO_SC(x)		(((x) & USP_RX_FIFO_LEVEL_CHECK_MASK) \
246*4882a593Smuzhiyun 				<< USP_RX_FIFO_SC_OFFSET)
247*4882a593Smuzhiyun #define RX_FIFO_LC(x)		(((x) & USP_RX_FIFO_LEVEL_CHECK_MASK) \
248*4882a593Smuzhiyun 				<< USP_RX_FIFO_LC_OFFSET)
249*4882a593Smuzhiyun #define RX_FIFO_HC(x)		(((x) & USP_RX_FIFO_LEVEL_CHECK_MASK) \
250*4882a593Smuzhiyun 				<< USP_RX_FIFO_HC_OFFSET)
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /* USP RX FIFO Operation Register */
253*4882a593Smuzhiyun #define USP_RX_FIFO_RESET		0x00000001
254*4882a593Smuzhiyun #define USP_RX_FIFO_START		0x00000002
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun /* USP RX FIFO Status Register */
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun #define USP_RX_FIFO_LEVEL_MASK		0x0000007F
259*4882a593Smuzhiyun #define USP_RX_FIFO_LEVEL_OFFSET	0
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun #define USP_RX_FIFO_FULL		0x00000080
262*4882a593Smuzhiyun #define USP_RX_FIFO_EMPTY		0x00000100
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun /* USP RX FIFO Data Register */
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define USP_RX_FIFO_DATA_MASK		0xFFFFFFFF
267*4882a593Smuzhiyun #define USP_RX_FIFO_DATA_OFFSET		0
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun /*
270*4882a593Smuzhiyun  * When rx thd irq occur, sender just disable tx empty irq,
271*4882a593Smuzhiyun  * Remaining data in tx fifo wil also be sent out.
272*4882a593Smuzhiyun  */
273*4882a593Smuzhiyun #define USP_FIFO_SIZE			128
274*4882a593Smuzhiyun #define USP_TX_FIFO_THRESHOLD		(USP_FIFO_SIZE/2)
275*4882a593Smuzhiyun #define USP_RX_FIFO_THRESHOLD		(USP_FIFO_SIZE/2)
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun /* FIFO_WIDTH for the USP_TX_FIFO_CTRL and USP_RX_FIFO_CTRL registers */
278*4882a593Smuzhiyun #define USP_FIFO_WIDTH_BYTE  0x00
279*4882a593Smuzhiyun #define USP_FIFO_WIDTH_WORD  0x01
280*4882a593Smuzhiyun #define USP_FIFO_WIDTH_DWORD 0x02
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun #define USP_ASYNC_DIV2          16
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun #define USP_PLUGOUT_RETRY_CNT	2
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun #define USP_TX_RX_FIFO_WIDTH_DWORD    2
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun #define SIRF_USP_DIV_MCLK	0
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun #define SIRF_USP_I2S_TFS_SYNC	0
291*4882a593Smuzhiyun #define SIRF_USP_I2S_RFS_SYNC	1
292*4882a593Smuzhiyun #endif
293