
On Tue, Aug 18, 2015 at 10:00 AM, Simon Glass sjg@chromium.org wrote:
+Anatolij
Hi Bin,
On 17 August 2015 at 04:45, Bin Meng bmeng.cn@gmail.com wrote:
So far if CONFIG_VGA_AS_SINGLE_DEVICE is not defined, the VGA device will try to initialize a keyboard device (for x86, it is i8042). But if i8042 controller initialization fails (eg: there is no keyboard connected to the PS/2 port), drv_video_init() just simply returns. This kills the opportunity of using a usb keyboard later with the vga concole, as the vga initialization part is actually ok, only keyboard
console
Will fix in v2.
part fails. Change the code logic to allow this.
This is a change in behaviour. It seems OK to me though. In fact this problem annoyed me quite recently.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
In the long term, we should remove CONFIG_VGA_AS_SINGLE_DEVICE and treat the cfb_concole an output device only. The keyboard part should be moved out of cfb_console driver and be as a input device driver separately.
Agreed. Actually we should implement driver model for vga/lcd and input.
Yes, I was planning to do. But that's a lot work so I decided not to change it in this series.
drivers/video/cfb_console.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 30e0317..aa7ca86 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -2247,16 +2247,17 @@ __weak int board_video_skip(void)
int drv_video_init(void) {
int skip_dev_init; struct stdio_dev console_dev; bool have_keyboard;
bool __maybe_unused keyboard_ok = false; /* Check if video initialization should be skipped */ if (board_video_skip()) return 0; /* Init video chip - returns with framebuffer cleared */
skip_dev_init = (video_init() == -1);
if (video_init() == -1)
return 0; if (board_cfb_skip()) return 0;
@@ -2272,11 +2273,9 @@ int drv_video_init(void) if (have_keyboard) { debug("KBD: Keyboard init ...\n"); #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)
skip_dev_init |= (VIDEO_KBD_INIT_FCT == -1);
keyboard_ok = !(VIDEO_KBD_INIT_FCT == -1);
#endif }
if (skip_dev_init)
return 0; /* Init vga device */ memset(&console_dev, 0, sizeof(console_dev));
@@ -2287,7 +2286,7 @@ int drv_video_init(void) console_dev.puts = video_puts; /* 'puts' function */
#if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)
if (have_keyboard) {
if (have_keyboard && keyboard_ok) { /* Also init console device */ console_dev.flags |= DEV_FLAGS_INPUT; console_dev.tstc = VIDEO_TSTC_FCT; /* 'tstc' function */
--
Regards, Bin