Messages in this thread Patch in this message | | | Date | Sun, 25 Jan 2004 12:59:46 +0100 | From | Vojtech Pavlik <> | Subject | Re: FYI: ACPI 'sleep 1' resets atkbd keycodes |
| |
On Sun, Jan 25, 2004 at 11:37:19AM +0200, P. Christeas wrote:
> This may be just a minor issue: > I had to use the setkeycodes utility to enable some extra keys (that weren't > mapped by kernel's atkbd tables). > After waking from sleep 1, those keys were reset. That is, I had to use > 'setkeycodes' again to customize the tables again. > > IMHO the way kernel works now is correct. It should *not* have extra code just > to handle that. Just make sure anybody that alters his kbd tables puts some > extra script to recover the tables after an ACPI wake. > This should be more like a note to Linux distributors. > > Have a nice day.
Patch attached, please test. It'll make it into 2.6.3, with some luck even 2.6.2.
-- Vojtech Pavlik SuSE Labs, SuSE CR ChangeSet@1.1519, 2004-01-25 12:58:24+01:00, vojtech@ucw.cz input: Bail out in atkbd.c if scancode set is changed, don't reinitialize scancode map. This is even more anoying than a new keyboard device in the unlikely case of set change.
atkbd.c | 37 ++++++------------------------------- 1 files changed, 6 insertions(+), 31 deletions(-)
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c --- a/drivers/input/keyboard/atkbd.c Sun Jan 25 12:59:07 2004 +++ b/drivers/input/keyboard/atkbd.c Sun Jan 25 12:59:07 2004 @@ -743,43 +743,18 @@ struct serio_dev *dev = serio->dev; int i; - if (!dev) { - printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n"); - return -1; - } + if (!dev) { + printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n"); + return -1; + } if (atkbd->write) { if (atkbd_probe(atkbd)) return -1; - - atkbd->set = atkbd_set_3(atkbd); + if (atkbd->set != atkbd_set_3(atkbd)) + return -1; atkbd_enable(atkbd); - } else { - atkbd->set = 2; - atkbd->id = 0xab00; } - - /* - * Here we probably should check if the keyboard has the same set that - * it had before and bail out if it's different. But this will most likely - * cause new keyboard device be created... and for the user it will look - * like keyboard is lost - */ - - if (atkbd->translated) { - for (i = 0; i < 128; i++) { - atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]]; - atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80]; - } - } else if (atkbd->set == 2) { - memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode)); - } else { - memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode)); - } - - for (i = 0; i < 512; i++) - if (atkbd->keycode[i] && atkbd->keycode[i] < 255) - set_bit(atkbd->keycode[i], atkbd->dev.keybit); return 0; } | |