I tried the following modification (APP_DCTRL_VID_STD_CUSTOM->APP_DCTRL_VID_STD_1080P_30), but it didn't work!
{
int32_t retVal = 0;
uint32_t cpuId = APP_IPC_CPU_MCU2_0;
bool doAdvVpSetup = false;
bool doHpd = false;
app_dctrl_path_info_t pathInfo;
app_dctrl_vp_params_t vpParams;
app_dctrl_adv_vp_params_t advVpParams;
app_dctrl_overlay_params_t overlayParams;
app_dctrl_layer_params_t layerParams;
app_dctrl_dsi_params_t dsiParams;
appDctrlPathInfoInit(&pathInfo);
appDctrlVpParamsInit(&vpParams);
appDctrlOverlayParamsInit(&overlayParams);
appDctrlLayerParamsInit(&layerParams);
if(obj->initPrm.display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_EDP)
{
appDctrlAdvVpParamsInit(&advVpParams);
doAdvVpSetup = true;
doHpd = true;
}
if(obj->initPrm.display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DSI)
{
appDctrlAdvVpParamsInit(&advVpParams);
advVpParams.vpId = obj->vpId;
doAdvVpSetup = true;
}
pathInfo.edgeInfo[pathInfo.numEdges].startNode = APP_DCTRL_NODE_VID1;
pathInfo.edgeInfo[pathInfo.numEdges].endNode = obj->nodeOverlayId;
pathInfo.numEdges++;
pathInfo.edgeInfo[pathInfo.numEdges].startNode = APP_DCTRL_NODE_VID2;
pathInfo.edgeInfo[pathInfo.numEdges].endNode = obj->nodeOverlayId;
pathInfo.numEdges++;
pathInfo.edgeInfo[pathInfo.numEdges].startNode = APP_DCTRL_NODE_VIDL1;
pathInfo.edgeInfo[pathInfo.numEdges].endNode = obj->nodeOverlayId;
pathInfo.numEdges++;
pathInfo.edgeInfo[pathInfo.numEdges].startNode = obj->nodeOverlayId;
pathInfo.edgeInfo[pathInfo.numEdges].endNode = obj->nodeVpId;
pathInfo.numEdges++;
pathInfo.edgeInfo[pathInfo.numEdges].startNode = obj->nodeVpId;
pathInfo.edgeInfo[pathInfo.numEdges].endNode = obj->nodeDpiId;
pathInfo.numEdges++;
vpParams.vpId = obj->vpId;
/* Always expect the app to provide a custom resolution */
vpParams.standard = APP_DCTRL_VID_STD_1080P_30//APP_DCTRL_VID_STD_CUSTOM;
vpParams.width = obj->initPrm.timings.width;
vpParams.height = obj->initPrm.timings.height;
vpParams.hFrontPorch = obj->initPrm.timings.hFrontPorch;
vpParams.hBackPorch = obj->initPrm.timings.hBackPorch;
vpParams.hSyncLen = obj->initPrm.timings.hSyncLen;
vpParams.vFrontPorch = obj->initPrm.timings.vFrontPorch;
vpParams.vBackPorch = obj->initPrm.timings.vBackPorch;
vpParams.vSyncLen = obj->initPrm.timings.vSyncLen;
vpParams.pixelClock = (uint32_t)(obj->initPrm.timings.pixelClock / 1000ULL);
vpParams.videoIfWidth = obj->videoIfWidth;
if(obj->initPrm.display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_EDP)
{
advVpParams.hVAlign = APP_DCTRL_HVSYNC_ALIGN_ON;
advVpParams.hVClkControl = APP_DCTRL_HVCLK_CTRL_ON;
advVpParams.hVClkRiseFall = APP_DCTRL_EDGE_POL_RISING;
vpParams.actVidPolarity = APP_DCTRL_POL_HIGH;
vpParams.pixelClkPolarity = APP_DCTRL_EDGE_POL_RISING;
vpParams.hsPolarity = APP_DCTRL_POL_HIGH;
vpParams.vsPolarity = APP_DCTRL_POL_HIGH;
}
else if(obj->initPrm.display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DSI)
{
advVpParams.hVAlign = APP_DCTRL_HVSYNC_ALIGN_ON;
vpParams.actVidPolarity = APP_DCTRL_POL_HIGH;
vpParams.pixelClkPolarity = APP_DCTRL_EDGE_POL_RISING;
vpParams.hsPolarity = APP_DCTRL_POL_LOW;
vpParams.vsPolarity = APP_DCTRL_POL_LOW;
}
else
{
vpParams.pixelClkPolarity = APP_DCTRL_EDGE_POL_FALLING;
}
overlayParams.overlayId = obj->overlayId;
overlayParams.colorKeyEnable = 1;
overlayParams.colorKeySel = APP_DCTRL_OVERLAY_TRANS_COLOR_SRC;
overlayParams.transColorKeyMin = 0x0u;
overlayParams.transColorKeyMax = 0x0u;
overlayParams.backGroundColor = 0x0u;
layerParams.overlayId = obj->overlayId;
layerParams.pipeLayerNum[APP_DSS_VID_PIPE_ID_VID1] = APP_DCTRL_OVERLAY_LAYER_NUM_0;
layerParams.pipeLayerNum[APP_DSS_VID_PIPE_ID_VID2] = APP_DCTRL_OVERLAY_LAYER_NUM_1;
/* VIDL1 this is graphics overlay layer and it MUST be top most layer, i.e layer num 4 in j721e */
layerParams.pipeLayerNum[APP_DSS_VID_PIPE_ID_VIDL1] = APP_DCTRL_OVERLAY_LAYER_NUM_4;
/* this is used by Linux on A72 so should be kept as disabled or invalid here */
layerParams.pipeLayerNum[APP_DSS_VID_PIPE_ID_VIDL2] = APP_DCTRL_OVERLAY_LAYER_INVALID;
retVal = appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_REGISTER_HANDLE, &doHpd, sizeof(doHpd), 0U);
if(obj->initPrm.display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DSI)
{
/* Only two lanes output supported for AOU LCD */
dsiParams.num_lanes = 2u;
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_DSI_PARAMS, &dsiParams, sizeof(app_dctrl_dsi_params_t), 0U);
}
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_PATH, &pathInfo, sizeof(pathInfo), 0U);
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_VP_PARAMS, &vpParams, sizeof(vpParams), 0U);
if(true == doAdvVpSetup)
{
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_ADV_VP_PARAMS, &advVpParams, sizeof(advVpParams), 0U);
}
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_OVERLAY_PARAMS, &overlayParams, sizeof(overlayParams), 0U);
retVal+= appRemoteServiceRun(cpuId, APP_DCTRL_REMOTE_SERVICE_NAME, APP_DCTRL_CMD_SET_LAYER_PARAMS, &layerParams, sizeof(layerParams), 0U);
return retVal;
}