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.

Vision SDK video overlay not shown when using VOUT3

Part Number: TDA2E


We are working on a custom board based on DRA76x.
We are using the Vision SDK, where we have developed a usecase to show a camera overlayed on the Android APKs.
Our hardware can output the video from VOUT1 and VOUT3.

All the video system works properly when we use VOUT1 for Android and for the camera overlay generated by the IPU. We have a command line tool to show/hide the camera overlay and it works properly.

However, we are facing some issues when we try to use the VOUT3 output. The camera overly is correctly shown during u-boot but when the kernel boots no video is displayed and the kernel shows the following trace:

omapdrm omapdrm.0: lcd3: timeout waiting for enable


We have found some comments on the forum that indicated to enable other clock for VOUT3:

--- a/kernel/android-4.4/drivers/gpu/drm/omapdrm/dss/dpi.c
+++ b/kernel/android-4.4/drivers/gpu/drm/omapdrm/dss/dpi.c
@@ -92,10 +92,10 @@ static enum dss_clk_source dpi_get_clk_src_dra7xx(enum omap_channel channel)
        }
        case OMAP_DSS_CHANNEL_LCD3:
        {
-               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_1))
-                       return DSS_CLK_SRC_PLL2_1;
                if (dss_pll_find_by_src(DSS_CLK_SRC_PLL1_3))
                        return DSS_CLK_SRC_PLL1_3;
+               if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_1))
+                       return DSS_CLK_SRC_PLL2_1;
        }
        default:
                break;
@@ -137,7 +137,7 @@ static enum dss_clk_source dpi_get_clk_src(enum omap_channel channel)
                case OMAP_DSS_CHANNEL_LCD:
                        return DSS_CLK_SRC_PLL1_1;
                case OMAP_DSS_CHANNEL_LCD3:
-                       return DSS_CLK_SRC_PLL2_1;
+                       return DSS_CLK_SRC_PLL1_3;
                case OMAP_DSS_CHANNEL_LCD2:
                default:
                        return DSS_CLK_SRC_FCK;


With this change, we have video but the camera show/hide do not work as expected.
For instance, if we run the Settings APK and we show the camera, the camera is correctly overlayed. After a hide and a show command, the camera overlay is not displayed. Then, if we kill the settings APK, we see the camera overlay.
The feeling is that the camera overlay is not always overlaying the Android video.

The changes in the IPU firmware are:

- pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
- pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
- ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;

+ pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
+ pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
+ ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;

The changes in the dts are:

&dss {
	status = "ok";
	vdda_video-supply = <&ldo5_reg>;

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		status = "ok";
		// VOUT1 - HDMI_CH2
		port@0 {
			reg = <0>;
			dss_vout1_out: endpoint {
				remote-endpoint = <&tfp410_in>;
				data-lines = <24>;
			};
		};
		// VOUT3 - HDMI_CH1
		port@2 {
			reg = <2>;
			dss_vout3_out: endpoint {
				remote-endpoint = <&tfp410_in>;
				data-lines = <24>;
			};
		};
	};
};

 &tfp410_in {
- 	remote-endpoint = <&dss_vout1_out>;
+ 	remote-endpoint = <&dss_vout3_out>;
 };

-&dss_vout3_out {
+&dss_vout1_out {
 	/delete-property/ remote-endpoint;
 };