u-boot/cmd/font.c
Simon Glass 0e38bd848d video: Add font functions to the vidconsole API
Support for fonts currently depends on the type of vidconsole in use. Add
two new methods to enumerate fonts and to set the font.

Fix a few other method comments while we are here.

Signed-off-by: Simon Glass <sjg@chromium.org>
2023-01-16 18:26:50 -05:00

88 lines
1.9 KiB
C

// 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[])
{
struct udevice *dev;
if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
return CMD_RET_FAILURE;
vidconsole_list_fonts(dev);
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[])
{
const char *font_name;
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;
font_name = vidconsole_get_font_size(dev, &size);
size = dectoul(argv[1], NULL);
ret = vidconsole_select_font(dev, font_name, 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));