From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9DF8EC4167B for ; Mon, 26 Dec 2022 19:49:56 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1DBF7854F1; Mon, 26 Dec 2022 20:49:46 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aiT/YG4l"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4BBC785504; Mon, 26 Dec 2022 20:49:42 +0100 (CET) Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 78F21854FC for ; Mon, 26 Dec 2022 20:49:37 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=dsankouski@gmail.com Received: by mail-ej1-x62f.google.com with SMTP id t17so27708602eju.1 for ; Mon, 26 Dec 2022 11:49:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OEMie4m5hmVxdDw/ym+ZlF/Ag9SshgLz+vBTEi/pbuI=; b=aiT/YG4lAYSQqK2WXbZ7DEQGxES7a9Ll3ci3TyYm1oTdNK81ydcG+7bxRHwZsOK1ad W8ZL1kYNI/CiGYcjIkmF5bsl3OIl9PHFZJRpli6u6V8DF1jwfDEPFIugHOFVNFugO7s9 P6c7CkeMc+LmTSEXNaboVy+hesQjIUl1VnUt0Pi2wWu0KmXj0gZ8Ojaq9bgWzsGAA/nZ thVRFahGqAUUBy0wIxm8/1R5SY6snMMDjgIAjemjTHRKK2EdXjuskencxYxCxX89u+o6 dt0zmd/ELcns9yMfXsVkCvGr/H80Xa+TwoZkMKz4K3UYpKnBfgyHssPDEfs6Ha25jF1s yuQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OEMie4m5hmVxdDw/ym+ZlF/Ag9SshgLz+vBTEi/pbuI=; b=APFLhti8d/98emFXECzafAOxBpqWUwyotyRqDT+xm2PQZ+qTG0DjvKLFnDusmb3H84 c1qH4qZJ38A3yIhRtu8B1wnC+jzXc0U6+uraJILXqQZ3YJ3PHkbckPa1hcDnR9+u1M+S 37vc0C8oodPu7uFq8y0IVHPw2CL+jt6ShRUmNDgFB7RlHc56+KnshFP6if4u4RzlG/Wm bHdwQbTPZj25aETaNSCBYtJiZxwxTdR32yLOxAwQnKmjO2j2zrxy7eQmSskdlwtvo7Wa z/tbxLx0aDapTkuo4HSUVZwFi2ip0SlF1ocbSwbUJsiTJy1PgQ/P4+cgf21eLcZxYgY2 aWyQ== X-Gm-Message-State: AFqh2kq5398c7R6dqEOL/0vp8oJHGuyMROTwbrQWrJ803esBWWmOQU6U w8Si9hELv1MDmFYonK3qdupwtUzjWlk= X-Google-Smtp-Source: AMrXdXu3F19ObPgyOzPYgNYW/oDo0YAFE371TkbiXdqX4bCh5uoqeeA3iZ0NLrcNA9eQXzr9clvftA== X-Received: by 2002:a17:906:1e17:b0:84c:69f8:2ec2 with SMTP id g23-20020a1709061e1700b0084c69f82ec2mr268328ejj.22.1672084176824; Mon, 26 Dec 2022 11:49:36 -0800 (PST) Received: from localhost.localdomain ([46.216.42.4]) by smtp.googlemail.com with ESMTPSA id kx18-20020a170907775200b007c14ae38a80sm5065666ejc.122.2022.12.26.11.49.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Dec 2022 11:49:36 -0800 (PST) From: Dzmitry Sankouski To: u-boot@lists.denx.de Cc: Dzmitry Sankouski , Anatolij Gustschin Subject: [PATCH 1/5] video console: unite normal and rotated files Date: Mon, 26 Dec 2022 22:49:25 +0300 Message-Id: <20221226194929.166369-2-dsankouski@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221226194929.166369-1-dsankouski@gmail.com> References: <20221226194929.166369-1-dsankouski@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean Put video console driver code in one file. Signed-off-by: Dzmitry Sankouski --- 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 c841b99bb3..bc7f20cf64 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 -- wd@denx.de - * Compulab Ltd - http://compulab.co.il/ - * Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com - */ - -#include -#include -#include -#include -#include /* 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 #include /* 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