[Concept,04/18] video: Move tab_width_frac into vidconsole_ctx

Message ID 20260117005702.1684841-5-sjg@u-boot.org
State New
Headers
Series Refactor vidconsole context for dynamic allocation |

Commit Message

Simon Glass Jan. 17, 2026, 12:56 a.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

The tab width should be per-context so that different clients can
maintain their own tab settings. Move the tab_width_frac field from
vidconsole_priv into vidconsole_ctx.

Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 drivers/video/console_truetype.c  | 5 +++--
 drivers/video/vidconsole-uclass.c | 8 ++++----
 include/video_console.h           | 4 ++--
 3 files changed, 9 insertions(+), 8 deletions(-)
  

Patch

diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
index 36a2c33eb70..9c7c116809b 100644
--- a/drivers/video/console_truetype.c
+++ b/drivers/video/console_truetype.c
@@ -923,6 +923,7 @@  static void set_bitmap_font(struct udevice *dev,
 			    struct video_fontdata *fontdata)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+	struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(vc_priv);
 	struct console_tt_priv *priv = dev_get_priv(dev);
 
 	priv->cur_fontdata = fontdata;
@@ -930,7 +931,7 @@  static void set_bitmap_font(struct udevice *dev,
 
 	vidconsole_set_bitmap_font(dev, fontdata);
 
-	vc_priv->tab_width_frac = VID_TO_POS(fontdata->width) * 8 / 2;
+	ctx->tab_width_frac = VID_TO_POS(fontdata->width) * 8 / 2;
 }
 
 static void select_metrics(struct udevice *dev, struct console_tt_metrics *met)
@@ -947,7 +948,7 @@  static void select_metrics(struct udevice *dev, struct console_tt_metrics *met)
 	com->xstart_frac = VID_TO_POS(2);
 	com->cols = vid_priv->xsize / met->font_size;
 	com->rows = vid_priv->ysize / met->font_size;
-	vc_priv->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2;
+	com->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2;
 }
 
 static int get_metrics(struct udevice *dev, const char *name, uint size,
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index bc2b3943fc8..414a33f7bf7 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -514,8 +514,8 @@  int vidconsole_put_char(struct udevice *dev, char ch)
 		vidconsole_entry_start(dev);
 		break;
 	case '\t':	/* Tab (8 chars alignment) */
-		ctx->xcur_frac = ((ctx->xcur_frac / priv->tab_width_frac)
-				+ 1) * priv->tab_width_frac;
+		ctx->xcur_frac = ((ctx->xcur_frac / ctx->tab_width_frac)
+				+ 1) * ctx->tab_width_frac;
 
 		if (ctx->xcur_frac >= priv->xsize_frac)
 			vidconsole_newline(dev);
@@ -894,8 +894,8 @@  static int vidconsole_post_probe(struct udevice *dev)
 	struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(priv);
 	struct stdio_dev *sdev = &priv->sdev;
 
-	if (!priv->tab_width_frac)
-		priv->tab_width_frac = VID_TO_POS(ctx->x_charsize) * 8;
+	if (!ctx->tab_width_frac)
+		ctx->tab_width_frac = VID_TO_POS(ctx->x_charsize) * 8;
 
 	if (dev_seq(dev)) {
 		snprintf(sdev->name, sizeof(sdev->name), "vidconsole%d",
diff --git a/include/video_console.h b/include/video_console.h
index cedc94a83cf..ebba1ac7572 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -114,6 +114,7 @@  struct vidconsole_ansi {
  * @utf8_buf:		Buffer to accumulate UTF-8 byte sequence
  * @curs:		Cursor state and management
  * @xstart_frac:	Left margin for the text console in fractional units
+ * @tab_width_frac:	Tab width in fractional units
  */
 struct vidconsole_ctx {
 	int rows;
@@ -130,6 +131,7 @@  struct vidconsole_ctx {
 	char utf8_buf[5];
 	struct vidconsole_cursor curs;
 	int xstart_frac;
+	int tab_width_frac;
 };
 
 /**
@@ -148,14 +150,12 @@  struct vidconsole_ctx {
  *
  * @sdev:		stdio device, acting as an output sink
  * @ctx:		Per-client context
- * @tab_width_frac:	Tab width in fractional units
  * @xsize_frac:		Width of the display in fractional units
  * @quiet:		Suppress all output from stdio
  */
 struct vidconsole_priv {
 	struct stdio_dev sdev;
 	struct vidconsole_ctx ctx;
-	int tab_width_frac;
 	int xsize_frac;
 	bool quiet;
 };