Merge remote-tracking branch 'origin/dev_pasdk_frank_pasdk538UpdateIpcMessaging'...
[processor-sdk/performance-audio-sr.git] / pasdk / test_dsp / application / itopo / evmk2g / mcasp_cfg.c
1 /*
2  * Copyright (c) 2015, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  */
34 /**
35  * \file      mcasp_config.c
36  *
37  * \brief     Configures McASP module
38  *
39  */
41 #include "mcasp_cfg.h"
42 #include "ioConfig.h"
44 #define AUDIO_DAC0_TEST
46 /* McASP device handles - one for each McASP port. */
47 Ptr mcaspDevHandles[NUM_MCASP_PORTS] = {NULL, NULL, NULL};
49 /* McASP parameters needed by mcaspBindDev */
50 Mcasp_Params mcaspParams;
52 /* Error flag */
53 uint32_t gblErrFlag = 0;
54 Error_Block eb;
56 void GblErr(Mcasp_errCbStatus arg);
58 /* Handle to eDMA */
59 extern EDMA3_DRV_Handle hEdma0;
60 extern EDMA3_DRV_Handle hEdma1;
62 /* External function declarations */
63 extern void McaspDevice_init(void);
64 extern signed char*  getGlobalAddr(signed char* addr);
66 #ifdef IO_LOOPBACK_TEST
67 extern void mcaspAppCallbackRx(void* arg, MCASP_Packet *mcasp_packet);
68 extern void mcaspAppCallbackTx(void* arg, MCASP_Packet *mcasp_packet);
69 #else
70 extern void asipMcaspCallback(void* arg, MCASP_Packet *mcasp_packet);
71 extern void asopMcaspCallback(void* arg, MCASP_Packet *mcasp_packet);
72 #endif
74 /* McASP HW setup that is common for receive and transmit. It is the same for
75  * all of 3 McASP ports. */
76 Mcasp_HwSetupGbl mcaspGblSetup = {
77             (Uint32)0x0,        /* pfunc   */
78             (Uint32)0x2000001,  /* pdir    */
79             (Uint32)0x0,        /* ctl     */
80             (Uint32)0x0,        /* ditCtl  */
81             (Uint32)0x0,        /* dlbMode */
82             (Uint32)0x2,        /* amute   */
83             {
84                 (Uint32)0x0,  /* [0] */
85                 (Uint32)0x0,  /* [1] */
86                 (Uint32)0x0,  /* [2] */
87                 (Uint32)0x0,  /* [3] */
88                 (Uint32)0x0,  /* [4] */
89                 (Uint32)0x0,  /* [5] */
90                 (Uint32)0x0,  /* [6] */
91                 (Uint32)0x0,  /* [7] */
92                 (Uint32)0x0,  /* [8] */
93                 (Uint32)0x0,  /* [9] */
94                 (Uint32)0x0,  /* [10] */
95                 (Uint32)0x0,  /* [11] */
96                 (Uint32)0x0,  /* [12] */
97                 (Uint32)0x0,  /* [13] */
98                 (Uint32)0x0,  /* [14] */
99                 (Uint32)0x0,  /* [15] */
100             }   /* serSetup */
101 };
103 /* McASP HW setup for receive (ADC) */
104 Mcasp_HwSetupData mcaspRcvSetupADC = {
105         /* .rmask    = */ 0xFFFFFFFF, /* 16 bits are to be used     */
106         /* .rfmt     = */ 0x000180F2, /*
107                                        * 0 bit delay from framesync
108                                        * MSB first
109                                        * No extra bit padding
110                                        * Padding bit (ignore)
111                                        * slot Size is 32
112                                        * Reads from DMA port
113                                        * NO rotation
114                                        */
115         /* .afsrctl  = */ 0X00000112, /* I2S mode - 2 slot TDM
116                                        * Frame sync is one word
117                                        * Internally generated frame sync
118                                        * Rising edge is start of frame
119                                        */
120         /* .rtdm     = */ 0x00000003, /* slot 1 and 2 are active (I2S)        */
121         /* .rintctl  = */ 0x00000000, /* sync error and overrun error         */
122         /* .rstat    = */ 0x000001FF, /* reset any existing status bits       */
123         /* .revtctl  = */ 0x00000000, /* DMA request is enabled               */
124         {
125              /* .aclkrctl  = */ 0x000000A7,
126              /* .ahclkrctl = */ 0x0000C000,
127              /* .rclkchk   = */ 0x00000000
128         }
129 };
131 /* McASP HW setup for receive (S/PDIF or HDMI)*/
132 Mcasp_HwSetupData mcaspRcvSetupDIR = {
133         MCASP_DIR_RMASK,   /* .rmask:   0xFFFFFFFF    */
134         MCASP_DIR_RFMT,    /* .rfmt:    0x000180F0    */
135         MCASP_DIR_AFSRCTL, /* .afsrctl: 0x00000111    */
136         MCASP_DIR_RTDM,    /* .rtdm:    0x00000003    */
137         MCASP_DIR_RINTCTL, /* .rintctl: 0x00000000    */
138         MCASP_DIR_RSTAT,   /* .rstat:   0x000001FF    */
139         MCASP_DIR_REVTCTL, /* .revtctl  */
140         {
141                         MCASP_DIR_ACLKRCTL,  /* .aclkrctl:  0x00000080  */
142                         MCASP_DIR_AHCLKRCTL, /* .ahclkrctl: 0x00000000  */
143                         MCASP_DIR_RCLKCHK    /* .rclkchk:   0x00000000  */
144         }
145 };
147 /* McASP HW setup for transmit (DAC) */
148 Mcasp_HwSetupData mcaspXmtSetupDAC = {
149         /* .xmask    = */ 0xFFFFFFFF, /* 16 bits are to be used     */
150         /* .xfmt     = */ 0x000180F0, /*
151                                        * 0 bit delay from framesync
152                                        * MSB first
153                                        * No extra bit padding
154                                        * Padding bit (ignore)
155                                        * slot Size is 32
156                                        * Reads from DMA port
157                                        * NO rotation
158                                        */
159         /* .afsxctl  = */ 0x00000112, /* I2S mode - 2 slot TDM
160                                        * Frame sync is one word
161                                        * Rising edge is start of frame
162                                        * Internally generated frame sync
163                                        */
164         /* .xtdm     = */ 0x00000003, /* slot 1 and 2 are active (I2S)               */
165         /* .xintctl  = */ 0x00000000, /* sync error,overrun error,clK error   */
166         /* .xstat    = */ 0x000001FF, /* reset any existing status bits       */
167         /* .xevtctl  = */ 0x00000000, /* DMA request is enabled or disabled   */
168         {
169              /* .aclkxctl  = */ 0X000000E1,
170              /* .ahclkxctl = */ 0x00004000      ,
171              /* .xclkchk   = */ 0x00000000
172         },
173 };
175 /* McASP HW setup for transmit (DAC slave) */
176 Mcasp_HwSetupData mcaspXmtSetupDACSlave = {
177         /* .xmask    = */ 0xFFFFFFFF, /* 16 bits are to be used     */
178         /* .xfmt     = */ 0x000180F6, /*
179                                        * 0 bit delay from framesync
180                                        * MSB first
181                                        * No extra bit padding
182                                        * Padding bit (ignore)
183                                        * slot Size is 32
184                                        * Reads from DMA port
185                                        * NO rotation
186                                        */
187         /* .afsxctl  = */ 0x00000112, /* I2S mode - 2 slot TDM
188                                        * Frame sync is one word
189                                        * Rising edge is start of frame
190                                        * Internally generated frame sync
191                                        */
192         /* .xtdm     = */ 0x00000003, /* slot 1 and 2 are active (I2S)        */
193         /* .xintctl  = */ 0x00000000, /* sync error,overrun error,clK error   */
194         /* .xstat    = */ 0x000001FF, /* reset any existing status bits       */
195         /* .xevtctl  = */ 0x00000000, /* DMA request is enabled or disabled   */
196         {
197              /* .aclkxctl  = */ 0X000000A7,
198              /* .ahclkxctl = */ 0x0000C000,
199              /* .xclkchk   = */ 0x00000000
200         },
201 };
203 /* McASP channel parameters for ADC input */
204 Mcasp_ChanParams  mcaspRxChanParamADC =
206     0x0004,                   /* number of serializers      */
207     {Mcasp_SerializerNum_0,
208      Mcasp_SerializerNum_1,
209      Mcasp_SerializerNum_2,
210      Mcasp_SerializerNum_3 }, /* serializer index           */
211     &mcaspRcvSetupADC,
212     TRUE,                     /* isDmaDriven                */
213     Mcasp_OpMode_TDM,         /* Mode (TDM/DIT)             */
214     Mcasp_WordLength_32,      /* wordWidth                  */
215     NULL,                     /* void * userLoopJobBuffer   */
216     0,                        /* userLoopJobLength          */
217     NULL,                   /* edmaHandle                 */
218     GblErr,
219     2,                        /* number of TDM channels      */
220     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
221     TRUE,                     /* enableHwFifo */
222     1,                        /* hwFifoEventDMARatio */
223     TRUE,                     /* isDataPacked */
224     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
225 };
227 /* McASP channel parameters for ADC 6 channel input */
228 Mcasp_ChanParams  mcaspRxChanParamADC6ch =
230     0x0003,                   /* number of serializers      */
231     {Mcasp_SerializerNum_0,
232      Mcasp_SerializerNum_1,
233      Mcasp_SerializerNum_2},  /* serializer index           */
234     &mcaspRcvSetupADC,
235     TRUE,
236     Mcasp_OpMode_TDM,         /* Mode (TDM/DIT)             */
237     Mcasp_WordLength_32,
238     NULL,
239     0,
240     NULL,
241     GblErr,
242     2,                        /* number of TDM channels      */
243     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
244     TRUE,                     /* enableHwFifo */
245     1,                        /* hwFifoEventDMARatio */
246     TRUE,                     /* isDataPacked */
247     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
248 };
250 /* McASP channel parameters for ADC stereo input */
251 Mcasp_ChanParams  mcaspRxChanParamADCStereo =
253     0x0001,                   /* number of serializers      */
254     {Mcasp_SerializerNum_0},  /* serializer index           */
255     &mcaspRcvSetupADC,
256     TRUE,
257     Mcasp_OpMode_TDM,         /* Mode (TDM/DIT)             */
258     Mcasp_WordLength_32,
259     NULL,
260     0,
261     NULL,
262     GblErr,
263     2,                        /* number of TDM channels      */
264     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
265     TRUE,                     /* enableHwFifo */
266     1,                        /* hwFifoEventDMARatio */
267     TRUE,                     /* isDataPacked */
268     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
269 };
271 /* McAsp channel parameters for DIR input                 */
272 Mcasp_ChanParams  mcaspRxChanParamDIR =
274         0x0001,                    /* Number of serializers      */
275         {Mcasp_SerializerNum_5},   /* Serializer index           */
276         &mcaspRcvSetupDIR,
277         TRUE,
278         Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
279         Mcasp_WordLength_32,
280         NULL,
281         0,
282         NULL,
283         GblErr,
284         2,                        /* number of TDM channels      */
285         Mcasp_BufferFormat_1SER_MULTISLOT_INTERLEAVED,
286         TRUE,
287         1,                        /* hwFifoEventDMARatio */
288         TRUE,                     /* isDataPacked */
289         Mcasp_WordBitsSelect_MSB  /* wordBitsSelect */
290 };
292 /* McASP LLD channel parameters for HDMI input with 4XI2S:
293  *     When slot size of McASP is configured to 32-bit, HDMI data always come to 16 MSBs of the slot
294  *     and the 16 LSBs are filled with 0's. This is the nature of HDMI and I2S.
295  *     For PCM data, we want all 32 bits in the slot to be transferred to the input buffer:
296  *        - wordWidth = Mcasp_WordLength_32
297  *        - isDataPacked = 1,
298  *        - wordBitsSelect having no effect since wordWidth = slot size
299  *     For bit stream, we want only 16 MSBs in the slot to be transferred to the input buffer:
300  *        - wordWidth = Mcasp_WordLength_16
301  *        - isDataPacked = 1,
302  *        - wordBitsSelect = Mcasp_WordBitsSelect_MSB
303  */
304 Mcasp_ChanParams  mcaspRxChanParamHDMI =
306         0x0004,                    /* number of serializers      */
307         {Mcasp_SerializerNum_12,
308          Mcasp_SerializerNum_13,
309          Mcasp_SerializerNum_14,
310          Mcasp_SerializerNum_15 }, /* serializer index           */
311         &mcaspRcvSetupDIR,
312         TRUE,
313         Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
314 #ifdef INPUT_PCM_ONLY
315         Mcasp_WordLength_32,       /* 32-bit word length, whole slot (size=32) to be transfered */
316 #else
317     Mcasp_WordLength_16,       /* 16-bit word length, MSB or LSB of slot to be transfered, depending on wordBitsSelect */
318 #endif
319         NULL,
320         0,
321         NULL,
322         GblErr,
323         2,                        /* number of TDM channels      */
324         Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
325         TRUE,                     /* enableHwFifo */
326         1,                        /* hwFifoEventDMARatio */
327         TRUE,                     /* isDataPacked, only transfer the selected bits of slot, based on wordWidth and wordBitsSelect */
328         Mcasp_WordBitsSelect_MSB  /* wordBitsSelect, only matters if wordWidth < slot size */
329 };
331 /* McAsp channel parameters for HDMI stereo input with 1XI2S  */
332 Mcasp_ChanParams  mcaspRxChanParamHDMIStereo =
334         0x0001,                    /* Number of serializers      */
335         {Mcasp_SerializerNum_12},   /* Serializer index          */
336         &mcaspRcvSetupDIR,
337         TRUE,
338         Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
339         Mcasp_WordLength_32,
340         NULL,
341         0,
342         NULL,
343         GblErr,
344         2,                        /* number of TDM channels      */
345         Mcasp_BufferFormat_1SER_MULTISLOT_INTERLEAVED,
346         TRUE,                     /* enableHwFifo */
347         1,                        /* hwFifoEventDMARatio */
348         TRUE,                     /* isDataPacked */
349         Mcasp_WordBitsSelect_MSB  /* wordBitsSelect */
350 };
352 /* McAsp channel parameters for DAC output - DAC0            */
353 Mcasp_ChanParams  mcaspTx0ChanParamDAC =
355         0x0004,                   /* number of serializers       */
356         {Mcasp_SerializerNum_0,
357          Mcasp_SerializerNum_1,
358          Mcasp_SerializerNum_2,
359          Mcasp_SerializerNum_3 }, /* serializer index for DAC0   */
360         &mcaspXmtSetupDAC,
361         TRUE,
362         Mcasp_OpMode_TDM,
363         Mcasp_WordLength_32,      /* word width                  */
364         NULL,
365         0,
366         NULL,
367         GblErr,
368         2,                        /* number of TDM channels      */
369         Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
370         TRUE,
371         1,                        /* hwFifoEventDMARatio */
372         TRUE,                     /* isDataPacked */
373         Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
374 };
376 /* McAsp channel parameters for DAC stereo output - DAC0     */
377 Mcasp_ChanParams  mcaspTx0ChanParamDACStereo =
379     0x0001,                   /* number of serializers       */
380     {Mcasp_SerializerNum_0},  /* serializer index for DAC0   */
381     &mcaspXmtSetupDAC,
382     TRUE,
383     Mcasp_OpMode_TDM,
384     Mcasp_WordLength_32,      /* word width                  */
385     NULL,
386     0,
387     NULL,
388     GblErr,
389     2,                        /* number of TDM channels      */
390     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
391     TRUE,
392     1,                        /* hwFifoEventDMARatio */
393     TRUE,                     /* isDataPacked */
394     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
395 };
397 /* McAsp channel parameters for DAC 12 channel output        */
398 Mcasp_ChanParams  mcaspTx0ChanParamDAC12ch =
400     0x0006,                   /* number of serializers       */
401     {Mcasp_SerializerNum_0,
402      Mcasp_SerializerNum_1,
403      Mcasp_SerializerNum_2,
404      Mcasp_SerializerNum_3,
405      Mcasp_SerializerNum_4,
406      Mcasp_SerializerNum_5 }, /* serializer index for DAC0    */
407     &mcaspXmtSetupDAC,
408     TRUE,
409     Mcasp_OpMode_TDM,
410     Mcasp_WordLength_32,      /* word width                  */
411     NULL,
412     0,
413     NULL,
414     GblErr,
415     2,                        /* number of TDM channels      */
416     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
417     TRUE,
418     1,                        /* hwFifoEventDMARatio */
419     TRUE,                     /* isDataPacked */
420     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
421 };
423 /* McAsp channel parameters for DAC 16 channel output        */
424 Mcasp_ChanParams  mcaspTx0ChanParamDAC16ch =
426     0x0008,                   /* number of serializers       */
427     {Mcasp_SerializerNum_0,
428      Mcasp_SerializerNum_1,
429      Mcasp_SerializerNum_2,
430      Mcasp_SerializerNum_3,
431      Mcasp_SerializerNum_4,
432      Mcasp_SerializerNum_5,
433      Mcasp_SerializerNum_6,
434      Mcasp_SerializerNum_7 }, /* serializer index for DAC0    */
435     &mcaspXmtSetupDAC,
436     TRUE,
437     Mcasp_OpMode_TDM,
438     Mcasp_WordLength_32,      /* word width                  */
439     NULL,
440     0,
441     NULL,
442     GblErr,
443     2,                        /* number of TDM channels      */
444     Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1,
445     TRUE,
446     1,                        /* hwFifoEventDMARatio */
447     TRUE,                     /* isDataPacked */
448     Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
449 };
451 /* McAsp channel parameters for transmit - DAC1              */
452 Mcasp_ChanParams  mcaspTx1ChanParam =
454         0x0001,                   /* number of serializers       */
455         {Mcasp_SerializerNum_4},  /* serializer index for DAC0   */
456         &mcaspXmtSetupDAC,
457         TRUE,
458         Mcasp_OpMode_TDM,
459         Mcasp_WordLength_32,      /* word width                  */
460         NULL,
461         0,
462         NULL,
463         GblErr,
464         2,                        /* number of TDM channels      */
465         Mcasp_BufferFormat_1SER_MULTISLOT_INTERLEAVED,
466         TRUE,
467         1,                        /* hwFifoEventDMARatio */
468         TRUE,                     /* isDataPacked */
469         Mcasp_WordBitsSelect_LSB  /* wordBitsSelect */
470 };
473 /**
474  *  \brief    Function called by McASP driver in case of error
475  *
476  *  \return    None
477  */
478 void GblErr(Mcasp_errCbStatus arg)
480         gblErrFlag = 1;
484 /* DAC default configuration parameters */
485 DacConfig  DAC_Cfg =
487         AUDK2G_DAC_AMUTE_CTRL_DAC_DISABLE_CMD,   /* Amute event */
488         0,                          /* Amute control */
489         AUDK2G_DAC_SAMPLING_MODE_AUTO,     /* Sampling mode */
490         AUDK2G_DAC_DATA_FORMAT_I2S,        /* Data format */
491         0,                          /* Soft mute control */
492         AUDK2G_DAC_ATTENUATION_WIDE_RANGE, /* Attenuation mode */
493         AUDK2G_DAC_DEEMP_DISABLE,            /* De-emph control */
494         100                          /* Volume */
495 };
497 /**
498  *  \brief    Configures audio DAC module
499  *
500  *  \return    none
501  */
502 void configAudioDAC(void)
504         Audk2g_STATUS status;
506         audk2g_delay(10000);
508         /* Initialize Audio DAC module */
509         status = audioDacConfig(AUDK2G_DAC_DEVICE_ALL, &DAC_Cfg);
510         if(status != Audk2g_EOK)
511         {
512                 //platform_write("Audio DAC Configuration Failed!\n");
513                 //testRet(1);
514         }
516 #if 0
517 /**
518  *  \brief   Configures McASP module and creates the channel
519  *           for audio Tx and Rx
520  *
521  *  \return    Audk2g_EOK on Success or error code
522  */
523 Audk2g_STATUS mcaspAudioConfig(void)
525     int32_t status;
527         hMcaspDevTx  = NULL;
528         hMcaspDevRx  = NULL;
529         hMcaspTxChan = NULL;
530         hMcaspRxChan = NULL;
532         /* Initialize McASP Tx and Rx parameters */
533         mcaspTxParams = Mcasp_PARAMS;
534         mcaspRxParams = Mcasp_PARAMS;
536         mcaspTxParams.mcaspHwSetup.tx.clk.clkSetupClk = 0x23;  // not used
537         mcaspTxParams.mcaspHwSetup.rx.clk.clkSetupClk = 0x23;  // not used
538         mcaspRxParams.mcaspHwSetup.rx.clk.clkSetupClk = 0x23;
539         mcaspRxParams.mcaspHwSetup.tx.clk.clkSetupClk = 0x63; // Asynchronous. Separate clock and frame sync used by transmit and receive sections.
541 #ifndef INPUT_SPDIF
542         mcaspRxParams.mcaspHwSetup.glb.pdir |= 0x2000000;   //Special case, since for HDMI input - mcasp0 is both Rx & Tx
543         mcaspRxParams.mcaspHwSetup.glb.amute  = 0x2;            // this to ensure one doesn't overwrite the other (rx/tx)
544         mcaspTxParams.mcaspHwSetup.glb.pdir |= 0x2000000;   //Set Amute pin as output for Tx channel
545         mcaspTxParams.mcaspHwSetup.glb.amute  = 0x2;
546 #else
547         mcaspTxParams.mcaspHwSetup.glb.pdir |= 0x2000000;   //Set Amute pin as output for Tx channel
548         mcaspTxParams.mcaspHwSetup.glb.amute  = 0x2;
549 #endif
551         /* Set the HW interrupt number */
552         //mcaspTxParams.hwiNumber = 8;
553         //mcaspRxParams.hwiNumber = 8;
555         /* Initialize eDMA handle */
556 #ifdef INPUT_SPDIF
557         mcaspRxChanParam.edmaHandle  = hEdma1;
558 #else
559         mcaspRxChanParam.edmaHandle  = hEdma0;
560 #endif
562         mcaspTx0ChanParam.edmaHandle = hEdma0;
563         mcaspTx1ChanParam.edmaHandle = hEdma0;
564     
565 #ifdef INPUT_SPDIF
566         /* Bind McASP0 for Tx */
567         status = mcaspBindDev(&hMcaspDevTx, CSL_MCASP_0, &mcaspTxParams);
568         if((status != MCASP_COMPLETED) || (hMcaspDevTx == NULL))
569         {
570                 //IFPRINT(platform_write("mcaspBindDev for Tx Failed\n"));
571                 return (Audk2g_EFAIL);
572         }
574         /* Bind McASP2 for Rx */
575         status = mcaspBindDev(&hMcaspDevRx, CSL_MCASP_2, &mcaspRxParams);
576         if((status != MCASP_COMPLETED) || (hMcaspDevRx == NULL))
577         {
578                 //IFPRINT(platform_write("mcaspBindDev for Rx Failed\n"));
579                 return (Audk2g_EFAIL);
580         }
582 #else /* HDMI or HDMI_STEREO */
583         /* Bind McASP0 for Rx and Tx */
584         status = mcaspBindDev(&hMcaspDevRx, CSL_MCASP_0, &mcaspRxParams);
585         if((status != MCASP_COMPLETED) || (hMcaspDevRx == NULL))
586         {
587                 //IFPRINT(platform_write("mcaspBindDev for Rx Failed\n"));
588                 return (Audk2g_EFAIL);
589         }
591         hMcaspDevTx = hMcaspDevRx;
592 #endif
594         /* Create McASP channel for Tx */
595         status = mcaspCreateChan(&hMcaspTxChan, hMcaspDevTx,
596                                  MCASP_OUTPUT,
597 #ifdef AUDIO_DAC0_TEST
598                                  &mcaspTx0ChanParam,
599 #else
600                                  &mcaspTx1ChanParam,
601 #endif
602 #ifdef IO_LOOPBACK_TEST
603                                  mcaspAppCallbackTx, NULL);
604 #else
605                                  asopMcaspCallback, NULL);
606 #endif
608         if((status != MCASP_COMPLETED) || (hMcaspTxChan == NULL))
609         {
610                 //IFPRINT(platform_write("mcaspCreateChan for Tx Failed\n"));
611                 return (Audk2g_EFAIL);
612         }
614         /* Create McASP channel for Rx */
615         status = mcaspCreateChan(&hMcaspRxChan, hMcaspDevRx,
616                                  MCASP_INPUT,
617                                  &mcaspRxChanParam,
618 #ifdef IO_LOOPBACK_TEST
619                                  mcaspAppCallbackRx, NULL);
620 #else
621                                                          asipMcaspCallback, NULL);
622 #endif
624         if((status != MCASP_COMPLETED) || (hMcaspRxChan == NULL))
625         {
626                 //IFPRINT(platform_write("mcaspCreateChan for Rx Failed\n"));
627                 return (Audk2g_EFAIL);
628         }
630         return (Audk2g_EOK);
631 } /* mcaspAudioConfig */
634 Audk2g_STATUS mcaspRx(void)
639 Audk2g_STATUS mcaspRxDeInit(void)
641         mcaspDeleteChan(hMcaspRxChan);
642         hMcaspRxChan = NULL;
644         mcaspUnBindDev(hMcaspDevRx);
645         hMcaspDevRx = NULL;
647     return (Audk2g_EOK);
650 Audk2g_STATUS mcaspChanReset(Ptr hMcaspDev, Ptr hMcaspChan)
652     if(hMcaspChan != NULL) {
653         mcaspDeleteChan(hMcaspChan);
654     }
657 Audk2g_STATUS mcaspRxReset(void)
659     if(hMcaspRxChan != NULL) {
660                 mcaspDeleteChan(hMcaspRxChan);
661                 hMcaspRxChan = NULL;
662     }
664         return (Audk2g_EOK);
667 Audk2g_STATUS mcaspRxCreate(void)
669     int32_t status;
671         /* Create McASP channel for Rx */
672         status = mcaspCreateChan(&hMcaspRxChan, hMcaspDevRx,
673                                  MCASP_INPUT,
674                                  &mcaspRxChanParam,
675 #ifdef IO_LOOPBACK_TEST
676                                  mcaspAppCallbackRx, NULL);
677 #else
678                                                          asipMcaspCallback, NULL);
679 #endif
681         if((status != MCASP_COMPLETED) || (hMcaspRxChan == NULL))
682         {
683                 //IFPRINT(platform_write("mcaspCreateChan for Rx Failed\n"));
684                 return (Audk2g_EFAIL);
685         }
687         return (Audk2g_EOK);
690 Audk2g_STATUS mcaspTxReset(void)
692     if(hMcaspTxChan != NULL) {
693                 mcaspDeleteChan(hMcaspTxChan);
694                 hMcaspTxChan = NULL;
695     }
697         return (Audk2g_EOK);
700 Audk2g_STATUS mcaspTxCreate(void)
702     int32_t status;
704         /* Create McASP channel for Tx */
705         status = mcaspCreateChan(&hMcaspTxChan, hMcaspDevTx,
706                                  MCASP_OUTPUT,
707                                  &mcaspTx0ChanParam,
708 #ifdef IO_LOOPBACK_TEST
709                                  mcaspAppCallbackTx, NULL);
710 #else
711                                  asopMcaspCallback, NULL);
712 #endif
713         if((status != MCASP_COMPLETED) || (hMcaspTxChan == NULL))
714         {
715                 //IFPRINT(platform_write("mcaspCreateChan for Tx Failed\n"));
716                 return (Audk2g_EFAIL);
717         }
719         return (Audk2g_EOK);
721 #endif
724 Audk2g_STATUS mcaspRecfgWordWidth(Ptr hMcaspChan, uint16_t wordWidth)
726     Mcasp_ChanParams chanParams;
727     int32_t status;
729     chanParams.wordWidth = wordWidth;  //to do: change mcaspControlChan to have wordWidth as the parameter instead of chanParams!!
731     status = mcaspControlChan(hMcaspChan, Mcasp_IOCTL_CHAN_PARAMS_WORD_WIDTH, &chanParams);
733     if((status != MCASP_COMPLETED)) {
734         return (Audk2g_EFAIL);
735     }
736     else {
737         return (Audk2g_EOK);
738     }
739 } /* mcaspRecfgWordWidth */
741 /*======================================================================================
742  *  This function checks if McASP Rx overruns or Tx underruns
743  *====================================================================================*/
744 int mcaspCheckOverUnderRun(Ptr mcaspChanHandle)
746     Mcasp_errCbStatus mcaspErrStat;
748     mcaspControlChan(mcaspChanHandle, Mcasp_IOCTL_CHAN_QUERY_ERROR_STATS, &mcaspErrStat);
750     return (mcaspErrStat.isRcvOvrRunOrTxUndRunErr);
754 /** McASP LLD configuration parameters for all input and output interfaces */
755 mcaspLLDconfig LLDconfigRxDIR =     // for SAP_D10_RX_DIR
757     &mcaspGblSetup,
758     &mcaspRcvSetupDIR, 
759     &mcaspRxChanParamDIR,
760     0x23,
761     0x23,
762     CSL_MCASP_2,
763     MCASP_INPUT,
764     asipMcaspCallback,
765 //    NULL,
766     NULL
767 };
769 mcaspLLDconfig LLDconfigRxADC =     // for SAP_D10_RX_ADC_44100HZ, SAP_D10_RX_ADC_88200HZ
771     &mcaspGblSetup,
772     &mcaspRcvSetupADC, 
773     &mcaspRxChanParamADC,
774     0x23,
775     0x23,
776     CSL_MCASP_1,
777     MCASP_INPUT,
778     asipMcaspCallback,
779 //    NULL,
780     NULL
781 };
783 mcaspLLDconfig LLDconfigRxADC6ch =     // for SAP_D10_RX_ADC_6CH_44100HZ, SAP_D10_RX_ADC_6CH_88200HZ
785     &mcaspGblSetup,
786     &mcaspRcvSetupADC, 
787     &mcaspRxChanParamADC6ch,
788     0x23,
789     0x23,
790     CSL_MCASP_1,
791     MCASP_INPUT,
792     asipMcaspCallback,
793 //    NULL,
794     NULL,
795 };
797 mcaspLLDconfig LLDconfigRxADCStereo =     // for SAP_D10_RX_ADC_STEREO_44100HZ, SAP_D10_RX_ADC_STEREO_88200HZ
799     &mcaspGblSetup,
800     &mcaspRcvSetupADC, 
801     &mcaspRxChanParamADCStereo,
802     0x23,
803     0x23,
804     CSL_MCASP_1,
805     MCASP_INPUT,
806     asipMcaspCallback,
807 //    NULL,
808     NULL
809 };
811 mcaspLLDconfig LLDconfigRxHDMIStereo =   // for SAP_D10_RX_HDMI_STEREO
813     &mcaspGblSetup,
814     &mcaspRcvSetupDIR, 
815     &mcaspRxChanParamHDMIStereo,
816     0x23,
817     0x23,
818     CSL_MCASP_0,
819     MCASP_INPUT,
820     asipMcaspCallback,
821 //    NULL,
822     NULL
823 };
825 mcaspLLDconfig LLDconfigRxHDMI =    // for SAP_D10_RX_HDMI
827     &mcaspGblSetup,
828     &mcaspRcvSetupDIR, 
829     &mcaspRxChanParamHDMI,
830     0x23,
831     0x63,
832     CSL_MCASP_0,
833     MCASP_INPUT,
834     asipMcaspCallback,
835 //    NULL,
836     NULL
837 };
839 /*
840 mcaspLLDconfig LLDconfigTxDIT =    // for SAP_D10_TX_DIT
842     &mcaspGblSetup,
843     &mcaspXmtSetupDIT, 
844     &mcaspTx0ChanParamDIT,
845     NULL,
846     NULL,
847     CSL_MCASP_2
848 };
849 */
851 mcaspLLDconfig LLDconfigTxDAC =    // for SAP_D10_TX_DAC
853     &mcaspGblSetup,
854     &mcaspXmtSetupDAC, 
855     &mcaspTx0ChanParamDAC,
856     0x23,
857     0x63,
858     CSL_MCASP_0,
859     MCASP_OUTPUT,
860     asopMcaspCallback,
861 //    NULL,
862     NULL
863 };
865 mcaspLLDconfig LLDconfigTxDACSlave =    // for SAP_D10_TX_DAC_SLAVE
867     &mcaspGblSetup,
868     &mcaspXmtSetupDACSlave, 
869     &mcaspTx0ChanParamDAC,
870     0x23,
871     0x63,
872     CSL_MCASP_0,
873     MCASP_OUTPUT,
874     asopMcaspCallback,
875 //    NULL,
876     NULL
877 };
879 mcaspLLDconfig LLDconfigTxDACStereo =    // for SAP_D10_TX_STEREO_DAC
881     &mcaspGblSetup,
882     &mcaspXmtSetupDAC, 
883     &mcaspTx0ChanParamDACStereo,
884     0x23,
885     0x63,
886     CSL_MCASP_0,
887     MCASP_OUTPUT,
888     asopMcaspCallback,
889 //    NULL,
890     NULL
891 };
893 mcaspLLDconfig LLDconfigTxDACStereoSlave =    // for SAP_D10_TX_STEREO_DAC_SLAVE
895     &mcaspGblSetup,
896     &mcaspXmtSetupDACSlave, 
897     &mcaspTx0ChanParamDACStereo,
898     0x23,
899     0x63,
900     CSL_MCASP_0,
901     MCASP_OUTPUT,
902     asopMcaspCallback,
903 //    NULL,
904     NULL
905 };
907 mcaspLLDconfig LLDconfigTxDAC12ch =    // for SAP_D10_TX_DAC_12CH
909     &mcaspGblSetup,
910     &mcaspXmtSetupDAC, 
911     &mcaspTx0ChanParamDAC12ch,
912     0x23,
913     0x63,
914     CSL_MCASP_0,
915     MCASP_OUTPUT,
916     asopMcaspCallback,
917 //    NULL,
918     NULL
919 };
921 mcaspLLDconfig LLDconfigTxDAC16ch =    // for SAP_D10_TX_DAC_16CH
923     &mcaspGblSetup,
924     &mcaspXmtSetupDAC, 
925     &mcaspTx0ChanParamDAC16ch,
926     0x23,
927     0x63,
928     CSL_MCASP_0,
929     MCASP_OUTPUT,
930     asopMcaspCallback,
931 //    NULL,
932     NULL
933 };
936 /**
937  *  \brief Create a channel of McASP LLD and return the handle.
938  *
939  *  \return    Audk2g_EOK on Success or error code
940  */
941 Audk2g_STATUS mcasplldChanCreate(mcaspLLDconfig *lldCfg, Ptr *pChanHandle)
943     int32_t status;
945     if(mcaspDevHandles[lldCfg->mcaspPort] == NULL) {
946         /* Initialize McASP Tx and Rx parameters */
947         mcaspParams = Mcasp_PARAMS;
949         //mcaspParams.mcaspHwSetup.tx.clk.clkSetupClk = 0x23;  // not used
950         //mcaspParams.mcaspHwSetup.rx.clk.clkSetupClk = 0x23;  // not used
951         mcaspParams.mcaspHwSetup.rx.clk.clkSetupClk = lldCfg->clkSetupClkRx;
952         mcaspParams.mcaspHwSetup.tx.clk.clkSetupClk = lldCfg->clkSetupClkTx;
954         mcaspParams.mcaspHwSetup.glb.pdir  = lldCfg->mcaspSetupGbl->pdir;
955         mcaspParams.mcaspHwSetup.glb.amute = lldCfg->mcaspSetupGbl->amute;
957         status = mcaspBindDev(&mcaspDevHandles[lldCfg->mcaspPort], lldCfg->mcaspPort, &mcaspParams);
958         if((status != MCASP_COMPLETED) || (mcaspDevHandles[lldCfg->mcaspPort] == NULL)) {
959             //IFPRINT(platform_write("mcaspBindDev for Tx Failed\n"));
960             return (Audk2g_EFAIL);
961         }
962     }
964     lldCfg->hMcaspDev = mcaspDevHandles[lldCfg->mcaspPort];
966     lldCfg->mcaspChanParams->mcaspSetup = lldCfg->mcaspSetupData;
967     if(lldCfg->mcaspPort == CSL_MCASP_0) {
968         lldCfg->mcaspChanParams->edmaHandle = hEdma0;
969     }
970     else {
971         lldCfg->mcaspChanParams->edmaHandle = hEdma1;
972     }
974     /* Create McASP channel for Tx */
975     *pChanHandle = NULL;
976     status = mcaspCreateChan(pChanHandle, lldCfg->hMcaspDev,
977                              lldCfg->chanMode, lldCfg->mcaspChanParams,
978                              lldCfg->cbFxn, NULL);
980     if((status != MCASP_COMPLETED) || (*pChanHandle == NULL))
981     {
982         //IFPRINT(platform_write("mcaspCreateChan for Tx Failed\n"));
983         return (Audk2g_EFAIL);
984     }
986     return (Audk2g_EOK);
987 }  /* mcasplldChanCreate */
989 /* Nothing past this point */