video console: move vidconsole_get_font_size() logic to driver ops
authorDzmitry Sankouski <dsankouski@gmail.com>
Tue, 7 Mar 2023 10:21:15 +0000 (13:21 +0300)
committerAnatolij Gustschin <agust@denx.de>
Tue, 7 Mar 2023 14:59:21 +0000 (15:59 +0100)
Since multiple vidconsole drivers exists, vidconsole_get_font_size()
implementation cannot longer live in vidconsole_uclass.c file.

Move current vidconsole_get_font_size logic to truetype driver ops.

Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/font.c
drivers/video/console_truetype.c
drivers/video/vidconsole-uclass.c
include/video_console.h
test/cmd/font.c

index 7b4347f..fe2d65c 100644 (file)
@@ -61,7 +61,11 @@ static int do_font_size(struct cmd_tbl *cmdtp, int flag, int argc,
 
        if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
                return CMD_RET_FAILURE;
-       font_name = vidconsole_get_font_size(dev, &size);
+       ret = vidconsole_get_font_size(dev, &font_name, &size);
+       if (ret) {
+               printf("Failed (error %d)\n", ret);
+               return CMD_RET_FAILURE;
+       }
 
        size = dectoul(argv[1], NULL);
 
index 9cac9a6..6b53901 100644 (file)
@@ -724,7 +724,7 @@ static int truetype_select_font(struct udevice *dev, const char *name,
        return 0;
 }
 
-const char *vidconsole_get_font_size(struct udevice *dev, uint *sizep)
+const char *console_truetype_get_font_size(struct udevice *dev, uint *sizep)
 {
        struct console_tt_priv *priv = dev_get_priv(dev);
        struct console_tt_metrics *met = priv->cur_met;
@@ -773,6 +773,7 @@ struct vidconsole_ops console_truetype_ops = {
        .backspace      = console_truetype_backspace,
        .entry_start    = console_truetype_entry_start,
        .get_font       = console_truetype_get_font,
+       .get_font_size  = console_truetype_get_font_size,
        .select_font    = truetype_select_font,
 };
 
index 72a13d3..a5f2350 100644 (file)
@@ -575,6 +575,17 @@ int vidconsole_get_font(struct udevice *dev, int seq,
        return ops->get_font(dev, seq, info);
 }
 
+int vidconsole_get_font_size(struct udevice *dev, const char **name, uint *sizep)
+{
+       struct vidconsole_ops *ops = vidconsole_get_ops(dev);
+
+       if (!ops->get_font_size)
+               return -ENOSYS;
+
+       *name = ops->get_font_size(dev, sizep);
+       return 0;
+}
+
 int vidconsole_select_font(struct udevice *dev, const char *name, uint size)
 {
        struct vidconsole_ops *ops = vidconsole_get_ops(dev);
index 3e1e00c..7701032 100644 (file)
@@ -161,6 +161,15 @@ struct vidconsole_ops {
                        struct vidfont_info *info);
 
        /**
+        * get_font_size() - get the current font name and size
+        *
+        * @dev: vidconsole device
+        * @sizep: Place to put the font size (nominal height in pixels)
+        * Returns: Current font name
+        */
+       const char *(*get_font_size)(struct udevice *dev, uint *sizep);
+
+       /**
         * select_font() - Select a particular font by name / size
         *
         * @dev:        Device to adjust
@@ -303,9 +312,10 @@ void vidconsole_list_fonts(struct udevice *dev);
  *
  * @dev: vidconsole device
  * @sizep: Place to put the font size (nominal height in pixels)
- * Returns: Current font name
+ * @name: pointer to font name, a placeholder for result
+ * Return: 0 if OK, -ENOSYS if not implemented in driver
  */
-const char *vidconsole_get_font_size(struct udevice *dev, uint *sizep);
+int vidconsole_get_font_size(struct udevice *dev, const char **name, uint *sizep);
 
 #ifdef CONFIG_VIDEO_COPY
 /**
index adb3539..40682e5 100644 (file)
@@ -19,6 +19,7 @@
 static int font_test_base(struct unit_test_state *uts)
 {
        struct udevice *dev;
+       const char *name;
        int max_metrics;
        uint size;
        int ret;
@@ -32,8 +33,8 @@ static int font_test_base(struct unit_test_state *uts)
        ut_assert_nextline("cantoraone_regular");
        ut_assertok(ut_check_console_end(uts));
 
-       ut_asserteq_str("nimbus_sans_l_regular",
-                       vidconsole_get_font_size(dev, &size));
+       ut_assertok(vidconsole_get_font_size(dev, &name, &size));
+       ut_asserteq_str("nimbus_sans_l_regular", name);
        ut_asserteq(18, size);
 
        max_metrics = 1;
@@ -52,15 +53,15 @@ static int font_test_base(struct unit_test_state *uts)
        ut_assertok(ret);
        ut_assertok(ut_check_console_end(uts));
 
-       ut_asserteq_str("cantoraone_regular",
-                       vidconsole_get_font_size(dev, &size));
+       ut_assertok(vidconsole_get_font_size(dev, &name, &size));
+       ut_asserteq_str("cantoraone_regular", name);
        ut_asserteq(40, size);
 
        ut_assertok(run_command("font size 30", 0));
        ut_assertok(ut_check_console_end(uts));
 
-       ut_asserteq_str("cantoraone_regular",
-                       vidconsole_get_font_size(dev, &size));
+       ut_assertok(vidconsole_get_font_size(dev, &name, &size));
+       ut_asserteq_str("cantoraone_regular", name);
        ut_asserteq(30, size);
 
        return 0;