2
* Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
6
* The code contained herein is licensed under the GNU General Public
7
* License. You may obtain a copy of the GNU General Public License
8
* Version 2 or later at the following locations:
10
* http://www.opensource.org/licenses/gpl-license.html
11
* http://www.gnu.org/copyleft/gpl.html
13
#include <linux/init.h>
14
#include <linux/device.h>
16
#include <mach/hardware.h>
20
#ifdef CONFIG_SND_MXC_SOC_IRAM
21
#define soc_trans_type int_2_per
23
#define soc_trans_type emi_2_per
26
#define MXC_SPDIF_TXFIFO_WML 8
27
#define MXC_SPDIF_RXFIFO_WML 8
28
#define MXC_SPDIF_TX_REG 0x2C
29
#define MXC_SPDIF_RX_REG 0x14
31
#define MXC_SSI_TX0_REG 0x0
32
#define MXC_SSI_TX1_REG 0x4
33
#define MXC_SSI_RX0_REG 0x8
34
#define MXC_SSI_RX1_REG 0xC
35
#define MXC_SSI_TXFIFO_WML 0x4
36
#define MXC_SSI_RXFIFO_WML 0x6
38
#define MXC_ASRC_FIFO_WML 0x40
39
#define MXC_ASRCA_RX_REG 0x60
40
#define MXC_ASRCA_TX_REG 0x64
41
#define MXC_ASRCB_RX_REG 0x68
42
#define MXC_ASRCB_TX_REG 0x6C
43
#define MXC_ASRCC_RX_REG 0x70
44
#define MXC_ASRCC_TX_REG 0x74
46
#define MXC_ESAI_TX_REG 0x00
47
#define MXC_ESAI_RX_REG 0x04
48
#define MXC_ESAI_FIFO_WML 0x40
50
struct mxc_sdma_info_entry_s {
51
mxc_dma_device_t device;
55
static mxc_sdma_channel_params_t mxc_sdma_uart1_rx_params = {
57
.watermark_level = UART1_UFCR_RXTL,
58
.per_address = UART1_BASE_ADDR,
59
.peripheral_type = UART,
60
.transfer_type = per_2_emi,
61
.event_id = DMA_REQ_UART1_RX,
63
.word_size = TRANSFER_8BIT,
65
.channel_num = MXC_DMA_CHANNEL_UART1_RX,
66
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
69
static mxc_sdma_channel_params_t mxc_sdma_uart1_tx_params = {
71
.watermark_level = UART1_UFCR_TXTL,
72
.per_address = UART1_BASE_ADDR + MXC_UARTUTXD,
73
.peripheral_type = UART,
74
.transfer_type = emi_2_per,
75
.event_id = DMA_REQ_UART1_TX,
77
.word_size = TRANSFER_8BIT,
79
.channel_num = MXC_DMA_CHANNEL_UART1_TX,
80
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
83
static mxc_sdma_channel_params_t mxc_sdma_uart2_rx_params = {
85
.watermark_level = UART2_UFCR_RXTL,
86
.per_address = UART2_BASE_ADDR,
87
.peripheral_type = UART,
88
.transfer_type = per_2_emi,
89
.event_id = DMA_REQ_UART2_RX,
91
.word_size = TRANSFER_8BIT,
93
.channel_num = MXC_DMA_CHANNEL_UART2_RX,
94
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
97
static mxc_sdma_channel_params_t mxc_sdma_uart2_tx_params = {
99
.watermark_level = UART2_UFCR_TXTL,
100
.per_address = UART2_BASE_ADDR + MXC_UARTUTXD,
101
.peripheral_type = UART,
102
.transfer_type = emi_2_per,
103
.event_id = DMA_REQ_UART2_TX,
105
.word_size = TRANSFER_8BIT,
107
.channel_num = MXC_DMA_CHANNEL_UART2_TX,
108
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
111
static mxc_sdma_channel_params_t mxc_sdma_uart3_rx_params = {
113
.watermark_level = UART3_UFCR_RXTL,
114
.per_address = UART3_BASE_ADDR,
115
.peripheral_type = UART_SP,
116
.transfer_type = per_2_emi,
117
.event_id = DMA_REQ_UART3_RX,
119
.word_size = TRANSFER_8BIT,
121
.channel_num = MXC_DMA_CHANNEL_UART3_RX,
122
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
125
static mxc_sdma_channel_params_t mxc_sdma_uart3_tx_params = {
127
.watermark_level = UART3_UFCR_TXTL,
128
.per_address = UART3_BASE_ADDR + MXC_UARTUTXD,
129
.peripheral_type = UART_SP,
130
.transfer_type = emi_2_per,
131
.event_id = DMA_REQ_UART3_TX,
133
.word_size = TRANSFER_8BIT,
135
.channel_num = MXC_DMA_CHANNEL_UART3_TX,
136
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
139
static mxc_sdma_channel_params_t mxc_sdma_spdif_16bit_tx_params = {
141
.watermark_level = MXC_SPDIF_TXFIFO_WML,
142
.per_address = SPDIF_BASE_ADDR + MXC_SPDIF_TX_REG,
143
.peripheral_type = SPDIF,
144
.transfer_type = emi_2_per,
145
.event_id = DMA_REQ_SPDIF_TX,
147
.word_size = TRANSFER_16BIT,
149
.channel_num = MXC_DMA_CHANNEL_SPDIF_TX,
150
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
153
static mxc_sdma_channel_params_t mxc_sdma_spdif_32bit_tx_params = {
155
.watermark_level = MXC_SPDIF_TXFIFO_WML,
156
.per_address = SPDIF_BASE_ADDR + MXC_SPDIF_TX_REG,
157
.peripheral_type = SPDIF,
158
.transfer_type = emi_2_per,
159
.event_id = DMA_REQ_SPDIF_TX,
161
.word_size = TRANSFER_32BIT,
163
.channel_num = MXC_DMA_CHANNEL_SPDIF_TX,
164
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
167
static mxc_sdma_channel_params_t mxc_sdma_spdif_32bit_rx_params = {
169
.watermark_level = MXC_SPDIF_RXFIFO_WML,
170
.per_address = SPDIF_BASE_ADDR + MXC_SPDIF_RX_REG,
171
.peripheral_type = SPDIF,
172
.transfer_type = per_2_emi,
173
.event_id = DMA_REQ_SPDIF_RX,
175
.word_size = TRANSFER_32BIT,
177
.channel_num = MXC_DMA_CHANNEL_SPDIF_RX,
178
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
181
static mxc_sdma_channel_params_t mxc_sdma_memory_params = {
183
.peripheral_type = MEMORY,
184
.transfer_type = emi_2_emi,
186
.word_size = TRANSFER_32BIT,
188
.channel_num = MXC_DMA_CHANNEL_MEMORY,
189
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
192
static mxc_sdma_channel_params_t mxc_sdma_ssi1_8bit_rx0_params = {
194
.watermark_level = MXC_SSI_RXFIFO_WML,
195
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX0_REG,
196
.peripheral_type = SSI,
197
.transfer_type = per_2_emi,
198
.event_id = DMA_REQ_SSI1_RX1,
200
.word_size = TRANSFER_8BIT,
202
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
206
static mxc_sdma_channel_params_t mxc_sdma_ssi1_8bit_tx0_params = {
208
.watermark_level = MXC_SSI_TXFIFO_WML,
209
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX0_REG,
210
.peripheral_type = SSI,
211
.transfer_type = soc_trans_type,
212
.event_id = DMA_REQ_SSI1_TX1,
214
.word_size = TRANSFER_8BIT,
216
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
220
static mxc_sdma_channel_params_t mxc_sdma_ssi1_16bit_rx0_params = {
222
.watermark_level = MXC_SSI_RXFIFO_WML,
223
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX0_REG,
224
.peripheral_type = SSI,
225
.transfer_type = per_2_emi,
226
.event_id = DMA_REQ_SSI1_RX1,
228
.word_size = TRANSFER_16BIT,
230
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
234
static mxc_sdma_channel_params_t mxc_sdma_ssi1_16bit_tx0_params = {
236
.watermark_level = MXC_SSI_TXFIFO_WML,
237
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX0_REG,
238
.peripheral_type = SSI,
239
.transfer_type = soc_trans_type,
240
.event_id = DMA_REQ_SSI1_TX1,
242
.word_size = TRANSFER_16BIT,
244
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
248
static mxc_sdma_channel_params_t mxc_sdma_ssi1_24bit_rx0_params = {
250
.watermark_level = MXC_SSI_RXFIFO_WML,
251
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX0_REG,
252
.peripheral_type = SSI,
253
.transfer_type = per_2_emi,
254
.event_id = DMA_REQ_SSI1_RX1,
256
.word_size = TRANSFER_32BIT,
258
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
262
static mxc_sdma_channel_params_t mxc_sdma_ssi1_24bit_tx0_params = {
264
.watermark_level = MXC_SSI_TXFIFO_WML,
265
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX0_REG,
266
.peripheral_type = SSI,
267
.transfer_type = soc_trans_type,
268
.event_id = DMA_REQ_SSI1_TX1,
270
.word_size = TRANSFER_32BIT,
272
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
276
static mxc_sdma_channel_params_t mxc_sdma_ssi1_8bit_rx1_params = {
278
.watermark_level = MXC_SSI_RXFIFO_WML,
279
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX1_REG,
280
.peripheral_type = SSI,
281
.transfer_type = per_2_emi,
282
.event_id = DMA_REQ_SSI1_RX2,
284
.word_size = TRANSFER_8BIT,
286
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
290
static mxc_sdma_channel_params_t mxc_sdma_ssi1_8bit_tx1_params = {
292
.watermark_level = MXC_SSI_TXFIFO_WML,
293
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX1_REG,
294
.peripheral_type = SSI,
295
.transfer_type = soc_trans_type,
296
.event_id = DMA_REQ_SSI1_TX2,
298
.word_size = TRANSFER_8BIT,
300
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
304
static mxc_sdma_channel_params_t mxc_sdma_ssi1_16bit_rx1_params = {
306
.watermark_level = MXC_SSI_RXFIFO_WML,
307
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX1_REG,
308
.peripheral_type = SSI,
309
.transfer_type = per_2_emi,
310
.event_id = DMA_REQ_SSI1_RX2,
312
.word_size = TRANSFER_16BIT,
314
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
318
static mxc_sdma_channel_params_t mxc_sdma_ssi1_16bit_tx1_params = {
320
.watermark_level = MXC_SSI_TXFIFO_WML,
321
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX1_REG,
322
.peripheral_type = SSI,
323
.transfer_type = soc_trans_type,
324
.event_id = DMA_REQ_SSI1_TX2,
326
.word_size = TRANSFER_16BIT,
328
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
332
static mxc_sdma_channel_params_t mxc_sdma_ssi1_24bit_rx1_params = {
334
.watermark_level = MXC_SSI_RXFIFO_WML,
335
.per_address = SSI1_BASE_ADDR + MXC_SSI_RX1_REG,
336
.peripheral_type = SSI,
337
.transfer_type = per_2_emi,
338
.event_id = DMA_REQ_SSI1_RX2,
340
.word_size = TRANSFER_32BIT,
342
.channel_num = MXC_DMA_CHANNEL_SSI1_RX,
346
static mxc_sdma_channel_params_t mxc_sdma_ssi1_24bit_tx1_params = {
348
.watermark_level = MXC_SSI_TXFIFO_WML,
349
.per_address = SSI1_BASE_ADDR + MXC_SSI_TX1_REG,
350
.peripheral_type = SSI,
351
.transfer_type = soc_trans_type,
352
.event_id = DMA_REQ_SSI1_TX2,
354
.word_size = TRANSFER_32BIT,
356
.channel_num = MXC_DMA_CHANNEL_SSI1_TX,
360
static mxc_sdma_channel_params_t mxc_sdma_ssi2_8bit_rx0_params = {
362
.watermark_level = MXC_SSI_RXFIFO_WML,
363
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX0_REG,
364
.peripheral_type = SSI_SP,
365
.transfer_type = per_2_emi,
366
.event_id = DMA_REQ_SSI2_RX1,
368
.word_size = TRANSFER_8BIT,
370
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
374
static mxc_sdma_channel_params_t mxc_sdma_ssi2_8bit_tx0_params = {
376
.watermark_level = MXC_SSI_TXFIFO_WML,
377
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX0_REG,
378
.peripheral_type = SSI_SP,
379
.transfer_type = emi_2_per,
380
.event_id = DMA_REQ_SSI2_TX1,
382
.word_size = TRANSFER_8BIT,
384
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
388
static mxc_sdma_channel_params_t mxc_sdma_ssi2_16bit_rx0_params = {
390
.watermark_level = MXC_SSI_RXFIFO_WML,
391
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX0_REG,
392
.peripheral_type = SSI_SP,
393
.transfer_type = per_2_emi,
394
.event_id = DMA_REQ_SSI2_RX1,
396
.word_size = TRANSFER_16BIT,
398
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
402
static mxc_sdma_channel_params_t mxc_sdma_ssi2_16bit_tx0_params = {
404
.watermark_level = MXC_SSI_TXFIFO_WML,
405
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX0_REG,
406
.peripheral_type = SSI_SP,
407
.transfer_type = emi_2_per,
408
.event_id = DMA_REQ_SSI2_TX1,
410
.word_size = TRANSFER_16BIT,
412
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
416
static mxc_sdma_channel_params_t mxc_sdma_ssi2_24bit_rx0_params = {
418
.watermark_level = MXC_SSI_RXFIFO_WML,
419
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX0_REG,
420
.peripheral_type = SSI_SP,
421
.transfer_type = per_2_emi,
422
.event_id = DMA_REQ_SSI2_RX1,
424
.word_size = TRANSFER_32BIT,
426
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
430
static mxc_sdma_channel_params_t mxc_sdma_ssi2_24bit_tx0_params = {
432
.watermark_level = MXC_SSI_TXFIFO_WML,
433
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX0_REG,
434
.peripheral_type = SSI_SP,
435
.transfer_type = emi_2_per,
436
.event_id = DMA_REQ_SSI2_TX1,
438
.word_size = TRANSFER_32BIT,
440
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
444
static mxc_sdma_channel_params_t mxc_sdma_ssi2_8bit_rx1_params = {
446
.watermark_level = MXC_SSI_RXFIFO_WML,
447
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX1_REG,
448
.peripheral_type = SSI_SP,
449
.transfer_type = per_2_emi,
450
.event_id = DMA_REQ_SSI2_RX2,
452
.word_size = TRANSFER_8BIT,
454
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
458
static mxc_sdma_channel_params_t mxc_sdma_ssi2_8bit_tx1_params = {
460
.watermark_level = MXC_SSI_TXFIFO_WML,
461
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX1_REG,
462
.peripheral_type = SSI_SP,
463
.transfer_type = emi_2_per,
464
.event_id = DMA_REQ_SSI2_TX2,
466
.word_size = TRANSFER_8BIT,
468
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
472
static mxc_sdma_channel_params_t mxc_sdma_ssi2_16bit_rx1_params = {
474
.watermark_level = MXC_SSI_RXFIFO_WML,
475
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX1_REG,
476
.peripheral_type = SSI_SP,
477
.transfer_type = per_2_emi,
478
.event_id = DMA_REQ_SSI2_RX2,
480
.word_size = TRANSFER_16BIT,
482
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
486
static mxc_sdma_channel_params_t mxc_sdma_ssi2_16bit_tx1_params = {
488
.watermark_level = MXC_SSI_TXFIFO_WML,
489
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX1_REG,
490
.peripheral_type = SSI_SP,
491
.transfer_type = emi_2_per,
492
.event_id = DMA_REQ_SSI2_TX2,
494
.word_size = TRANSFER_16BIT,
496
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
500
static mxc_sdma_channel_params_t mxc_sdma_ssi2_24bit_rx1_params = {
502
.watermark_level = MXC_SSI_RXFIFO_WML,
503
.per_address = SSI2_BASE_ADDR + MXC_SSI_RX1_REG,
504
.peripheral_type = SSI_SP,
505
.transfer_type = per_2_emi,
506
.event_id = DMA_REQ_SSI2_RX2,
508
.word_size = TRANSFER_32BIT,
510
.channel_num = MXC_DMA_CHANNEL_SSI2_RX,
514
static mxc_sdma_channel_params_t mxc_sdma_ssi2_24bit_tx1_params = {
516
.watermark_level = MXC_SSI_TXFIFO_WML,
517
.per_address = SSI2_BASE_ADDR + MXC_SSI_TX1_REG,
518
.peripheral_type = SSI_SP,
519
.transfer_type = emi_2_per,
520
.event_id = DMA_REQ_SSI2_TX2,
522
.word_size = TRANSFER_32BIT,
524
.channel_num = MXC_DMA_CHANNEL_SSI2_TX,
528
static mxc_sdma_channel_params_t mxc_sdma_asrca_rx_params = {
530
.watermark_level = MXC_ASRC_FIFO_WML,
531
.per_address = ASRC_BASE_ADDR + MXC_ASRCA_RX_REG,
532
.peripheral_type = ASRC,
533
.transfer_type = emi_2_per,
534
.event_id = DMA_REQ_ASRC_DMA1,
536
.word_size = TRANSFER_32BIT,
538
.channel_num = MXC_DMA_CHANNEL_ASRCA_RX,
539
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
542
static mxc_sdma_channel_params_t mxc_sdma_asrca_tx_params = {
544
.watermark_level = MXC_ASRC_FIFO_WML,
545
.per_address = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
546
.peripheral_type = ASRC,
547
.transfer_type = per_2_emi,
548
.event_id = DMA_REQ_ASRC_DMA4,
550
.word_size = TRANSFER_32BIT,
552
.channel_num = MXC_DMA_CHANNEL_ASRCA_TX,
553
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
556
static mxc_sdma_channel_params_t mxc_sdma_asrcb_rx_params = {
558
.watermark_level = MXC_ASRC_FIFO_WML,
559
.per_address = ASRC_BASE_ADDR + MXC_ASRCB_RX_REG,
560
.peripheral_type = ASRC,
561
.transfer_type = emi_2_per,
562
.event_id = DMA_REQ_ASRC_DMA2,
564
.word_size = TRANSFER_32BIT,
566
.channel_num = MXC_DMA_CHANNEL_ASRCB_RX,
567
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
570
static mxc_sdma_channel_params_t mxc_sdma_asrcb_tx_params = {
572
.watermark_level = MXC_ASRC_FIFO_WML,
573
.per_address = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
574
.peripheral_type = ASRC,
575
.transfer_type = per_2_emi,
576
.event_id = DMA_REQ_ASRC_DMA5,
578
.word_size = TRANSFER_32BIT,
580
.channel_num = MXC_DMA_CHANNEL_ASRCB_TX,
581
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
584
static mxc_sdma_channel_params_t mxc_sdma_asrcc_rx_params = {
586
.watermark_level = MXC_ASRC_FIFO_WML * 3,
587
.per_address = ASRC_BASE_ADDR + MXC_ASRCC_RX_REG,
588
.peripheral_type = ASRC,
589
.transfer_type = emi_2_per,
590
.event_id = DMA_REQ_ASRC_DMA3,
592
.word_size = TRANSFER_32BIT,
594
.channel_num = MXC_DMA_CHANNEL_ASRCC_RX,
595
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
598
static mxc_sdma_channel_params_t mxc_sdma_asrcc_tx_params = {
600
.watermark_level = MXC_ASRC_FIFO_WML * 3,
601
.per_address = ASRC_BASE_ADDR + MXC_ASRCC_TX_REG,
602
.peripheral_type = ASRC,
603
.transfer_type = per_2_emi,
604
.event_id = DMA_REQ_ASRC_DMA6,
606
.word_size = TRANSFER_32BIT,
608
.channel_num = MXC_DMA_CHANNEL_ASRCC_TX,
609
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
612
static mxc_sdma_channel_ext_params_t mxc_sdma_asrca_ssi1_tx0_params = {
616
MXC_ASRC_FIFO_WML >> 1,
618
SSI1_BASE_ADDR + MXC_SSI_TX0_REG,
619
.peripheral_type = ASRC,
620
.transfer_type = per_2_per,
621
.event_id = DMA_REQ_SSI1_TX1,
622
.event_id2 = DMA_REQ_ASRC_DMA4,
624
.word_size = TRANSFER_32BIT,
629
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP,
630
.watermark_level2 = MXC_SSI_TXFIFO_WML,
631
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
633
.channel_num = MXC_DMA_CHANNEL_ASRCA_SSI1_TX0,
634
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
637
static mxc_sdma_channel_ext_params_t mxc_sdma_asrca_ssi1_tx1_params = {
641
MXC_ASRC_FIFO_WML >> 1,
643
SSI1_BASE_ADDR + MXC_SSI_TX1_REG,
644
.peripheral_type = ASRC,
645
.transfer_type = per_2_per,
646
.event_id = DMA_REQ_SSI1_TX2,
647
.event_id2 = DMA_REQ_ASRC_DMA4,
649
.word_size = TRANSFER_32BIT,
654
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP,
655
.watermark_level2 = MXC_SSI_TXFIFO_WML,
656
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
658
.channel_num = MXC_DMA_CHANNEL_ASRCA_SSI1_TX1,
659
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
662
static mxc_sdma_channel_ext_params_t mxc_sdma_asrca_ssi2_tx0_params = {
666
MXC_ASRC_FIFO_WML >> 1,
668
SSI2_BASE_ADDR + MXC_SSI_TX0_REG,
669
.peripheral_type = ASRC,
670
.transfer_type = per_2_per,
671
.event_id = DMA_REQ_SSI2_TX1,
672
.event_id2 = DMA_REQ_ASRC_DMA4,
674
.word_size = TRANSFER_32BIT,
679
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
680
SDMA_ASRC_P2P_INFO_DP,
681
.watermark_level2 = MXC_SSI_TXFIFO_WML,
682
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
684
.channel_num = MXC_DMA_CHANNEL_ASRCA_SSI2_TX0,
685
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
688
static mxc_sdma_channel_ext_params_t mxc_sdma_asrca_ssi2_tx1_params = {
692
MXC_ASRC_FIFO_WML >> 1,
694
SSI2_BASE_ADDR + MXC_SSI_TX1_REG,
695
.peripheral_type = ASRC,
696
.transfer_type = per_2_per,
697
.event_id = DMA_REQ_SSI2_TX2,
698
.event_id2 = DMA_REQ_ASRC_DMA4,
700
.word_size = TRANSFER_32BIT,
705
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
706
SDMA_ASRC_P2P_INFO_DP,
707
.watermark_level2 = MXC_SSI_TXFIFO_WML,
708
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
710
.channel_num = MXC_DMA_CHANNEL_ASRCA_SSI2_TX1,
711
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
714
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcb_ssi1_tx0_params = {
718
MXC_ASRC_FIFO_WML >> 1,
720
SSI1_BASE_ADDR + MXC_SSI_TX0_REG,
721
.peripheral_type = ASRC,
722
.transfer_type = per_2_per,
723
.event_id = DMA_REQ_SSI1_TX1,
724
.event_id2 = DMA_REQ_ASRC_DMA5,
726
.word_size = TRANSFER_32BIT,
731
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP,
732
.watermark_level2 = MXC_SSI_TXFIFO_WML,
733
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
735
.channel_num = MXC_DMA_CHANNEL_ASRCB_SSI1_TX0,
736
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
739
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcb_ssi1_tx1_params = {
743
MXC_ASRC_FIFO_WML >> 1,
745
SSI1_BASE_ADDR + MXC_SSI_TX1_REG,
746
.peripheral_type = ASRC,
747
.transfer_type = per_2_per,
748
.event_id = DMA_REQ_SSI1_TX2,
749
.event_id2 = DMA_REQ_ASRC_DMA5,
751
.word_size = TRANSFER_32BIT,
756
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP,
757
.watermark_level2 = MXC_SSI_TXFIFO_WML,
758
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
760
.channel_num = MXC_DMA_CHANNEL_ASRCB_SSI1_TX1,
761
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
764
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcb_ssi2_tx0_params = {
768
MXC_ASRC_FIFO_WML >> 1,
770
SSI2_BASE_ADDR + MXC_SSI_TX0_REG,
771
.peripheral_type = ASRC,
772
.transfer_type = per_2_per,
773
.event_id = DMA_REQ_SSI2_TX1,
774
.event_id2 = DMA_REQ_ASRC_DMA5,
776
.word_size = TRANSFER_32BIT,
781
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
782
SDMA_ASRC_P2P_INFO_DP,
783
.watermark_level2 = MXC_SSI_TXFIFO_WML,
784
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
786
.channel_num = MXC_DMA_CHANNEL_ASRCB_SSI2_TX0,
787
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
790
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcb_ssi2_tx1_params = {
794
MXC_ASRC_FIFO_WML >> 1,
796
SSI2_BASE_ADDR + MXC_SSI_TX1_REG,
797
.peripheral_type = ASRC,
798
.transfer_type = per_2_per,
799
.event_id = DMA_REQ_SSI2_TX2,
800
.event_id2 = DMA_REQ_ASRC_DMA5,
802
.word_size = TRANSFER_32BIT,
807
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
808
SDMA_ASRC_P2P_INFO_DP,
809
.watermark_level2 = MXC_SSI_TXFIFO_WML,
810
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
812
.channel_num = MXC_DMA_CHANNEL_ASRCB_SSI2_TX1,
813
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
816
static mxc_sdma_channel_ext_params_t mxc_sdma_asrca_esai_params = {
820
MXC_ASRC_FIFO_WML >> 1,
822
ESAI_BASE_ADDR + MXC_ESAI_TX_REG,
823
.peripheral_type = ASRC,
824
.transfer_type = per_2_per,
825
.event_id = DMA_REQ_ESAI_TX,
826
.event_id2 = DMA_REQ_ASRC_DMA4,
828
.word_size = TRANSFER_32BIT,
833
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
834
SDMA_ASRC_P2P_INFO_DP,
835
.watermark_level2 = MXC_ESAI_FIFO_WML,
836
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCA_TX_REG,
838
.channel_num = MXC_DMA_CHANNEL_ASRCA_ESAI,
839
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
842
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcb_esai_params = {
846
MXC_ASRC_FIFO_WML >> 1,
848
ESAI_BASE_ADDR + MXC_ESAI_TX_REG,
849
.peripheral_type = ASRC,
850
.transfer_type = per_2_per,
851
.event_id = DMA_REQ_ESAI_TX,
852
.event_id2 = DMA_REQ_ASRC_DMA5,
854
.word_size = TRANSFER_32BIT,
859
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
860
SDMA_ASRC_P2P_INFO_DP,
861
.watermark_level2 = MXC_ESAI_FIFO_WML,
862
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCB_TX_REG,
864
.channel_num = MXC_DMA_CHANNEL_ASRCB_ESAI,
865
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
868
static mxc_sdma_channel_ext_params_t mxc_sdma_asrcc_esai_params = {
872
MXC_ASRC_FIFO_WML >> 1,
874
ESAI_BASE_ADDR + MXC_ESAI_TX_REG,
875
.peripheral_type = ASRC,
876
.transfer_type = per_2_per,
877
.event_id = DMA_REQ_ESAI_TX,
878
.event_id2 = DMA_REQ_ASRC_DMA6,
880
.word_size = TRANSFER_32BIT,
885
SDMA_ASRC_P2P_INFO_CONT | SDMA_ASRC_P2P_INFO_SP |
886
SDMA_ASRC_P2P_INFO_DP,
887
.watermark_level2 = MXC_ASRC_FIFO_WML,
888
.per_address2 = ASRC_BASE_ADDR + MXC_ASRCC_TX_REG,
890
.channel_num = MXC_DMA_CHANNEL_ASRCC_ESAI,
891
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
894
static mxc_sdma_channel_params_t mxc_sdma_esai_16bit_rx_params = {
896
.watermark_level = MXC_ESAI_FIFO_WML,
897
.per_address = ESAI_BASE_ADDR + MXC_ESAI_RX_REG,
898
.peripheral_type = ESAI,
899
.transfer_type = per_2_emi,
900
.event_id = DMA_REQ_ESAI_RX,
902
.word_size = TRANSFER_16BIT,
904
.channel_num = MXC_DMA_CHANNEL_ESAI_RX,
905
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
908
static mxc_sdma_channel_params_t mxc_sdma_esai_16bit_tx_params = {
910
.watermark_level = MXC_ESAI_FIFO_WML,
911
.per_address = ESAI_BASE_ADDR + MXC_ESAI_TX_REG,
912
.peripheral_type = ESAI,
913
.transfer_type = soc_trans_type,
914
.event_id = DMA_REQ_ESAI_TX,
916
.word_size = TRANSFER_16BIT,
918
.channel_num = MXC_DMA_CHANNEL_ESAI_TX,
919
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
922
static mxc_sdma_channel_params_t mxc_sdma_esai_24bit_rx_params = {
924
.watermark_level = MXC_ESAI_FIFO_WML,
925
.per_address = ESAI_BASE_ADDR + MXC_ESAI_RX_REG,
926
.peripheral_type = ESAI,
927
.transfer_type = per_2_emi,
928
.event_id = DMA_REQ_ESAI_RX,
930
.word_size = TRANSFER_32BIT,
932
.channel_num = MXC_DMA_CHANNEL_ESAI_RX,
933
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
936
static mxc_sdma_channel_params_t mxc_sdma_esai_24bit_tx_params = {
938
.watermark_level = MXC_ESAI_FIFO_WML,
939
.per_address = ESAI_BASE_ADDR + MXC_ESAI_TX_REG,
940
.peripheral_type = ESAI,
941
.transfer_type = soc_trans_type,
942
.event_id = DMA_REQ_ESAI_TX,
944
.word_size = TRANSFER_32BIT,
946
.channel_num = MXC_DMA_CHANNEL_ESAI_TX,
947
.chnl_priority = MXC_SDMA_DEFAULT_PRIORITY,
950
static struct mxc_sdma_info_entry_s mxc_sdma_active_dma_info[] = {
951
{MXC_DMA_UART1_RX, &mxc_sdma_uart1_rx_params},
952
{MXC_DMA_UART1_TX, &mxc_sdma_uart1_tx_params},
953
{MXC_DMA_UART2_RX, &mxc_sdma_uart2_rx_params},
954
{MXC_DMA_UART2_TX, &mxc_sdma_uart2_tx_params},
955
{MXC_DMA_UART3_RX, &mxc_sdma_uart3_rx_params},
956
{MXC_DMA_UART3_TX, &mxc_sdma_uart3_tx_params},
957
{MXC_DMA_SPDIF_16BIT_TX, &mxc_sdma_spdif_16bit_tx_params},
958
{MXC_DMA_SPDIF_32BIT_TX, &mxc_sdma_spdif_32bit_tx_params},
959
{MXC_DMA_SPDIF_32BIT_RX, &mxc_sdma_spdif_32bit_rx_params},
960
{MXC_DMA_SSI1_8BIT_RX0, &mxc_sdma_ssi1_8bit_rx0_params},
961
{MXC_DMA_SSI1_8BIT_TX0, &mxc_sdma_ssi1_8bit_tx0_params},
962
{MXC_DMA_SSI1_16BIT_RX0, &mxc_sdma_ssi1_16bit_rx0_params},
963
{MXC_DMA_SSI1_16BIT_TX0, &mxc_sdma_ssi1_16bit_tx0_params},
964
{MXC_DMA_SSI1_24BIT_RX0, &mxc_sdma_ssi1_24bit_rx0_params},
965
{MXC_DMA_SSI1_24BIT_TX0, &mxc_sdma_ssi1_24bit_tx0_params},
966
{MXC_DMA_SSI1_8BIT_RX1, &mxc_sdma_ssi1_8bit_rx1_params},
967
{MXC_DMA_SSI1_8BIT_TX1, &mxc_sdma_ssi1_8bit_tx1_params},
968
{MXC_DMA_SSI1_16BIT_RX1, &mxc_sdma_ssi1_16bit_rx1_params},
969
{MXC_DMA_SSI1_16BIT_TX1, &mxc_sdma_ssi1_16bit_tx1_params},
970
{MXC_DMA_SSI1_24BIT_RX1, &mxc_sdma_ssi1_24bit_rx1_params},
971
{MXC_DMA_SSI1_24BIT_TX1, &mxc_sdma_ssi1_24bit_tx1_params},
972
{MXC_DMA_SSI2_8BIT_RX0, &mxc_sdma_ssi2_8bit_rx0_params},
973
{MXC_DMA_SSI2_8BIT_TX0, &mxc_sdma_ssi2_8bit_tx0_params},
974
{MXC_DMA_SSI2_16BIT_RX0, &mxc_sdma_ssi2_16bit_rx0_params},
975
{MXC_DMA_SSI2_16BIT_TX0, &mxc_sdma_ssi2_16bit_tx0_params},
976
{MXC_DMA_SSI2_24BIT_RX0, &mxc_sdma_ssi2_24bit_rx0_params},
977
{MXC_DMA_SSI2_24BIT_TX0, &mxc_sdma_ssi2_24bit_tx0_params},
978
{MXC_DMA_SSI2_8BIT_RX1, &mxc_sdma_ssi2_8bit_rx1_params},
979
{MXC_DMA_SSI2_8BIT_TX1, &mxc_sdma_ssi2_8bit_tx1_params},
980
{MXC_DMA_SSI2_16BIT_RX1, &mxc_sdma_ssi2_16bit_rx1_params},
981
{MXC_DMA_SSI2_16BIT_TX1, &mxc_sdma_ssi2_16bit_tx1_params},
982
{MXC_DMA_SSI2_24BIT_RX1, &mxc_sdma_ssi2_24bit_rx1_params},
983
{MXC_DMA_SSI2_24BIT_TX1, &mxc_sdma_ssi2_24bit_tx1_params},
984
{MXC_DMA_ASRC_A_RX, &mxc_sdma_asrca_rx_params},
985
{MXC_DMA_ASRC_A_TX, &mxc_sdma_asrca_tx_params},
986
{MXC_DMA_ASRC_B_RX, &mxc_sdma_asrcb_rx_params},
987
{MXC_DMA_ASRC_B_TX, &mxc_sdma_asrcb_tx_params},
988
{MXC_DMA_ASRC_C_RX, &mxc_sdma_asrcc_rx_params},
989
{MXC_DMA_ASRC_C_TX, &mxc_sdma_asrcc_tx_params},
990
{MXC_DMA_ASRCA_SSI1_TX0, &mxc_sdma_asrca_ssi1_tx0_params},
991
{MXC_DMA_ASRCA_SSI1_TX1, &mxc_sdma_asrca_ssi1_tx1_params},
992
{MXC_DMA_ASRCA_SSI2_TX0, &mxc_sdma_asrca_ssi2_tx0_params},
993
{MXC_DMA_ASRCA_SSI2_TX1, &mxc_sdma_asrca_ssi2_tx1_params},
994
{MXC_DMA_ASRCB_SSI1_TX0, &mxc_sdma_asrcb_ssi1_tx0_params},
995
{MXC_DMA_ASRCB_SSI1_TX1, &mxc_sdma_asrcb_ssi1_tx1_params},
996
{MXC_DMA_ASRCB_SSI2_TX0, &mxc_sdma_asrcb_ssi2_tx0_params},
997
{MXC_DMA_ASRCB_SSI2_TX1, &mxc_sdma_asrcb_ssi2_tx1_params},
998
{MXC_DMA_ASRCA_ESAI, &mxc_sdma_asrca_esai_params},
999
{MXC_DMA_ASRCB_ESAI, &mxc_sdma_asrcb_esai_params},
1000
{MXC_DMA_ASRCC_ESAI, &mxc_sdma_asrcc_esai_params},
1001
{MXC_DMA_ESAI_16BIT_RX, &mxc_sdma_esai_16bit_rx_params},
1002
{MXC_DMA_ESAI_16BIT_TX, &mxc_sdma_esai_16bit_tx_params},
1003
{MXC_DMA_ESAI_24BIT_RX, &mxc_sdma_esai_24bit_rx_params},
1004
{MXC_DMA_ESAI_24BIT_TX, &mxc_sdma_esai_24bit_tx_params},
1005
{MXC_DMA_MEMORY, &mxc_sdma_memory_params},
1008
static int mxc_sdma_info_entrys =
1009
sizeof(mxc_sdma_active_dma_info) / sizeof(mxc_sdma_active_dma_info[0]);
1011
* This functions Returns the SDMA paramaters associated for a module
1013
* @param channel_id the ID of the module requesting DMA
1014
* @return returns the sdma parameters structure for the device
1016
mxc_sdma_channel_params_t *mxc_sdma_get_channel_params(mxc_dma_device_t
1019
struct mxc_sdma_info_entry_s *p = mxc_sdma_active_dma_info;
1022
for (i = 0; i < mxc_sdma_info_entrys; i++, p++) {
1023
if (p->device == channel_id)
1024
return p->chnl_info;
1029
EXPORT_SYMBOL(mxc_sdma_get_channel_params);
1032
* This functions marks the SDMA channels that are statically allocated
1034
* @param chnl the channel array used to store channel information
1036
void mxc_get_static_channels(mxc_dma_channel_t *chnl)
1038
/* No channels statically allocated for MX35 */
1039
#ifdef CONFIG_SDMA_IRAM
1041
for (i = MXC_DMA_CHANNEL_IRAM; i < MAX_DMA_CHANNELS; i++)
1042
chnl[i].dynamic = 0;
1046
EXPORT_SYMBOL(mxc_get_static_channels);