Quantcast
Channel: Forums - Recent Threads
Viewing all articles
Browse latest Browse all 262198

TDA2: clock issue when multiple displays

$
0
0

Part Number:TDA2

Hi, all

My project have 2 LCD output. Refer to the "chains_lvdsVipDualCam_DualDisplay" usecase I write a configuration here.

Void chains_vipMultiCamEncodeAdasDualDisplay_SetDisplayLinkPrms (
                                  DisplayLink_CreateParams *pDpi1Prm,
                                  DisplayLink_CreateParams *pDpi2Prm,
                                  UInt32 width, UInt32 height)
{
    pDpi1Prm->displayId = DISPLAY_LINK_INST_DSS_VID1;
    pDpi1Prm->displayScanFormat = SYSTEM_SF_PROGRESSIVE;
    pDpi1Prm->rtParams.tarWidth = width;
    pDpi1Prm->rtParams.tarHeight = height;
    
    pDpi2Prm->displayId = DISPLAY_LINK_INST_DSS_VID2;
    pDpi2Prm->displayScanFormat = SYSTEM_SF_PROGRESSIVE;
    pDpi2Prm->rtParams.tarWidth = width;
    pDpi2Prm->rtParams.tarHeight = height;
}



Int32 chains_vipMultiCamEncodeAdasDualDisplay_StartDisplayCtrl(
        chains_vipMultiCamEncodeAdasDualDisplayObj *pUcObj, Void *appObj)
{
    Int32 status = OSA_SOK;
    chains_vipMultiCamEncodeAdasDualDisplayAppObj *pObj
        = (chains_vipMultiCamEncodeAdasDualDisplayAppObj*)appObj;
    DisplayCtrlLink_ConfigParams *pPrm = &pObj->dctrlCfgPrms;
    DisplayCtrlLink_VencInfo *pVInfo;
    DisplayCtrlLink_OvlyParams *pOvlyPrms;
    DisplayCtrlLink_OvlyPipeParams *pPipeOvlyPrms;
    DisplayCtrlLink_OvlyParams ovlyPrms[2];

    /* Set the link id */
    pObj->displayCtrlLinkId = SYSTEM_LINK_ID_DISPLAYCTRL;

    /* Number of valid entries in vencInfo array */
    pPrm->numVencs = 2;
    /* Bitmask of tied vencs. Two vencs, which uses same pixel clock and whose vsync are synchronized, can be tied together. */
    pPrm->tiedVencs = 0;
    /* Activate the HDMI BSP layer in the Dctrl link. This is not required if there is no HDMI display in use. */
    pPrm->deviceId = DISPLAYCTRL_LINK_USE_LCD;

	/* Configure LCD */
    pVInfo                                  = &pPrm->vencInfo[0];
    pVInfo->vencId                          = SYSTEM_DCTRL_DSS_VENC_LCD1;
    //pVInfo->vencOutputInfo.fidPolarity      = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.actVidPolarity   = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.dvoFormat        = SYSTEM_DCTRL_DVOFMT_BT1120_EMBSYNC;
    pVInfo->vencOutputInfo.vsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.hsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.dataFormat       = SYSTEM_DF_YUV422I_YUYV;
    pVInfo->vencOutputInfo.videoIfWidth     = SYSTEM_VIFW_16BIT;
    pVInfo->vencOutputInfo.aFmt             = SYSTEM_DCTRL_A_OUTPUT_MAX;
    
    pVInfo->outputPort                      = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
    pVInfo->mInfo.standard                  =	SYSTEM_STD_CUSTOM;
    pVInfo->mInfo.width                     =   1280;
    pVInfo->mInfo.height                    =   720;
    pVInfo->mInfo.scanFormat                =   SYSTEM_SF_PROGRESSIVE;
    //pVInfo->mInfo.pixelClock                =   74250U;
    pVInfo->mInfo.pixelClock                =   28125U;/* 28.125Mhz */
    //pVInfo->mInfo.pixelClock                =   26250U;/* 26.25Mhz */
    pVInfo->mInfo.fps                       =   25U;
    pVInfo->mInfo.hFrontPorch               =   111u;
    pVInfo->mInfo.hBackPorch                =   111u;
    pVInfo->mInfo.hSyncLen                  =   212u;/**/
    pVInfo->mInfo.vFrontPorch               =   14u;
    pVInfo->mInfo.vBackPorch                =   14u;
    pVInfo->mInfo.vSyncLen                  =   3u;
    pVInfo->vencDivisorInfo.divisorLCD      =   1;
    pVInfo->vencDivisorInfo.divisorPCD      =   1;
    pVInfo->mode 							= 0;
    pVInfo->isInputPipeConnected[0]         = TRUE;
    pVInfo->isInputPipeConnected[1]         = FALSE;
    pVInfo->isInputPipeConnected[2]         = FALSE;
    pVInfo->isInputPipeConnected[3]         = FALSE;
    pVInfo->writeBackEnabledFlag            = FALSE;


    /* Configure LCD overlay params */
    pOvlyPrms                               = &ovlyPrms[0];
    pOvlyPrms->vencId                       = pVInfo->vencId;
    pOvlyPrms->deltaLinesPerPanel           = 0;
    pOvlyPrms->alphaBlenderEnable           = 0;
    pOvlyPrms->backGroundColor              = 0x10;
    pOvlyPrms->colorKeyEnable               = 1;
    pOvlyPrms->colorKeySel                  = SYSTEM_DSS_DISPC_TRANS_COLOR_KEY_SRC;
    pOvlyPrms->ovlyOptimization             = SYSTEM_DSS_DISPC_OVLY_FETCH_ALLDATA;
    pOvlyPrms->transColorKey                = DRAW2D_TRANSPARENT_COLOR;

    /* Setting LCD overlay pipe parameters */
    pPipeOvlyPrms                           = &pObj->pipeParams[0];
    pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_VID1;
    pPipeOvlyPrms->globalAlpha              = 0xFF;
    pPipeOvlyPrms->preMultiplyAlpha         = 0;
    pPipeOvlyPrms->zorderEnable             = TRUE;
    pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER0;



	/* Configure LCD2 */
    pVInfo                                  = &pPrm->vencInfo[1];
    pVInfo->vencId                          = SYSTEM_DCTRL_DSS_VENC_LCD2;
    //pVInfo->vencOutputInfo.fidPolarity      = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.actVidPolarity   = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.dvoFormat        = SYSTEM_DCTRL_DVOFMT_BT1120_EMBSYNC;
    pVInfo->vencOutputInfo.vsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.hsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.dataFormat       = SYSTEM_DF_YUV422I_YUYV;
    pVInfo->vencOutputInfo.videoIfWidth     = SYSTEM_VIFW_16BIT;
    pVInfo->vencOutputInfo.aFmt             = SYSTEM_DCTRL_A_OUTPUT_MAX;
    
    pVInfo->outputPort                      = SYSTEM_DCTRL_DSS_DPI2_OUTPUT;
    pVInfo->mInfo.standard                  =	SYSTEM_STD_CUSTOM;
    pVInfo->mInfo.width                     =   1280;
    pVInfo->mInfo.height                    =   720;
    pVInfo->mInfo.scanFormat                =   SYSTEM_SF_PROGRESSIVE;
    //pVInfo->mInfo.pixelClock                =   74250U;
    pVInfo->mInfo.pixelClock                =   28125U;/* 28.125Mhz */
    //pVInfo->mInfo.pixelClock                =   26250U;/* 26.25Mhz */
    pVInfo->mInfo.fps                       =   25U;
    pVInfo->mInfo.hFrontPorch               =   111u;
    pVInfo->mInfo.hBackPorch                =   111u;
    pVInfo->mInfo.hSyncLen                  =   212u;/**/
    pVInfo->mInfo.vFrontPorch               =   14u;
    pVInfo->mInfo.vBackPorch                =   14u;
    pVInfo->mInfo.vSyncLen                  =   3u;
    pVInfo->vencDivisorInfo.divisorLCD      =   1;
    pVInfo->vencDivisorInfo.divisorPCD      =   1;
    pVInfo->mode 							= 0;
    pVInfo->isInputPipeConnected[0]         = FALSE;
    pVInfo->isInputPipeConnected[1]         = TRUE;
    pVInfo->isInputPipeConnected[2]         = FALSE;
    pVInfo->isInputPipeConnected[3]         = FALSE;
    pVInfo->writeBackEnabledFlag            = FALSE;


    /* Configure LCD overlay params */
    pOvlyPrms                               = &ovlyPrms[1];
    pOvlyPrms->vencId                       = pVInfo->vencId;
    pOvlyPrms->deltaLinesPerPanel           = 0;
    pOvlyPrms->alphaBlenderEnable           = 0;
    pOvlyPrms->backGroundColor              = 0x10;
    pOvlyPrms->colorKeyEnable               = 1;
    pOvlyPrms->colorKeySel                  = SYSTEM_DSS_DISPC_TRANS_COLOR_KEY_SRC;
    pOvlyPrms->ovlyOptimization             = SYSTEM_DSS_DISPC_OVLY_FETCH_ALLDATA;
    pOvlyPrms->transColorKey                = DRAW2D_TRANSPARENT_COLOR;

    /* Setting LCD overlay pipe parameters */
    pPipeOvlyPrms                           = &pObj->pipeParams[1];
    pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_VID2;
    pPipeOvlyPrms->globalAlpha              = 0xFF;
    pPipeOvlyPrms->preMultiplyAlpha         = 0;
    pPipeOvlyPrms->zorderEnable             = TRUE;
    pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER0;



	/* Create, configure and start the Display Ctrl link */
    status = System_linkCreate(pObj->displayCtrlLinkId,
                                NULL,
                                0);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    status = System_linkControl(pObj->displayCtrlLinkId,
                                DISPLAYCTRL_LINK_CMD_SET_CONFIG,
                                &pObj->dctrlCfgPrms,
                                sizeof(DisplayCtrlLink_ConfigParams),
                                TRUE);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    status = System_linkControl(pObj->displayCtrlLinkId,
                                DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
                                &ovlyPrms[0],
                                sizeof(DisplayCtrlLink_OvlyParams),
                                TRUE);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    status = System_linkControl(pObj->displayCtrlLinkId,
                                DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
                                &ovlyPrms[1],
                                sizeof(DisplayCtrlLink_OvlyParams),
                                TRUE);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    status = System_linkControl(pObj->displayCtrlLinkId,
                                DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                &pObj->pipeParams[0],
                                sizeof(DisplayCtrlLink_OvlyPipeParams),
                                TRUE);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    status = System_linkControl(pObj->displayCtrlLinkId,
                                DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                &pObj->pipeParams[1],
                                sizeof(DisplayCtrlLink_OvlyPipeParams),
                                TRUE);
    UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);

    return status;
}

Then I use "dss_clockdumps.sh" script to dump the clock. I find that the LCD2 clock overlay LCD1, and LCD1 clock is 0Hz.

(Please visit the site to view this file)

Is there any problem with my configuration? Please help me to check it.

Best Regards

Jaye


Viewing all articles
Browse latest Browse all 262198

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>