Skip to contentSkip to conversation

Add support for FIMD and DP on SMDK5250

PATCH Superseded Ajay Kumar 4 participants 12 messages Dec 20, 2012 – Dec 21, 2012

Subsystems (3)

v3 of 6 Superseded Latest is v6 →

lore
Share & tools
lore

Ajay Kumar

author
#0 lore raw

v3 cover Add support for FIMD and DP on SMDK5250

Changes since V2:
-- Add dummy definition to fix compilation dependency on
CONFIG_EXYNOS_MIPI_DSIM.
-- Create and use new config CONFIG_EXYNOS_LOGO instead of using
CONFIG_CMD_BMP
-- Remove explicit call for cfg_lcd_gpio and add it as callback.

[PATCH RESEND V2 1/4] EXYNOS5: Change parent clock of FIMD to MPLL [PATCH V3 2/4] EXYNOS: Add dummy definition to fix compilation dependency on
CONFIG_EXYNOS_MIPI_DSIM
[PATCH V3 3/4] video: Modify exynos_fimd driver to support LCD console [PATCH V3 4/4]EXYNOS5: Add support for FIMD and DP

 arch/arm/cpu/armv7/exynos/clock.c            |    2 +-
 arch/arm/include/asm/arch-exynos/mipi_dsim.h |    7 ++
 board/samsung/smdk5250/smdk5250.c            |   97 ++++++++++++++++++++++++++
 drivers/video/exynos_fb.c                    |    5 +-
 drivers/video/exynos_fimd.c                  |   10 ++-
 include/configs/smdk5250.h                   |    8 ++
 include/configs/trats.h                      |    1 +
 7 files changed, 126 insertions(+), 4 deletions(-)
author
#1 lore raw

PATCH RESEND v2 1/4 EXYNOS5: Change parent clock of FIMD to MPLL

With VPLL as source clock to FIMD,
Exynos DP Initializaton was failing sometimes with unstable clock. Changing FIMD source to MPLL resolves this issue.

---
 arch/arm/cpu/armv7/exynos/clock.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/cpu/armv7/exynos/clock.c +1 -1
index fe61f88..bfcd5f7 100644
@@ -603,7 +603,7 @@ void exynos5_set_lcd_clk(void)
 	 */
 	cfg = readl(&clk->src_disp1_0);
 	cfg &= ~(0xf);
-	cfg |= 0x8;
+	cfg |= 0x6;
 	writel(cfg, &clk->src_disp1_0);
 
 	/*
Signature · 1 line
1.7.1
#2 lore raw

PATCH RESEND v2 1/4 EXYNOS5: Change parent clock of FIMD to MPLL

Quoted 15 lines · Ajay Kumar

With VPLL as source clock to FIMD,
Exynos DP Initializaton was failing sometimes with unstable clock. Changing FIMD source to MPLL resolves this issue.

---
  arch/arm/cpu/armv7/exynos/clock.c |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/cpu/armv7/exynos/clock.c +0 -0
index fe61f88..bfcd5f7 100644

arch/arm/cpu/armv7/exynos/clock.c void exynos5_set_lcd_clk(void) · line 609

Quoted 8 lines
arch/arm/cpu/armv7/exynos/clock.c +1 -1
@@ -603,7 +603,7 @@ void exynos5_set_lcd_clk(void)
  	 */
  	cfg = readl(&clk->src_disp1_0);
  	cfg &= ~(0xf);
