[U-Boot] [PATCH v2 15/19] video: Allow selection of the driver and font size

Anatolij Gustschin agust at denx.de
Sat Jan 23 01:24:54 CET 2016


From: Simon Glass <sjg at chromium.org>

Provide a way for the video console driver to be selected. This is
controlled by the video driver's private data. This can be set up when the
driver is probed so that it is ready for the video_post_probe() method.

The font size is provided as well. The console driver may or may not support
this depending on its capability.

Signed-off-by: Simon Glass <sjg at chromium.org>
Signed-off-by: Anatolij Gustschin <agust at denx.de>
---
Changes in v2: rebased

 drivers/video/video-uclass.c |   20 ++++++++++++++++----
 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 13e8a88..2b5e0f9 100644
--- a/drivers/video/video-uclass.c
+++ b/drivers/video/video-uclass.c
@@ -173,6 +173,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;
 
@@ -190,11 +191,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 {
@@ -206,11 +215,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 b20f06f..20fdf54 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
-- 
1.7.9.5



More information about the U-Boot mailing list