Lines 94-99
Link Here
|
94 |
static struct tty_struct **ttytab; |
95 |
static struct tty_struct **ttytab; |
95 |
static struct kbd_struct * kbd = kbd_table; |
96 |
static struct kbd_struct * kbd = kbd_table; |
96 |
static struct tty_struct * tty; |
97 |
static struct tty_struct * tty; |
|
|
98 |
static unsigned char prev_scancode; |
97 |
|
99 |
|
98 |
void compute_shiftstate(void); |
100 |
void compute_shiftstate(void); |
99 |
|
101 |
|
Lines 213-219
Link Here
|
213 |
} |
215 |
} |
214 |
kbd = kbd_table + fg_console; |
216 |
kbd = kbd_table + fg_console; |
215 |
if ((raw_mode = (kbd->kbdmode == VC_RAW))) { |
217 |
if ((raw_mode = (kbd->kbdmode == VC_RAW))) { |
216 |
put_queue(scancode | up_flag); |
218 |
/* |
|
|
219 |
* The following is a workaround for hardware |
220 |
* which sometimes send the key release event twice |
221 |
*/ |
222 |
unsigned char next_scancode = scancode|up_flag; |
223 |
if (up_flag && next_scancode==prev_scancode) { |
224 |
/* unexpected 2nd release event */ |
225 |
} else { |
226 |
prev_scancode=next_scancode; |
227 |
put_queue(next_scancode); |
228 |
} |
217 |
/* we do not return yet, because we want to maintain |
229 |
/* we do not return yet, because we want to maintain |
218 |
the key_down array, so that we have the correct |
230 |
the key_down array, so that we have the correct |
219 |
values when finishing RAW mode or when changing VT's */ |
231 |
values when finishing RAW mode or when changing VT's */ |