This patch enables reading the default NUMLOCK status from the BIOS data area as defined for IBM PCs (1981). Using this area has been a reliable way to detect (or set) the NUMLOCK status for about 27 years, and it will continue to work on any IBM-compatible system that might run DOS. Especially, the NUMLOCK status on Linus' famous laptop should be usable.
--- I'd like some information about how this patch works non non-IBM-compatible x86 PCs. For now, I've documented the wordt possible outcome I can imagine. Signed-Off-By: Bodo Eggert <[EMAIL PROTECTED]> diff -pruN -X dontdiff linux-2.6.23.pure/drivers/char/keyboard.c linux-2.6.23.base/drivers/char/keyboard.c --- linux-2.6.23.pure/drivers/char/keyboard.c 2007-10-11 14:15:18.000000000 +0200 +++ linux-2.6.23.base/drivers/char/keyboard.c 2007-12-30 12:12:11.000000000 +0100 @@ -24,6 +24,7 @@ * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik) */ +#include <asm/io.h> #include <linux/consolemap.h> #include <linux/module.h> #include <linux/sched.h> @@ -57,7 +58,10 @@ extern void ctrl_alt_del(void); * to be used for numbers. */ -#if defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD)) +#ifdef CONFIG_KBD_DEFLEDS_PCBIOS +/* KBD_DEFLEDS is a variable */ +#undef KBD_DEFLEDS +#elif defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD)) #define KBD_DEFLEDS (1 << VC_NUMLOCK) #else #define KBD_DEFLEDS 0 @@ -1358,8 +1362,17 @@ int __init kbd_init(void) { int i; int error; +#ifdef CONFIG_KBD_DEFLEDS_PCBIOS + int KBD_DEFLEDS = 0; + /* address 0x40:0x17 */ + char * bios_kbd_status=xlate_dev_mem_ptr(0x417); + + /* Numlock status bit set? */ + if (*bios_kbd_status & 0x20) + KBD_DEFLEDS = 1 << VC_NUMLOCK; +#endif - for (i = 0; i < MAX_NR_CONSOLES; i++) { + for (i = 0; i < MAX_NR_CONSOLES; i++) { kbd_table[i].ledflagstate = KBD_DEFLEDS; kbd_table[i].default_ledflagstate = KBD_DEFLEDS; kbd_table[i].ledmode = LED_SHOW_FLAGS; diff -pruN -X dontdiff linux-2.6.23.pure/drivers/input/keyboard/Kconfig linux-2.6.23.base/drivers/input/keyboard/Kconfig --- linux-2.6.23.pure/drivers/input/keyboard/Kconfig 2007-10-11 14:14:41.000000000 +0200 +++ linux-2.6.23.base/drivers/input/keyboard/Kconfig 2007-12-30 12:11:45.000000000 +0100 @@ -12,6 +12,17 @@ menuconfig INPUT_KEYBOARD if INPUT_KEYBOARD +config KBD_DEFLEDS_PCBIOS + bool "Enable Num-Lock based on BIOS settings" + depends on X86_PC && EXPERIMENTAL + help + Turns on Numlock depending on the BIOS settings. + This works by reading the BIOS data area as defined for IBM PCs (1981). + + If you have an alternative firmware like OpenFirmware or LinuxBios, + this flag might not be set correctly, which results in a random state + of the Numlock key. + config KEYBOARD_ATKBD tristate "AT keyboard" if EMBEDDED || !X86_PC default y -- Top 100 things you don't want the sysadmin to say: 39. It is only a minor upgrade, the system should be back up in a few hours. ( This is said on a monday afternoon.) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/