1
2
3
4
5
6
7
8
9
10
11
12 #ifndef __TEGRA20_SPDIF_H__
13 #define __TEGRA20_SPDIF_H__
14
15 #include "tegra_pcm.h"
16
17
18
19 #define TEGRA20_SPDIF_CTRL 0x0
20 #define TEGRA20_SPDIF_STATUS 0x4
21 #define TEGRA20_SPDIF_STROBE_CTRL 0x8
22 #define TEGRA20_SPDIF_DATA_FIFO_CSR 0x0C
23 #define TEGRA20_SPDIF_DATA_OUT 0x40
24 #define TEGRA20_SPDIF_DATA_IN 0x80
25 #define TEGRA20_SPDIF_CH_STA_RX_A 0x100
26 #define TEGRA20_SPDIF_CH_STA_RX_B 0x104
27 #define TEGRA20_SPDIF_CH_STA_RX_C 0x108
28 #define TEGRA20_SPDIF_CH_STA_RX_D 0x10C
29 #define TEGRA20_SPDIF_CH_STA_RX_E 0x110
30 #define TEGRA20_SPDIF_CH_STA_RX_F 0x114
31 #define TEGRA20_SPDIF_CH_STA_TX_A 0x140
32 #define TEGRA20_SPDIF_CH_STA_TX_B 0x144
33 #define TEGRA20_SPDIF_CH_STA_TX_C 0x148
34 #define TEGRA20_SPDIF_CH_STA_TX_D 0x14C
35 #define TEGRA20_SPDIF_CH_STA_TX_E 0x150
36 #define TEGRA20_SPDIF_CH_STA_TX_F 0x154
37 #define TEGRA20_SPDIF_USR_STA_RX_A 0x180
38 #define TEGRA20_SPDIF_USR_DAT_TX_A 0x1C0
39
40
41
42
43 #define TEGRA20_SPDIF_CTRL_CAP_LC (1 << 30)
44
45
46 #define TEGRA20_SPDIF_CTRL_RX_EN (1 << 29)
47
48
49 #define TEGRA20_SPDIF_CTRL_TX_EN (1 << 28)
50
51
52 #define TEGRA20_SPDIF_CTRL_TC_EN (1 << 27)
53
54
55 #define TEGRA20_SPDIF_CTRL_TU_EN (1 << 26)
56
57
58 #define TEGRA20_SPDIF_CTRL_IE_TXE (1 << 25)
59
60
61 #define TEGRA20_SPDIF_CTRL_IE_RXE (1 << 24)
62
63
64 #define TEGRA20_SPDIF_CTRL_IE_P (1 << 23)
65
66
67 #define TEGRA20_SPDIF_CTRL_IE_B (1 << 22)
68
69
70 #define TEGRA20_SPDIF_CTRL_IE_C (1 << 21)
71
72
73 #define TEGRA20_SPDIF_CTRL_IE_U (1 << 20)
74
75
76 #define TEGRA20_SPDIF_CTRL_QE_RU (1 << 19)
77
78
79 #define TEGRA20_SPDIF_CTRL_QE_TU (1 << 18)
80
81
82 #define TEGRA20_SPDIF_CTRL_QE_RX (1 << 17)
83
84
85 #define TEGRA20_SPDIF_CTRL_QE_TX (1 << 16)
86
87
88 #define TEGRA20_SPDIF_CTRL_LBK_EN (1 << 15)
89
90
91
92
93
94
95
96 #define TEGRA20_SPDIF_CTRL_PACK (1 << 14)
97
98
99
100
101
102
103
104 #define TEGRA20_SPDIF_BIT_MODE_16BIT 0
105 #define TEGRA20_SPDIF_BIT_MODE_20BIT 1
106 #define TEGRA20_SPDIF_BIT_MODE_24BIT 2
107 #define TEGRA20_SPDIF_BIT_MODE_RAW 3
108
109 #define TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT 12
110 #define TEGRA20_SPDIF_CTRL_BIT_MODE_MASK (3 << TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT)
111 #define TEGRA20_SPDIF_CTRL_BIT_MODE_16BIT (TEGRA20_SPDIF_BIT_MODE_16BIT << TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT)
112 #define TEGRA20_SPDIF_CTRL_BIT_MODE_20BIT (TEGRA20_SPDIF_BIT_MODE_20BIT << TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT)
113 #define TEGRA20_SPDIF_CTRL_BIT_MODE_24BIT (TEGRA20_SPDIF_BIT_MODE_24BIT << TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT)
114 #define TEGRA20_SPDIF_CTRL_BIT_MODE_RAW (TEGRA20_SPDIF_BIT_MODE_RAW << TEGRA20_SPDIF_CTRL_BIT_MODE_SHIFT)
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 #define TEGRA20_SPDIF_STATUS_RX_BSY (1 << 29)
132
133
134
135
136
137
138
139 #define TEGRA20_SPDIF_STATUS_TX_BSY (1 << 28)
140
141
142
143
144
145
146
147
148
149 #define TEGRA20_SPDIF_STATUS_TC_BSY (1 << 27)
150
151
152
153
154
155
156
157
158 #define TEGRA20_SPDIF_STATUS_TU_BSY (1 << 26)
159
160
161 #define TEGRA20_SPDIF_STATUS_TX_ERR (1 << 25)
162
163
164 #define TEGRA20_SPDIF_STATUS_RX_ERR (1 << 24)
165
166
167 #define TEGRA20_SPDIF_STATUS_IS_P (1 << 23)
168
169
170 #define TEGRA20_SPDIF_STATUS_IS_B (1 << 22)
171
172
173
174
175
176
177 #define TEGRA20_SPDIF_STATUS_IS_C (1 << 21)
178
179
180 #define TEGRA20_SPDIF_STATUS_IS_U (1 << 20)
181
182
183
184
185
186 #define TEGRA20_SPDIF_STATUS_QS_RU (1 << 19)
187
188
189
190
191
192 #define TEGRA20_SPDIF_STATUS_QS_TU (1 << 18)
193
194
195
196
197
198 #define TEGRA20_SPDIF_STATUS_QS_RX (1 << 17)
199
200
201
202
203
204 #define TEGRA20_SPDIF_STATUS_QS_TX (1 << 16)
205
206
207
208
209
210
211
212 #define TEGRA20_SPDIF_STROBE_CTRL_PERIOD_SHIFT 16
213 #define TEGRA20_SPDIF_STROBE_CTRL_PERIOD_MASK (0xff << TEGRA20_SPDIF_STROBE_CTRL_PERIOD_SHIFT)
214
215
216 #define TEGRA20_SPDIF_STROBE_CTRL_STROBE (1 << 15)
217
218
219
220
221
222 #define TEGRA20_SPDIF_STROBE_CTRL_DATA_STROBES_SHIFT 8
223 #define TEGRA20_SPDIF_STROBE_CTRL_DATA_STROBES_MASK (0x1f << TEGRA20_SPDIF_STROBE_CTRL_DATA_STROBES_SHIFT)
224
225
226
227
228
229 #define TEGRA20_SPDIF_STROBE_CTRL_CLOCK_PERIOD_SHIFT 0
230 #define TEGRA20_SPDIF_STROBE_CTRL_CLOCK_PERIOD_MASK (0x3f << TEGRA20_SPDIF_STROBE_CTRL_CLOCK_PERIOD_SHIFT)
231
232
233
234
235 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_CLR (1 << 31)
236
237 #define TEGRA20_SPDIF_FIFO_ATN_LVL_U_ONE_SLOT 0
238 #define TEGRA20_SPDIF_FIFO_ATN_LVL_U_TWO_SLOTS 1
239 #define TEGRA20_SPDIF_FIFO_ATN_LVL_U_THREE_SLOTS 2
240 #define TEGRA20_SPDIF_FIFO_ATN_LVL_U_FOUR_SLOTS 3
241
242
243 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT 29
244 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_MASK \
245 (0x3 << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT)
246 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_RU1_WORD_FULL \
247 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_ONE_SLOT << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT)
248 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_RU2_WORD_FULL \
249 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_TWO_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT)
250 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_RU3_WORD_FULL \
251 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_THREE_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT)
252 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_RU4_WORD_FULL \
253 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_FOUR_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_ATN_LVL_SHIFT)
254
255
256 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_FULL_COUNT_SHIFT 24
257 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RU_FULL_COUNT_MASK (0x1f << TEGRA20_SPDIF_DATA_FIFO_CSR_RU_FULL_COUNT_SHIFT)
258
259
260 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_CLR (1 << 23)
261
262
263 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT 21
264 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_MASK \
265 (0x3 << TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT)
266 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_TU1_WORD_FULL \
267 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_ONE_SLOT << TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT)
268 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_TU2_WORD_FULL \
269 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_TWO_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT)
270 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_TU3_WORD_FULL \
271 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_THREE_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT)
272 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_TU4_WORD_FULL \
273 (TEGRA20_SPDIF_FIFO_ATN_LVL_U_FOUR_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TU_ATN_LVL_SHIFT)
274
275
276 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_EMPTY_COUNT_SHIFT 16
277 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TU_EMPTY_COUNT_MASK (0x1f << SPDIF_DATA_FIFO_CSR_TU_EMPTY_COUNT_SHIFT)
278
279
280 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_CLR (1 << 15)
281
282 #define TEGRA20_SPDIF_FIFO_ATN_LVL_D_ONE_SLOT 0
283 #define TEGRA20_SPDIF_FIFO_ATN_LVL_D_FOUR_SLOTS 1
284 #define TEGRA20_SPDIF_FIFO_ATN_LVL_D_EIGHT_SLOTS 2
285 #define TEGRA20_SPDIF_FIFO_ATN_LVL_D_TWELVE_SLOTS 3
286
287
288 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT 13
289 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_MASK \
290 (0x3 << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT)
291 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_RU1_WORD_FULL \
292 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_ONE_SLOT << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT)
293 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_RU4_WORD_FULL \
294 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_FOUR_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT)
295 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_RU8_WORD_FULL \
296 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_EIGHT_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT)
297 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_RU12_WORD_FULL \
298 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_TWELVE_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_ATN_LVL_SHIFT)
299
300
301 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_FULL_COUNT_SHIFT 8
302 #define TEGRA20_SPDIF_DATA_FIFO_CSR_RX_FULL_COUNT_MASK (0x1f << TEGRA20_SPDIF_DATA_FIFO_CSR_RX_FULL_COUNT_SHIFT)
303
304
305 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_CLR (1 << 7)
306
307
308 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT 5
309 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_MASK \
310 (0x3 << TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT)
311 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_TU1_WORD_FULL \
312 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_ONE_SLOT << TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT)
313 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_TU4_WORD_FULL \
314 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_FOUR_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT)
315 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_TU8_WORD_FULL \
316 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_EIGHT_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT)
317 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_TU12_WORD_FULL \
318 (TEGRA20_SPDIF_FIFO_ATN_LVL_D_TWELVE_SLOTS << TEGRA20_SPDIF_DATA_FIFO_CSR_TX_ATN_LVL_SHIFT)
319
320
321 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_EMPTY_COUNT_SHIFT 0
322 #define TEGRA20_SPDIF_DATA_FIFO_CSR_TX_EMPTY_COUNT_MASK (0x1f << SPDIF_DATA_FIFO_CSR_TX_EMPTY_COUNT_SHIFT)
323
324
325
326
327
328
329
330
331
332
333
334
335 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_SHIFT 0
336 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_MASK (0xffff << TEGRA20_SPDIF_DATA_OUT_DATA_16_SHIFT)
337
338 #define TEGRA20_SPDIF_DATA_OUT_DATA_20_SHIFT 0
339 #define TEGRA20_SPDIF_DATA_OUT_DATA_20_MASK (0xfffff << TEGRA20_SPDIF_DATA_OUT_DATA_20_SHIFT)
340
341 #define TEGRA20_SPDIF_DATA_OUT_DATA_24_SHIFT 0
342 #define TEGRA20_SPDIF_DATA_OUT_DATA_24_MASK (0xffffff << TEGRA20_SPDIF_DATA_OUT_DATA_24_SHIFT)
343
344 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_P (1 << 31)
345 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_C (1 << 30)
346 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_U (1 << 29)
347 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_V (1 << 28)
348
349 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_DATA_SHIFT 8
350 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_DATA_MASK (0xfffff << TEGRA20_SPDIF_DATA_OUT_DATA_RAW_DATA_SHIFT)
351
352 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_AUX_SHIFT 4
353 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_AUX_MASK (0xf << TEGRA20_SPDIF_DATA_OUT_DATA_RAW_AUX_SHIFT)
354
355 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_PREAMBLE_SHIFT 0
356 #define TEGRA20_SPDIF_DATA_OUT_DATA_RAW_PREAMBLE_MASK (0xf << TEGRA20_SPDIF_DATA_OUT_DATA_RAW_PREAMBLE_SHIFT)
357
358 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_RIGHT_SHIFT 16
359 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_RIGHT_MASK (0xffff << TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_RIGHT_SHIFT)
360
361 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_LEFT_SHIFT 0
362 #define TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_LEFT_MASK (0xffff << TEGRA20_SPDIF_DATA_OUT_DATA_16_PACKED_LEFT_SHIFT)
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377 #define TEGRA20_SPDIF_DATA_IN_DATA_P (1 << 31)
378 #define TEGRA20_SPDIF_DATA_IN_DATA_C (1 << 30)
379 #define TEGRA20_SPDIF_DATA_IN_DATA_U (1 << 29)
380 #define TEGRA20_SPDIF_DATA_IN_DATA_V (1 << 28)
381
382 #define TEGRA20_SPDIF_DATA_IN_DATA_PREAMBLE_SHIFT 24
383 #define TEGRA20_SPDIF_DATA_IN_DATA_PREAMBLE_MASK (0xf << TEGRA20_SPDIF_DATA_IN_DATA_PREAMBLE_SHIFT)
384
385 #define TEGRA20_SPDIF_DATA_IN_DATA_16_SHIFT 0
386 #define TEGRA20_SPDIF_DATA_IN_DATA_16_MASK (0xffff << TEGRA20_SPDIF_DATA_IN_DATA_16_SHIFT)
387
388 #define TEGRA20_SPDIF_DATA_IN_DATA_20_SHIFT 0
389 #define TEGRA20_SPDIF_DATA_IN_DATA_20_MASK (0xfffff << TEGRA20_SPDIF_DATA_IN_DATA_20_SHIFT)
390
391 #define TEGRA20_SPDIF_DATA_IN_DATA_24_SHIFT 0
392 #define TEGRA20_SPDIF_DATA_IN_DATA_24_MASK (0xffffff << TEGRA20_SPDIF_DATA_IN_DATA_24_SHIFT)
393
394 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_DATA_SHIFT 8
395 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_DATA_MASK (0xfffff << TEGRA20_SPDIF_DATA_IN_DATA_RAW_DATA_SHIFT)
396
397 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_AUX_SHIFT 4
398 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_AUX_MASK (0xf << TEGRA20_SPDIF_DATA_IN_DATA_RAW_AUX_SHIFT)
399
400 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_PREAMBLE_SHIFT 0
401 #define TEGRA20_SPDIF_DATA_IN_DATA_RAW_PREAMBLE_MASK (0xf << TEGRA20_SPDIF_DATA_IN_DATA_RAW_PREAMBLE_SHIFT)
402
403 #define TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_RIGHT_SHIFT 16
404 #define TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_RIGHT_MASK (0xffff << TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_RIGHT_SHIFT)
405
406 #define TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_LEFT_SHIFT 0
407 #define TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_LEFT_MASK (0xffff << TEGRA20_SPDIF_DATA_IN_DATA_16_PACKED_LEFT_SHIFT)
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449 struct tegra20_spdif {
450 struct clk *clk_spdif_out;
451 struct snd_dmaengine_dai_dma_data capture_dma_data;
452 struct snd_dmaengine_dai_dma_data playback_dma_data;
453 struct regmap *regmap;
454 };
455
456 #endif