summaryrefslogtreecommitdiff
path: root/common/lcd.c
diff options
context:
space:
mode:
authorStephen Warren <swarren@wwwdotorg.org>2013-01-29 16:37:38 +0000
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2013-03-20 15:29:39 +0100
commit6d3307195d583b7590068299420db4b44c6df4bf (patch)
tree0902be421192247e67ba1acbb767f27698e7c106 /common/lcd.c
parent3f397782ae6c6148f7fa12bbb62f309a4f5d897c (diff)
downloadu-boot-imx-6d3307195d583b7590068299420db4b44c6df4bf.zip
u-boot-imx-6d3307195d583b7590068299420db4b44c6df4bf.tar.gz
u-boot-imx-6d3307195d583b7590068299420db4b44c6df4bf.tar.bz2
lcd: calculate line_length after lcd_ctrl_init()
When an LCD driver is actually driving a regular external display, e.g. an HDMI monitor, the display resolution might not be known until the display controller has initialized, i.e. during lcd_ctrl_init(). However, lcd.c calculates lcd_line_length before calling this function, thus relying on a hard-coded resolution in struct panel_info. Instead, defer this calculation until after lcd_ctrl_init() has had the chance to dynamically determine the resolution. This needs to happen before lcd_clear(), since the value is used there. grep indicates that no code outside lcd.c uses this lcd_line_length; in particular, no lcd_ctrl_init() implementations read it. Signed-off-by: Stephen Warren <swarren@wwwdotorg.org> Acked-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'common/lcd.c')
-rw-r--r--common/lcd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/common/lcd.c b/common/lcd.c
index 590bbb9..77914ad 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -386,8 +386,6 @@ int drv_lcd_init (void)
lcd_base = (void *)(gd->fb_base);
- lcd_get_size(&lcd_line_length);
-
lcd_init(lcd_base); /* LCD initialization */
/* Device initialization */
@@ -470,6 +468,8 @@ static int lcd_init(void *lcdbase)
debug("[LCD] Initializing LCD frambuffer at %p\n", lcdbase);
lcd_ctrl_init(lcdbase);
+ lcd_get_size(&lcd_line_length);
+ lcd_line_length = (panel_info.vl_col * NBITS(panel_info.vl_bpix)) / 8;
lcd_is_enabled = 1;
lcd_clear();
lcd_enable ();