-	cfg |= 0x8;
+	cfg |= 0x6;
  	writel(cfg, &clk->src_disp1_0);
 
  	/*

It looks good to me.

Thank you,
Donghwa Lee

author
#3 lore raw

PATCH v3 2/4 EXYNOS: Add dummy definition to fix compilation dependency on CONFIG_EXYNOS_MIPI_DSIM

In reply to Ajay Kumar

When only DP is used, we need not enable CONFIG_EXYNOS_MIPI_DSIM. But if we do not select CONFIG_EXYNOS_MIPI_DSIM, exynos_fb.c throws error saying exynos_mipi_dsi_init() not defined. So, we add dummy definition for exynos_mipi_dsi_init when CONFIG_EXYNOS_MIPI_DSIM is not defined.

---
 arch/arm/include/asm/arch-exynos/mipi_dsim.h |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
arch/arm/include/asm/arch-exynos/mipi_dsim.h +7 -0
index 9a7cbeb..b73263d 100644
@@ -358,7 +358,14 @@ struct mipi_dsim_lcd_driver {
 	void	(*mipi_display_on)(struct mipi_dsim_device *dsim_dev);
 };
 
+#ifdef CONFIG_EXYNOS_MIPI_DSIM
 int exynos_mipi_dsi_init(void);
+#else
+int exynos_mipi_dsi_init(void)
+{
+	return 0;
+}
+#endif
 
 /*
  * register mipi_dsim_lcd_driver object defined by lcd panel driver
Signature · 1 line
1.7.1
#4 lore raw

PATCH v3 2/4 EXYNOS: Add dummy definition to fix compilation dependency on CONFIG_EXYNOS_MIPI_DSIM

Hi Ajay,

Quoted 17 lines · Ajay Kumar

When only DP is used, we need not enable CONFIG_EXYNOS_MIPI_DSIM. But if we do not select CONFIG_EXYNOS_MIPI_DSIM, exynos_fb.c throws error saying exynos_mipi_dsi_init() not defined. So, we add dummy definition for exynos_mipi_dsi_init when CONFIG_EXYNOS_MIPI_DSIM is not defined.

---
 arch/arm/include/asm/arch-exynos/mipi_dsim.h |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
arch/arm/include/asm/arch-exynos/mipi_dsim.h +0 -0
index 9a7cbeb..b73263d 100644

arch/arm/include/asm/arch-exynos/mipi_dsim.h struct mipi_dsim_lcd_driver { · line 365

Quoted 8 lines
arch/arm/include/asm/arch-exynos/mipi_dsim.h +3 -0
@@ -358,7 +358,14 @@ struct mipi_dsim_lcd_driver {
        void    (*mipi_display_on)(struct mipi_dsim_device *dsim_dev);
 };
 
+#ifdef CONFIG_EXYNOS_MIPI_DSIM
 int exynos_mipi_dsi_init(void);
+#else
+int exynos_mipi_dsi_init(void)
 

Should this be static inline? I suppose it is included only once, but it might be a good idea to add this.

Quoted 11 lines
arch/arm/include/asm/arch-exynos/mipi_dsim.h +4 -0
+{
+       return 0;
+}
+#endif
 
 /*

* register mipi_dsim_lcd_driver object defined by lcd panel driver
--
1.7.1

Regards,
Simon

#5 lore raw

PATCH v3 2/4 EXYNOS: Add dummy definition to fix compilation dependency on CONFIG_EXYNOS_MIPI_DSIM

In reply to Ajay Kumar
Quoted 20 lines · Ajay Kumar

When only DP is used, we need not enable CONFIG_EXYNOS_MIPI_DSIM. But if we do not select CONFIG_EXYNOS_MIPI_DSIM, exynos_fb.c throws error saying exynos_mipi_dsi_init() not defined. So, we add dummy definition for exynos_mipi_dsi_init when CONFIG_EXYNOS_MIPI_DSIM is not defined.

---
  arch/arm/include/asm/arch-exynos/mipi_dsim.h |    7 +++++++
  1 files changed, 7 insertions(+), 0 deletions(-)
arch/arm/include/asm/arch-exynos/mipi_dsim.h +1 -0
index 9a7cbeb..b73263d 100644
@@ -358,7 +358,14 @@ struct mipi_dsim_lcd_driver {
  	void	(*mipi_display_on)(struct mipi_dsim_device *dsim_dev);
  };
 
+#ifdef CONFIG_EXYNOS_MIPI_DSIM

arch/arm/include/asm/arch-exynos/mipi_dsim.h struct mipi_dsim_lcd_driver { · line 371

Quoted 10 lines
arch/arm/include/asm/arch-exynos/mipi_dsim.h +6 -0
  int exynos_mipi_dsi_init(void);
+#else
+int exynos_mipi_dsi_init(void)
+{
+	return 0;
+}
+#endif
 
  /*
   * register mipi_dsim_lcd_driver object defined by lcd panel driver

It looks good to me.

Thank you,
Donghwa Lee

author
#6 lore raw

PATCH v3 3/4 video: Modify exynos_fimd driver to support LCD console

In reply to Ajay Kumar

Currently, exynos FIMD driver is being used to support only TIZEN LOGOs. In order to get LCD console, we need to enable half word swap feature of FIMD and use 16 BPP.
LCD console and proprietary Logo cannot be used simultaneously. You should define CONFIG_EXYNOS_LOGO for proprietary Logo, and if CONFIG_EXYNOS_LOGO is not defined you get output console on LCD. CONFIG_EXYNOS_LOGO is added to Trats configuration to keep existing logo feature intact in Trats.

---
 drivers/video/exynos_fb.c   |    5 ++++-
 drivers/video/exynos_fimd.c |   10 ++++++++--
 include/configs/trats.h     |    1 +
 3 files changed, 13 insertions(+), 3 deletions(-)
drivers/video/exynos_fb.c +4 -1
index d9a3f9a..c111a09 100644
@@ -65,6 +65,7 @@ static void exynos_lcd_init(vidinfo_t *vid)
 	exynos_fimd_lcd_init(vid);
 }
 
+#ifdef CONFIG_EXYNOS_LOGO
 static void draw_logo(void)
 {
 	int x, y;
@@ -87,6 +88,7 @@ static void draw_logo(void)
 	addr = panel_info.logo_addr;
 	bmp_display(addr, x, y);
 }
+#endif
 
 static void lcd_panel_on(vidinfo_t *vid)
 {
@@ -142,12 +144,13 @@ void lcd_ctrl_init(void *lcdbase)
 
 void lcd_enable(void)
 {
+#ifdef CONFIG_EXYNOS_LOGO
 	if (panel_info.logo_on) {
 		memset(lcd_base, 0, panel_width * panel_height *
 				(NBITS(panel_info.vl_bpix) >> 3));
 		draw_logo();
 	}
-
+#endif
 	lcd_panel_on(&panel_info);
 }
 
drivers/video/exynos_fimd.c +8 -2
index 06eae2e..f2e4c27 100644
@@ -88,14 +88,20 @@ static void exynos_fimd_set_par(unsigned int win_id)
 	/* DATAPATH is DMA */
 	cfg |= EXYNOS_WINCON_DATAPATH_DMA;
 
