[U-Boot] [PATCH] mx53loco: Add support for SEIKO 4.3'' WVGA panel

Add support for SEIKO 4.3'' WVGA panel on mx53loco.
By default, the CLAA WVGA panel is selected.
In order to support the SEIKO panel, undef CONFIG_CLAA_WVGA and define CONFIG_SEIKO_WVGA in mx53loco.h.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com --- board/freescale/mx53loco/mx53loco.c | 26 +++++++++++++++++++++++++- include/configs/mx53loco.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/board/freescale/mx53loco/mx53loco.c b/board/freescale/mx53loco/mx53loco.c index a11e883..5709c97 100644 --- a/board/freescale/mx53loco/mx53loco.c +++ b/board/freescale/mx53loco/mx53loco.c @@ -412,6 +412,7 @@ static void clock_1GHz(void) printf("CPU: Switch DDR clock to 400MHz failed\n"); }
+#if defined(CONFIG_CLAA_WVGA) static struct fb_videomode const claa_wvga = { .name = "CLAA07LC0ACW", .refresh = 57, @@ -427,6 +428,24 @@ static struct fb_videomode const claa_wvga = { .sync = 0, .vmode = FB_VMODE_NONINTERLACED }; +#endif + +#if defined(CONFIG_SEIKO_WVGA) +static struct fb_videomode const seiko43wvga = { + .name = "Seiko-43WVF1G", + .refresh = 60, + .xres = 800, + .yres = 480, + .pixclock = 29851, /* picosecond (33.5 MHz) */ + .left_margin = 89, + .right_margin = 164, + .upper_margin = 23, + .lower_margin = 10, + .hsync_len = 10, + .vsync_len = 10, + .sync = 0, +}; +#endif
void lcd_iomux(void) { @@ -470,7 +489,12 @@ void lcd_iomux(void)
void lcd_enable(void) { - int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565); + int ret; +#if defined(CONFIG_CLAA_WVGA) + ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565); +#elif defined(CONFIG_SEIKO_WVGA) + ret = ipuv3_fb_init(&seiko43wvga, 0, IPU_PIX_FMT_RGB24); +#endif if (ret) printf("LCD cannot be configured: %d\n", ret); } diff --git a/include/configs/mx53loco.h b/include/configs/mx53loco.h index 0658dd3..e60b155 100644 --- a/include/configs/mx53loco.h +++ b/include/configs/mx53loco.h @@ -222,5 +222,6 @@ #define CONFIG_BMP_16BPP #define CONFIG_VIDEO_LOGO #define CONFIG_IPUV3_CLK 200000000 +#define CONFIG_CLAA_WVGA
#endif /* __CONFIG_H */

On Thu, Oct 18, 2012 at 3:49 PM, Fabio Estevam fabio.estevam@freescale.comwrote:
Add support for SEIKO 4.3'' WVGA panel on mx53loco.
By default, the CLAA WVGA panel is selected.
In order to support the SEIKO panel, undef CONFIG_CLAA_WVGA and define CONFIG_SEIKO_WVGA in mx53loco.h.
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
Acked-by: Otavio Salvador otavio@ossystems.com.br

Am 18/10/2012 20:49, schrieb Fabio Estevam:
Add support for SEIKO 4.3'' WVGA panel on mx53loco.
By default, the CLAA WVGA panel is selected.
In order to support the SEIKO panel, undef CONFIG_CLAA_WVGA and define CONFIG_SEIKO_WVGA in mx53loco.h.
Hi Fabio,
in this way you have two different U-Boot binaries only to manage the two displays, and automatically some "dead code" is added to U-Boot because CONFIG_SEIKO_WVGA is not defined.
What about to use a u-boot environment to select the display ? Could be a better solution for you ? You can then have a single u-boot image managing both displays. I did in this way for the mt_ventoux board (board/mt_ventoux/mt_ventoux.c), maybe can this help ?
Regards, Stefano
Signed-off-by: Fabio Estevam fabio.estevam@freescale.com
board/freescale/mx53loco/mx53loco.c | 26 +++++++++++++++++++++++++- include/configs/mx53loco.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/board/freescale/mx53loco/mx53loco.c b/board/freescale/mx53loco/mx53loco.c index a11e883..5709c97 100644 --- a/board/freescale/mx53loco/mx53loco.c +++ b/board/freescale/mx53loco/mx53loco.c @@ -412,6 +412,7 @@ static void clock_1GHz(void) printf("CPU: Switch DDR clock to 400MHz failed\n"); }
+#if defined(CONFIG_CLAA_WVGA) static struct fb_videomode const claa_wvga = { .name = "CLAA07LC0ACW", .refresh = 57, @@ -427,6 +428,24 @@ static struct fb_videomode const claa_wvga = { .sync = 0, .vmode = FB_VMODE_NONINTERLACED }; +#endif
+#if defined(CONFIG_SEIKO_WVGA) +static struct fb_videomode const seiko43wvga = {
- .name = "Seiko-43WVF1G",
- .refresh = 60,
- .xres = 800,
- .yres = 480,
- .pixclock = 29851, /* picosecond (33.5 MHz) */
- .left_margin = 89,
- .right_margin = 164,
- .upper_margin = 23,
- .lower_margin = 10,
- .hsync_len = 10,
- .vsync_len = 10,
- .sync = 0,
+}; +#endif
void lcd_iomux(void) { @@ -470,7 +489,12 @@ void lcd_iomux(void)
void lcd_enable(void) {
- int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565);
- int ret;
+#if defined(CONFIG_CLAA_WVGA)
- ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565);
+#elif defined(CONFIG_SEIKO_WVGA)
- ret = ipuv3_fb_init(&seiko43wvga, 0, IPU_PIX_FMT_RGB24);
+#endif if (ret) printf("LCD cannot be configured: %d\n", ret); } diff --git a/include/configs/mx53loco.h b/include/configs/mx53loco.h index 0658dd3..e60b155 100644 --- a/include/configs/mx53loco.h +++ b/include/configs/mx53loco.h @@ -222,5 +222,6 @@ #define CONFIG_BMP_16BPP #define CONFIG_VIDEO_LOGO #define CONFIG_IPUV3_CLK 200000000 +#define CONFIG_CLAA_WVGA
#endif /* __CONFIG_H */

