OMAP: DSS2: Add FEAT_VENC_REQUIRES_TV_DAC_CLK
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 18 May 2011 08:59:21 +0000 (11:59 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 1 Jul 2011 09:06:43 +0000 (12:06 +0300)
OMAP3430 requires an 96MHz clock to VENC's DAC, but no other OMAP needs
it.

Add a new feature, FEAT_VENC_REQUIRES_TV_DAC_CLK, which tells if the
clock is needed on this platform, and use that feature in venc.c to
decide if the clock needs enabling.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/dss_features.c
drivers/video/omap2/dss/dss_features.h
drivers/video/omap2/dss/venc.c

index 1c18888..a588380 100644 (file)
@@ -286,7 +286,8 @@ static const struct omap_dss_features omap3430_dss_features = {
                FEAT_LCDENABLESIGNAL | FEAT_PCKFREEENABLE |
                FEAT_FUNCGATED | FEAT_ROWREPEATENABLE |
                FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF |
-               FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC,
+               FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC |
+               FEAT_VENC_REQUIRES_TV_DAC_CLK,
 
        .num_mgrs = 2,
        .num_ovls = 3,
index 07b346f..3058e24 100644 (file)
@@ -51,6 +51,7 @@ enum dss_feat_id {
        FEAT_HDMI_CTS_SWMODE            = 1 << 19,
        FEAT_HANDLE_UV_SEPARATE         = 1 << 20,
        FEAT_ATTR2                      = 1 << 21,
+       FEAT_VENC_REQUIRES_TV_DAC_CLK   = 1 << 22,
 };
 
 /* DSS register field id */
index e7485fc..bf0431f 100644 (file)
@@ -38,6 +38,7 @@
 #include <plat/cpu.h>
 
 #include "dss.h"
+#include "dss_features.h"
 
 /* Venc registers */
 #define VENC_REV_ID                            0x00
@@ -382,12 +383,15 @@ static void venc_reset(void)
 
 static void venc_enable_clocks(int enable)
 {
-       if (enable)
-               dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK |
-                               DSS_CLK_VIDFCK);
-       else
-               dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK |
-                               DSS_CLK_VIDFCK);
+       if (enable) {
+               dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK);
+               if (dss_has_feature(FEAT_VENC_REQUIRES_TV_DAC_CLK))
+                       dss_clk_enable(DSS_CLK_VIDFCK);
+       } else {
+               dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK);
+               if (dss_has_feature(FEAT_VENC_REQUIRES_TV_DAC_CLK))
+                       dss_clk_disable(DSS_CLK_VIDFCK);
+       }
 }
 
 static const struct venc_config *venc_timings_to_config(