-	/* bpp is 32 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
 	cfg |= EXYNOS_WINCON_WSWP_ENABLE;
+#else	/* To get output console on LCD */
+	cfg |= EXYNOS_WINCON_HAWSWP_ENABLE;
+#endif
 
 	/* dma burst is 16 */
 	cfg |= EXYNOS_WINCON_BURSTLEN_16WORD;
 
-	/* pixel format is unpacked RGB888 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
 	cfg |= EXYNOS_WINCON_BPPMODE_24BPP_888;
+#else	/* To get output console on LCD */
+	cfg |= EXYNOS_WINCON_BPPMODE_16BPP_565;
+#endif
 
 	writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
 			EXYNOS_WINCON(win_id));
include/configs/trats.h +1 -0
index a24e945..1573573 100644
@@ -252,6 +252,7 @@
 #define CONFIG_EXYNOS_FB
 #define CONFIG_LCD
 #define CONFIG_CMD_BMP
+#define CONFIG_EXYNOS_LOGO
 #define CONFIG_BMP_32BPP
 #define CONFIG_FB_ADDR		0x52504000
 #define CONFIG_S6E8AX0
Signature · 1 line
1.7.1
#7 lore raw

PATCH v3 3/4 video: Modify exynos_fimd driver to support LCD console

Hi,

Quoted 11 lines · Ajay Kumar

Currently, exynos FIMD driver is being used to support only TIZEN LOGOs. In order to get LCD console, we need to enable half word swap feature of FIMD and use 16 BPP.
LCD console and proprietary Logo cannot be used simultaneously. You should define CONFIG_EXYNOS_LOGO for proprietary Logo, and if CONFIG_EXYNOS_LOGO is not defined you get output console on LCD. CONFIG_EXYNOS_LOGO is added to Trats configuration to keep existing logo feature intact in Trats.

There is nothing in the README, but I suppose this is a chip-specific patch, so fair enough. But see below.

Quoted 11 lines
---
 drivers/video/exynos_fb.c   |    5 ++++-
 drivers/video/exynos_fimd.c |   10 ++++++++--
 include/configs/trats.h     |    1 +
 3 files changed, 13 insertions(+), 3 deletions(-)
drivers/video/exynos_fb.c +0 -0
index d9a3f9a..c111a09 100644

drivers/video/exynos_fb.c static void exynos_lcd_init(vidinfo_t *vid) · line 69

Quoted 5 lines
drivers/video/exynos_fb.c +1 -0
@@ -65,6 +65,7 @@ static void exynos_lcd_init(vidinfo_t *vid)
        exynos_fimd_lcd_init(vid);
 }
 
+#ifdef CONFIG_EXYNOS_LOGO
 

Do you actually need this #ifdef, and the one below it? You already have panel_info.logo_on. I suppose you could do, at the top of the file:

+#ifdef CONFIG_EXYNOS_LOGO
#define panal_exynos_logo() panel_info.logo_on
#else
#define panal_exynos_logo() 0
#endif

Quoted 12 lines
drivers/video/exynos_fb.c +0 -0
 static void draw_logo(void)
 {
        int x, y;
drivers/video/exynos_fb.c +1 -0
@@ -87,6 +88,7 @@ static void draw_logo(void)
        addr = panel_info.logo_addr;
        bmp_display(addr, x, y);
 }
+#endif
 
 static void lcd_panel_on(vidinfo_t *vid)
 {

drivers/video/exynos_fb.c void lcd_ctrl_init(void *lcdbase) · line 149

Quoted 6 lines
drivers/video/exynos_fb.c +1 -0
@@ -142,12 +144,13 @@ void lcd_ctrl_init(void *lcdbase)
 
 void lcd_enable(void)
 {
+#ifdef CONFIG_EXYNOS_LOGO
        if (panel_info.logo_on) {
 

Then could do 'if (panal_exynos_logo())' here and rermove the #ifdefs. Same below. #ifdefs are considered bad because they create new code paths that might not always be compiled.

memset(lcd_base, 0, panel_width * panel_height *

Quoted 51 lines
drivers/video/exynos_fb.c +1 -1
                                (NBITS(panel_info.vl_bpix) >> 3));
                draw_logo();
        }
-
+#endif
        lcd_panel_on(&panel_info);
 }
 
drivers/video/exynos_fimd.c +8 -2
index 06eae2e..f2e4c27 100644
@@ -88,14 +88,20 @@ static void exynos_fimd_set_par(unsigned int win_id)
        /* DATAPATH is DMA */
        cfg |= EXYNOS_WINCON_DATAPATH_DMA;
 
-       /* bpp is 32 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
        cfg |= EXYNOS_WINCON_WSWP_ENABLE;
+#else  /* To get output console on LCD */
+       cfg |= EXYNOS_WINCON_HAWSWP_ENABLE;
+#endif
 
        /* dma burst is 16 */
        cfg |= EXYNOS_WINCON_BURSTLEN_16WORD;
 
-       /* pixel format is unpacked RGB888 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
        cfg |= EXYNOS_WINCON_BPPMODE_24BPP_888;
+#else  /* To get output console on LCD */
+       cfg |= EXYNOS_WINCON_BPPMODE_16BPP_565;
+#endif
 
        writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
                        EXYNOS_WINCON(win_id));
include/configs/trats.h +1 -1
index a24e945..1573573 100644
@@ -252,6 +252,7 @@
 #define CONFIG_EXYNOS_FB
 #define CONFIG_LCD
 #define CONFIG_CMD_BMP
+#define CONFIG_EXYNOS_LOGO
 #define CONFIG_BMP_32BPP
 #define CONFIG_FB_ADDR         0x52504000
 #define CONFIG_S6E8AX0
--

1.7.1

#8 lore raw

PATCH v3 3/4 video: Modify exynos_fimd driver to support LCD console

In reply to Ajay Kumar
Quoted 83 lines · Ajay Kumar

Currently, exynos FIMD driver is being used to support only TIZEN LOGOs. In order to get LCD console, we need to enable half word swap feature of FIMD and use 16 BPP.
LCD console and proprietary Logo cannot be used simultaneously. You should define CONFIG_EXYNOS_LOGO for proprietary Logo, and if CONFIG_EXYNOS_LOGO is not defined you get output console on LCD. CONFIG_EXYNOS_LOGO is added to Trats configuration to keep existing logo feature intact in Trats.

---
  drivers/video/exynos_fb.c   |    5 ++++-
  drivers/video/exynos_fimd.c |   10 ++++++++--
  include/configs/trats.h     |    1 +
  3 files changed, 13 insertions(+), 3 deletions(-)
drivers/video/exynos_fb.c +4 -1
index d9a3f9a..c111a09 100644
@@ -65,6 +65,7 @@ static void exynos_lcd_init(vidinfo_t *vid)
  	exynos_fimd_lcd_init(vid);
  }
 
+#ifdef CONFIG_EXYNOS_LOGO
  static void draw_logo(void)
  {
  	int x, y;
@@ -87,6 +88,7 @@ static void draw_logo(void)
  	addr = panel_info.logo_addr;
  	bmp_display(addr, x, y);
  }
+#endif
 
  static void lcd_panel_on(vidinfo_t *vid)
  {
@@ -142,12 +144,13 @@ void lcd_ctrl_init(void *lcdbase)
 
  void lcd_enable(void)
  {
+#ifdef CONFIG_EXYNOS_LOGO
  	if (panel_info.logo_on) {
  		memset(lcd_base, 0, panel_width * panel_height *
  				(NBITS(panel_info.vl_bpix) >> 3));
  		draw_logo();
  	}
-
+#endif
  	lcd_panel_on(&panel_info);
  }
 
drivers/video/exynos_fimd.c +8 -2
index 06eae2e..f2e4c27 100644
@@ -88,14 +88,20 @@ static void exynos_fimd_set_par(unsigned int win_id)
  	/* DATAPATH is DMA */
  	cfg |= EXYNOS_WINCON_DATAPATH_DMA;
 
-	/* bpp is 32 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
  	cfg |= EXYNOS_WINCON_WSWP_ENABLE;
+#else	/* To get output console on LCD */
+	cfg |= EXYNOS_WINCON_HAWSWP_ENABLE;
+#endif
 
  	/* dma burst is 16 */
  	cfg |= EXYNOS_WINCON_BURSTLEN_16WORD;
 
-	/* pixel format is unpacked RGB888 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
  	cfg |= EXYNOS_WINCON_BPPMODE_24BPP_888;
+#else	/* To get output console on LCD */
+	cfg |= EXYNOS_WINCON_BPPMODE_16BPP_565;
+#endif
 
  	writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
  			EXYNOS_WINCON(win_id));
include/configs/trats.h +0 -0
index a24e945..1573573 100644

include/configs/trats.h line 258

Quoted 7 lines
include/configs/trats.h +1 -0
@@ -252,6 +252,7 @@
  #define CONFIG_EXYNOS_FB
  #define CONFIG_LCD
  #define CONFIG_CMD_BMP
+#define CONFIG_EXYNOS_LOGO
  #define CONFIG_BMP_32BPP
  #define CONFIG_FB_ADDR		0x52504000
  #define CONFIG_S6E8AX0

Hi,

How about use 'if (vid->logo_on)' instead of #ifdef CONFIG_EXYNOS_LOGO? In the vidinfo_t structure, 'logo_on' flag already exist.

Thank you,
Donghwa Lee

#9 lore raw

PATCH v3 3/4 video: Modify exynos_fimd driver to support LCD console

Dear Ajay,

Quoted 85 lines · Donghwa Lee
Quoted 75 lines · Ajay Kumar

Currently, exynos FIMD driver is being used to support only TIZEN LOGOs. In order to get LCD console, we need to enable half word swap feature of FIMD and use 16 BPP.
LCD console and proprietary Logo cannot be used simultaneously. You should define CONFIG_EXYNOS_LOGO for proprietary Logo, and if CONFIG_EXYNOS_LOGO is not defined you get output console on LCD. CONFIG_EXYNOS_LOGO is added to Trats configuration to keep existing logo feature intact in Trats.

---
  drivers/video/exynos_fb.c   |    5 ++++-
  drivers/video/exynos_fimd.c |   10 ++++++++--
  include/configs/trats.h     |    1 +
  3 files changed, 13 insertions(+), 3 deletions(-)
drivers/video/exynos_fb.c +3 -1
index d9a3f9a..c111a09 100644
@@ -65,6 +65,7 @@ static void exynos_lcd_init(vidinfo_t *vid)
      exynos_fimd_lcd_init(vid);
  }
  +#ifdef CONFIG_EXYNOS_LOGO
  static void draw_logo(void)
  {
      int x, y;
@@ -87,6 +88,7 @@ static void draw_logo(void)
      addr = panel_info.logo_addr;
      bmp_display(addr, x, y);
  }