Hi Stefano,
On Sat, Oct 20, 2012 at 12:03 PM, Stefano Babic sbabic@denx.de wrote:
What about to use a u-boot environment to select the display ? Could be a better solution for you ? You can then have a single u-boot image managing both displays. I did in this way for the mt_ventoux board (board/mt_ventoux/mt_ventoux.c), maybe can this help ?
Sounds good. I tried this approach.
However, when I try to manipulate the env var I am not able to boot:
U-Boot 2012.10-09480-g6b08fc3-dirty (Oct 23 2012 - 15:24:03)
Board: MX53 LOCO I2C: ready DRAM: 1 GiB ...
These are my simple changes (just to show the issue I am facing):
--- a/board/freescale/mx53loco/mx53loco.c +++ b/board/freescale/mx53loco/mx53loco.c @@ -471,6 +471,18 @@ void lcd_iomux(void) void lcd_enable(void) { int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565); + char *e; + + e = getenv("panel"); + + if (e != NULL) { + if (strcmp(e, "claa") == 0) + printf("Panel is claa\n"); + + if (strcmp(e, "seiko") == 0) + printf("Panel is seiko\n"); + } + if (ret) printf("LCD cannot be configured: %d\n", ret); }
Any ideas?
Thanks,
Fabio Estevam

