Tested McASP configuration for I/O shortcut HDMIStereo.
authorJianzhong Xu <a0869574@ti.com>
Thu, 1 Mar 2018 16:28:52 +0000 (11:28 -0500)
committerJianzhong Xu <a0869574@ti.com>
Thu, 1 Mar 2018 16:28:52 +0000 (11:28 -0500)
Removed hard coded macros in ASIT that depend on input interface.

pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c
pasdk/test_dsp/application/itopo/evmk2g/sap_d10.c
pasdk/test_dsp/framework/audioStreamInpProc.h
pasdk/test_dsp/framework/audioStreamInpProcNewIO.c
pasdk/test_dsp/framework/itopo/params.c
pasdk/test_dsp/mib/mib.c

index ef09d1e2171e822d60cd14943f371fc8e12ad3d8..c6dba5f10de5b49ff26a3df49eb7988d269aa5f2 100644 (file)
@@ -276,7 +276,7 @@ Mcasp_ChanParams  mcaspRxChanParamDIR =
        &mcaspRcvSetupDIR,
        TRUE,
        Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
-       Mcasp_WordLength_32,
+       Mcasp_WordLength_16,       /* 16-bit by default          */
        NULL,
        0,
        NULL,
@@ -311,11 +311,7 @@ Mcasp_ChanParams  mcaspRxChanParamHDMI =
        &mcaspRcvSetupDIR,
        TRUE,
        Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
-#ifdef INPUT_PCM_ONLY
-       Mcasp_WordLength_32,       /* 32-bit word length, whole slot (size=32) to be transfered */
-#else
     Mcasp_WordLength_16,       /* 16-bit word length, MSB or LSB of slot to be transfered, depending on wordBitsSelect */
-#endif
        NULL,
        0,
        NULL,
@@ -336,7 +332,7 @@ Mcasp_ChanParams  mcaspRxChanParamHDMIStereo =
        &mcaspRcvSetupDIR,
        TRUE,
        Mcasp_OpMode_TDM,          /* Mode (TDM/DIT)             */
-       Mcasp_WordLength_32,
+    Mcasp_WordLength_16,       /* 16-bit by default          */
        NULL,
        0,
        NULL,
@@ -762,7 +758,7 @@ mcaspLLDconfig LLDconfigRxDIR =     // for SAP_D10_RX_DIR
     CSL_MCASP_2,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -776,7 +772,7 @@ mcaspLLDconfig LLDconfigRxADC =     // for SAP_D10_RX_ADC_44100HZ, SAP_D10_RX_AD
     CSL_MCASP_1,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -790,7 +786,7 @@ mcaspLLDconfig LLDconfigRxADC6ch =     // for SAP_D10_RX_ADC_6CH_44100HZ, SAP_D1
     CSL_MCASP_1,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL,
 };
 
@@ -804,7 +800,7 @@ mcaspLLDconfig LLDconfigRxADCStereo =     // for SAP_D10_RX_ADC_STEREO_44100HZ,
     CSL_MCASP_1,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -814,11 +810,11 @@ mcaspLLDconfig LLDconfigRxHDMIStereo =   // for SAP_D10_RX_HDMI_STEREO
     &mcaspRcvSetupDIR, 
     &mcaspRxChanParamHDMIStereo,
     0x23,
-    0x23,
+    0x63,
     CSL_MCASP_0,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -832,7 +828,7 @@ mcaspLLDconfig LLDconfigRxHDMI =    // for SAP_D10_RX_HDMI
     CSL_MCASP_0,
     MCASP_INPUT,
     asipMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -858,7 +854,7 @@ mcaspLLDconfig LLDconfigTxDAC =    // for SAP_D10_TX_DAC
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -872,7 +868,7 @@ mcaspLLDconfig LLDconfigTxDACSlave =    // for SAP_D10_TX_DAC_SLAVE
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -886,7 +882,7 @@ mcaspLLDconfig LLDconfigTxDACStereo =    // for SAP_D10_TX_STEREO_DAC
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -900,7 +896,7 @@ mcaspLLDconfig LLDconfigTxDACStereoSlave =    // for SAP_D10_TX_STEREO_DAC_SLAVE
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -914,7 +910,7 @@ mcaspLLDconfig LLDconfigTxDAC12ch =    // for SAP_D10_TX_DAC_12CH
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
@@ -928,7 +924,7 @@ mcaspLLDconfig LLDconfigTxDAC16ch =    // for SAP_D10_TX_DAC_16CH
     CSL_MCASP_0,
     MCASP_OUTPUT,
     asopMcaspCallback,
-//    NULL,
+    NULL,
     NULL
 };
 
index 15853f3071a5bbd02edd9b05f2b39946168508aa..706ebc467a1fb6ad183947b3133c9e8acb5cd882 100644 (file)
@@ -558,13 +558,14 @@ const SAP_D10_Rx_Params SAP_D10_RX_HDMI_STEREO =
     sizeof (SAP_D10_Rx_Params),                 // size
     "SAP",                                      // name
     MCASP_DEV0,                                 // moduleNum --> mcasp #
