]> Pileus Git - ~andy/linux/blobdiff - drivers/video/omap2/dss/dss.c
OMAPDSS: DISPC: Improvements to DIGIT sync signal selection
[~andy/linux] / drivers / video / omap2 / dss / dss.c
index 04b4586113e34928e1784e22c844da287d5750ed..4491ab7ef80011de70a37ed33703a7340ec71f83 100644 (file)
@@ -648,9 +648,18 @@ void dss_set_dac_pwrdn_bgz(bool enable)
        REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
 }
 
-void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select hdmi)
+void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select src)
 {
-       REG_FLD_MOD(DSS_CONTROL, hdmi, 15, 15); /* VENC_HDMI_SWITCH */
+       enum omap_display_type dp;
+       dp = dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_DIGIT);
+
+       /* Complain about invalid selections */
+       WARN_ON((src == DSS_VENC_TV_CLK) && !(dp & OMAP_DISPLAY_TYPE_VENC));
+       WARN_ON((src == DSS_HDMI_M_PCLK) && !(dp & OMAP_DISPLAY_TYPE_HDMI));
+
+       /* Select only if we have options */
+       if ((dp & OMAP_DISPLAY_TYPE_VENC) && (dp & OMAP_DISPLAY_TYPE_HDMI))
+               REG_FLD_MOD(DSS_CONTROL, src, 15, 15);  /* VENC_HDMI_SWITCH */
 }
 
 enum dss_hdmi_venc_clk_source_select dss_get_hdmi_venc_clk_source(void)
@@ -661,6 +670,9 @@ enum dss_hdmi_venc_clk_source_select dss_get_hdmi_venc_clk_source(void)
        if ((displays & OMAP_DISPLAY_TYPE_HDMI) == 0)
                return DSS_VENC_TV_CLK;
 
+       if ((displays & OMAP_DISPLAY_TYPE_VENC) == 0)
+               return DSS_HDMI_M_PCLK;
+
        return REG_GET(DSS_CONTROL, 15, 15);
 }