Signed-off-by: Stefano Babic <sba...@denx.de>
---
 arch/arm/include/asm/arch-omap3/dss.h |   23 ++++++++++++++++---
 drivers/video/omap3_dss.c             |   40 ++++++++++++++++++++++++++++++++-
 2 files changed, 59 insertions(+), 4 deletions(-)

diff --git a/arch/arm/include/asm/arch-omap3/dss.h 
b/arch/arm/include/asm/arch-omap3/dss.h
index 4c56e5e..911cc9a 100644
--- a/arch/arm/include/asm/arch-omap3/dss.h
+++ b/arch/arm/include/asm/arch-omap3/dss.h
@@ -60,6 +60,17 @@ struct dispc_regs {
        u32 global_alpha;                       /* 0x74 */
        u32 size_dig;                           /* 0x78 */
        u32 size_lcd;                           /* 0x7C */
+       u32 gfx_base[2];
+       u32 gfx_position;                       /* 0x88 */
+       u32 gfx_size;                           /* 0x8C */
+       u32 reserved_3[4];                      /* 0x90 */
+       u32 gfx_attributes;                     /* 0xA0 */
+       u32 gfx_fifo_threshold;                 /* 0xA4 */
+       u32 gfx_fifo_size_status;               /* 0xA8 */
+       u32 gfx_row_inc;                        /* 0xAC */
+       u32 gfx_pixel_inc;                      /* 0xB0 */
+       u32 gfx_window_skip;                    /* 0xB4 */
+       u32 gfx_table_ba;                       /* 0xB8 */
 };
 
 /* VENC Registers */
@@ -120,6 +131,7 @@ struct venc_regs {
 
 /* Few Register Offsets */
 #define FRAME_MODE_SHIFT                       1
+#define FUNC_GATED_SHIFT                       9
 #define TFTSTN_SHIFT                           3
 #define DATALINES_SHIFT                                8
 
@@ -132,13 +144,16 @@ struct venc_regs {
 #define GP_OUT1                                        (1 << 16)
 
 #define DISPC_ENABLE                           (LCD_ENABLE | \
-                                                DIG_ENABLE | \
                                                 GO_LCD | \
-                                                GO_DIG | \
                                                 GP_OUT0| \
                                                 GP_OUT1)
 
-/* Configure VENC DSS Params */
+#define DISPC_PCK_FREE_ENABLE                  (1 << 27)
+
+/* Register DSS_CONTROL */
+#define DISPC_CLK_SWITCH                       (1 << 0)
+#define DSI_CLK_SWITCH                         (1 << 1)
+#define VENC_CLOCK_MODE                                (1 << 2)
 #define VENC_CLK_ENABLE                                (1 << 3)
 #define DAC_DEMEN                              (1 << 4)
 #define DAC_POWERDN                            (1 << 5)
@@ -148,6 +163,7 @@ struct venc_regs {
                                                 DAC_DEMEN | \
                                                 DAC_POWERDN | \
                                                 VENC_OUT_SEL)
+
 /*
  * Panel Configuration
  */
@@ -170,5 +186,6 @@ void omap3_dss_venc_config(const struct venc_regs *venc_cfg,
                        u32 height, u32 width);
 void omap3_dss_panel_config(const struct panel_config *panel_cfg);
 void omap3_dss_enable(void);
+void omap3_dss_setfb(void *addr);
 
 #endif /* DSS_H */
diff --git a/drivers/video/omap3_dss.c b/drivers/video/omap3_dss.c
index b322cc3..6e5849a 100644
--- a/drivers/video/omap3_dss.c
+++ b/drivers/video/omap3_dss.c
@@ -28,6 +28,8 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/dss.h>
+#include <asm/arch/clocks.h>
+#include <asm/arch/clocks_omap3.h>
 
 /*
  * Configure VENC for a given Mode (NTSC / PAL)
@@ -105,16 +107,43 @@ void omap3_dss_venc_config(const struct venc_regs 
*venc_cfg,
 void omap3_dss_panel_config(const struct panel_config *panel_cfg)
 {
        struct dispc_regs *dispc = (struct dispc_regs *) OMAP3_DISPC_BASE;
+       struct dss_regs *dss = (struct dss_regs *) OMAP3_DSS_BASE;
 
        writel(panel_cfg->timing_h, &dispc->timing_h);
        writel(panel_cfg->timing_v, &dispc->timing_v);
        writel(panel_cfg->pol_freq, &dispc->pol_freq);
        writel(panel_cfg->divisor, &dispc->divisor);
        writel(panel_cfg->lcd_size, &dispc->size_lcd);
-       writel((panel_cfg->load_mode << FRAME_MODE_SHIFT), &dispc->config);
+       writel((panel_cfg->load_mode << FRAME_MODE_SHIFT) |
+               (1 << FUNC_GATED_SHIFT),
+               &dispc->config);
        writel(((panel_cfg->panel_type << TFTSTN_SHIFT) |
                (panel_cfg->data_lines << DATALINES_SHIFT)), &dispc->control);
        writel(panel_cfg->panel_color, &dispc->default_color0);
+
+       writel(panel_cfg->lcd_size, &dispc->gfx_size);
+       writel(0x91, &dispc->gfx_attributes);
+       writel(0x01, &dispc->gfx_row_inc);
+       writel(0x01, &dispc->gfx_pixel_inc);
+       writel(0x00, &dispc->gfx_window_skip);
+
+       writel(VENC_CLK_ENABLE | DAC_DEMEN,
+               &dss->control);
+
+}
+
+void omap3_dss_clock_enable(int enable)
+{
+       struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
+
+       if (enable) {
+               setbits_le32(&prcm_base->fclken_dss, FCK_DSS_ON);
+               setbits_le32(&prcm_base->iclken_dss, ICK_DSS_ON);
+       } else {
+               clrbits_le32(&prcm_base->fclken_dss, FCK_DSS_ON);
+               clrbits_le32(&prcm_base->iclken_dss, ICK_DSS_ON);
+       }
+
 }
 
 /*
@@ -129,3 +158,12 @@ void omap3_dss_enable(void)
        l |= DISPC_ENABLE;
        writel(l, &dispc->control);
 }
+
+void omap3_dss_setfb(void *addr)
+{
+       struct dispc_regs *dispc = (struct dispc_regs *) OMAP3_DISPC_BASE;
+
+       writel((u32)addr, &dispc->gfx_base[0]);
+       writel((u32)addr, &dispc->gfx_base[1]);
+
+}
-- 
1.7.9.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to