Unite console_normal.c and console_rotate.c files.
Those files have similar logic, and common logic
may be extracted after putting code in single file.

Signed-off-by: Dzmitry Sankouski <dsankou...@gmail.com>
---
Changes for v2:
- none

 drivers/video/Kconfig                         |   8 +-
 drivers/video/Makefile                        |   3 +-
 drivers/video/console_normal.c                | 178 ------------------
 .../{console_rotate.c => console_simple.c}    | 166 ++++++++++++++++
 4 files changed, 171 insertions(+), 184 deletions(-)
 delete mode 100644 drivers/video/console_normal.c
 rename drivers/video/{console_rotate.c => console_simple.c} (75%)

diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index f539977d9b..1dfe11d182 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -124,17 +124,17 @@ config VIDEO_MIPI_DSI
          The MIPI Display Serial Interface (MIPI DSI) defines a high-speed
          serial interface between a host processor and a display module.
 
-config CONSOLE_NORMAL
+config VIDEO_CONSOLE
        bool "Support a simple text console"
        default y
        help
          Support drawing text on the frame buffer console so that it can be
-         used as a console. Rotation is not supported by this driver (see
-         CONFIG_CONSOLE_ROTATION for that). A built-in 8x16 font is used
-         for the display.
+         used as a console. See CONFIG_CONSOLE_ROTATION for rotation support.
+         A built-in 8x16 font is used for the display.
 
 config CONSOLE_ROTATION
        bool "Support rotated displays"
+       depends on VIDEO_CONSOLE
        help
          Sometimes, for example if the display is mounted in portrait
          mode or even if it's mounted landscape but rotated by 180degree,
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 40a871d638..75decf707d 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -7,8 +7,7 @@ ifdef CONFIG_DM
 obj-$(CONFIG_BACKLIGHT) += backlight-uclass.o
 obj-$(CONFIG_BACKLIGHT_GPIO) += backlight_gpio.o
 obj-$(CONFIG_BACKLIGHT_PWM) += pwm_backlight.o
-obj-$(CONFIG_CONSOLE_NORMAL) += console_normal.o
-obj-$(CONFIG_CONSOLE_ROTATION) += console_rotate.o
+obj-$(CONFIG_VIDEO_CONSOLE) += console_simple.o
 obj-$(CONFIG_CONSOLE_TRUETYPE) += console_truetype.o fonts/
 obj-$(CONFIG_DISPLAY) += display-uclass.o
 obj-$(CONFIG_VIDEO_MIPI_DSI) += dsi-host-uclass.o
diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c
deleted file mode 100644
index 04f022491e..0000000000
--- a/drivers/video/console_normal.c
+++ /dev/null
@@ -1,178 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (c) 2015 Google, Inc
- * (C) Copyright 2001-2015
- * DENX Software Engineering -- w...@denx.de
- * Compulab Ltd - http://compulab.co.il/
- * Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
- */
-
-#include <common.h>
-#include <dm.h>
-#include <video.h>
-#include <video_console.h>
-#include <video_font.h>                /* Get font data, width and height */
-
-static int console_normal_set_row(struct udevice *dev, uint row, int clr)
-{
-       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
-       void *line, *end;
-       int pixels = VIDEO_FONT_HEIGHT * vid_priv->xsize;
-       int ret;
-       int i;
-
-       line = vid_priv->fb + row * VIDEO_FONT_HEIGHT * vid_priv->line_length;
-       switch (vid_priv->bpix) {
-       case VIDEO_BPP8:
-               if (IS_ENABLED(CONFIG_VIDEO_BPP8)) {
-                       uint8_t *dst = line;
-
-                       for (i = 0; i < pixels; i++)
-                               *dst++ = clr;
-                       end = dst;
-                       break;
-               }
-       case VIDEO_BPP16:
-               if (IS_ENABLED(CONFIG_VIDEO_BPP16)) {
-                       uint16_t *dst = line;
-
-                       for (i = 0; i < pixels; i++)
-                               *dst++ = clr;
-                       end = dst;
-                       break;
-               }
-       case VIDEO_BPP32:
-               if (IS_ENABLED(CONFIG_VIDEO_BPP32)) {
-                       uint32_t *dst = line;
-
-                       for (i = 0; i < pixels; i++)
-                               *dst++ = clr;
-                       end = dst;
-                       break;
-               }
-       default:
-               return -ENOSYS;
-       }
-       ret = vidconsole_sync_copy(dev, line, end);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
-static int console_normal_move_rows(struct udevice *dev, uint rowdst,
-                                    uint rowsrc, uint count)
-{
-       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
-       void *dst;
-       void *src;
-       int size;
-       int ret;
-
-       dst = vid_priv->fb + rowdst * VIDEO_FONT_HEIGHT * vid_priv->line_length;
-       src = vid_priv->fb + rowsrc * VIDEO_FONT_HEIGHT * vid_priv->line_length;
-       size = VIDEO_FONT_HEIGHT * vid_priv->line_length * count;
-       ret = vidconsole_memmove(dev, dst, src, size);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
-static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y,
-                                 char ch)
-{
-       struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
-       struct udevice *vid = dev->parent;
-       struct video_priv *vid_priv = dev_get_uclass_priv(vid);
-       int i, row;
-       void *start;
-       void *line;
-       int ret;
-
-       start = vid_priv->fb + y * vid_priv->line_length +
-               VID_TO_PIXEL(x_frac) * VNBYTES(vid_priv->bpix);
-       line = start;
-
-       if (x_frac + VID_TO_POS(vc_priv->x_charsize) > vc_priv->xsize_frac)
-               return -EAGAIN;
-
-       for (row = 0; row < VIDEO_FONT_HEIGHT; row++) {
-               unsigned int idx = (u8)ch * VIDEO_FONT_HEIGHT + row;
-               uchar bits = video_fontdata[idx];
-
-               switch (vid_priv->bpix) {
-               case VIDEO_BPP8:
-                       if (IS_ENABLED(CONFIG_VIDEO_BPP8)) {
-                               uint8_t *dst = line;
-
-                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
-                                       *dst++ = (bits & 0x80) ?
-                                               vid_priv->colour_fg :
-                                               vid_priv->colour_bg;
-                                       bits <<= 1;
-                               }
-                               break;
-                       }
-               case VIDEO_BPP16:
-                       if (IS_ENABLED(CONFIG_VIDEO_BPP16)) {
-                               uint16_t *dst = line;
-
-                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
-                                       *dst++ = (bits & 0x80) ?
-                                               vid_priv->colour_fg :
-                                               vid_priv->colour_bg;
-                                       bits <<= 1;
-                               }
-                               break;
-                       }
-               case VIDEO_BPP32:
-                       if (IS_ENABLED(CONFIG_VIDEO_BPP32)) {
-                               uint32_t *dst = line;
-
-                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
-                                       *dst++ = (bits & 0x80) ?
-                                               vid_priv->colour_fg :
-                                               vid_priv->colour_bg;
-                                       bits <<= 1;
-                               }
-                               break;
-                       }
-               default:
-                       return -ENOSYS;
-               }
-               line += vid_priv->line_length;
-       }
-       ret = vidconsole_sync_copy(dev, start, line);
-       if (ret)
-               return ret;
-
-       return VID_TO_POS(VIDEO_FONT_WIDTH);
-}
-
-static int console_normal_probe(struct udevice *dev)
-{
-       struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
-       struct udevice *vid_dev = dev->parent;
-       struct video_priv *vid_priv = dev_get_uclass_priv(vid_dev);
-
-       vc_priv->x_charsize = VIDEO_FONT_WIDTH;
-       vc_priv->y_charsize = VIDEO_FONT_HEIGHT;
-       vc_priv->cols = vid_priv->xsize / VIDEO_FONT_WIDTH;
-       vc_priv->rows = vid_priv->ysize / VIDEO_FONT_HEIGHT;
-
-       return 0;
-}
-
-struct vidconsole_ops console_normal_ops = {
-       .putc_xy        = console_normal_putc_xy,
-       .move_rows      = console_normal_move_rows,
-       .set_row        = console_normal_set_row,
-};
-
-U_BOOT_DRIVER(vidconsole_normal) = {
-       .name   = "vidconsole0",
-       .id     = UCLASS_VIDEO_CONSOLE,
-       .ops    = &console_normal_ops,
-       .probe  = console_normal_probe,
-};
diff --git a/drivers/video/console_rotate.c b/drivers/video/console_simple.c
similarity index 75%
rename from drivers/video/console_rotate.c
rename to drivers/video/console_simple.c
index 36c8d0609d..a4b3cfe3d8 100644
--- a/drivers/video/console_rotate.c
+++ b/drivers/video/console_simple.c
@@ -11,6 +11,171 @@
 #include <video_console.h>
 #include <video_font.h>                /* Get font data, width and height */
 