Am 23/10/2012 19:36, schrieb Fabio Estevam:
Hi Stefano,
On Sat, Oct 20, 2012 at 12:03 PM, Stefano Babic sbabic@denx.de wrote:
What about to use a u-boot environment to select the display ? Could be a better solution for you ? You can then have a single u-boot image managing both displays. I did in this way for the mt_ventoux board (board/mt_ventoux/mt_ventoux.c), maybe can this help ?
Sounds good. I tried this approach.
However, when I try to manipulate the env var I am not able to boot:
U-Boot 2012.10-09480-g6b08fc3-dirty (Oct 23 2012 - 15:24:03)
Board: MX53 LOCO I2C: ready DRAM: 1 GiB ...
These are my simple changes (just to show the issue I am facing):
--- a/board/freescale/mx53loco/mx53loco.c +++ b/board/freescale/mx53loco/mx53loco.c @@ -471,6 +471,18 @@ void lcd_iomux(void) void lcd_enable(void) { int ret = ipuv3_fb_init(&claa_wvga, 0, IPU_PIX_FMT_RGB565);
char *e;
e = getenv("panel");
if (e != NULL) {
if (strcmp(e, "claa") == 0)
printf("Panel is claa\n");
if (strcmp(e, "seiko") == 0)
printf("Panel is seiko\n");
}
if (ret) printf("LCD cannot be configured: %d\n", ret);
}
Any ideas?
Yes, I thins is due to the fact that size for the framebuffer is allocated before relocation. This was also a reason for me to migrate to CONFIG_VIDEO instead of CONFIG_LCD.
From board_init_f in arch/arm/lib/board.c:
#ifdef CONFIG_LCD /* reserve memory for LCD display (always full pages) */ addr = lcd_setmem (addr); gd->fb_base = addr; #endif /* CONFIG_LCD */
This makes difficult to reserve the correct amount of memory because at this point we cannot evaluate the environment. With CONFIG_VIDEO, memory is allocated with malloc(), and in any case after relocation.
Best regards, Stefano
Thanks,
Fabio Estevam

Hi Stefano,
On Thu, Oct 25, 2012 at 8:28 AM, Stefano Babic sbabic@denx.de wrote:
Yes, I thins is due to the fact that size for the framebuffer is allocated before relocation. This was also a reason for me to migrate to CONFIG_VIDEO instead of CONFIG_LCD.
mx53loco.h defines CONFIG_VIDEO, not CONFIG_LCD.
I am suspecting alignment/gcc issues: with a gcc4.4 I can boot into a prompt, but after typing any command and then "enter" the board crashes and reboot.
With gcc4.7, then board hangs after the total RAM is displayed.
Regards,
Fabio Estevam

Dear Fabio Estevam,
CCing Albert.
Hi Stefano,
On Thu, Oct 25, 2012 at 8:28 AM, Stefano Babic sbabic@denx.de wrote:
Yes, I thins is due to the fact that size for the framebuffer is allocated before relocation. This was also a reason for me to migrate to CONFIG_VIDEO instead of CONFIG_LCD.
mx53loco.h defines CONFIG_VIDEO, not CONFIG_LCD.
I am suspecting alignment/gcc issues: with a gcc4.4 I can boot into a prompt, but after typing any command and then "enter" the board crashes and reboot.
With gcc4.7, then board hangs after the total RAM is displayed.
Regards,
Fabio Estevam
Best regards, Marek Vasut

Hi Marek,
On Thu, 25 Oct 2012 13:14:38 +0200, Marek Vasut marex@denx.de wrote:
Dear Fabio Estevam,
CCing Albert.
Hi Stefano,
On Thu, Oct 25, 2012 at 8:28 AM, Stefano Babic sbabic@denx.de wrote:
Yes, I thins is due to the fact that size for the framebuffer is allocated before relocation. This was also a reason for me to migrate to CONFIG_VIDEO instead of CONFIG_LCD.
mx53loco.h defines CONFIG_VIDEO, not CONFIG_LCD.
I am suspecting alignment/gcc issues: with a gcc4.4 I can boot into a prompt, but after typing any command and then "enter" the board crashes and reboot.
With gcc4.7, then board hangs after the total RAM is displayed.
Regards,
Fabio Estevam
The board should normally not hang but throw a data abort. In any case, try to run the board under a HW debugger to find out which exception occurs.
Best regards, Marek Vasut
Amicalement,
participants (6)
-
Albert ARIBAUD
-
Fabio Estevam
-
Fabio Estevam
-
Marek Vasut
-
Otavio Salvador
-
Stefano Babic