Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 37902
b: refs/heads/master
c: 9807879
h: refs/heads/master
v: v3
  • Loading branch information
Dmitry Torokhov committed Sep 14, 2006
1 parent 0cbb142 commit 5c0793a
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a91eaa16df5cd6c552e3a4a6e40e60ffbd9be951
refs/heads/master: 9807879bfdc0c2b5106b4b378f5475c6a333d853
4 changes: 1 addition & 3 deletions trunk/drivers/input/keyboard/atkbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,9 +635,7 @@ static int atkbd_probe(struct atkbd *atkbd)
return 0;
}

if (param[0] != 0xab && param[0] != 0xac && /* Regular and NCD Sun keyboards */
param[0] != 0x2b && param[0] != 0x5d && /* Trust keyboard, raw and translated */
param[0] != 0x60 && param[0] != 0x47) /* NMB SGI keyboard, raw and translated */
if (!ps2_is_keyboard_id(param[0]))
return -1;

atkbd->id = (param[0] << 8) | param[1];
Expand Down
18 changes: 16 additions & 2 deletions trunk/drivers/input/serio/libps2.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ EXPORT_SYMBOL(ps2_schedule_command);
EXPORT_SYMBOL(ps2_handle_ack);
EXPORT_SYMBOL(ps2_handle_response);
EXPORT_SYMBOL(ps2_cmd_aborted);
EXPORT_SYMBOL(ps2_is_keyboard_id);

/* Work structure to schedule execution of a command */
struct ps2work {
Expand Down Expand Up @@ -102,9 +103,9 @@ void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout)
* known keyboard IDs.
*/

static inline int ps2_is_keyboard_id(char id_byte)
int ps2_is_keyboard_id(char id_byte)
{
static char keyboard_ids[] = {
const static char keyboard_ids[] = {
0xab, /* Regular keyboards */
0xac, /* NCD Sun keyboard */
0x2b, /* Trust keyboard, translated */
Expand Down Expand Up @@ -138,6 +139,19 @@ static int ps2_adjust_timeout(struct ps2dev *ps2dev, int command, int timeout)
break;

case PS2_CMD_GETID:
/*
* Microsoft Natural Elite keyboard responds to
* the GET ID command as it were a mouse, with
* a single byte. Fail the command so atkbd will
* use alternative probe to detect it.
*/
if (ps2dev->cmdbuf[1] == 0xaa) {
serio_pause_rx(ps2dev->serio);
ps2dev->flags = 0;
serio_continue_rx(ps2dev->serio);
timeout = 0;
}

/*
* If device behind the port is not a keyboard there
* won't be 2nd byte of ID response.
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/libps2.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,6 @@ int ps2_schedule_command(struct ps2dev *ps2dev, unsigned char *param, int comman
int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data);
int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data);
void ps2_cmd_aborted(struct ps2dev *ps2dev);
int ps2_is_keyboard_id(char id);

#endif /* _LIBPS2_H */

0 comments on commit 5c0793a

Please sign in to comment.