+static int console_normal_set_row(struct udevice *dev, uint row, int clr)
+{
+       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+       void *line, *end;
+       int pixels = VIDEO_FONT_HEIGHT * vid_priv->xsize;
+       int ret;
+       int i;
+
+       line = vid_priv->fb + row * VIDEO_FONT_HEIGHT * vid_priv->line_length;
+       switch (vid_priv->bpix) {
+       case VIDEO_BPP8:
+               if (IS_ENABLED(CONFIG_VIDEO_BPP8)) {
+                       uint8_t *dst = line;
+
+                       for (i = 0; i < pixels; i++)
+                               *dst++ = clr;
+                       end = dst;
+                       break;
+               }
+       case VIDEO_BPP16:
+               if (IS_ENABLED(CONFIG_VIDEO_BPP16)) {
+                       uint16_t *dst = line;
+
+                       for (i = 0; i < pixels; i++)
+                               *dst++ = clr;
+                       end = dst;
+                       break;
+               }
+       case VIDEO_BPP32:
+               if (IS_ENABLED(CONFIG_VIDEO_BPP32)) {
+                       uint32_t *dst = line;
+
+                       for (i = 0; i < pixels; i++)
+                               *dst++ = clr;
+                       end = dst;
+                       break;
+               }
+       default:
+               return -ENOSYS;
+       }
+       ret = vidconsole_sync_copy(dev, line, end);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int console_normal_move_rows(struct udevice *dev, uint rowdst,
+                                    uint rowsrc, uint count)
+{
+       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+       void *dst;
+       void *src;
+       int size;
+       int ret;
+
+       dst = vid_priv->fb + rowdst * VIDEO_FONT_HEIGHT * vid_priv->line_length;
+       src = vid_priv->fb + rowsrc * VIDEO_FONT_HEIGHT * vid_priv->line_length;
+       size = VIDEO_FONT_HEIGHT * vid_priv->line_length * count;
+       ret = vidconsole_memmove(dev, dst, src, size);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y,
+                                 char ch)
+{
+       struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+       struct udevice *vid = dev->parent;
+       struct video_priv *vid_priv = dev_get_uclass_priv(vid);
+       int i, row;
+       void *start;
+       void *line;
+       int ret;
+
+       start = vid_priv->fb + y * vid_priv->line_length +
+               VID_TO_PIXEL(x_frac) * VNBYTES(vid_priv->bpix);
+       line = start;
+
+       if (x_frac + VID_TO_POS(vc_priv->x_charsize) > vc_priv->xsize_frac)
+               return -EAGAIN;
+
+       for (row = 0; row < VIDEO_FONT_HEIGHT; row++) {
+               unsigned int idx = (u8)ch * VIDEO_FONT_HEIGHT + row;
+               uchar bits = video_fontdata[idx];
+
+               switch (vid_priv->bpix) {
+               case VIDEO_BPP8:
+                       if (IS_ENABLED(CONFIG_VIDEO_BPP8)) {
+                               uint8_t *dst = line;
+
+                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
+                                       *dst++ = (bits & 0x80) ?
+                                               vid_priv->colour_fg :
+                                               vid_priv->colour_bg;
+                                       bits <<= 1;
+                               }
+                               break;
+                       }
+               case VIDEO_BPP16:
+                       if (IS_ENABLED(CONFIG_VIDEO_BPP16)) {
+                               uint16_t *dst = line;
+
+                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
+                                       *dst++ = (bits & 0x80) ?
+                                               vid_priv->colour_fg :
+                                               vid_priv->colour_bg;
+                                       bits <<= 1;
+                               }
+                               break;
+                       }
+               case VIDEO_BPP32:
+                       if (IS_ENABLED(CONFIG_VIDEO_BPP32)) {
+                               uint32_t *dst = line;
+
+                               for (i = 0; i < VIDEO_FONT_WIDTH; i++) {
+                                       *dst++ = (bits & 0x80) ?
+                                               vid_priv->colour_fg :
+                                               vid_priv->colour_bg;
+                                       bits <<= 1;
+                               }
+                               break;
+                       }
+               default:
+                       return -ENOSYS;
+               }
+               line += vid_priv->line_length;
+       }
+       ret = vidconsole_sync_copy(dev, start, line);
+       if (ret)
+               return ret;
+
+       return VID_TO_POS(VIDEO_FONT_WIDTH);
+}
+
+static int console_normal_probe(struct udevice *dev)
+{
+       struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+       struct udevice *vid_dev = dev->parent;
+       struct video_priv *vid_priv = dev_get_uclass_priv(vid_dev);
+
+       vc_priv->x_charsize = VIDEO_FONT_WIDTH;
+       vc_priv->y_charsize = VIDEO_FONT_HEIGHT;
+       vc_priv->cols = vid_priv->xsize / VIDEO_FONT_WIDTH;
+       vc_priv->rows = vid_priv->ysize / VIDEO_FONT_HEIGHT;
+
+       return 0;
+}
+
+struct vidconsole_ops console_normal_ops = {
+       .putc_xy        = console_normal_putc_xy,
+       .move_rows      = console_normal_move_rows,
+       .set_row        = console_normal_set_row,
+};
+
+U_BOOT_DRIVER(vidconsole_normal) = {
+       .name   = "vidconsole0",
+       .id     = UCLASS_VIDEO_CONSOLE,
+       .ops    = &console_normal_ops,
+       .probe  = console_normal_probe,
+};
+
+#if defined(CONFIG_CONSOLE_ROTATION)
 static int console_set_row_1(struct udevice *dev, uint row, int clr)
 {
        struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
@@ -495,3 +660,4 @@ U_BOOT_DRIVER(vidconsole_3) = {
        .ops    = &console_ops_3,
        .probe  = console_probe_1_3,
 };
+#endif
-- 
2.30.2

Reply via email to