diff options
-rw-r--r-- | drivers/video/video-uclass.c | 20 | ||||
-rw-r--r-- | include/video.h | 5 |
2 files changed, 21 insertions, 4 deletions
diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 2189fce369..b6dd0f5a58 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -180,6 +180,7 @@ static int video_post_probe(struct udevice *dev) struct video_uc_platdata *plat = dev_get_uclass_platdata(dev); struct video_priv *priv = dev_get_uclass_priv(dev); char name[30], drv[15], *str; + const char *drv_name = drv; struct udevice *cons; int ret; @@ -197,11 +198,19 @@ static int video_post_probe(struct udevice *dev) video_clear(dev); /* - * Create a text console devices. For now we always do this, although + * Create a text console device. For now we always do this, although * it might be useful to support only bitmap drawing on the device - * for boards that don't need to display text. + * for boards that don't need to display text. We create a TrueType + * console if enabled, a rotated console if the video driver requests + * it, otherwise a normal console. + * + * The console can be override by setting vidconsole_drv_name before + * probing this video driver, or in the probe() method. + * + * TrueType does not support rotation at present so fall back to the + * rotated console in that case. */ - if (IS_ENABLED(CONFIG_CONSOLE_TRUETYPE)) { + if (!priv->rot && IS_ENABLED(CONFIG_CONSOLE_TRUETYPE)) { snprintf(name, sizeof(name), "%s.vidconsole_tt", dev->name); strcpy(drv, "vidconsole_tt"); } else { @@ -213,11 +222,14 @@ static int video_post_probe(struct udevice *dev) str = strdup(name); if (!str) return -ENOMEM; - ret = device_bind_driver(dev, drv, str, &cons); + if (priv->vidconsole_drv_name) + drv_name = priv->vidconsole_drv_name; + ret = device_bind_driver(dev, drv_name, str, &cons); if (ret) { debug("%s: Cannot bind console driver\n", __func__); return ret; } + ret = device_probe(cons); if (ret) { debug("%s: Cannot probe console driver\n", __func__); diff --git a/include/video.h b/include/video.h index fa643ca5ab..0e265dede9 100644 --- a/include/video.h +++ b/include/video.h @@ -51,6 +51,9 @@ enum video_log2_bpp { * @ysize: Number of pixels rows (e.g.. 768) * @tor: Display rotation (0=none, 1=90 degrees clockwise, etc.) * @bpix: Encoded bits per pixel + * @vidconsole_drv_name: Driver to use for the text console, NULL to + * select automatically + * @font_size: Font size in pixels (0 to use a default value) * @fb: Frame buffer * @fb_size: Frame buffer size * @line_length: Length of each frame buffer line, in bytes @@ -66,6 +69,8 @@ struct video_priv { ushort ysize; ushort rot; enum video_log2_bpp bpix; + const char *vidconsole_drv_name; + int font_size; /* * Things that are private to the uclass: don't use these in the |