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.

  • TI Thinks Resolved

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
  • In reply to Rishabh Garg:

    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

  • In reply to yash trivedi:

    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
  • In reply to Rishabh Garg:

    Hi Rishabh,

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

    Regards,
    Khilav
  • In reply to Khilav Soni:

    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
  • In reply to Rishabh Garg:

    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
  • In reply to 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
  • In reply to Brijesh Jadav:

    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

  • In reply to Khilav Soni:

    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
  • In reply to Brijesh Jadav:

    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 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.