x86: video: Allow keyboard presence to be controlled by device tree

At present a VGA console assumes a keyboard unless a CONFIG option is set.
This difference can be dealt with by a device tree option, allowing boards
that are otherwise the same to use the same configuration.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2015-03-02 12:40:50 -07:00
parent 892ff8e972
commit 5692ccfaca
2 changed files with 38 additions and 9 deletions

View File

@@ -171,6 +171,22 @@ After board configuration is done, fdt supported u-boot can be build in two ways
$ make DEVICE_TREE=<dts-file-name> $ make DEVICE_TREE=<dts-file-name>
Configuration Options
---------------------
A number of run-time configuration options are provided in the /config node
of the control device tree. You can access these using fdtdec_get_config_int(),
fdtdec_get_config_bool() and fdtdec_get_config_string().
Available options are:
silent-console
If present and non-zero, the console is silenced by default on boot.
no-keyboard
Tells U-Boot not to expect an attached keyboard with a VGA console
Limitations Limitations
----------- -----------

View File

@@ -87,6 +87,7 @@
*/ */
#include <common.h> #include <common.h>
#include <fdtdec.h>
#include <version.h> #include <version.h>
#include <malloc.h> #include <malloc.h>
#include <linux/compiler.h> #include <linux/compiler.h>
@@ -2251,6 +2252,7 @@ int drv_video_init(void)
{ {
int skip_dev_init; int skip_dev_init;
struct stdio_dev console_dev; struct stdio_dev console_dev;
bool have_keyboard;
/* Check if video initialization should be skipped */ /* Check if video initialization should be skipped */
if (board_video_skip()) if (board_video_skip())
@@ -2262,11 +2264,20 @@ int drv_video_init(void)
if (board_cfb_skip()) if (board_cfb_skip())
return 0; return 0;
#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE) #if defined(CONFIG_VGA_AS_SINGLE_DEVICE)
debug("KBD: Keyboard init ...\n"); have_keyboard = false;
skip_dev_init |= (VIDEO_KBD_INIT_FCT == -1); #elif defined(CONFIG_OF_CONTROL)
have_keyboard = !fdtdec_get_config_bool(gd->fdt_blob,
"u-boot,no-keyboard");
#else
have_keyboard = true;
#endif #endif
if (have_keyboard) {
debug("KBD: Keyboard init ...\n");
#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)
skip_dev_init |= (VIDEO_KBD_INIT_FCT == -1);
#endif
}
if (skip_dev_init) if (skip_dev_init)
return 0; return 0;
@@ -2279,11 +2290,13 @@ int drv_video_init(void)
console_dev.puts = video_puts; /* 'puts' function */ console_dev.puts = video_puts; /* 'puts' function */
#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE) #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)
/* Also init console device */ if (have_keyboard) {
console_dev.flags |= DEV_FLAGS_INPUT; /* Also init console device */
console_dev.tstc = VIDEO_TSTC_FCT; /* 'tstc' function */ console_dev.flags |= DEV_FLAGS_INPUT;
console_dev.getc = VIDEO_GETC_FCT; /* 'getc' function */ console_dev.tstc = VIDEO_TSTC_FCT; /* 'tstc' function */
#endif /* CONFIG_VGA_AS_SINGLE_DEVICE */ console_dev.getc = VIDEO_GETC_FCT; /* 'getc' function */
}
#endif
if (stdio_register(&console_dev) != 0) if (stdio_register(&console_dev) != 0)
return 0; return 0;