1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * video commands
4 *
5 * Copyright 2022 Google LLC
6 * Written by Simon Glass <sjg@chromium.org>
7 */
8
9#include <common.h>
10#include <command.h>
11#include <dm.h>
12#include <video.h>
13#include <video_console.h>
14
15static int do_font_list(struct cmd_tbl *cmdtp, int flag, int argc,
16			char *const argv[])
17{
18	struct udevice *dev;
19
20	if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
21		return CMD_RET_FAILURE;
22	vidconsole_list_fonts(dev);
23
24	return 0;
25}
26
27static int do_font_select(struct cmd_tbl *cmdtp, int flag, int argc,
28			  char *const argv[])
29{
30	struct udevice *dev;
31	const char *name;
32	uint size = 0;
33	int ret;
34
35	if (argc < 2)
36		return CMD_RET_USAGE;
37
38	if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
39		return CMD_RET_FAILURE;
40	name = argv[1];
41	if (argc == 3)
42		size = dectoul(argv[2], NULL);
43	ret = vidconsole_select_font(dev, name, size);
44	if (ret) {
45		printf("Failed (error %d)\n", ret);
46		return CMD_RET_FAILURE;
47	}
48
49	return 0;
50}
51static int do_font_size(struct cmd_tbl *cmdtp, int flag, int argc,
52			char *const argv[])
53{
54	const char *font_name;
55	struct udevice *dev;
56	uint size;
57	int ret;
58
59	if (argc != 2)
60		return CMD_RET_USAGE;
61
62	if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
63		return CMD_RET_FAILURE;
64	ret = vidconsole_get_font_size(dev, &font_name, &size);
65	if (ret) {
66		printf("Failed (error %d)\n", ret);
67		return CMD_RET_FAILURE;
68	}
69
70	size = dectoul(argv[1], NULL);
71
72	ret = vidconsole_select_font(dev, font_name, size);
73	if (ret) {
74		printf("Failed (error %d)\n", ret);
75		return CMD_RET_FAILURE;
76	}
77
78	return 0;
79}
80
81
82U_BOOT_LONGHELP(font,
83	"list       - list available fonts\n"
84	"font select <name> [<size>] - select font to use\n"
85	"font size <size> - select font size to");
86
87U_BOOT_CMD_WITH_SUBCMDS(font, "Fonts", font_help_text,
88	U_BOOT_SUBCMD_MKENT(list, 1, 1, do_font_list),
89	U_BOOT_SUBCMD_MKENT(select, 3, 1, do_font_select),
90	U_BOOT_SUBCMD_MKENT(size, 2, 1, do_font_size));
91