[PATCH v2 4/8] video console: add select font logic to vidconsole uclass driver
Simon Glass
sjg at chromium.org
Tue Feb 14 20:48:51 CET 2023
Hi Dzmitry,
On Mon, 13 Feb 2023 at 09:57, Dzmitry Sankouski <dsankouski at gmail.com> wrote:
>
> Select font logic at runtime needed to unit test different fonts.
> This commit is a preparation to enable runtime font selection in
> console_simple driver.
>
> - move console true type select font logic to driver ops
> - add select font logic to vidconsole-uclass.c
>
> Signed-off-by: Dzmitry Sankouski <dsankouski at gmail.com>
> ---
> Changes for v2: N/A
>
> cmd/font.c | 7 ++++++-
> drivers/video/console_truetype.c | 6 ++++--
> drivers/video/vidconsole-uclass.c | 22 ++++++++++++++++++++++
> include/video.h | 1 +
> include/video_console.h | 18 +++++++++++++++++-
> 5 files changed, 50 insertions(+), 4 deletions(-)
>
> diff --git a/cmd/font.c b/cmd/font.c
> index 3e522f3aaa..769796c5ec 100644
> --- a/cmd/font.c
> +++ b/cmd/font.c
> @@ -15,7 +15,12 @@
> static int do_font_list(struct cmd_tbl *cmdtp, int flag, int argc,
> char *const argv[])
> {
> - vidconsole_list_fonts();
> + struct udevice *dev;
> +
> + if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
> + return CMD_RET_FAILURE;
> +
> + vidconsole_list_fonts(dev);
>
> return 0;
> }
> diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
> index 6859c9fa11..389fa483fc 100644
> --- a/drivers/video/console_truetype.c
> +++ b/drivers/video/console_truetype.c
> @@ -584,7 +584,7 @@ static struct font_info *console_truetype_find_font(void)
> return NULL;
> }
>
> -void vidconsole_list_fonts(void)
> +void console_truetype_list_fonts(struct udevice __maybe_unused *dev)
You should not need the __maybe_unused here?
> {
> struct font_info *tab;
>
> @@ -674,7 +674,7 @@ static void select_metrics(struct udevice *dev, struct console_tt_metrics *met)
> vc_priv->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2;
> }
>
> -int vidconsole_select_font(struct udevice *dev, const char *name, uint size)
> +int console_truetype_select_font(struct udevice *dev, const char *name, uint size)
> {
> struct console_tt_priv *priv = dev_get_priv(dev);
> struct console_tt_metrics *met;
> @@ -763,6 +763,8 @@ struct vidconsole_ops console_truetype_ops = {
> .set_row = console_truetype_set_row,
> .backspace = console_truetype_backspace,
> .entry_start = console_truetype_entry_start,
> + .list_fonts = console_truetype_list_fonts,
> + .select_font = console_truetype_select_font,
> };
>
> U_BOOT_DRIVER(vidconsole_truetype) = {
> diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
> index 6bdfb6e37d..5a08fdd689 100644
> --- a/drivers/video/vidconsole-uclass.c
> +++ b/drivers/video/vidconsole-uclass.c
> @@ -85,6 +85,28 @@ static int vidconsole_back(struct udevice *dev)
> return video_sync(dev->parent, false);
> }
>
> +void vidconsole_list_fonts(struct udevice *dev)
> +{
> + struct vidconsole_ops *ops = vidconsole_get_ops(dev);
> +
> + if (ops->select_font)
> + ops->list_fonts(dev);
> +}
> +
> +int vidconsole_select_font(struct udevice *dev, const char *name, uint size)
> +{
> + struct vidconsole_ops *ops = vidconsole_get_ops(dev);
> + int ret;
> +
> + if (ops->select_font) {
> + ret = ops->select_font(dev, name, size);
> + if (ret != -ENOSYS)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> /* Move to a newline, scrolling the display if necessary */
> static void vidconsole_newline(struct udevice *dev)
> {
> diff --git a/include/video.h b/include/video.h
> index 43f2e2c02f..91c05fa9f0 100644
> --- a/include/video.h
> +++ b/include/video.h
> @@ -115,6 +115,7 @@ struct video_priv {
> bool flush_dcache;
> u8 fg_col_idx;
> u8 bg_col_idx;
> + struct video_fontdata *fontdata;
please update comment for this new member
> };
>
> /**
> diff --git a/include/video_console.h b/include/video_console.h
> index d755eb73cf..fc702cc165 100644
> --- a/include/video_console.h
> +++ b/include/video_console.h
> @@ -133,6 +133,22 @@ struct vidconsole_ops {
> * characters.
> */
> int (*backspace)(struct udevice *dev);
> +
> + /**
> + * list_fonts() - List the available fonts
> + *
> + * This shows a list on the console
comments again, @dev and Returns
> + */
> + void (*list_fonts)(struct udevice *dev);
> +
> + /**
> + * select_font() - Select a font to use
> + *
> + * @dev: vidconsole device
> + * @name: Font name
> + * @size: Size of the font (norminal pixel height) or 0 for default
Returns
> + */
> + int (*select_font)(struct udevice *dev, const char *name, uint size);
> };
>
> /* Get a pointer to the driver operations for a video console device */
> @@ -236,7 +252,7 @@ void vidconsole_set_cursor_pos(struct udevice *dev, int x, int y);
> *
> * This shows a list on the console
add @dev
> */
> -void vidconsole_list_fonts(void);
> +void vidconsole_list_fonts(struct udevice *dev);
>
> /**
> * vidconsole_select_font() - Select a font to use
> --
> 2.30.2
>
Regards,
Simon
More information about the U-Boot
mailing list