]> Zhao Yanbai Git Server - minix.git/commitdiff
handle lack of pckbd more gracefully 02/3002/1
authorrlfnb <ralf.neeb@googlemail.com>
Wed, 3 Jun 2015 05:56:35 +0000 (07:56 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 15 Jun 2015 15:11:29 +0000 (17:11 +0200)
kb_init() panics, if no keyboard controller is found during self-test.
Instead of panic, the driver should quit the init process and tell it the SEF .

Change-Id: Icdfb7125f5d4062f46cfbbdbbb9e54ac4b273642

minix/drivers/hid/pckbd/pckbd.c

index b6a41f2b4155408b916f0927c5d9f6cb4532e5e7..236cef088685984842ca08bd0ba7b86dd91520ef 100644 (file)
@@ -250,7 +250,7 @@ kbc_read(void)
 /*
  * Initialize the keyboard hardware.
  */
-static void
+static int
 kb_init(void)
 {
        int r, ccb;
@@ -272,8 +272,10 @@ kb_init(void)
        /* Execute Controller Self Test. */
        kbc_cmd0(0xAA);
        r = kbc_read();
-       if (r != 0x55)
-               panic("PCKBD: Controller self-test failed.\n");
+       if (r != 0x55){
+               printf("PCKBD: Controller self-test failed.\n");
+               return EGENERIC;
+       }
 
        /* Set interrupt handler and enable keyboard IRQ. */
        irq_hook_id = KEYBOARD_IRQ;     /* id to be returned on interrupt */
@@ -316,6 +318,7 @@ kb_init(void)
        kb_wait();
 
        set_leds(0);
+       return OK;
 }
 
 /*
@@ -466,7 +469,10 @@ pckbd_init(int UNUSED(type), sef_init_info_t *UNUSED(info))
        init_timer(&tmr_kbd_wd);
 
        /* Initialize the keyboard. */
-       kb_init();
+       int r;
+       if((r = kb_init())!=OK){
+               return r;
+       }
 
        /* Announce the driver's presence. */
        if (aux_available != 0)