Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f355ae1c
Commit
f355ae1c
authored
Oct 08, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-input.bkbits.net/linux-input
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
77ade2a9
fd17b576
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
55 deletions
+43
-55
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/atkbd.c
+15
-11
drivers/input/misc/uinput.c
drivers/input/misc/uinput.c
+10
-28
drivers/input/serio/i8042.c
drivers/input/serio/i8042.c
+17
-15
drivers/input/serio/i8042.h
drivers/input/serio/i8042.h
+1
-1
No files found.
drivers/input/keyboard/atkbd.c
View file @
f355ae1c
...
...
@@ -44,7 +44,7 @@ static unsigned char atkbd_set2_keycode[512] = {
0
,
49
,
48
,
35
,
34
,
21
,
7
,
0
,
0
,
0
,
50
,
36
,
22
,
8
,
9
,
0
,
0
,
51
,
37
,
23
,
24
,
11
,
10
,
0
,
0
,
52
,
53
,
38
,
39
,
25
,
12
,
0
,
122
,
89
,
40
,
120
,
26
,
13
,
0
,
0
,
58
,
54
,
28
,
27
,
0
,
43
,
0
,
0
,
85
,
86
,
90
,
91
,
92
,
93
,
14
,
94
,
95
,
79
,
4
3
,
75
,
71
,
121
,
0
,
123
,
85
,
86
,
90
,
91
,
92
,
93
,
14
,
94
,
95
,
79
,
18
3
,
75
,
71
,
121
,
0
,
123
,
82
,
83
,
80
,
76
,
77
,
72
,
1
,
69
,
87
,
78
,
81
,
74
,
55
,
73
,
70
,
99
,
252
,
0
,
0
,
65
,
99
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
...
...
@@ -280,6 +280,7 @@ static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int co
param
[
1
]
=
(
test_bit
(
LED_COMPOSE
,
dev
->
led
)
?
0x01
:
0
)
|
(
test_bit
(
LED_SLEEP
,
dev
->
led
)
?
0x02
:
0
)
|
(
test_bit
(
LED_SUSPEND
,
dev
->
led
)
?
0x04
:
0
)
|
(
test_bit
(
LED_MISC
,
dev
->
led
)
?
0x10
:
0
)
|
(
test_bit
(
LED_MUTE
,
dev
->
led
)
?
0x20
:
0
);
atkbd_command
(
atkbd
,
param
,
ATKBD_CMD_EX_SETLEDS
);
}
...
...
@@ -309,8 +310,8 @@ static int atkbd_set_3(struct atkbd *atkbd)
/*
* For known special keyboards we can go ahead and set the correct set.
* We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
IBM RapidAccess
* keyboards.
* We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
*
IBM RapidAccess / IBM EzButton / Chicony KBP-8993
keyboards.
*/
if
(
atkbd
->
id
==
0xaca1
)
{
...
...
@@ -319,14 +320,17 @@ static int atkbd_set_3(struct atkbd *atkbd)
return
3
;
}
if
(
!
atkbd_command
(
atkbd
,
param
,
ATKBD_CMD_OK_GETID
))
{
atkbd
->
id
=
param
[
0
]
<<
8
|
param
[
1
];
return
2
;
}
if
(
atkbd_set
!=
2
)
if
(
!
atkbd_command
(
atkbd
,
param
,
ATKBD_CMD_OK_GETID
))
{
atkbd
->
id
=
param
[
0
]
<<
8
|
param
[
1
];
return
2
;
}
param
[
0
]
=
0x71
;
if
(
!
atkbd_command
(
atkbd
,
param
,
ATKBD_CMD_EX_ENABLE
))
return
4
;
if
(
atkbd_set
==
4
)
{
param
[
0
]
=
0x71
;
if
(
!
atkbd_command
(
atkbd
,
param
,
ATKBD_CMD_EX_ENABLE
))
return
4
;
}
/*
* Try to set the set we want.
...
...
@@ -505,7 +509,7 @@ static void atkbd_connect(struct serio *serio, struct serio_dev *dev)
}
if
(
atkbd
->
set
==
4
)
{
atkbd
->
dev
.
ledbit
[
0
]
|=
BIT
(
LED_COMPOSE
)
|
BIT
(
LED_SUSPEND
)
|
BIT
(
LED_SLEEP
)
|
BIT
(
LED_MUTE
);
atkbd
->
dev
.
ledbit
[
0
]
|=
BIT
(
LED_COMPOSE
)
|
BIT
(
LED_SUSPEND
)
|
BIT
(
LED_SLEEP
)
|
BIT
(
LED_MUTE
)
|
BIT
(
LED_MISC
)
;
sprintf
(
atkbd
->
name
,
"AT Set 2 Extended keyboard"
);
}
else
sprintf
(
atkbd
->
name
,
"AT Set %d keyboard"
,
atkbd
->
set
);
...
...
drivers/input/misc/uinput.c
View file @
f355ae1c
...
...
@@ -218,43 +218,25 @@ static int uinput_write(struct file *file, const char *buffer, size_t count, lof
static
ssize_t
uinput_read
(
struct
file
*
file
,
char
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
struct
uinput_device
*
udev
;
struct
uinput_device
*
udev
=
file
->
private_data
;
int
retval
=
0
;
DECLARE_WAITQUEUE
(
waitq
,
current
);
udev
=
(
struct
uinput_device
*
)
file
->
private_data
;
if
(
udev
->
head
==
udev
->
tail
&&
(
udev
->
state
&
UIST_CREATED
)
&&
(
file
->
f_flags
&
O_NONBLOCK
))
return
-
EAGAIN
;
if
(
udev
->
head
==
udev
->
tail
)
{
add_wait_queue
(
&
udev
->
waitq
,
&
waitq
);
current
->
state
=
TASK_INTERRUPTIBLE
;
while
(
udev
->
head
==
udev
->
tail
)
{
if
(
!
(
udev
->
state
&
UIST_CREATED
))
{
retval
=
-
ENODEV
;
break
;
}
if
(
file
->
f_flags
&
O_NONBLOCK
)
{
retval
=
-
EAGAIN
;
break
;
}
if
(
signal_pending
(
current
))
{
retval
=
-
ERESTARTSYS
;
break
;
}
schedule
();
}
current
->
state
=
TASK_RUNNING
;
remove_wait_queue
(
&
udev
->
waitq
,
&
waitq
);
}
retval
=
wait_event_interruptible
(
udev
->
waitq
,
udev
->
head
!=
udev
->
tail
&&
(
udev
->
state
&
UIST_CREATED
));
if
(
retval
)
return
retval
;
if
(
!
(
udev
->
state
&
UIST_CREATED
))
return
-
ENODEV
;
while
(
udev
->
head
!=
udev
->
tail
&&
retval
+
sizeof
(
struct
uinput_device
)
<=
count
)
{
if
(
copy_to_user
(
buffer
+
retval
,
&
(
udev
->
buff
[
udev
->
tail
]),
sizeof
(
struct
input_event
)))
return
-
EFAULT
;
udev
->
tail
=
(
udev
->
tail
+
1
)
%
(
UINPUT_BUFFER_SIZE
-
1
);
sizeof
(
struct
input_event
)))
return
-
EFAULT
;
udev
->
tail
=
(
udev
->
tail
+
1
)
%
(
UINPUT_BUFFER_SIZE
-
1
);
retval
+=
sizeof
(
struct
input_event
);
}
...
...
drivers/input/serio/i8042.c
View file @
f355ae1c
...
...
@@ -21,10 +21,6 @@
#include <linux/serio.h>
#include <linux/sched.h>
#undef DEBUG
#include "i8042.h"
MODULE_AUTHOR
(
"Vojtech Pavlik <vojtech@suse.cz>"
);
MODULE_DESCRIPTION
(
"i8042 keyboard and mouse controller driver"
);
MODULE_LICENSE
(
"GPL"
);
...
...
@@ -41,6 +37,9 @@ static int i8042_reset;
static
int
i8042_direct
;
static
int
i8042_dumbkbd
;
#undef DEBUG
#include "i8042.h"
spinlock_t
i8042_lock
=
SPIN_LOCK_UNLOCKED
;
struct
i8042_values
{
...
...
@@ -161,7 +160,7 @@ static int i8042_command(unsigned char *param, int command)
param
[
i
]
=
~
i8042_read_data
();
else
param
[
i
]
=
i8042_read_data
();
dbg
(
"%02x <- i8042 (return)
\n
"
,
param
[
i
]);
dbg
(
"%02x <- i8042 (return)"
,
param
[
i
]);
}
spin_unlock_irqrestore
(
&
i8042_lock
,
flags
);
...
...
@@ -287,7 +286,6 @@ static void i8042_close(struct serio *port)
*/
static
struct
i8042_values
i8042_kbd_values
=
{
.
irq
=
I8042_KBD_IRQ
,
.
irqen
=
I8042_CTR_KBDINT
,
.
disable
=
I8042_CTR_KBDDIS
,
.
name
=
"KBD"
,
...
...
@@ -306,7 +304,6 @@ static struct serio i8042_kbd_port =
};
static
struct
i8042_values
i8042_aux_values
=
{
.
irq
=
I8042_AUX_IRQ
,
.
irqen
=
I8042_CTR_AUXINT
,
.
disable
=
I8042_CTR_AUXDIS
,
.
name
=
"AUX"
,
...
...
@@ -655,24 +652,26 @@ static int __init i8042_check_aux(struct i8042_values *values)
i8042_flush
();
/*
* Internal loopback test - filters out AT-type i8042's
* Internal loopback test - filters out AT-type i8042's. Unfortunately
* SiS screwed up and their 5597 doesn't support the LOOP command even
* though it has an AUX port.
*/
param
=
0x5a
;
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
)
||
param
!=
0xa5
)
return
-
1
;
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_LOOP
)
||
param
!=
0xa5
)
{
/*
* External connection test - filters out AT-soldered PS/2 i8042's
* 0x00 - no error, 0x01-0x03 - clock/data stuck, 0xff - general error
* 0xfa - no error on some notebooks which ignore the spec
*
We ignore general error, since some chips report it even under normal
*
operation
.
*
Because it's common for chipsets to return error on perfectly functioning
*
AUX ports, we test for this only when the LOOP command failed
.
*/
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_TEST
)
||
(
param
&&
param
!=
0xfa
&&
param
!=
0xff
))
return
-
1
;
if
(
i8042_command
(
&
param
,
I8042_CMD_AUX_TEST
)
||
(
param
&&
param
!=
0xfa
&&
param
!=
0xff
))
return
-
1
;
}
/*
* Bit assignment test - filters out PS/2 i8042's in AT mode
...
...
@@ -810,6 +809,9 @@ int __init i8042_init(void)
if
(
i8042_platform_init
())
return
-
EBUSY
;
i8042_aux_values
.
irq
=
I8042_AUX_IRQ
;
i8042_kbd_values
.
irq
=
I8042_KBD_IRQ
;
if
(
i8042_controller_init
())
return
-
ENODEV
;
...
...
drivers/input/serio/i8042.h
View file @
f355ae1c
...
...
@@ -104,7 +104,7 @@
#ifdef DEBUG
static
unsigned
long
i8042_start
;
#define dbg_init() do { i8042_start = jiffies; } while (0);
#define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "[%d]\n" ,\
#define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "
[%d]\n" ,\
## arg, (int) (jiffies - i8042_start))
#else
#define dbg_init() do { } while (0);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment