[U-Boot] [PATCH V3 0/4] 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(-)

With VPLL as source clock to FIMD, Exynos DP Initializaton was failing sometimes with unstable clock. Changing FIMD source to MPLL resolves this issue.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com Acked-by: Simon Glass sjg@chromium.org --- arch/arm/cpu/armv7/exynos/clock.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c index fe61f88..bfcd5f7 100644 --- a/arch/arm/cpu/armv7/exynos/clock.c +++ b/arch/arm/cpu/armv7/exynos/clock.c @@ -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);
/*

On 2012년 12월 20일 21:35, Ajay Kumar wrote:
With VPLL as source clock to FIMD, Exynos DP Initializaton was failing sometimes with unstable clock. Changing FIMD source to MPLL resolves this issue.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com Acked-by: Simon Glass sjg@chromium.org
arch/arm/cpu/armv7/exynos/clock.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c index fe61f88..bfcd5f7 100644 --- a/arch/arm/cpu/armv7/exynos/clock.c +++ b/arch/arm/cpu/armv7/exynos/clock.c @@ -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. Acked-by: Donghwa Lee dh09.lee@samsung.com
Thank you, Donghwa Lee

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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com --- arch/arm/include/asm/arch-exynos/mipi_dsim.h | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h index 9a7cbeb..b73263d 100644 --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h @@ -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

Hi Ajay,
On Thu, Dec 20, 2012 at 4:35 AM, Ajay Kumar ajaykumar.rs@samsung.comwrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
arch/arm/include/asm/arch-exynos/mipi_dsim.h | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h index 9a7cbeb..b73263d 100644 --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h @@ -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.
+{
return 0;
+} +#endif
/*
- register mipi_dsim_lcd_driver object defined by lcd panel driver
-- 1.7.1
Regards, Simon

On 2012년 12월 20일 21:35, Ajay Kumar wrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
arch/arm/include/asm/arch-exynos/mipi_dsim.h | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h index 9a7cbeb..b73263d 100644 --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h @@ -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
It looks good to me. Acked-by: Donghwa Lee dh09.lee@samsung.com
Thank you, Donghwa Lee

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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com --- drivers/video/exynos_fb.c | 5 ++++- drivers/video/exynos_fimd.c | 10 ++++++++-- include/configs/trats.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c index d9a3f9a..c111a09 100644 --- a/drivers/video/exynos_fb.c +++ b/drivers/video/exynos_fb.c @@ -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 --- a/drivers/video/exynos_fimd.c +++ b/drivers/video/exynos_fimd.c @@ -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)); diff --git a/include/configs/trats.h b/include/configs/trats.h index a24e945..1573573 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -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,
On Thu, Dec 20, 2012 at 4:35 AM, Ajay Kumar ajaykumar.rs@samsung.comwrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
There is nothing in the README, but I suppose this is a chip-specific patch, so fair enough. But see below.
Acked-by: Simon Glass sjg@chomium.org
drivers/video/exynos_fb.c | 5 ++++- drivers/video/exynos_fimd.c | 10 ++++++++-- include/configs/trats.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c index d9a3f9a..c111a09 100644 --- a/drivers/video/exynos_fb.c +++ b/drivers/video/exynos_fb.c @@ -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
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) {
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 *
(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 --- a/drivers/video/exynos_fimd.c +++ b/drivers/video/exynos_fimd.c @@ -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));
diff --git a/include/configs/trats.h b/include/configs/trats.h index a24e945..1573573 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -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

On 2012년 12월 20일 21:35, Ajay Kumar wrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
drivers/video/exynos_fb.c | 5 ++++- drivers/video/exynos_fimd.c | 10 ++++++++-- include/configs/trats.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c index d9a3f9a..c111a09 100644 --- a/drivers/video/exynos_fb.c +++ b/drivers/video/exynos_fb.c @@ -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 --- a/drivers/video/exynos_fimd.c +++ b/drivers/video/exynos_fimd.c @@ -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)); diff --git a/include/configs/trats.h b/include/configs/trats.h index a24e945..1573573 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -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

Dear Ajay,
On 21/12/12 10:53, Donghwa Lee wrote:
On 2012년 12월 20일 21:35, Ajay Kumar wrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
drivers/video/exynos_fb.c | 5 ++++- drivers/video/exynos_fimd.c | 10 ++++++++-- include/configs/trats.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c index d9a3f9a..c111a09 100644 --- a/drivers/video/exynos_fb.c +++ b/drivers/video/exynos_fb.c @@ -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 --- a/drivers/video/exynos_fimd.c +++ b/drivers/video/exynos_fimd.c @@ -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)); diff --git a/include/configs/trats.h b/include/configs/trats.h index a24e945..1573573 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -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.
I agreed with Donghwa. Ajay, please check it.
Thank you, Donghwa Lee
Thanks. Minkyu Kang.

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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com --- board/samsung/smdk5250/smdk5250.c | 97 +++++++++++++++++++++++++++++++++++++ include/configs/smdk5250.h | 8 +++ 2 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c index 4c50342..46fd2a5 100644 --- a/board/samsung/smdk5250/smdk5250.c +++ b/board/samsung/smdk5250/smdk5250.c @@ -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) { diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h index e412da8..a9b3b8b 100644 --- a/include/configs/smdk5250.h +++ b/include/configs/smdk5250.h @@ -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

On Thu, Dec 20, 2012 at 4:35 AM, Ajay Kumar ajaykumar.rs@samsung.comwrote:
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.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com
Acked-by: Simon Glass sjg@chomium.org
board/samsung/smdk5250/smdk5250.c | 97 +++++++++++++++++++++++++++++++++++++ include/configs/smdk5250.h | 8 +++ 2 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c index 4c50342..46fd2a5 100644 --- a/board/samsung/smdk5250/smdk5250.c +++ b/board/samsung/smdk5250/smdk5250.c @@ -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) { diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h index e412da8..a9b3b8b 100644 --- a/include/configs/smdk5250.h +++ b/include/configs/smdk5250.h @@ -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
participants (4)
-
Ajay Kumar
-
Donghwa Lee
-
Minkyu Kang
-
Simon Glass