This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/TDA2EVM5777: how to configer 3 lcd simultaneously

Part Number: TDA2EVM5777

Tool/software: Linux

could you please help me out about maximum number of lcd supported by tda2xx?

I have seen lcd.h which stat that max is supported is 2 so would it still support if i change and try to connect 3 lcd altogether?

  • Hi Yash,

    TDA2xx can support three LCDs as well as one HDMI display simultaneously. You can change this macro to 3 and make necessary display controller changes (overlay, etc.) and have three LCD displays. What is the use case you want to run?

    Regards,
    Rishabh
  • Thanks for your quick response

    my usecase flow is

    UseCase: chains_lvdsVipDualCam_DualDisplay
     
    Capture -> Select_Capture
    Select_Capture -> Display_LCD1
    Select_Capture -> Display_LCD2
     
    GrpxSrc -> Display_Grpx

    i take reference of dual cam dual display what i want to do is display on lcd instand of hdmi i have seen chains_comman.c file and i have configured parameter for lcd instand of hdmi how can i make this work

  • Hi Yash,

    You need to add support for second LCD in your display controller tree and have two LCD outputs. This is not a parameter that you can just change and it will work. You need to look at the below files to see how venc info is set and modify it accrodingly: vision_sdk\apps\src\rtos\usecases\common\chains_common.c and vision_sdk\links_fw\src\rtos\links_ipu\display_ctrl\displayCtrlLink_drv.c.

    Regards,
    Rishabh
  • Hi Rishabh,

    Is there any reference use-case to make 2 LCD's work simultaneously ?

    Regards,
    Khilav
  • Hi Khilav,

    Unfortunately there is no reference use case where two LCDs are working simultaneously. You can use the present code as a reference to write APIs for second LCD. You should modify the parameters to use second VENC and accordingly set the DSS path in overlay.

    Regards,
    Rishabh
  • Hi Rishabh,

    Thank you for your prompt reply.

    We made the following changes to get the second LCD working simultaneously (along with the HDMI and the other LCD):

    File : chains_common.c

    /* Configure LCD - 2 */
    pVInfo = &pPrm->vencInfo[2];
    pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD2;
    pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI2_OUTPUT;

    if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
    (BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
    {
    /* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
    pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
    pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
    }

    pVInfo->vencOutputInfo.vsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
    pVInfo->vencOutputInfo.hsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;

    /* Below are of dont care for EVM LCD */
    pVInfo->vencOutputInfo.fidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    pVInfo->vencOutputInfo.actVidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;

    pVInfo->mInfo.standard = SYSTEM_STD_CUSTOM;
    pVInfo->mInfo.scanFormat = SYSTEM_SF_PROGRESSIVE;
    pVInfo->mInfo.width = displayLCD2Width;
    pVInfo->mInfo.height = displayLCD2Height;

    if(lcdType == CHAINS_DISPLAY_TYPE_LCD_7_INCH)
    {
    pVInfo->mInfo.pixelClock = 29232u;
    pVInfo->mInfo.fps = 60U;
    pVInfo->mInfo.hFrontPorch = 40u;
    pVInfo->mInfo.hBackPorch = 40u;
    pVInfo->mInfo.hSyncLen = 48u;
    pVInfo->mInfo.vFrontPorch = 13u;
    pVInfo->mInfo.vBackPorch = 29u;
    pVInfo->mInfo.vSyncLen = 3u;
    pVInfo->vencDivisorInfo.divisorLCD = 1;
    pVInfo->vencDivisorInfo.divisorPCD = 4;
    }
    else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_10_INCH)
    {
    pVInfo->mInfo.pixelClock = 74500U;
    pVInfo->mInfo.fps = 60U;
    pVInfo->mInfo.hBackPorch = 80U;
    pVInfo->mInfo.hSyncLen = 62U;
    pVInfo->mInfo.hFrontPorch = 48U;
    pVInfo->mInfo.vBackPorch = 12U;
    pVInfo->mInfo.vSyncLen = 35U;
    pVInfo->mInfo.vFrontPorch = 6U;
    pVInfo->vencDivisorInfo.divisorLCD = 1;
    pVInfo->vencDivisorInfo.divisorPCD = 1;
    }
    else if (lcdType ==
    CHAINS_DISPLAY_TYPE_LDC_10_INCH_LCDCTRL_TC358778_MIPI_DSI_1920_1200)
    {
    pVInfo->mInfo.pixelClock = 147000U;
    pVInfo->mInfo.fps = 60U;
    pVInfo->mInfo.hBackPorch = 30U;
    pVInfo->mInfo.hSyncLen = 16U;
    pVInfo->mInfo.hFrontPorch = 32U;
    pVInfo->mInfo.vBackPorch = 16U;
    pVInfo->mInfo.vSyncLen = 2U;
    pVInfo->mInfo.vFrontPorch = 7U;
    pVInfo->vencDivisorInfo.divisorLCD = 1;
    pVInfo->vencDivisorInfo.divisorPCD = 1;
    }
    else
    UTILS_assert(NULL);

    /* Configure LCD - 2 overlay params */
    pVInfo->mode = 0;
    pVInfo->isInputPipeConnected[0] = FALSE;
    pVInfo->isInputPipeConnected[1] = FALSE;
    pVInfo->isInputPipeConnected[2] = TRUE;
    pVInfo->isInputPipeConnected[3] = FALSE;
    pVInfo->writeBackEnabledFlag = FALSE;

    pVInfo->vencOutputInfo.dataFormat = SYSTEM_DF_RGB16_565;
    pVInfo->vencOutputInfo.dvoFormat = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
    pVInfo->vencOutputInfo.videoIfWidth = SYSTEM_VIFW_16BIT;

    pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
    pVInfo->vencOutputInfo.aFmt = SYSTEM_DCTRL_A_OUTPUT_MAX;

    pOvlyPrms = &ovlyPrms[2];
    pOvlyPrms->vencId = pVInfo->vencId;
    pOvlyPrms->deltaLinesPerPanel = 0;
    pOvlyPrms->alphaBlenderEnable = 0;
    pOvlyPrms->backGroundColor = 0x0;
    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;

    ---> Are these changes correct ?

    ---> Please let me know if we need to change anything is "displayLinkCtrl_drv.c" file. If so then kindly point me out the exact changes that need to be done, as it is very difficult for me to understand its codebase.

    We are extremely short of time hence an early response from your side will be highly appreciated.

    Regards,
    Khilav Soni
  • Soni,

    In addition, you also need to change numVencs member of the DisplayCtrlLink_ConfigParams. This parameter essentially tells umber of valid entries in vencInfo array. Since you are updating vencInfo[2], you need to set this variable to 3, assuming the other two entries are valid.

    Rgds,
    Brijesh
  • Brijesh,

    I have already done the above change. Please refer the following lines :

       Int32 status;

       DisplayCtrlLink_ConfigParams *pPrm = &gChains_commonObj.dctrlCfgPrms;

       DisplayCtrlLink_VencInfo *pVInfo;

       DisplayCtrlLink_OvlyParams *pOvlyPrms;

       DisplayCtrlLink_OvlyPipeParams *pPipeOvlyPrms;

       DisplayCtrlLink_OvlyParams ovlyPrms[3];

       /* Set the link id */

       gChains_commonObj.displayCtrlLinkId = SYSTEM_LINK_ID_DISPLAYCTRL;

       /* Number of valid entries in vencInfo array */

       pPrm->numVencs = 3;

       /* Bitmask of tied vencs. Two vencs, which uses same pixel clock and whose vsync are synchronized, can be tied together. */

       pPrm->tiedVencs = 0;

    --> Are the above changes okay ?

    --> Please also tell me the changes to be done in "displayLinkCtrl_drv.c" file, if there are any.

    --> I am attaching the entire function with the thread (the use case is made such that we get one output on HDMI as well as on 2 LCD's)

    Below is the file containing the function:

    function.c
    /**
     *******************************************************************************
     *
     * \brief   Setups Display Controller to triplr display on On-chip HDMI,
     *          LCD1 and LCD2
     *
     *          Configure such that VID2 pipe goes to LCD1 and VID3 pipe to LCD2
     *          And VID1 and GRPX pipe goes to HDMI
     *
     *          HDMI is hardcoded to 1080p60 resolution
     *          LCD is hardcoded to 800x480 resolution
     *
     *          NOTE, this is just a sample config use by example use-cases
     *          User's can configure it different in their use-case
     *
     *******************************************************************************
    */
    Int32 ChainsCommon_TripleDisplay_StartDisplayCtrl(
                                                     Chains_DisplayType lcdType, 
                                                     UInt32 displayLCD1Width, 
                                                     UInt32 displayLCD1Height,
                                                     UInt32 displayLCD2Width, 
                                                     UInt32 displayLCD2Height
                                                     )
    {
        Int32 status;
        DisplayCtrlLink_ConfigParams *pPrm = &gChains_commonObj.dctrlCfgPrms;
        DisplayCtrlLink_VencInfo *pVInfo;
        DisplayCtrlLink_OvlyParams *pOvlyPrms;
        DisplayCtrlLink_OvlyPipeParams *pPipeOvlyPrms;
        DisplayCtrlLink_OvlyParams ovlyPrms[3];
    
        /* Set the link id */
        gChains_commonObj.displayCtrlLinkId = SYSTEM_LINK_ID_DISPLAYCTRL;
    
        /* Number of valid entries in vencInfo array */
        pPrm->numVencs = 3;
        /* 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_HDMI;
    
        /* Configure HDMI display */
        pVInfo                                  = &pPrm->vencInfo[0];
        pVInfo->vencId                          = SYSTEM_DCTRL_DSS_VENC_HDMI;
        pVInfo->outputPort                      = SYSTEM_DCTRL_DSS_HDMI_OUTPUT;
        pVInfo->vencOutputInfo.vsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
        pVInfo->vencOutputInfo.hsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    
        /* Below are of dont care for EVM LCD */
        pVInfo->vencOutputInfo.fidPolarity      = SYSTEM_DCTRL_POLARITY_ACT_LOW;
        pVInfo->vencOutputInfo.actVidPolarity   = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    
        /* We use 1080p60 - set to SYSTEM_STD_720P_60 for 720p! */
        pVInfo->mInfo.standard                  = SYSTEM_STD_1080P_60;
    
        /* Configure HDMI overlay parameters */
        pVInfo->mode                            = 0;
        pVInfo->isInputPipeConnected[0]         = TRUE;
        pVInfo->isInputPipeConnected[1]         = FALSE;
        pVInfo->isInputPipeConnected[2]         = FALSE;
        pVInfo->isInputPipeConnected[3]         = TRUE;
        pVInfo->writeBackEnabledFlag            = FALSE;
    
        pVInfo->vencOutputInfo.dataFormat       = SYSTEM_DF_RGB24_888;
        pVInfo->vencOutputInfo.dvoFormat        = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
        pVInfo->vencOutputInfo.videoIfWidth     = SYSTEM_VIFW_24BIT;
    
        pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
        pVInfo->vencOutputInfo.aFmt             = SYSTEM_DCTRL_A_OUTPUT_MAX;
    
        pOvlyPrms                               = &ovlyPrms[0];
        pOvlyPrms->vencId                       = pVInfo->vencId;
        pOvlyPrms->deltaLinesPerPanel           = 0;
        pOvlyPrms->alphaBlenderEnable           = 0;
        pOvlyPrms->backGroundColor              = 0x0;
        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;
    
        /* Configure LCD - 1 */
        pVInfo                                  = &pPrm->vencInfo[1];
        pVInfo->vencId                          = SYSTEM_DCTRL_DSS_VENC_LCD1;
        pVInfo->outputPort                      = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
    
        if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
            (BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
        {
            /* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
            pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
            pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
        }
    
        pVInfo->vencOutputInfo.vsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_LOW;
        pVInfo->vencOutputInfo.hsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_LOW;
    
        /* Below are of dont care for EVM LCD */
        pVInfo->vencOutputInfo.fidPolarity      = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
        pVInfo->vencOutputInfo.actVidPolarity   = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    
        pVInfo->mInfo.standard                  = SYSTEM_STD_CUSTOM;
        pVInfo->mInfo.scanFormat                = SYSTEM_SF_PROGRESSIVE;
        pVInfo->mInfo.width                     = displayLCD1Width;
        pVInfo->mInfo.height                    = displayLCD1Height;
    
        if(lcdType == CHAINS_DISPLAY_TYPE_LCD_7_INCH)
        {
        pVInfo->mInfo.pixelClock                = 29232u;
        pVInfo->mInfo.fps                       = 60U;
        pVInfo->mInfo.hFrontPorch               = 40u;
        pVInfo->mInfo.hBackPorch                = 40u;
        pVInfo->mInfo.hSyncLen                  = 48u;
        pVInfo->mInfo.vFrontPorch               = 13u;
        pVInfo->mInfo.vBackPorch                = 29u;
        pVInfo->mInfo.vSyncLen                  = 3u;
        pVInfo->vencDivisorInfo.divisorLCD      = 1;
        pVInfo->vencDivisorInfo.divisorPCD      = 4;
        }
        else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_10_INCH)
        {
            pVInfo->mInfo.pixelClock                =   74500U;
            pVInfo->mInfo.fps                       =   60U;
            pVInfo->mInfo.hBackPorch                =   80U;
            pVInfo->mInfo.hSyncLen                  =   62U;
            pVInfo->mInfo.hFrontPorch               =   48U;
            pVInfo->mInfo.vBackPorch                =   12U;
            pVInfo->mInfo.vSyncLen                  =   35U;
            pVInfo->mInfo.vFrontPorch               =   6U;
            pVInfo->vencDivisorInfo.divisorLCD      =   1;
            pVInfo->vencDivisorInfo.divisorPCD      =   1;
        }
        else if (lcdType ==
        CHAINS_DISPLAY_TYPE_LDC_10_INCH_LCDCTRL_TC358778_MIPI_DSI_1920_1200)
        {
            pVInfo->mInfo.pixelClock                =   147000U;
            pVInfo->mInfo.fps                       =   60U;
            pVInfo->mInfo.hBackPorch                =   30U;
            pVInfo->mInfo.hSyncLen                  =   16U;
            pVInfo->mInfo.hFrontPorch               =   32U;
            pVInfo->mInfo.vBackPorch                =   16U;
            pVInfo->mInfo.vSyncLen                  =   2U;
            pVInfo->mInfo.vFrontPorch               =   7U;
            pVInfo->vencDivisorInfo.divisorLCD      =   1;
            pVInfo->vencDivisorInfo.divisorPCD      =   1;
        }
        else
            UTILS_assert(NULL);
    
        /* Configure LCD - 1 overlay params */
        pVInfo->mode = 0;
        pVInfo->isInputPipeConnected[0]         = FALSE;
        pVInfo->isInputPipeConnected[1]         = TRUE;
        pVInfo->isInputPipeConnected[2]         = FALSE;
        pVInfo->isInputPipeConnected[3]         = FALSE;
        pVInfo->writeBackEnabledFlag            = FALSE;
    
        pVInfo->vencOutputInfo.dataFormat       = SYSTEM_DF_RGB16_565;
        pVInfo->vencOutputInfo.dvoFormat        = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
        pVInfo->vencOutputInfo.videoIfWidth     = SYSTEM_VIFW_16BIT;
    
        pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
        pVInfo->vencOutputInfo.aFmt             = SYSTEM_DCTRL_A_OUTPUT_MAX;
    
        pOvlyPrms                               = &ovlyPrms[1];
        pOvlyPrms->vencId                       = pVInfo->vencId;
        pOvlyPrms->deltaLinesPerPanel           = 0;
        pOvlyPrms->alphaBlenderEnable           = 0;
        pOvlyPrms->backGroundColor              = 0x0;
        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;
    
        /* Configure LCD - 2 */
        pVInfo                                  = &pPrm->vencInfo[2];
        pVInfo->vencId                          = SYSTEM_DCTRL_DSS_VENC_LCD2;
        pVInfo->outputPort                      = SYSTEM_DCTRL_DSS_DPI2_OUTPUT;
    
        if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
            (BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
        {
            /* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
            pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
            pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
        }
    
        pVInfo->vencOutputInfo.vsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_LOW;
        pVInfo->vencOutputInfo.hsPolarity       = SYSTEM_DCTRL_POLARITY_ACT_LOW;
    
        /* Below are of dont care for EVM LCD */
        pVInfo->vencOutputInfo.fidPolarity      = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
        pVInfo->vencOutputInfo.actVidPolarity   = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
    
        pVInfo->mInfo.standard                  = SYSTEM_STD_CUSTOM;
        pVInfo->mInfo.scanFormat                = SYSTEM_SF_PROGRESSIVE;
        pVInfo->mInfo.width                     = displayLCD2Width;
        pVInfo->mInfo.height                    = displayLCD2Height;
    
        if(lcdType == CHAINS_DISPLAY_TYPE_LCD_7_INCH)
        {
        pVInfo->mInfo.pixelClock                = 29232u;
        pVInfo->mInfo.fps                       = 60U;
        pVInfo->mInfo.hFrontPorch               = 40u;
        pVInfo->mInfo.hBackPorch                = 40u;
        pVInfo->mInfo.hSyncLen                  = 48u;
        pVInfo->mInfo.vFrontPorch               = 13u;
        pVInfo->mInfo.vBackPorch                = 29u;
        pVInfo->mInfo.vSyncLen                  = 3u;
        pVInfo->vencDivisorInfo.divisorLCD      = 1;
        pVInfo->vencDivisorInfo.divisorPCD      = 4;
        }
        else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_10_INCH)
        {
            pVInfo->mInfo.pixelClock                =   74500U;
            pVInfo->mInfo.fps                       =   60U;
            pVInfo->mInfo.hBackPorch                =   80U;
            pVInfo->mInfo.hSyncLen                  =   62U;
            pVInfo->mInfo.hFrontPorch               =   48U;
            pVInfo->mInfo.vBackPorch                =   12U;
            pVInfo->mInfo.vSyncLen                  =   35U;
            pVInfo->mInfo.vFrontPorch               =   6U;
            pVInfo->vencDivisorInfo.divisorLCD      =   1;
            pVInfo->vencDivisorInfo.divisorPCD      =   1;
        }
        else if (lcdType ==
        CHAINS_DISPLAY_TYPE_LDC_10_INCH_LCDCTRL_TC358778_MIPI_DSI_1920_1200)
        {
            pVInfo->mInfo.pixelClock                =   147000U;
            pVInfo->mInfo.fps                       =   60U;
            pVInfo->mInfo.hBackPorch                =   30U;
            pVInfo->mInfo.hSyncLen                  =   16U;
            pVInfo->mInfo.hFrontPorch               =   32U;
            pVInfo->mInfo.vBackPorch                =   16U;
            pVInfo->mInfo.vSyncLen                  =   2U;
            pVInfo->mInfo.vFrontPorch               =   7U;
            pVInfo->vencDivisorInfo.divisorLCD      =   1;
            pVInfo->vencDivisorInfo.divisorPCD      =   1;
        }
        else
            UTILS_assert(NULL);
    
        /* Configure LCD - 2 overlay params */
        pVInfo->mode = 0;
        pVInfo->isInputPipeConnected[0]         = FALSE;
        pVInfo->isInputPipeConnected[1]         = FALSE;
        pVInfo->isInputPipeConnected[2]         = TRUE;
        pVInfo->isInputPipeConnected[3]         = FALSE;
        pVInfo->writeBackEnabledFlag            = FALSE;
    
        pVInfo->vencOutputInfo.dataFormat       = SYSTEM_DF_RGB16_565;
        pVInfo->vencOutputInfo.dvoFormat        = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
        pVInfo->vencOutputInfo.videoIfWidth     = SYSTEM_VIFW_16BIT;
    
        pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
        pVInfo->vencOutputInfo.aFmt             = SYSTEM_DCTRL_A_OUTPUT_MAX;
    
        pOvlyPrms                               = &ovlyPrms[2];
        pOvlyPrms->vencId                       = pVInfo->vencId;
        pOvlyPrms->deltaLinesPerPanel           = 0;
        pOvlyPrms->alphaBlenderEnable           = 0;
        pOvlyPrms->backGroundColor              = 0x0;
        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 HDMI overlay pipe parameters */
        pPipeOvlyPrms                           = &gChains_commonObj.pipeParams[0];
        pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_VID1;
        pPipeOvlyPrms->globalAlpha              = 0xFF;
        pPipeOvlyPrms->preMultiplyAlpha         = 0;
        pPipeOvlyPrms->zorderEnable             = TRUE;
        pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER0;
    
        /* Setting LCD - 1 overlay pipe parameters */
        pPipeOvlyPrms                           = &gChains_commonObj.pipeParams[1];
        pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_VID2;
        pPipeOvlyPrms->globalAlpha              = 0xFF;
        pPipeOvlyPrms->preMultiplyAlpha         = 0;
        pPipeOvlyPrms->zorderEnable             = TRUE;
        pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER0;
    
        /* Setting LCD - 2 overlay pipe parameters */
        pPipeOvlyPrms                           = &gChains_commonObj.pipeParams[2];
        pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_VID3;
        pPipeOvlyPrms->globalAlpha              = 0xFF;
        pPipeOvlyPrms->preMultiplyAlpha         = 0;
        pPipeOvlyPrms->zorderEnable             = TRUE;
        pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER0;
    
        /* Configure graphics overlay for HDMI */
        pPipeOvlyPrms                           = &gChains_commonObj.pipeParams[3];
        pPipeOvlyPrms->pipeLine                 = SYSTEM_DSS_DISPC_PIPE_GFX1;
        pPipeOvlyPrms->globalAlpha              = 0xFF;
        pPipeOvlyPrms->preMultiplyAlpha         = 0;
        pPipeOvlyPrms->zorderEnable             = TRUE;
        pPipeOvlyPrms->zorder                   = SYSTEM_DSS_DISPC_ZORDER3;
    
        /* Create, configure and start the Display Ctrl link */
        status = System_linkCreate(gChains_commonObj.displayCtrlLinkId,
                                    NULL,
                                    0);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_CONFIG,
                                    &gChains_commonObj.dctrlCfgPrms,
                                    sizeof(DisplayCtrlLink_ConfigParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
                                    &ovlyPrms[0],
                                    sizeof(DisplayCtrlLink_OvlyParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
                                    &ovlyPrms[1],
                                    sizeof(DisplayCtrlLink_OvlyParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
                                    &ovlyPrms[2],
                                    sizeof(DisplayCtrlLink_OvlyParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
        
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                    &gChains_commonObj.pipeParams[0],
                                    sizeof(DisplayCtrlLink_OvlyPipeParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                    &gChains_commonObj.pipeParams[1],
                                    sizeof(DisplayCtrlLink_OvlyPipeParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                    &gChains_commonObj.pipeParams[2],
                                    sizeof(DisplayCtrlLink_OvlyPipeParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
                                    DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
                                    &gChains_commonObj.pipeParams[3],
                                    sizeof(DisplayCtrlLink_OvlyPipeParams),
                                    TRUE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        return status;
    }
    
    

  • Hi Khilav,

    As discussed over the call, please check the pinmux settings for DPI1, DPI2 and DPI3 outputs. It seems that driver does not support configuring pinmux for DPI2 and DPI3. In this case, you require to add code to configure pinmux. You could directly change pinmux in the usecase file. Lets check after changing pinmux for all three LCDs. Also after changing, if you see black background color on the LCD, DSS is outputting correctly. you will need to now connect video pipelines to the overlay managers.

    Regards, Brijesh
  • pinmux_details.zipHi Brijesh,

    As per our discussion over the call, we have configured the pinmux for the DPI2 and DPI3. Below is some explanation for your reference.

    We have run the "lvdsVipDualCam_DualDisplay" use case for checking the pinmux for DPI1, DPI2 and DPI3.

    First we check the Individual LCD by connecting it First at DPI1 then DPI2 and last DPI3.

    In this use case, we get the proper output on the LCD.

    Also we print the register value as per your susggestion.

    (Attached File for your reference DPI1_pinmux.txt,  DPI2_pinmux.txt, DPI3_pinmux.txt)

    Then second we run the  "lvdsVipDualCam_DualDisplay" use case with the connecting all LCD at DP1,DPI2 and DPI3.

    This time we have configured the pinmux for all and also print the register value to check it.

    But we do not get the output on all LCD Display. Output come only on one LCD Display.

    In this case also we print the register value to compare it with previous case.

    (Attached File for your reference DPI1_DPI2_DPI3_pinmux_multiple.txt)

    we have found that register value for Indivudal and multipal LCD aree same.

    There is not change in any register value but LCD Output not come when we connect all LCD.

    Please provided your inputs to resolve this issue.

    Regards,

    Yash

  • This issue is being discussed over email.

    Regards,
    Brijesh