summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/Kconfig16
-rw-r--r--cmd/Makefile3
-rw-r--r--cmd/bdinfo.c5
-rw-r--r--cmd/bmp.c42
-rw-r--r--cmd/cls.c2
-rw-r--r--cmd/font.c81
-rw-r--r--cmd/video.c61
7 files changed, 170 insertions, 40 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 41cf1d46fb1..3f6bc70d43a 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1877,7 +1877,7 @@ menu "Misc commands"
config CMD_BMP
bool "Enable 'bmp' command"
- depends on LCD || DM_VIDEO || VIDEO
+ depends on VIDEO
help
This provides a way to obtain information about a BMP-format image
and to display it. BMP (which presumably stands for BitMaP) is a
@@ -1939,7 +1939,7 @@ config CMD_CONITRACE
config CMD_CLS
bool "Enable clear screen command 'cls'"
- default y if LCD
+ default y if LCD || DM_VIDEO
help
Enable the 'cls' command which clears the screen contents
on video frame buffer.
@@ -2161,6 +2161,18 @@ config CMD_UUID
The two commands are very similar except for the endianness of the
output.
+config CMD_VIDCONSOLE
+ bool "lcdputs and setcurs"
+ depends on VIDEO
+ default y
+ help
+ Enabling this will provide 'setcurs' and 'lcdputs' commands which
+ support cursor positioning and drawing strings on the video
+ console (framebuffer).
+
+ The name 'lcdputs' is a bit of a misnomer, but so named because the
+ video device is often an LCD.
+
endmenu
source "cmd/ti/Kconfig"
diff --git a/cmd/Makefile b/cmd/Makefile
index c95e09d0580..ca9ed1054d7 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -74,6 +74,7 @@ obj-$(CONFIG_CMD_EXT2) += ext2.o
obj-$(CONFIG_CMD_FAT) += fat.o
obj-$(CONFIG_CMD_FDT) += fdt.o
obj-$(CONFIG_CMD_SQUASHFS) += sqfs.o
+obj-$(CONFIG_CONSOLE_TRUETYPE) += font.o
obj-$(CONFIG_CMD_FLASH) += flash.o
obj-$(CONFIG_CMD_FPGA) += fpga.o
obj-$(CONFIG_CMD_FPGAD) += fpgad.o
@@ -178,6 +179,8 @@ obj-$(CONFIG_CMD_WDT) += wdt.o
obj-$(CONFIG_CMD_LZMADEC) += lzmadec.o
obj-$(CONFIG_CMD_UFS) += ufs.o
obj-$(CONFIG_CMD_USB) += usb.o disk.o
+obj-$(CONFIG_CMD_VIDCONSOLE) += video.o
+
obj-$(CONFIG_CMD_FASTBOOT) += fastboot.o
obj-$(CONFIG_CMD_FS_UUID) += fs_uuid.o
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c
index af2e9757db5..bf002f84475 100644
--- a/cmd/bdinfo.c
+++ b/cmd/bdinfo.c
@@ -122,11 +122,8 @@ int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
bdinfo_print_num_l("fdt_blob", (ulong)gd->fdt_blob);
bdinfo_print_num_l("new_fdt", (ulong)gd->new_fdt);
bdinfo_print_num_l("fdt_size", (ulong)gd->fdt_size);
- if (IS_ENABLED(CONFIG_DM_VIDEO))
+ if (IS_ENABLED(CONFIG_VIDEO))
show_video_info();
-#if defined(CONFIG_LCD)
- bdinfo_print_num_l("FB base ", gd->fb_base);
-#endif
#if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
bdinfo_print_num_l("multi_dtb_fit", (ulong)gd->multi_dtb_fit);
#endif
diff --git a/cmd/bmp.c b/cmd/bmp.c
index 45f4c1296de..46d0d916e86 100644
--- a/cmd/bmp.c
+++ b/cmd/bmp.c
@@ -14,7 +14,6 @@
#include <dm.h>
#include <gzip.h>
#include <image.h>
-#include <lcd.h>
#include <log.h>
#include <malloc.h>
#include <mapmem.h>
@@ -48,27 +47,24 @@ struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
/*
* Decompress bmp image
*/
- len = CONFIG_SYS_VIDEO_LOGO_MAX_SIZE;
+ len = CONFIG_VIDEO_LOGO_MAX_SIZE;
/* allocate extra 3 bytes for 32-bit-aligned-address + 2 alignment */
- dst = malloc(CONFIG_SYS_VIDEO_LOGO_MAX_SIZE + 3);
- if (dst == NULL) {
+ dst = malloc(CONFIG_VIDEO_LOGO_MAX_SIZE + 3);
+ if (!dst) {
puts("Error: malloc in gunzip failed!\n");
return NULL;
}
- bmp = dst;
-
/* align to 32-bit-aligned-address + 2 */
- bmp = (struct bmp_image *)((((uintptr_t)dst + 1) & ~3) + 2);
+ bmp = dst + 2;
- if (gunzip(bmp, CONFIG_SYS_VIDEO_LOGO_MAX_SIZE, map_sysmem(addr, 0),
- &len) != 0) {
+ if (gunzip(bmp, CONFIG_VIDEO_LOGO_MAX_SIZE, map_sysmem(addr, 0),
+ &len)) {
free(dst);
return NULL;
}
- if (len == CONFIG_SYS_VIDEO_LOGO_MAX_SIZE)
- puts("Image could be truncated"
- " (increase CONFIG_SYS_VIDEO_LOGO_MAX_SIZE)!\n");
+ if (len == CONFIG_VIDEO_LOGO_MAX_SIZE)
+ puts("Image could be truncated (increase CONFIG_VIDEO_LOGO_MAX_SIZE)!\n");
/*
* Check for bmp mark 'BM'
@@ -224,21 +220,9 @@ static int bmp_info(ulong addr)
return(0);
}
-/*
- * Subroutine: bmp_display
- *
- * Description: Display bmp file located in memory
- *
- * Inputs: addr address of the bmp file
- *
- * Return: None
- *
- */
int bmp_display(ulong addr, int x, int y)
{
-#ifdef CONFIG_DM_VIDEO
struct udevice *dev;
-#endif
int ret;
struct bmp_image *bmp = map_sysmem(addr, 0);
void *bmp_alloc_addr = NULL;
@@ -254,23 +238,15 @@ int bmp_display(ulong addr, int x, int y)
}
addr = map_to_sysmem(bmp);
-#ifdef CONFIG_DM_VIDEO
ret = uclass_first_device_err(UCLASS_VIDEO, &dev);
if (!ret) {
bool align = false;
- if (CONFIG_IS_ENABLED(SPLASH_SCREEN_ALIGN) ||
- x == BMP_ALIGN_CENTER ||
- y == BMP_ALIGN_CENTER)
+ if (x == BMP_ALIGN_CENTER || y == BMP_ALIGN_CENTER)
align = true;
ret = video_bmp_display(dev, addr, x, y, align);
}
-#elif defined(CONFIG_LCD)
- ret = lcd_display_bitmap(addr, x, y);
-#else
-# error bmp_display() requires CONFIG_LCD
-#endif
if (bmp_alloc_addr)
free(bmp_alloc_addr);
diff --git a/cmd/cls.c b/cmd/cls.c
index ba36220d9e1..18643ec0243 100644
--- a/cmd/cls.c
+++ b/cmd/cls.c
@@ -19,7 +19,7 @@ static int do_video_clear(struct cmd_tbl *cmdtp, int flag, int argc,
/* Send clear screen and home */
printf(CSI "2J" CSI "1;1H");
- if (CONFIG_IS_ENABLED(DM_VIDEO) && !CONFIG_IS_ENABLED(VIDEO_ANSI)) {
+ if (CONFIG_IS_ENABLED(VIDEO) && !CONFIG_IS_ENABLED(VIDEO_ANSI)) {
if (uclass_first_device_err(UCLASS_VIDEO, &dev))
return CMD_RET_FAILURE;
if (video_clear(dev))
diff --git a/cmd/font.c b/cmd/font.c
new file mode 100644
index 00000000000..3e522f3aaa1
--- /dev/null
+++ b/cmd/font.c
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * video commands
+ *
+ * Copyright 2022 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <video.h>
+#include <video_console.h>
+
+static int do_font_list(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ vidconsole_list_fonts();
+
+ return 0;
+}
+
+static int do_font_select(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct udevice *dev;
+ const char *name;
+ uint size = 0;
+ int ret;
+
+ if (argc < 2)
+ return CMD_RET_USAGE;
+
+ if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
+ return CMD_RET_FAILURE;
+ name = argv[1];
+ if (argc == 3)
+ size = dectoul(argv[2], NULL);
+ ret = vidconsole_select_font(dev, name, size);
+ if (ret) {
+ printf("Failed (error %d)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+
+ return 0;
+}
+static int do_font_size(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct udevice *dev;
+ uint size;
+ int ret;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
+ return CMD_RET_FAILURE;
+
+ size = dectoul(argv[1], NULL);
+ ret = vidconsole_select_font(dev, NULL, size);
+ if (ret) {
+ printf("Failed (error %d)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+
+ return 0;
+}
+
+
+#ifdef CONFIG_SYS_LONGHELP
+static char font_help_text[] =
+ "list - list available fonts\n"
+ "font select <name> [<size>] - select font to use\n"
+ "font size <size> - select font size to";
+#endif
+
+U_BOOT_CMD_WITH_SUBCMDS(font, "Fonts", font_help_text,
+ U_BOOT_SUBCMD_MKENT(list, 1, 1, do_font_list),
+ U_BOOT_SUBCMD_MKENT(select, 3, 1, do_font_select),
+ U_BOOT_SUBCMD_MKENT(size, 2, 1, do_font_size));
diff --git a/cmd/video.c b/cmd/video.c
new file mode 100644
index 00000000000..942f81c1633
--- /dev/null
+++ b/cmd/video.c
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * video commands
+ *
+ * Copyright 2022 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <video.h>
+#include <video_console.h>
+
+static int do_video_setcursor(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ unsigned int col, row;
+ struct udevice *dev;
+
+ if (argc != 3)
+ return CMD_RET_USAGE;
+
+ if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
+ return CMD_RET_FAILURE;
+ col = dectoul(argv[1], NULL);
+ row = dectoul(argv[2], NULL);
+ vidconsole_position_cursor(dev, col, row);
+
+ return 0;
+}
+
+static int do_video_puts(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct udevice *dev;
+ int ret;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
+ return CMD_RET_FAILURE;
+ ret = vidconsole_put_string(dev, argv[1]);
+ if (!ret)
+ ret = video_sync(dev->parent, false);
+
+ return ret ? CMD_RET_FAILURE : 0;
+}
+
+U_BOOT_CMD(
+ setcurs, 3, 1, do_video_setcursor,
+ "set cursor position within screen",
+ " <col> <row> in character"
+);
+
+U_BOOT_CMD(
+ lcdputs, 2, 1, do_video_puts,
+ "print string on video framebuffer",
+ " <string>"
+);