+#endif
    static void lcd_panel_on(vidinfo_t *vid)
  {
@@ -142,12 +144,13 @@ void lcd_ctrl_init(void *lcdbase)
    void lcd_enable(void)
  {
+#ifdef CONFIG_EXYNOS_LOGO
      if (panel_info.logo_on) {
          memset(lcd_base, 0, panel_width * panel_height *
                  (NBITS(panel_info.vl_bpix) >> 3));
          draw_logo();
      }
-
+#endif
      lcd_panel_on(&panel_info);
  }
  diff --git a/drivers/video/exynos_fimd.c b/drivers/video/exynos_fimd.c

index 06eae2e..f2e4c27 100644

drivers/video/exynos_fimd.c +8 -0
@@ -88,14 +88,20 @@ static void exynos_fimd_set_par(unsigned int win_id)
      /* DATAPATH is DMA */
      cfg |= EXYNOS_WINCON_DATAPATH_DMA;
  -    /* bpp is 32 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
      cfg |= EXYNOS_WINCON_WSWP_ENABLE;
+#else    /* To get output console on LCD */
+    cfg |= EXYNOS_WINCON_HAWSWP_ENABLE;
+#endif
        /* dma burst is 16 */
      cfg |= EXYNOS_WINCON_BURSTLEN_16WORD;
  -    /* pixel format is unpacked RGB888 */
+#ifdef CONFIG_EXYNOS_LOGO /* To get proprietary LOGO */
      cfg |= EXYNOS_WINCON_BPPMODE_24BPP_888;
+#else    /* To get output console on LCD */
+    cfg |= EXYNOS_WINCON_BPPMODE_16BPP_565;
+#endif
        writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
              EXYNOS_WINCON(win_id));
include/configs/trats.h +0 -0
index a24e945..1573573 100644

include/configs/trats.h line 258

Quoted 7 lines
include/configs/trats.h +1 -0
@@ -252,6 +252,7 @@
  #define CONFIG_EXYNOS_FB
  #define CONFIG_LCD
  #define CONFIG_CMD_BMP
+#define CONFIG_EXYNOS_LOGO
  #define CONFIG_BMP_32BPP
  #define CONFIG_FB_ADDR        0x52504000
  #define CONFIG_S6E8AX0

Hi,

Quoted 2 lines

How about use 'if (vid->logo_on)' instead of #ifdef CONFIG_EXYNOS_LOGO? In the vidinfo_t structure, 'logo_on' flag already exist.

I agreed with Donghwa.
Ajay, please check it.

Quoted 4 lines

Thank you,
Donghwa Lee

Thanks.
Minkyu Kang.

author
#10 lore raw

PATCH v3 4/4 EXYNOS5: Add support for FIMD and DP

In reply to Ajay Kumar

Add panel_info structure required by LCD driver and DP panel platdata for SMDK5250.
Add GPIO configuration for LCD.
Enable FIMD and DP support on SMDK5250. DP Panel size: 2560x1600.
We use 16BPP resolution to get LCD console.

---
 board/samsung/smdk5250/smdk5250.c |   97 +++++++++++++++++++++++++++++++++++++
 include/configs/smdk5250.h        |    8 +++
 2 files changed, 105 insertions(+), 0 deletions(-)
board/samsung/smdk5250/smdk5250.c +97 -0
index 4c50342..46fd2a5 100644
@@ -24,12 +24,15 @@
 #include <asm/io.h>
 #include <i2c.h>
 #include <netdev.h>
+#include <lcd.h>
 #include <spi.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
+#include <asm/arch/power.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/sromc.h>
+#include <asm/arch/dp_info.h>
 #include <pmic.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -181,6 +184,100 @@ static int board_uart_init(void)
 	return 0;
 }
 
