dm: video: Refactor lcd_simplefb to prepare for driver model
authorSimon Glass <sjg@chromium.org>
Wed, 5 Apr 2017 22:23:42 +0000 (16:23 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 10 May 2017 00:20:40 +0000 (20:20 -0400)
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>
common/lcd_simplefb.c

index 2ba00f6d34c040d81c192636ba8df26a4b5a30d8..e479b492b887ded7806e3b2fad5247044c7ffd2c 100644 (file)
@@ -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)