-    (Void *)&rxConfigDIR,                       // pConfig
-    4,                                         // wordSize (unused)
+    //(Void *)&rxConfigDIR,                     // pConfig
+    (Void *)&LLDconfigRxHDMIStereo,             // pConfig
+    4,                                          // wordSize (unused)
     -1,                                         // precision (unused)
     D10_sapControl,                             // control
-    0x00001000,                                // pinMask
+    0x00001000,                                 // pinMask
     (D10_MODE_HDMI << D10_MODE_SHIFT) |
-    (D10_MCLK_HDMI << D10_MCLK_SHIFT),           // mode
+    (D10_MCLK_HDMI << D10_MCLK_SHIFT),          // mode
     0,0                                         // unused[2]
 };
 
index bb7184bc09b6d34b0535b5955f8ee4224906fea0..1a6e373fd1d0713fba53a23a8eec861a09eaeab2 100644 (file)
@@ -260,6 +260,7 @@ typedef struct PAF_AST_InpIO {
     Int sourceSelect;
     Int sourceProgram;
 
+    Int stride;
     Int       preSyncState;
     Int       numPrimeXfers;
     Int       mcaspXferErr;
index 7e4b482f81b7115a738d56b69dc9b0e69b5a2700..1ad72dd65d4a0ca9ed0612347ef7ad730d0ea2bd 100644 (file)
@@ -870,7 +870,8 @@ int asitIoCompsInit(PAF_AST_InpBuf * pInpBuf, PAF_AST_IoInp * pInpIo)
     ioDataParam_t  ioDataCfg;
     ioPhyCtl_t     ioPhyCtl;
 
-    pInpIo->phyXferSize = INPUT_FRAME_SIZE_DEF;
+    //pInpIo->phyXferSize = INPUT_FRAME_SIZE_DEF;
+    pInpIo->phyXferSize = pInpIo->stride * NUM_CYCLE_PER_FRAME_DEF * WORD_SIZE_BITSTREAM;
 
     if(pInpIo->firstTimeInit) {
         TRACE_VERBOSE0("Initialize I/O BUFF and I/O PHY.");
@@ -923,7 +924,7 @@ int asitIoCompsInit(PAF_AST_InpBuf * pInpBuf, PAF_AST_IoInp * pInpIo)
         ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE;
         ioPhyCtl.params.xferFrameSize = pInpIo->phyXferSize;
         ioPhyControl(pInpIo->hIoPhy, &ioPhyCtl);
-
+#if 0
         // If previous stream before reset was PCM, reconfigure McASP LLD to receive 16-bit packed bits
         if(!pInpIo->swapData) {
             Int mcaspErr;
@@ -936,7 +937,7 @@ int asitIoCompsInit(PAF_AST_InpBuf * pInpBuf, PAF_AST_IoInp * pInpIo)
             pInpIo->swapData = TRUE;
             TRACE_VERBOSE0("Reconfigure McASP word length and start swapping data.");
         }
-
+#endif
         // Start PHY transfer
         TRACE_VERBOSE0("Start I/O PHY transfer.");
         asitPhyTransferStart(pInpIo);
@@ -950,7 +951,7 @@ int asitIoCompsInit(PAF_AST_InpBuf * pInpBuf, PAF_AST_IoInp * pInpIo)
  *====================================================================================*/
 void asitProcInit(PAF_AST_IoInp  *pInp, asipDecProc_t *pDec)
 {
-    pInp->swapData = TRUE;
+//    pInp->swapData = TRUE;
     pInp->pcmSwitchHangOver = INPUT_SWITCH_HANGOVER;
     pDec->initDone = FALSE;
     pInp->numFrameReceived = 0;
@@ -982,6 +983,7 @@ void asitPhyTransferComplete(PAF_AST_IoInp * pInpIo)
     ioPhyXferComplete(pInpIo->hIoPhy, pInpIo->swapData);
 } /* asitPhyTransferComplete */
 
+#if 0
 Int asitRecfgPhyXfer(PAF_AST_IoInp *pInp, size_t xferSize)
 {
     ioPhyCtl_t ioPhyCtl;
@@ -1007,6 +1009,7 @@ Int asitRecfgPhyXfer(PAF_AST_IoInp *pInp, size_t xferSize)
     return ASIT_NO_ERR;
 
 } /* asitRecfgPhyXfer */
+#endif
 
 /*======================================================================================
  *  McASP LLD call back function
@@ -1090,13 +1093,13 @@ Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AS
     Audk2g_STATUS status;
     mcaspLLDconfig *lldCfg;
     Ptr mcaspChanHandle;
-    Int zMD, device;
+    Int zMD, interface;
 
     zMD = pAstCfg->masterDec;
 
-    device = pAstCfg->xInp[zMD].inpBufStatus.sioSelect; // obtain SIO select for input
+    interface = pAstCfg->xInp[zMD].inpBufStatus.sioSelect; // obtain SIO select for input
 
-    if (device <= 0) {
+    if (interface <= 0) {
         pInp->pRxParams = NULL;
 
         return ASIT_NO_ERR;
@@ -1104,7 +1107,7 @@ Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AS
 
     // Initialize D10
     if(!d10Initialized) {
-        void * pD10Params = (void *)pQ->devinp->x[device];
+        void * pD10Params = (void *)pQ->devinp->x[interface];
 
         /* Initialize McASP HW details */
         McaspDevice_init();
@@ -1114,18 +1117,37 @@ Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AS
         d10Initialized = 1;
     }
 
-    if(pInp->hMcaspChan == NULL) {
-        /* Create an McASP LLD channel */
-        lldCfg = (mcaspLLDconfig *)pQ->devinp->x[device]->sio.pConfig;
+    /* Get the McASP LLD channel for this interface. Create one if not yet created. */
+    lldCfg = (mcaspLLDconfig *)pQ->devinp->x[interface]->sio.pConfig;
+    if(lldCfg->hMcaspChan == NULL) {
+        mcaspChanHandle = NULL;
         status = mcasplldChanCreate(lldCfg, &mcaspChanHandle);
         if(status != Audk2g_EOK) {
             Log_info0("McASP channel creation failed!\n");
             return ASIT_ERR_MCASP_CFG;
         }
 
-        pInp->hMcaspChan = mcaspChanHandle;
+        lldCfg->hMcaspChan = mcaspChanHandle;
+    }
+
+    pInp->pRxParams = pQ->devinp->x[interface];
+    pInp->hMcaspChan = lldCfg->hMcaspChan;
+    pInp->stride     = lldCfg->mcaspChanParams->noOfSerRequested * 2;  // 2 for stereo
 
-        pInp->pRxParams = pQ->devinp->x[device];
+    /* Set flag to swap HDMI data if it is 4xI2S and word length is 16 */
+    if(   (lldCfg->mcaspChanParams->wordWidth == Mcasp_WordLength_16)
+        &&(lldCfg->mcaspChanParams->noOfSerRequested == 4)
+      ) {
+        Int mcaspErr;
+        mcaspErr = mcaspRecfgWordWidth(pInp->hMcaspChan, Mcasp_WordLength_16);
+        if(mcaspErr != Audk2g_EOK) {
+            return ASIT_ERR_MCASP_CFG;
+        }
+
+        pInp->swapData = TRUE;
+    }
+    else {
+        pInp->swapData = FALSE;
     }
 
     return ASIT_NO_ERR;
@@ -1401,7 +1423,7 @@ Int asitUpdateIoComps(const PAF_ASIT_Params *pP, PAF_AST_Config *pAstCfg,
     // Decide frame length for I/O DATA and I/O PHY
     if(autoDetStatus->syncState == IODATA_SYNC_PCM) {
         // For PCM, I/O frame length is decode frame length multiplied by stride
-        ioFrameLength = decFrameLength * INPUT_STRIDE;
+        ioFrameLength = decFrameLength * pInp->stride;
 
         pBufConfig->sizeofElement = WORD_SIZE_PCM;
         pBufConfig->frameLength   = pBufConfig->lengthofData = ioFrameLength;
@@ -1448,7 +1470,7 @@ Int asitUpdateIoComps(const PAF_ASIT_Params *pP, PAF_AST_Config *pAstCfg,
         pInp->phyXferSize = ioFrameLength*WORD_SIZE_BITSTREAM;
     }
 
-    pBufConfig->stride = INPUT_STRIDE;   // common for PCM and bitstream
+    pBufConfig->stride = pInp->stride;   // common for PCM and bitstream
 
     // Configure I/O PHY transfer size
     ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE;
index aad3afcbfdf1b636746f314ca8686eae6d50e6fe..0938e75a2efebbd8f6a28f249345fd92e82240bb 100644 (file)
@@ -512,7 +512,7 @@ const IALG_MemRec inpMemTabPrimary[] =
     // SDRAM circular buffer
     // 2 buffers * 256 samples/buffer * 8 words/sample * 3 bytes/word
     {
-        (4 * 60 * 1024) + 2,                                    // size 184320 + 1 16-bit word for EDMA padding
+        (6 * 60 * 1024) + 2,                                    // size 184320 + 1 16-bit word for EDMA padding
         //180 * 1024,                                           // size
         //6 * 60 * 1024,                                        // size
         128,                                                    // alignment
index 504cef8ce70bf33a8c304ffe531125b4377f03f9..2fd92e19968bbc7eb8765b3cc57167ff23be6b54 100644 (file)
@@ -224,19 +224,25 @@ const MdUns iecFrameLength[23] =
 {
     0,
     1536*2,
-    0, 0, 0,
+    0,
+    0,
+    0,
     1152*2,
     0,
     1024*2,
-    0, 0, 0,
+    0,
+    0,
+    0,
     512*2,
     1024*2,
     2048*2,
-    0, 0,
+    0,
+    0,
     15*1024*2, //THD
     1*1024, // DTSHD, actual framelength is adjusted by DTSsubType
     4096*2,
-    0,0,
+    0,
+    0,
     1536*2*4,
     15*1024*2 //THD
 };