:: [maemo-leste] [PATCH] Nokia RX-51: …
Página Principal
Delete this message
Reply to this message
Autor: Pali Rohár
Data:  
Para: Simon Glass, Anatolij Gustschin, Tom Rini
CC: u-boot, maemo-leste
Assunto: [maemo-leste] [PATCH] Nokia RX-51: Convert to CONFIG_DM_VIDEO
Mechanically convert video_hw_init() function to UCLASS_VIDEO probe
callback and replace CONFIG_CFB_CONSOLE by CONFIG_DM_VIDEO.

As framebuffer base address is setup by the bootloader which loads U-Boot,
set it into plat->base. And do not allocate framebuffer in video_post_bind
function when base address is already specified.

This change was tested in qemu n900 machine and is working fine.

What does not work is CONFIG_VIDEO_LOGO, seems to be buggy.

Signed-off-by: Pali Rohár <pali@???>
---
 board/nokia/rx51/rx51.c      | 40 +++++++++++++++++++++---------------
 configs/nokia_rx51_defconfig |  7 +++++--
 drivers/video/video-uclass.c |  3 +++
 include/configs/nokia_rx51.h | 11 ++--------
 4 files changed, 34 insertions(+), 27 deletions(-)


diff --git a/board/nokia/rx51/rx51.c b/board/nokia/rx51/rx51.c
index a52691509da4..621cff095619 100644
--- a/board/nokia/rx51/rx51.c
+++ b/board/nokia/rx51/rx51.c
@@ -30,7 +30,7 @@
#include <malloc.h>
#include <twl4030.h>
#include <i2c.h>
-#include <video_fb.h>
+#include <video.h>
#include <keyboard.h>
#include <asm/global_data.h>
#include <asm/io.h>
@@ -62,8 +62,6 @@ struct emu_hal_params_rx51 {

DECLARE_GLOBAL_DATA_PTR;

-GraphicDevice gdev;
-
 const omap3_sysinfo sysinfo = {
     DDR_STACKED,
     "Nokia RX-51",
@@ -342,22 +340,28 @@ void setup_board_tags(struct tag **in_params)
     *in_params = params;
 }


-/*
- * Routine: video_hw_init
- * Description: Set up the GraphicDevice depending on sys_boot.
- */
-void *video_hw_init(void)
+static int rx51_video_probe(struct udevice *dev)
 {
-    /* fill in Graphic Device */
-    gdev.frameAdrs = 0x8f9c0000;
-    gdev.winSizeX = 800;
-    gdev.winSizeY = 480;
-    gdev.gdfBytesPP = 2;
-    gdev.gdfIndex = GDF_16BIT_565RGB;
-    memset((void *)gdev.frameAdrs, 0, 0xbb800);
-    return (void *) &gdev;
+    struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
+    struct video_priv *uc_priv = dev_get_uclass_priv(dev);
+
+    uc_plat->base = 0x8f9c0000;
+    uc_plat->size = 800 * 480 * sizeof(u16);
+    uc_priv->xsize = 800;
+    uc_priv->ysize = 480;
+    uc_priv->bpix = VIDEO_BPP16;
+
+    video_set_flush_dcache(dev, true);
+
+    return 0;
 }


+U_BOOT_DRIVER(rx51_video) = {
+    .name = "rx51_video",
+    .id = UCLASS_VIDEO,
+    .probe = rx51_video_probe,
+};
+
 /*
  * Routine: twl4030_regulator_set_mode
  * Description: Set twl4030 regulator mode over i2c powerbus.
@@ -777,6 +781,10 @@ U_BOOT_DRVINFOS(rx51_watchdog) = {
     { "rx51_watchdog" },
 };


+U_BOOT_DRVINFOS(rx51_video) = {
+    { "rx51_video" },
+};
+
 U_BOOT_DRVINFOS(rx51_kp) = {
     { "rx51_kp" },
 };
diff --git a/configs/nokia_rx51_defconfig b/configs/nokia_rx51_defconfig
index 47b7bc3b4f03..1d64981afc46 100644
--- a/configs/nokia_rx51_defconfig
+++ b/configs/nokia_rx51_defconfig
@@ -77,8 +77,11 @@ CONFIG_SPI=y
 CONFIG_USB=y
 CONFIG_USB_MUSB_UDC=y
 CONFIG_USB_OMAP3=y
-CONFIG_CFB_CONSOLE=y
-CONFIG_CFB_CONSOLE_ANSI=y
+CONFIG_DM_VIDEO=y
+CONFIG_VIDEO_LOGO=y
+# CONFIG_VIDEO_BPP8 is not set
+# CONFIG_VIDEO_BPP32 is not set
+CONFIG_SYS_WHITE_ON_BLACK=y
 CONFIG_SPLASH_SCREEN=y
 CONFIG_WATCHDOG_TIMEOUT_MSECS=31000
 CONFIG_WDT=y
diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c
index 7d499bcec51d..c2f7d97e93e3 100644
--- a/drivers/video/video-uclass.c
+++ b/drivers/video/video-uclass.c
@@ -78,6 +78,9 @@ static ulong alloc_fb(struct udevice *dev, ulong *addrp)
     if (!plat->size)
         return 0;


+    if (plat->base)
+        return 0;
+
     align = plat->align ? plat->align : 1 << 20;
     base = *addrp - plat->size;
     base &= ~(align - 1);
diff --git a/include/configs/nokia_rx51.h b/include/configs/nokia_rx51.h
index 9be64c3d3f87..e837b12b568f 100644
--- a/include/configs/nokia_rx51.h
+++ b/include/configs/nokia_rx51.h
@@ -70,19 +70,12 @@


 #define CONFIG_SYS_ONENAND_BASE        ONENAND_MAP


-/*
- * Framebuffer
- */
-/* Video console */
-#define VIDEO_FB_16BPP_PIXEL_SWAP
-#define VIDEO_FB_16BPP_WORD_SWAP
-
 /* Environment information */
 #define CONFIG_EXTRA_ENV_SETTINGS \
     "usbtty=cdc_acm\0" \
     "stdin=usbtty,serial,keyboard\0" \
-    "stdout=usbtty,serial,vga\0" \
-    "stderr=usbtty,serial,vga\0" \
+    "stdout=usbtty,serial,vidconsole\0" \
+    "stderr=usbtty,serial,vidconsole\0" \
     "slide=gpio input " __stringify(GPIO_SLIDE) "\0" \
     "switchmmc=mmc dev ${mmcnum}\0" \
     "kernaddr=0x82008000\0" \
-- 
2.20.1