diff options
author | Simon Glass | 2017-04-05 16:23:42 -0600 |
---|---|---|
committer | Tom Rini | 2017-05-09 20:20:40 -0400 |
commit | 452614556c44d4dc508c3a9f3aff544334fce875 (patch) | |
tree | 71bf070e5bad24cf60ce73ba60cbad1b973bb34a /common | |
parent | 7cac2fced726c4865133b74ea73ef13df40a1884 (diff) |
dm: video: Refactor lcd_simplefb to prepare for driver model
Adjust this function so that we can convert it to support CONFIG_DM_VIDEO
without a lot of code duplication.
Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'common')
-rw-r--r-- | common/lcd_simplefb.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/common/lcd_simplefb.c b/common/lcd_simplefb.c index 2ba00f6d34c..e479b492b88 100644 --- a/common/lcd_simplefb.c +++ b/common/lcd_simplefb.c @@ -16,17 +16,28 @@ DECLARE_GLOBAL_DATA_PTR; static int lcd_dt_simplefb_configure_node(void *blob, int off) { - int vl_col = lcd_get_pixel_width(); - int vl_row = lcd_get_pixel_height(); -#if LCD_BPP == LCD_COLOR16 - return fdt_setup_simplefb_node(blob, off, gd->fb_base, vl_col, vl_row, - vl_col * 2, "r5g6b5"); -#elif LCD_BPP == LCD_COLOR32 - return fdt_setup_simplefb_node(blob, off, gd->fb_base, vl_col, vl_row, - vl_col * 4, "a8r8g8b8"); -#else - return -1; -#endif + int xsize, ysize; + int bpix; /* log2 of bits per pixel */ + const char *name; + ulong fb_base; + + xsize = lcd_get_pixel_width(); + ysize = lcd_get_pixel_height(); + bpix = LCD_BPP; + fb_base = gd->fb_base; + switch (bpix) { + case 4: /* VIDEO_BPP16 */ + name = "r5g6b5"; + break; + case 5: /* VIDEO_BPP32 */ + name = "a8r8g8b8"; + break; + default: + return -EINVAL; + } + + return fdt_setup_simplefb_node(blob, off, fb_base, xsize, ysize, + xsize * (1 << bpix) / 8, name); } int lcd_dt_simplefb_add_node(void *blob) |