1 /*
2  * ALSA SoC McASP Audio Layer for TI DAVINCI processor
3  *
4  * MCASP related definitions
5  *
6  * Author: Nirmal Pandey <n-pandey@ti.com>,
7  *         Suresh Rajashekara <suresh.r@ti.com>
8  *         Steve Chen <schen@.mvista.com>
9  *
10  * Copyright:   (C) 2009 MontaVista Software, Inc., <source@mvista.com>
11  * Copyright:   (C) 2009  Texas Instruments, India
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License version 2 as
15  * published by the Free Software Foundation.
16  */
17 
18 #ifndef DAVINCI_MCASP_H
19 #define DAVINCI_MCASP_H
20 
21 /*
22  * McASP register definitions
23  */
24 #define DAVINCI_MCASP_PID_REG		0x00
25 #define DAVINCI_MCASP_PWREMUMGT_REG	0x04
26 
27 #define DAVINCI_MCASP_PFUNC_REG		0x10
28 #define DAVINCI_MCASP_PDIR_REG		0x14
29 #define DAVINCI_MCASP_PDOUT_REG		0x18
30 #define DAVINCI_MCASP_PDSET_REG		0x1c
31 
32 #define DAVINCI_MCASP_PDCLR_REG		0x20
33 
34 #define DAVINCI_MCASP_TLGC_REG		0x30
35 #define DAVINCI_MCASP_TLMR_REG		0x34
36 
37 #define DAVINCI_MCASP_GBLCTL_REG	0x44
38 #define DAVINCI_MCASP_AMUTE_REG		0x48
39 #define DAVINCI_MCASP_LBCTL_REG		0x4c
40 
41 #define DAVINCI_MCASP_TXDITCTL_REG	0x50
42 
43 #define DAVINCI_MCASP_GBLCTLR_REG	0x60
44 #define DAVINCI_MCASP_RXMASK_REG	0x64
45 #define DAVINCI_MCASP_RXFMT_REG		0x68
46 #define DAVINCI_MCASP_RXFMCTL_REG	0x6c
47 
48 #define DAVINCI_MCASP_ACLKRCTL_REG	0x70
49 #define DAVINCI_MCASP_AHCLKRCTL_REG	0x74
50 #define DAVINCI_MCASP_RXTDM_REG		0x78
51 #define DAVINCI_MCASP_EVTCTLR_REG	0x7c
52 
53 #define DAVINCI_MCASP_RXSTAT_REG	0x80
54 #define DAVINCI_MCASP_RXTDMSLOT_REG	0x84
55 #define DAVINCI_MCASP_RXCLKCHK_REG	0x88
56 #define DAVINCI_MCASP_REVTCTL_REG	0x8c
57 
58 #define DAVINCI_MCASP_GBLCTLX_REG	0xa0
59 #define DAVINCI_MCASP_TXMASK_REG	0xa4
60 #define DAVINCI_MCASP_TXFMT_REG		0xa8
61 #define DAVINCI_MCASP_TXFMCTL_REG	0xac
62 
63 #define DAVINCI_MCASP_ACLKXCTL_REG	0xb0
64 #define DAVINCI_MCASP_AHCLKXCTL_REG	0xb4
65 #define DAVINCI_MCASP_TXTDM_REG		0xb8
66 #define DAVINCI_MCASP_EVTCTLX_REG	0xbc
67 
68 #define DAVINCI_MCASP_TXSTAT_REG	0xc0
69 #define DAVINCI_MCASP_TXTDMSLOT_REG	0xc4
70 #define DAVINCI_MCASP_TXCLKCHK_REG	0xc8
71 #define DAVINCI_MCASP_XEVTCTL_REG	0xcc
72 
73 /* Left(even TDM Slot) Channel Status Register File */
74 #define DAVINCI_MCASP_DITCSRA_REG	0x100
75 /* Right(odd TDM slot) Channel Status Register File */
76 #define DAVINCI_MCASP_DITCSRB_REG	0x118
77 /* Left(even TDM slot) User Data Register File */
78 #define DAVINCI_MCASP_DITUDRA_REG	0x130
79 /* Right(odd TDM Slot) User Data Register File */
80 #define DAVINCI_MCASP_DITUDRB_REG	0x148
81 
82 /* Serializer n Control Register */
83 #define DAVINCI_MCASP_XRSRCTL_BASE_REG	0x180
84 #define DAVINCI_MCASP_XRSRCTL_REG(n)	(DAVINCI_MCASP_XRSRCTL_BASE_REG + \
85 						(n << 2))
86 
87 /* Transmit Buffer for Serializer n */
88 #define DAVINCI_MCASP_TXBUF_REG(n)	(0x200 + (n << 2))
89 /* Receive Buffer for Serializer n */
90 #define DAVINCI_MCASP_RXBUF_REG(n)	(0x280 + (n << 2))
91 
92 /* McASP FIFO Registers */
93 #define DAVINCI_MCASP_V2_AFIFO_BASE	(0x1010)
94 #define DAVINCI_MCASP_V3_AFIFO_BASE	(0x1000)
95 
96 /* FIFO register offsets from AFIFO base */
97 #define MCASP_WFIFOCTL_OFFSET		(0x0)
98 #define MCASP_WFIFOSTS_OFFSET		(0x4)
99 #define MCASP_RFIFOCTL_OFFSET		(0x8)
100 #define MCASP_RFIFOSTS_OFFSET		(0xc)
101 
102 /*
103  * DAVINCI_MCASP_PWREMUMGT_REG - Power Down and Emulation Management
104  *     Register Bits
105  */
106 #define MCASP_FREE	BIT(0)
107 #define MCASP_SOFT	BIT(1)
108 
109 /*
110  * DAVINCI_MCASP_PFUNC_REG - Pin Function / GPIO Enable Register Bits
111  */
112 #define AXR(n)		(1<<n)
113 #define PFUNC_AMUTE	BIT(25)
114 #define ACLKX		BIT(26)
115 #define AHCLKX		BIT(27)
116 #define AFSX		BIT(28)
117 #define ACLKR		BIT(29)
118 #define AHCLKR		BIT(30)
119 #define AFSR		BIT(31)
120 
121 /*
122  * DAVINCI_MCASP_PDIR_REG - Pin Direction Register Bits
123  */
124 #define AXR(n)		(1<<n)
125 #define PDIR_AMUTE	BIT(25)
126 #define ACLKX		BIT(26)
127 #define AHCLKX		BIT(27)
128 #define AFSX		BIT(28)
129 #define ACLKR		BIT(29)
130 #define AHCLKR		BIT(30)
131 #define AFSR		BIT(31)
132 
133 /*
134  * DAVINCI_MCASP_TXDITCTL_REG - Transmit DIT Control Register Bits
135  */
136 #define DITEN	BIT(0)	/* Transmit DIT mode enable/disable */
137 #define VA	BIT(2)
138 #define VB	BIT(3)
139 
140 /*
141  * DAVINCI_MCASP_TXFMT_REG - Transmit Bitstream Format Register Bits
142  */
143 #define TXROT(val)	(val)
144 #define TXSEL		BIT(3)
145 #define TXSSZ(val)	(val<<4)
146 #define TXPBIT(val)	(val<<8)
147 #define TXPAD(val)	(val<<13)
148 #define TXORD		BIT(15)
149 #define FSXDLY(val)	(val<<16)
150 
151 /*
152  * DAVINCI_MCASP_RXFMT_REG - Receive Bitstream Format Register Bits
153  */
154 #define RXROT(val)	(val)
155 #define RXSEL		BIT(3)
156 #define RXSSZ(val)	(val<<4)
157 #define RXPBIT(val)	(val<<8)
158 #define RXPAD(val)	(val<<13)
159 #define RXORD		BIT(15)
160 #define FSRDLY(val)	(val<<16)
161 
162 /*
163  * DAVINCI_MCASP_TXFMCTL_REG -  Transmit Frame Control Register Bits
164  */
165 #define FSXPOL		BIT(0)
166 #define AFSXE		BIT(1)
167 #define FSXDUR		BIT(4)
168 #define FSXMOD(val)	(val<<7)
169 
170 /*
171  * DAVINCI_MCASP_RXFMCTL_REG - Receive Frame Control Register Bits
172  */
173 #define FSRPOL		BIT(0)
174 #define AFSRE		BIT(1)
175 #define FSRDUR		BIT(4)
176 #define FSRMOD(val)	(val<<7)
177 
178 /*
179  * DAVINCI_MCASP_ACLKXCTL_REG - Transmit Clock Control Register Bits
180  */
181 #define ACLKXDIV(val)	(val)
182 #define ACLKXE		BIT(5)
183 #define TX_ASYNC	BIT(6)
184 #define ACLKXPOL	BIT(7)
185 #define ACLKXDIV_MASK	0x1f
186 
187 /*
188  * DAVINCI_MCASP_ACLKRCTL_REG Receive Clock Control Register Bits
189  */
190 #define ACLKRDIV(val)	(val)
191 #define ACLKRE		BIT(5)
192 #define RX_ASYNC	BIT(6)
193 #define ACLKRPOL	BIT(7)
194 #define ACLKRDIV_MASK	0x1f
195 
196 /*
197  * DAVINCI_MCASP_AHCLKXCTL_REG - High Frequency Transmit Clock Control
198  *     Register Bits
199  */
200 #define AHCLKXDIV(val)	(val)
201 #define AHCLKXPOL	BIT(14)
202 #define AHCLKXE		BIT(15)
203 #define AHCLKXDIV_MASK	0xfff
204 
205 /*
206  * DAVINCI_MCASP_AHCLKRCTL_REG - High Frequency Receive Clock Control
207  *     Register Bits
208  */
209 #define AHCLKRDIV(val)	(val)
210 #define AHCLKRPOL	BIT(14)
211 #define AHCLKRE		BIT(15)
212 #define AHCLKRDIV_MASK	0xfff
213 
214 /*
215  * DAVINCI_MCASP_XRSRCTL_BASE_REG -  Serializer Control Register Bits
216  */
217 #define MODE(val)	(val)
218 #define DISMOD_3STATE	(0x0)
219 #define DISMOD_LOW	(0x2 << 2)
220 #define DISMOD_HIGH	(0x3 << 2)
221 #define DISMOD_MASK	DISMOD_HIGH
222 #define TXSTATE		BIT(4)
223 #define RXSTATE		BIT(5)
224 #define SRMOD_MASK	3
225 #define SRMOD_INACTIVE	0
226 
227 /*
228  * DAVINCI_MCASP_LBCTL_REG - Loop Back Control Register Bits
229  */
230 #define LBEN		BIT(0)
231 #define LBORD		BIT(1)
232 #define LBGENMODE(val)	(val<<2)
233 
234 /*
235  * DAVINCI_MCASP_TXTDMSLOT_REG - Transmit TDM Slot Register configuration
236  */
237 #define TXTDMS(n)	(1<<n)
238 
239 /*
240  * DAVINCI_MCASP_RXTDMSLOT_REG - Receive TDM Slot Register configuration
241  */
242 #define RXTDMS(n)	(1<<n)
243 
244 /*
245  * DAVINCI_MCASP_GBLCTL_REG -  Global Control Register Bits
246  */
247 #define RXCLKRST	BIT(0)	/* Receiver Clock Divider Reset */
248 #define RXHCLKRST	BIT(1)	/* Receiver High Frequency Clock Divider */
249 #define RXSERCLR	BIT(2)	/* Receiver Serializer Clear */
250 #define RXSMRST		BIT(3)	/* Receiver State Machine Reset */
251 #define RXFSRST		BIT(4)	/* Frame Sync Generator Reset */
252 #define TXCLKRST	BIT(8)	/* Transmitter Clock Divider Reset */
253 #define TXHCLKRST	BIT(9)	/* Transmitter High Frequency Clock Divider*/
254 #define TXSERCLR	BIT(10)	/* Transmit Serializer Clear */
255 #define TXSMRST		BIT(11)	/* Transmitter State Machine Reset */
256 #define TXFSRST		BIT(12)	/* Frame Sync Generator Reset */
257 
258 /*
259  * DAVINCI_MCASP_TXSTAT_REG - Transmitter Status Register Bits
260  * DAVINCI_MCASP_RXSTAT_REG - Receiver Status Register Bits
261  */
262 #define XRERR		BIT(8) /* Transmit/Receive error */
263 #define XRDATA		BIT(5) /* Transmit/Receive data ready */
264 
265 /*
266  * DAVINCI_MCASP_AMUTE_REG -  Mute Control Register Bits
267  */
268 #define MUTENA(val)	(val)
269 #define MUTEINPOL	BIT(2)
270 #define MUTEINENA	BIT(3)
271 #define MUTEIN		BIT(4)
272 #define MUTER		BIT(5)
273 #define MUTEX		BIT(6)
274 #define MUTEFSR		BIT(7)
275 #define MUTEFSX		BIT(8)
276 #define MUTEBADCLKR	BIT(9)
277 #define MUTEBADCLKX	BIT(10)
278 #define MUTERXDMAERR	BIT(11)
279 #define MUTETXDMAERR	BIT(12)
280 
281 /*
282  * DAVINCI_MCASP_REVTCTL_REG - Receiver DMA Event Control Register bits
283  */
284 #define RXDATADMADIS	BIT(0)
285 
286 /*
287  * DAVINCI_MCASP_XEVTCTL_REG - Transmitter DMA Event Control Register bits
288  */
289 #define TXDATADMADIS	BIT(0)
290 
291 /*
292  * DAVINCI_MCASP_EVTCTLR_REG - Receiver Interrupt Control Register Bits
293  */
294 #define ROVRN		BIT(0)
295 
296 /*
297  * DAVINCI_MCASP_EVTCTLX_REG - Transmitter Interrupt Control Register Bits
298  */
299 #define XUNDRN		BIT(0)
300 
301 /*
302  * DAVINCI_MCASP_W[R]FIFOCTL - Write/Read FIFO Control Register bits
303  */
304 #define FIFO_ENABLE	BIT(16)
305 #define NUMEVT_MASK	(0xFF << 8)
306 #define NUMEVT(x)	(((x) & 0xFF) << 8)
307 #define NUMDMA_MASK	(0xFF)
308 
309 /* clock divider IDs */
310 #define MCASP_CLKDIV_AUXCLK		0 /* HCLK divider from AUXCLK */
311 #define MCASP_CLKDIV_BCLK		1 /* BCLK divider from HCLK */
312 #define MCASP_CLKDIV_BCLK_FS_RATIO	2 /* to set BCLK FS ration */
313 
314 #endif	/* DAVINCI_MCASP_H */
315