+void cfg_lcd_gpio(void)
+{
+	struct exynos5_gpio_part1 *gpio1 =
+		(struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
+
+	/* For Backlight */
+	s5p_gpio_cfg_pin(&gpio1->b2, 0, GPIO_OUTPUT);
+	s5p_gpio_set_value(&gpio1->b2, 0, 1);
+
+	/* LCD power on */
+	s5p_gpio_cfg_pin(&gpio1->x1, 5, GPIO_OUTPUT);
+	s5p_gpio_set_value(&gpio1->x1, 5, 1);
+
+	/* Set Hotplug detect for DP */
+	s5p_gpio_cfg_pin(&gpio1->x0, 7, GPIO_FUNC(0x3));
+}
+
+vidinfo_t panel_info = {
+	.vl_freq	= 60,
+	.vl_col		= 2560,
+	.vl_row		= 1600,
+	.vl_width	= 2560,
+	.vl_height	= 1600,
+	.vl_clkp	= CONFIG_SYS_LOW,
+	.vl_hsp		= CONFIG_SYS_LOW,
+	.vl_vsp		= CONFIG_SYS_LOW,
+	.vl_dp		= CONFIG_SYS_LOW,
+	.vl_bpix	= 4,	/* LCD_BPP = 2^4, for output conosle on LCD */
+
+	/* wDP panel timing infomation */
+	.vl_hspw	= 32,
+	.vl_hbpd	= 80,
+	.vl_hfpd	= 48,
+
+	.vl_vspw	= 6,
+	.vl_vbpd	= 37,
+	.vl_vfpd	= 3,
+	.vl_cmd_allow_len = 0xf,
+
+	.win_id		= 3,
+	.cfg_gpio	= cfg_lcd_gpio,
+	.backlight_on	= NULL,
+	.lcd_power_on	= NULL,
+	.reset_lcd	= NULL,
+	.dual_lcd_enabled = 0,
+
+	.init_delay	= 0,
+	.power_on_delay = 0,
+	.reset_delay	= 0,
+	.interface_mode = FIMD_RGB_INTERFACE,
+	.dp_enabled	= 1,
+};
+
+static struct edp_device_info edp_info = {
+	.disp_info = {
+		.h_res = 2560,
+		.h_sync_width = 32,
+		.h_back_porch = 80,
+		.h_front_porch = 48,
+		.v_res = 1600,
+		.v_sync_width  = 6,
+		.v_back_porch = 37,
+		.v_front_porch = 3,
+		.v_sync_rate = 60,
+	},
+	.lt_info = {
+		.lt_status = DP_LT_NONE,
+	},
+	.video_info = {
+		.master_mode = 0,
+		.bist_mode = DP_DISABLE,
+		.bist_pattern = NO_PATTERN,
+		.h_sync_polarity = 0,
+		.v_sync_polarity = 0,
+		.interlaced = 0,
+		.color_space = COLOR_RGB,
+		.dynamic_range = VESA,
+		.ycbcr_coeff = COLOR_YCBCR601,
+		.color_depth = COLOR_8,
+	},
+};
+
+static struct exynos_dp_platform_data dp_platform_data = {
+	.phy_enable	= set_dp_phy_ctrl,
+	.edp_dev_info	= &edp_info,
+};
+
+void init_panel_info(vidinfo_t *vid)
+{
+	vid->rgb_mode   = MODE_RGB_P,
+
+	exynos_set_dp_platform_data(&dp_platform_data);
+}
+
 #ifdef CONFIG_SYS_I2C_INIT_BOARD
 static int board_i2c_init(void)
 {
include/configs/smdk5250.h +8 -0
index e412da8..a9b3b8b 100644
@@ -256,6 +256,14 @@
 #define CONFIG_SOUND_WM8994
 #endif
 
+/* Display */
+#define CONFIG_LCD
+#define CONFIG_EXYNOS_FB
+#define CONFIG_EXYNOS_DP
+#define LCD_XRES			2560
+#define LCD_YRES			1600
+#define LCD_BPP			LCD_COLOR16
+
 /* Enable devicetree support */
 #define CONFIG_OF_LIBFDT
 
Signature · 1 line
1.7.1
#11 lore raw

PATCH v3 4/4 EXYNOS5: Add support for FIMD and DP

Quoted 9 lines · Ajay Kumar

Add panel_info structure required by LCD driver and DP panel platdata for SMDK5250.
Add GPIO configuration for LCD.
Enable FIMD and DP support on SMDK5250. DP Panel size: 2560x1600.
We use 16BPP resolution to get LCD console.

Quoted 153 lines
---
 board/samsung/smdk5250/smdk5250.c |   97
+++++++++++++++++++++++++++++++++++++
 include/configs/smdk5250.h        |    8 +++
 2 files changed, 105 insertions(+), 0 deletions(-)
board/samsung/smdk5250/smdk5250.c +31 -0
index 4c50342..46fd2a5 100644
@@ -24,12 +24,15 @@
 #include <asm/io.h>
 #include <i2c.h>
 #include <netdev.h>
+#include <lcd.h>
 #include <spi.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
+#include <asm/arch/power.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/sromc.h>
+#include <asm/arch/dp_info.h>
 #include <pmic.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -181,6 +184,100 @@ static int board_uart_init(void)
        return 0;
 }
 
+void cfg_lcd_gpio(void)
+{
+       struct exynos5_gpio_part1 *gpio1 =
+               (struct exynos5_gpio_part1 *)
 samsung_get_base_gpio_part1();
+
+       /* For Backlight */
+       s5p_gpio_cfg_pin(&gpio1->b2, 0, GPIO_OUTPUT);
+       s5p_gpio_set_value(&gpio1->b2, 0, 1);
+
+       /* LCD power on */
+       s5p_gpio_cfg_pin(&gpio1->x1, 5, GPIO_OUTPUT);
+       s5p_gpio_set_value(&gpio1->x1, 5, 1);
+
+       /* Set Hotplug detect for DP */
+       s5p_gpio_cfg_pin(&gpio1->x0, 7, GPIO_FUNC(0x3));
+}
+
+vidinfo_t panel_info = {
+       .vl_freq        = 60,
+       .vl_col         = 2560,
+       .vl_row         = 1600,
+       .vl_width       = 2560,
+       .vl_height      = 1600,
+       .vl_clkp        = CONFIG_SYS_LOW,
+       .vl_hsp         = CONFIG_SYS_LOW,
+       .vl_vsp         = CONFIG_SYS_LOW,
+       .vl_dp          = CONFIG_SYS_LOW,
+       .vl_bpix        = 4,    /* LCD_BPP = 2^4, for output conosle on

LCD */

board/samsung/smdk5250/smdk5250.c +66 -0
+
+       /* wDP panel timing infomation */
+       .vl_hspw        = 32,
+       .vl_hbpd        = 80,
+       .vl_hfpd        = 48,
+
+       .vl_vspw        = 6,
+       .vl_vbpd        = 37,
+       .vl_vfpd        = 3,
+       .vl_cmd_allow_len = 0xf,
+
+       .win_id         = 3,
+       .cfg_gpio       = cfg_lcd_gpio,
+       .backlight_on   = NULL,
+       .lcd_power_on   = NULL,
+       .reset_lcd      = NULL,
+       .dual_lcd_enabled = 0,
+
+       .init_delay     = 0,
+       .power_on_delay = 0,
+       .reset_delay    = 0,
+       .interface_mode = FIMD_RGB_INTERFACE,
+       .dp_enabled     = 1,
+};
+
+static struct edp_device_info edp_info = {
+       .disp_info = {
+               .h_res = 2560,
+               .h_sync_width = 32,
+               .h_back_porch = 80,
+               .h_front_porch = 48,
+               .v_res = 1600,
+               .v_sync_width  = 6,
+               .v_back_porch = 37,
+               .v_front_porch = 3,
+               .v_sync_rate = 60,
+       },
+       .lt_info = {
+               .lt_status = DP_LT_NONE,
+       },
+       .video_info = {
+               .master_mode = 0,
+               .bist_mode = DP_DISABLE,
+               .bist_pattern = NO_PATTERN,
+               .h_sync_polarity = 0,
+               .v_sync_polarity = 0,
+               .interlaced = 0,
+               .color_space = COLOR_RGB,
+               .dynamic_range = VESA,
+               .ycbcr_coeff = COLOR_YCBCR601,
+               .color_depth = COLOR_8,
+       },
+};
+
+static struct exynos_dp_platform_data dp_platform_data = {
+       .phy_enable     = set_dp_phy_ctrl,
+       .edp_dev_info   = &edp_info,
+};
+
+void init_panel_info(vidinfo_t *vid)
+{
+       vid->rgb_mode   = MODE_RGB_P,
+
+       exynos_set_dp_platform_data(&dp_platform_data);
+}
+
 #ifdef CONFIG_SYS_I2C_INIT_BOARD
 static int board_i2c_init(void)
 {
include/configs/smdk5250.h +8 -1
index e412da8..a9b3b8b 100644
@@ -256,6 +256,14 @@
 #define CONFIG_SOUND_WM8994
 #endif
 
+/* Display */
+#define CONFIG_LCD
+#define CONFIG_EXYNOS_FB
+#define CONFIG_EXYNOS_DP
+#define LCD_XRES                       2560
+#define LCD_YRES                       1600
+#define LCD_BPP                        LCD_COLOR16
+
 /* Enable devicetree support */
 #define CONFIG_OF_LIBFDT
 
--

1.7.1