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
4d429dce
Commit
4d429dce
authored
Jan 16, 2004
by
Vojtech Pavlik
Browse files
Options
Browse Files
Download
Plain Diff
Merge ucw.cz:/home/vojtech/bk/linus into ucw.cz:/home/vojtech/bk/input
parents
755fa12b
2e7f2525
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
164 additions
and
163 deletions
+164
-163
drivers/char/keyboard.c
drivers/char/keyboard.c
+20
-12
drivers/input/joydev.c
drivers/input/joydev.c
+2
-2
drivers/input/keyboard/98kbd.c
drivers/input/keyboard/98kbd.c
+3
-3
drivers/input/keyboard/amikbd.c
drivers/input/keyboard/amikbd.c
+2
-2
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/atkbd.c
+20
-10
drivers/input/keyboard/maple_keyb.c
drivers/input/keyboard/maple_keyb.c
+5
-5
drivers/input/mouse/logips2pp.c
drivers/input/mouse/logips2pp.c
+1
-1
drivers/input/serio/i8042.c
drivers/input/serio/i8042.c
+51
-66
drivers/macintosh/adbhid.c
drivers/macintosh/adbhid.c
+2
-2
drivers/usb/input/hid-core.c
drivers/usb/input/hid-core.c
+7
-3
drivers/usb/input/hid-ff.c
drivers/usb/input/hid-ff.c
+5
-4
drivers/usb/input/hid-input.c
drivers/usb/input/hid-input.c
+5
-5
drivers/usb/input/hid-lgff.c
drivers/usb/input/hid-lgff.c
+10
-11
drivers/usb/input/usbkbd.c
drivers/usb/input/usbkbd.c
+5
-5
include/linux/input.h
include/linux/input.h
+26
-32
No files found.
drivers/char/keyboard.c
View file @
4d429dce
...
...
@@ -493,9 +493,13 @@ static void fn_lastcons(struct vc_data *vc, struct pt_regs *regs)
static
void
fn_dec_console
(
struct
vc_data
*
vc
,
struct
pt_regs
*
regs
)
{
int
i
;
for
(
i
=
fg_console
-
1
;
i
!=
fg_console
;
i
--
)
{
int
i
,
cur
=
fg_console
;
/* Currently switching? Queue this next switch relative to that. */
if
(
want_console
!=
-
1
)
cur
=
want_console
;
for
(
i
=
cur
-
1
;
i
!=
cur
;
i
--
)
{
if
(
i
==
-
1
)
i
=
MAX_NR_CONSOLES
-
1
;
if
(
vc_cons_allocated
(
i
))
...
...
@@ -506,9 +510,13 @@ static void fn_dec_console(struct vc_data *vc, struct pt_regs *regs)
static
void
fn_inc_console
(
struct
vc_data
*
vc
,
struct
pt_regs
*
regs
)
{
int
i
;
int
i
,
cur
=
fg_console
;
/* Currently switching? Queue this next switch relative to that. */
if
(
want_console
!=
-
1
)
cur
=
want_console
;
for
(
i
=
fg_console
+
1
;
i
!=
fg_console
;
i
++
)
{
for
(
i
=
cur
+
1
;
i
!=
cur
;
i
++
)
{
if
(
i
==
MAX_NR_CONSOLES
)
i
=
0
;
if
(
vc_cons_allocated
(
i
))
...
...
@@ -941,14 +949,14 @@ static unsigned short x86_keycodes[256] =
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
69
,
70
,
71
,
72
,
73
,
74
,
75
,
76
,
77
,
78
,
79
,
80
,
81
,
82
,
83
,
84
,
93
,
86
,
87
,
88
,
94
,
95
,
85
,
259
,
375
,
260
,
90
,
284
,
285
,
309
,
311
,
312
,
91
,
327
,
328
,
329
,
331
,
333
,
335
,
336
,
337
,
338
,
339
,
367
,
288
,
302
,
304
,
350
,
89
,
334
,
326
,
116
,
377
,
109
,
111
,
126
,
347
,
348
,
349
,
80
,
81
,
82
,
83
,
84
,
118
,
86
,
87
,
88
,
115
,
120
,
119
,
121
,
112
,
123
,
92
,
284
,
285
,
309
,
298
,
312
,
91
,
327
,
328
,
329
,
331
,
333
,
335
,
336
,
337
,
338
,
339
,
367
,
288
,
302
,
304
,
350
,
89
,
334
,
326
,
267
,
126
,
268
,
269
,
125
,
347
,
348
,
349
,
360
,
261
,
262
,
263
,
298
,
376
,
100
,
101
,
321
,
316
,
373
,
286
,
289
,
102
,
351
,
355
,
103
,
104
,
105
,
275
,
287
,
279
,
306
,
106
,
274
,
107
,
294
,
364
,
358
,
363
,
362
,
361
,
291
,
108
,
381
,
281
,
290
,
272
,
292
,
305
,
280
,
99
,
112
,
257
,
258
,
359
,
113
,
114
,
264
,
117
,
271
,
374
,
379
,
115
,
125
,
273
,
121
,
123
,
92
,
265
,
266
,
267
,
268
,
269
,
120
,
119
,
118
,
277
,
278
,
282
,
283
,
295
,
296
,
297
,
299
,
300
,
301
,
293
,
303
,
307
,
264
,
117
,
271
,
374
,
379
,
265
,
266
,
93
,
94
,
95
,
85
,
259
,
375
,
260
,
90
,
116
,
377
,
109
,
111
,
277
,
278
,
282
,
283
,
295
,
296
,
297
,
299
,
300
,
301
,
293
,
303
,
307
,
308
,
310
,
313
,
314
,
315
,
317
,
318
,
319
,
320
,
357
,
322
,
323
,
324
,
325
,
276
,
330
,
332
,
340
,
365
,
342
,
343
,
344
,
345
,
346
,
356
,
270
,
341
,
368
,
369
,
370
,
371
,
372
};
...
...
@@ -978,10 +986,10 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode,
put_queue
(
vc
,
0x1d
|
up_flag
);
put_queue
(
vc
,
0x45
|
up_flag
);
return
0
;
case
KEY_
LANG1
:
case
KEY_
HANGUEL
:
if
(
!
up_flag
)
put_queue
(
vc
,
0xf1
);
return
0
;
case
KEY_
LANG2
:
case
KEY_
HANJA
:
if
(
!
up_flag
)
put_queue
(
vc
,
0xf2
);
return
0
;
}
...
...
drivers/input/joydev.c
View file @
4d429dce
...
...
@@ -143,7 +143,7 @@ static int joydev_fasync(int fd, struct file *file, int on)
static
void
joydev_free
(
struct
joydev
*
joydev
)
{
devfs_remove
(
"js%d"
,
joydev
->
minor
);
devfs_remove
(
"
input/
js%d"
,
joydev
->
minor
);
joydev_table
[
joydev
->
minor
]
=
NULL
;
kfree
(
joydev
);
}
...
...
@@ -443,7 +443,7 @@ static struct input_handle *joydev_connect(struct input_handler *handler, struct
joydev_table
[
minor
]
=
joydev
;
devfs_mk_cdev
(
MKDEV
(
INPUT_MAJOR
,
JOYDEV_MINOR_BASE
+
minor
),
S_IFCHR
|
S_IRUGO
|
S_IWUSR
,
"js%d"
,
minor
);
S_IFCHR
|
S_IRUGO
|
S_IWUSR
,
"
input/
js%d"
,
minor
);
return
&
joydev
->
handle
;
}
...
...
drivers/input/keyboard/98kbd.c
View file @
4d429dce
...
...
@@ -47,9 +47,9 @@ static unsigned char kbd98_keycode[256] = {
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
43
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
41
,
26
,
28
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
27
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
53
,
12
,
57
,
184
,
109
,
104
,
110
,
111
,
103
,
105
,
106
,
108
,
102
,
107
,
74
,
98
,
71
,
72
,
73
,
55
,
75
,
76
,
77
,
78
,
79
,
80
,
81
,
117
,
82
,
12
4
,
83
,
185
,
87
,
88
,
85
,
89
,
90
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
102
,
0
,
51
,
52
,
53
,
12
,
57
,
92
,
109
,
104
,
110
,
111
,
103
,
105
,
106
,
108
,
102
,
107
,
74
,
98
,
71
,
72
,
73
,
55
,
75
,
76
,
77
,
78
,
79
,
80
,
81
,
117
,
82
,
12
1
,
83
,
94
,
87
,
88
,
183
,
184
,
185
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
102
,
0
,
99
,
133
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
0
,
0
,
0
,
0
,
54
,
58
,
42
,
56
,
29
};
...
...
drivers/input/keyboard/amikbd.c
View file @
4d429dce
...
...
@@ -48,8 +48,8 @@ MODULE_LICENSE("GPL");
static
unsigned
char
amikbd_keycode
[
0x78
]
=
{
41
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
43
,
0
,
82
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
0
,
79
,
80
,
81
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
0
,
0
,
75
,
76
,
77
,
0
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
53
,
0
,
83
,
71
,
72
,
73
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
43
,
0
,
75
,
76
,
77
,
86
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
53
,
0
,
83
,
71
,
72
,
73
,
57
,
14
,
15
,
96
,
28
,
1
,
111
,
0
,
0
,
0
,
74
,
0
,
103
,
108
,
106
,
105
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
179
,
180
,
98
,
55
,
78
,
138
,
42
,
54
,
58
,
29
,
56
,
100
,
125
,
126
...
...
drivers/input/keyboard/atkbd.c
View file @
4d429dce
...
...
@@ -50,12 +50,12 @@ static int atkbd_softrepeat;
static
unsigned
char
atkbd_set2_keycode
[
512
]
=
{
0
,
67
,
65
,
63
,
61
,
59
,
60
,
88
,
0
,
68
,
66
,
64
,
62
,
15
,
41
,
117
,
0
,
56
,
42
,
182
,
29
,
16
,
2
,
0
,
0
,
0
,
44
,
31
,
30
,
17
,
3
,
0
,
0
,
46
,
45
,
32
,
18
,
5
,
4
,
186
,
0
,
57
,
47
,
33
,
20
,
19
,
6
,
85
,
0
,
49
,
48
,
35
,
34
,
21
,
7
,
89
,
0
,
0
,
50
,
36
,
22
,
8
,
9
,
90
,
0
,
56
,
42
,
93
,
29
,
16
,
2
,
0
,
0
,
0
,
44
,
31
,
30
,
17
,
3
,
0
,
0
,
46
,
45
,
32
,
18
,
5
,
4
,
95
,
0
,
57
,
47
,
33
,
20
,
19
,
6
,
183
,
0
,
49
,
48
,
35
,
34
,
21
,
7
,
184
,
0
,
0
,
50
,
36
,
22
,
8
,
9
,
185
,
0
,
51
,
37
,
23
,
24
,
11
,
10
,
0
,
0
,
52
,
53
,
38
,
39
,
25
,
12
,
0
,
0
,
181
,
40
,
0
,
26
,
13
,
0
,
0
,
58
,
54
,
28
,
27
,
0
,
43
,
0
,
194
,
0
,
86
,
193
,
192
,
184
,
0
,
14
,
185
,
0
,
79
,
182
,
75
,
71
,
124
,
0
,
0
,
0
,
89
,
40
,
0
,
26
,
13
,
0
,
0
,
58
,
54
,
28
,
27
,
0
,
43
,
0
,
85
,
0
,
86
,
91
,
90
,
92
,
0
,
14
,
94
,
0
,
79
,
124
,
75
,
71
,
121
,
0
,
0
,
82
,
83
,
80
,
76
,
77
,
72
,
1
,
69
,
87
,
78
,
81
,
74
,
55
,
73
,
70
,
99
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
...
...
@@ -77,11 +77,11 @@ static unsigned char atkbd_set3_keycode[512] = {
134
,
46
,
45
,
32
,
18
,
5
,
4
,
63
,
135
,
57
,
47
,
33
,
20
,
19
,
6
,
64
,
136
,
49
,
48
,
35
,
34
,
21
,
7
,
65
,
137
,
100
,
50
,
36
,
22
,
8
,
9
,
66
,
125
,
51
,
37
,
23
,
24
,
11
,
10
,
67
,
126
,
52
,
53
,
38
,
39
,
25
,
12
,
68
,
113
,
114
,
40
,
84
,
26
,
13
,
87
,
99
,
97
,
54
,
28
,
27
,
43
,
84
,
88
,
70
,
113
,
114
,
40
,
43
,
26
,
13
,
87
,
99
,
97
,
54
,
28
,
27
,
43
,
43
,
88
,
70
,
108
,
105
,
119
,
103
,
111
,
107
,
14
,
110
,
0
,
79
,
106
,
75
,
71
,
109
,
102
,
104
,
82
,
83
,
80
,
76
,
77
,
72
,
69
,
98
,
0
,
96
,
81
,
0
,
78
,
73
,
55
,
85
,
82
,
83
,
80
,
76
,
77
,
72
,
69
,
98
,
0
,
96
,
81
,
0
,
78
,
73
,
55
,
183
,
89
,
90
,
91
,
92
,
74
,
185
,
184
,
182
,
0
,
0
,
0
,
125
,
126
,
127
,
112
,
0
,
184
,
185
,
186
,
187
,
74
,
94
,
92
,
93
,
0
,
0
,
0
,
125
,
126
,
127
,
112
,
0
,
0
,
139
,
150
,
163
,
165
,
115
,
152
,
150
,
166
,
140
,
160
,
154
,
113
,
114
,
167
,
168
,
148
,
149
,
147
,
140
};
...
...
@@ -236,10 +236,10 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
atkbd
->
release
=
1
;
goto
out
;
case
ATKBD_RET_HANGUEL
:
atkbd_report_key
(
&
atkbd
->
dev
,
regs
,
KEY_
LANG1
,
3
);
atkbd_report_key
(
&
atkbd
->
dev
,
regs
,
KEY_
HANGUEL
,
3
);
goto
out
;
case
ATKBD_RET_HANJA
:
atkbd_report_key
(
&
atkbd
->
dev
,
regs
,
KEY_
LANG2
,
3
);
atkbd_report_key
(
&
atkbd
->
dev
,
regs
,
KEY_
HANJA
,
3
);
goto
out
;
case
ATKBD_RET_ERR
:
printk
(
KERN_WARNING
"atkbd.c: Keyboard on %s reports too many keys pressed.
\n
"
,
serio
->
phys
);
...
...
@@ -262,6 +262,11 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
atkbd
->
release
?
"released"
:
"pressed"
,
atkbd
->
translated
?
"translated"
:
"raw"
,
atkbd
->
set
,
code
,
serio
->
phys
);
if
(
atkbd
->
translated
&&
atkbd
->
set
==
2
&&
code
==
0x7a
)
printk
(
KERN_WARNING
"atkbd.c: This is an XFree86 bug. It shouldn't access"
"hardware directly.
\n
"
);
else
printk
(
KERN_WARNING
"atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.
\n
"
,
code
&
0x80
?
"e0"
:
""
,
code
&
0x7f
);
break
;
default:
value
=
atkbd
->
release
?
0
:
...
...
@@ -469,6 +474,11 @@ static int atkbd_probe(struct atkbd *atkbd)
return
-
1
;
atkbd
->
id
=
(
param
[
0
]
<<
8
)
|
param
[
1
];
if
(
atkbd
->
id
==
0xaca1
&&
atkbd
->
translated
)
{
printk
(
KERN_ERR
"atkbd.c: NCD terminal keyboards are only supported on non-translating
\n
"
);
printk
(
KERN_ERR
"atkbd.c: controllers. Use i8042.direct=1 to disable translation.
\n
"
);
return
-
1
;
}
return
0
;
}
...
...
drivers/input/keyboard/maple_keyb.c
View file @
4d429dce
...
...
@@ -19,13 +19,13 @@ static unsigned char dc_kbd_keycode[256] = {
0
,
0
,
0
,
0
,
30
,
48
,
46
,
32
,
18
,
33
,
34
,
35
,
23
,
36
,
37
,
38
,
50
,
49
,
24
,
25
,
16
,
19
,
31
,
20
,
22
,
47
,
17
,
45
,
21
,
44
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
28
,
1
,
14
,
15
,
57
,
12
,
13
,
26
,
27
,
43
,
84
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
27
,
43
,
43
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
87
,
88
,
99
,
70
,
119
,
110
,
102
,
104
,
111
,
107
,
109
,
106
,
105
,
108
,
103
,
69
,
98
,
55
,
74
,
78
,
96
,
79
,
80
,
81
,
75
,
76
,
77
,
71
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
85
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
1
20
,
121
,
122
,
123
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
0
,
0
,
0
,
12
4
,
0
,
181
,
182
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
1
90
,
191
,
192
,
193
,
194
,
195
,
196
,
197
,
198
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
190
,
1
91
,
192
,
193
,
194
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
0
,
0
,
0
,
12
1
,
0
,
89
,
93
,
124
,
92
,
94
,
95
,
0
,
0
,
0
,
1
22
,
123
,
90
,
91
,
85
,
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
,
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
,
0
,
0
,
0
,
0
,
0
,
...
...
drivers/input/mouse/logips2pp.c
View file @
4d429dce
...
...
@@ -150,7 +150,7 @@ static int ps2pp_detect_model(struct psmouse *psmouse, unsigned char *param)
static
int
logitech_wheel
[]
=
{
52
,
53
,
75
,
76
,
80
,
81
,
83
,
88
,
112
,
-
1
};
static
int
logitech_ps2pp
[]
=
{
12
,
13
,
40
,
41
,
42
,
43
,
50
,
51
,
52
,
53
,
73
,
75
,
76
,
80
,
81
,
83
,
88
,
96
,
97
,
112
,
-
1
};
static
int
logitech_mx
[]
=
{
112
,
-
1
};
static
int
logitech_mx
[]
=
{
61
,
112
,
-
1
};
psmouse
->
vendor
=
"Logitech"
;
psmouse
->
model
=
((
param
[
0
]
>>
4
)
&
0x07
)
|
((
param
[
0
]
<<
3
)
&
0x78
);
...
...
drivers/input/serio/i8042.c
View file @
4d429dce
...
...
@@ -371,65 +371,60 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs)
unsigned
long
flags
;
unsigned
char
str
,
data
;
unsigned
int
dfl
;
struct
{
int
data
;
int
str
;
}
buffer
[
I8042_BUFFER_SIZE
];
int
i
,
j
=
0
;
spin_lock_irqsave
(
&
i8042_lock
,
flags
);
while
(
j
<
I8042_BUFFER_SIZE
&&
(
buffer
[
j
].
str
=
i8042_read_status
())
&
I8042_STR_OBF
)
buffer
[
j
++
].
data
=
i8042_read_data
();
str
=
i8042_read_status
();
data
=
i8042_read_data
();
spin_unlock_irqrestore
(
&
i8042_lock
,
flags
);
for
(
i
=
0
;
i
<
j
;
i
++
)
{
str
=
buffer
[
i
].
str
;
data
=
buffer
[
i
].
data
;
dfl
=
((
str
&
I8042_STR_PARITY
)
?
SERIO_PARITY
:
0
)
|
((
str
&
I8042_STR_TIMEOUT
)
?
SERIO_TIMEOUT
:
0
);
if
(
i8042_mux_values
[
0
].
exists
&&
(
str
&
I8042_STR_AUXDATA
))
{
if
(
~
str
&
I8042_STR_OBF
)
{
if
(
irq
)
dbg
(
"Interrupt %d, without any data"
,
irq
);
return
IRQ_RETVAL
(
0
);
}
if
(
str
&
I8042_STR_MUXERR
)
{
switch
(
data
)
{
case
0xfd
:
case
0xfe
:
dfl
=
SERIO_TIMEOUT
;
break
;
case
0xff
:
dfl
=
SERIO_PARITY
;
break
;
}
data
=
0xfe
;
}
else
dfl
=
0
;
dfl
=
((
str
&
I8042_STR_PARITY
)
?
SERIO_PARITY
:
0
)
|
((
str
&
I8042_STR_TIMEOUT
)
?
SERIO_TIMEOUT
:
0
);
dbg
(
"%02x <- i8042 (interrupt, aux%d, %d%s%s)"
,
data
,
(
str
>>
6
),
irq
,
dfl
&
SERIO_PARITY
?
", bad parity"
:
""
,
dfl
&
SERIO_TIMEOUT
?
", timeout"
:
""
);
if
(
i8042_mux_values
[
0
].
exists
&&
(
str
&
I8042_STR_AUXDATA
))
{
serio_interrupt
(
i8042_mux_port
+
((
str
>>
6
)
&
3
),
data
,
dfl
,
regs
);
continue
;
}
if
(
str
&
I8042_STR_MUXERR
)
{
switch
(
data
)
{
case
0xfd
:
case
0xfe
:
dfl
=
SERIO_TIMEOUT
;
break
;
case
0xff
:
dfl
=
SERIO_PARITY
;
break
;
}
data
=
0xfe
;
}
else
dfl
=
0
;
dbg
(
"%02x <- i8042 (interrupt,
%s
, %d%s%s)"
,
data
,
(
str
&
I8042_STR_AUXDATA
)
?
"aux"
:
"kbd"
,
irq
,
dbg
(
"%02x <- i8042 (interrupt,
aux%d
, %d%s%s)"
,
data
,
(
str
>>
6
)
,
irq
,
dfl
&
SERIO_PARITY
?
", bad parity"
:
""
,
dfl
&
SERIO_TIMEOUT
?
", timeout"
:
""
);
if
(
i8042_aux_values
.
exists
&&
(
str
&
I8042_STR_AUXDATA
))
{
serio_interrupt
(
&
i8042_aux_port
,
data
,
dfl
,
regs
);
continue
;
}
serio_interrupt
(
i8042_mux_port
+
((
str
>>
6
)
&
3
),
data
,
dfl
,
regs
);
goto
irq_ret
;
}
if
(
!
i8042_kbd_values
.
exists
)
continue
;
dbg
(
"%02x <- i8042 (interrupt, %s, %d%s%s)"
,
data
,
(
str
&
I8042_STR_AUXDATA
)
?
"aux"
:
"kbd"
,
irq
,
dfl
&
SERIO_PARITY
?
", bad parity"
:
""
,
dfl
&
SERIO_TIMEOUT
?
", timeout"
:
""
);
serio_interrupt
(
&
i8042_kbd_port
,
data
,
dfl
,
regs
);
if
(
i8042_aux_values
.
exists
&&
(
str
&
I8042_STR_AUXDATA
))
{
serio_interrupt
(
&
i8042_aux_port
,
data
,
dfl
,
regs
);
goto
irq_ret
;
}
return
IRQ_RETVAL
(
j
);
if
(
!
i8042_kbd_values
.
exists
)
goto
irq_ret
;
serio_interrupt
(
&
i8042_kbd_port
,
data
,
dfl
,
regs
);
irq_ret:
mod_timer
(
&
i8042_timer
,
jiffies
+
I8042_POLL_PERIOD
);
return
IRQ_RETVAL
(
1
);
}
/*
...
...
@@ -513,17 +508,8 @@ static int i8042_enable_mux_ports(struct i8042_values *values)
static
int
__init
i8042_check_mux
(
struct
i8042_values
*
values
)
{
static
int
i8042_check_mux_cookie
;
unsigned
char
mux_version
;
/*
* Check if AUX irq is available.
*/
if
(
request_irq
(
values
->
irq
,
i8042_interrupt
,
SA_SHIRQ
,
"i8042"
,
&
i8042_check_mux_cookie
))
return
-
1
;
free_irq
(
values
->
irq
,
&
i8042_check_mux_cookie
);
if
(
i8042_enable_mux_mode
(
values
,
&
mux_version
))
return
-
1
;
...
...
@@ -627,6 +613,7 @@ static int __init i8042_port_register(struct i8042_values *values, struct serio
if
(
i8042_command
(
&
i8042_ctr
,
I8042_CMD_CTL_WCTR
))
{
printk
(
KERN_WARNING
"i8042.c: Can't write CTR while registering.
\n
"
);
values
->
exists
=
0
;
return
-
1
;
}
...
...
@@ -645,7 +632,6 @@ static int __init i8042_port_register(struct i8042_values *values, struct serio
static
void
i8042_timer_func
(
unsigned
long
data
)
{
i8042_interrupt
(
0
,
NULL
,
NULL
);
mod_timer
(
&
i8042_timer
,
jiffies
+
I8042_POLL_PERIOD
);
}
...
...
@@ -658,8 +644,6 @@ static void i8042_timer_func(unsigned long data)
static
int
i8042_controller_init
(
void
)
{
if
(
i8042_noaux
)
i8042_nomux
=
1
;
/*
* Test the i8042. We need to know if it thinks it's working correctly
* before doing anything else.
...
...
@@ -899,6 +883,9 @@ int __init i8042_init(void)
dbg_init
();
init_timer
(
&
i8042_timer
);
i8042_timer
.
function
=
i8042_timer_func
;
if
(
i8042_platform_init
())
return
-
EBUSY
;
...
...
@@ -911,20 +898,18 @@ int __init i8042_init(void)
if
(
i8042_dumbkbd
)
i8042_kbd_port
.
write
=
NULL
;
for
(
i
=
0
;
i
<
4
;
i
++
)
i8042_init_mux_values
(
i8042_mux_values
+
i
,
i8042_mux_port
+
i
,
i
);
if
(
!
i8042_nomux
&&
!
i8042_check_mux
(
&
i8042_aux_values
))
for
(
i
=
0
;
i
<
4
;
i
++
)
i8042_port_register
(
i8042_mux_values
+
i
,
i8042_mux_port
+
i
);
else
if
(
!
i8042_noaux
&&
!
i8042_check_aux
(
&
i8042_aux_values
))
if
(
!
i8042_noaux
&&
!
i8042_check_aux
(
&
i8042_aux_values
))
{
if
(
!
i8042_nomux
&&
!
i8042_check_mux
(
&
i8042_aux_values
))
for
(
i
=
0
;
i
<
4
;
i
++
)
{
i8042_init_mux_values
(
i8042_mux_values
+
i
,
i8042_mux_port
+
i
,
i
);
i8042_port_register
(
i8042_mux_values
+
i
,
i8042_mux_port
+
i
);
}
else
i8042_port_register
(
&
i8042_aux_values
,
&
i8042_aux_port
);
}
i8042_port_register
(
&
i8042_kbd_values
,
&
i8042_kbd_port
);
init_timer
(
&
i8042_timer
);
i8042_timer
.
function
=
i8042_timer_func
;
mod_timer
(
&
i8042_timer
,
jiffies
+
I8042_POLL_PERIOD
);
if
(
sysdev_class_register
(
&
kbc_sysclass
)
==
0
)
{
...
...
drivers/macintosh/adbhid.c
View file @
4d429dce
...
...
@@ -69,8 +69,8 @@ unsigned char adb_to_linux_keycodes[128] = {
22
,
26
,
23
,
25
,
28
,
38
,
36
,
40
,
37
,
39
,
43
,
51
,
53
,
49
,
50
,
52
,
15
,
57
,
41
,
14
,
96
,
1
,
29
,
125
,
42
,
58
,
56
,
105
,
106
,
108
,
103
,
0
,
0
,
83
,
0
,
55
,
0
,
78
,
0
,
69
,
0
,
0
,
0
,
98
,
96
,
0
,
74
,
0
,
0
,
117
,
82
,
79
,
80
,
81
,
75
,
76
,
77
,
71
,
0
,
72
,
73
,
1
83
,
181
,
124
,
63
,
64
,
65
,
61
,
66
,
67
,
1
91
,
87
,
190
,
99
,
0
,
70
,
0
,
68
,
101
,
88
,
0
,
117
,
82
,
79
,
80
,
81
,
75
,
76
,
77
,
71
,
0
,
72
,
73
,
1
24
,
89
,
121
,
63
,
64
,
65
,
61
,
66
,
67
,
1
23
,
87
,
122
,
99
,
0
,
70
,
0
,
68
,
101
,
88
,
0
,
119
,
110
,
102
,
104
,
111
,
62
,
107
,
60
,
109
,
59
,
54
,
100
,
97
,
126
,
116
};
...
...
drivers/usb/input/hid-core.c
View file @
4d429dce
...
...
@@ -1357,6 +1357,9 @@ void hid_init_reports(struct hid_device *hid)
#define USB_VENDOR_ID_BERKSHIRE 0x0c98
#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140
#define USB_VENDOR_ID_ALPS 0x0433
#define USB_DEVICE_ID_IBM_GAMEPAD 0x1101
struct
hid_blacklist
{
__u16
idVendor
;
__u16
idProduct
;
...
...
@@ -1407,6 +1410,7 @@ struct hid_blacklist {
{
USB_VENDOR_ID_ESSENTIAL_REALITY
,
USB_DEVICE_ID_ESSENTIAL_REALITY_P5
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_WCP32PU
,
HID_QUIRK_2WHEEL_MOUSE_HACK
},
{
USB_VENDOR_ID_BERKSHIRE
,
USB_DEVICE_ID_BERKSHIRE_PCWD
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ALPS
,
USB_DEVICE_ID_IBM_GAMEPAD
,
HID_QUIRK_BADPAD
},
{
0
,
0
}
};
...
...
@@ -1525,9 +1529,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
continue
;
if
(
!
(
hid
->
urbout
=
usb_alloc_urb
(
0
,
GFP_KERNEL
)))
goto
fail
;
pipe
=
usb_snd
bulk
pipe
(
dev
,
endpoint
->
bEndpointAddress
);
usb_fill_
bulk
_urb
(
hid
->
urbout
,
dev
,
pipe
,
hid
->
outbuf
,
0
,
hid_irq_out
,
hid
);
pipe
=
usb_snd
int
pipe
(
dev
,
endpoint
->
bEndpointAddress
);
usb_fill_
int
_urb
(
hid
->
urbout
,
dev
,
pipe
,
hid
->
outbuf
,
0
,
hid_irq_out
,
hid
,
1
);
hid
->
urbout
->
transfer_dma
=
hid
->
outbuf_dma
;
hid
->
urbout
->
transfer_flags
|=
URB_NO_TRANSFER_DMA_MAP
;
}
...
...
drivers/usb/input/hid-ff.c
View file @
4d429dce
...
...
@@ -5,7 +5,7 @@
* Not all hid devices use the same protocol. For example, some use PID,
* other use their own proprietary procotol.
*
* Copyright (c) 2002 Johann Deneux
* Copyright (c) 2002
-2004
Johann Deneux
*/
/*
...
...
@@ -24,7 +24,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Should you need to contact me, the author, you can do so by
* e-mail - mail your message to <
deneux@ifrance.com
>
* e-mail - mail your message to <
johann.deneux@it.uu.se
>
*/
#include <linux/input.h>
...
...
@@ -52,8 +52,9 @@ struct hid_ff_initializer {
static
struct
hid_ff_initializer
inits
[]
=
{
#ifdef CONFIG_LOGITECH_FF
{
0x46d
,
0xc211
,
hid_lgff_init
},
{
0x46d
,
0xc283
,
hid_lgff_init
},
{
0x46d
,
0xc211
,
hid_lgff_init
},
// Logitech Cordless rumble pad
{
0x46d
,
0xc283
,
hid_lgff_init
},
// Logitech Wingman Force 3d
{
0x46d
,
0xc295
,
hid_lgff_init
},
// Logitech MOMO force wheel
#endif
#ifdef CONFIG_HID_PID
{
0x45e
,
0x001b
,
hid_pid_init
},
...
...
drivers/usb/input/hid-input.c
View file @
4d429dce
...
...
@@ -40,13 +40,13 @@ static unsigned char hid_keyboard[256] = {
0
,
0
,
0
,
0
,
30
,
48
,
46
,
32
,
18
,
33
,
34
,
35
,
23
,
36
,
37
,
38
,
50
,
49
,
24
,
25
,
16
,
19
,
31
,
20
,
22
,
47
,
17
,
45
,
21
,
44
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
28
,
1
,
14
,
15
,
57
,
12
,
13
,
26
,
27
,
43
,
84
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
27
,
43
,
43
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
87
,
88
,
99
,
70
,
119
,
110
,
102
,
104
,
111
,
107
,
109
,
106
,
105
,
108
,
103
,
69
,
98
,
55
,
74
,
78
,
96
,
79
,
80
,
81
,
75
,
76
,
77
,
71
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
85
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
1
20
,
121
,
122
,
123
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
unk
,
unk
,
unk
,
12
4
,
unk
,
181
,
182
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
1
90
,
191
,
192
,
193
,
194
,
195
,
196
,
197
,
198
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
190
,
1
91
,
192
,
193
,
194
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
unk
,
unk
,
unk
,
12
1
,
unk
,
89
,
93
,
124
,
92
,
94
,
95
,
unk
,
unk
,
unk
,
1
22
,
123
,
90
,
91
,
85
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
unk
,
...
...
drivers/usb/input/hid-lgff.c
View file @
4d429dce
...
...
@@ -6,7 +6,7 @@
* - WingMan Cordless RumblePad
* - WingMan Force 3D
*
* Copyright (c) 2002 Johann Deneux
* Copyright (c) 2002
-2004
Johann Deneux
*/
/*
...
...
@@ -25,13 +25,13 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Should you need to contact me, the author, you can do so by
* e-mail - mail your message to <
deneux@ifrance.com
>
* e-mail - mail your message to <
johann.deneux@it.uu.se
>
*/
#include <linux/input.h>
#include <linux/sched.h>
#define DEBUG
//
#define DEBUG
#include <linux/usb.h>
#include <linux/circ_buf.h>
...
...
@@ -179,8 +179,7 @@ int hid_lgff_init(struct hid_device* hid)
kfree
(
private
);
return
-
1
;
}
private
->
rumble
->
field
[
0
]
->
value
[
0
]
=
0x03
;
private
->
rumble
->
field
[
0
]
->
value
[
1
]
=
0x42
;
private
->
rumble
->
field
[
0
]
->
value
[
0
]
=
0x42
;
private
->
condition
=
hid_lgff_duplicate_report
(
report
);
...
...
@@ -207,7 +206,7 @@ int hid_lgff_init(struct hid_device* hid)
add_timer
(
&
private
->
timer
);
/*TODO: only run the timer when at least
one effect is playing */
printk
(
KERN_INFO
"Force feedback for Logitech force feedback devices by Johann Deneux <
deneux@ifrance.com
>
\n
"
);
printk
(
KERN_INFO
"Force feedback for Logitech force feedback devices by Johann Deneux <
johann.deneux@it.uu.se
>
\n
"
);
return
0
;
}
...
...
@@ -254,7 +253,7 @@ static void hid_lgff_input_init(struct hid_device* hid)
signed
short
*
ff
;
u16
idVendor
=
hid
->
dev
->
descriptor
.
idVendor
;
u16
idProduct
=
hid
->
dev
->
descriptor
.
idProduct
;
struct
hid_input
*
hidinput
=
list_entry
(
&
hid
->
inputs
,
struct
hid_input
,
list
);
struct
hid_input
*
hidinput
=
list_entry
(
hid
->
inputs
.
next
,
struct
hid_input
,
list
);
while
(
dev
->
idVendor
&&
(
idVendor
!=
dev
->
idVendor
||
idProduct
!=
dev
->
idProduct
))
dev
++
;
...
...
@@ -511,10 +510,10 @@ static void hid_lgff_timer(unsigned long timer_data)
hid_submit_report
(
hid
,
lgff
->
constant
,
USB_DIR_OUT
);
}
if
(
left
!=
lgff
->
rumble
->
field
[
0
]
->
value
[
3
]
||
right
!=
lgff
->
rumble
->
field
[
0
]
->
value
[
4
])
{
lgff
->
rumble
->
field
[
0
]
->
value
[
3
]
=
left
;
lgff
->
rumble
->
field
[
0
]
->
value
[
4
]
=
right
;
if
(
left
!=
lgff
->
rumble
->
field
[
0
]
->
value
[
2
]
||
right
!=
lgff
->
rumble
->
field
[
0
]
->
value
[
3
])
{
lgff
->
rumble
->
field
[
0
]
->
value
[
2
]
=
left
;
lgff
->
rumble
->
field
[
0
]
->
value
[
3
]
=
right
;
dbg
(
"(left,right)=(%04x, %04x)"
,
left
,
right
);
hid_submit_report
(
hid
,
lgff
->
rumble
,
USB_DIR_OUT
);
}
...
...
drivers/usb/input/usbkbd.c
View file @
4d429dce
...
...
@@ -49,13 +49,13 @@ static unsigned char usb_kbd_keycode[256] = {
0
,
0
,
0
,
0
,
30
,
48
,
46
,
32
,
18
,
33
,
34
,
35
,
23
,
36
,
37
,
38
,
50
,
49
,
24
,
25
,
16
,
19
,
31
,
20
,
22
,
47
,
17
,
45
,
21
,
44
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
28
,
1
,
14
,
15
,
57
,
12
,
13
,
26
,
27
,
43
,
84
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
27
,
43
,
43
,
39
,
40
,
41
,
51
,
52
,
53
,
58
,
59
,
60
,
61
,
62
,
63
,
64
,
65
,
66
,
67
,
68
,
87
,
88
,
99
,
70
,
119
,
110
,
102
,
104
,
111
,
107
,
109
,
106
,
105
,
108
,
103
,
69
,
98
,
55
,
74
,
78
,
96
,
79
,
80
,
81
,
75
,
76
,
77
,
71
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
85
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
1
20
,
121
,
122
,
123
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
0
,
0
,
0
,
12
4
,
0
,
181
,
182
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
1
90
,
191
,
192
,
193
,
194
,
195
,
196
,
197
,
198
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
72
,
73
,
82
,
83
,
86
,
127
,
116
,
117
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
190
,
1
91
,
192
,
193
,
194
,
134
,
138
,
130
,
132
,
128
,
129
,
131
,
137
,
133
,
135
,
136
,
113
,
115
,
114
,
0
,
0
,
0
,
12
1
,
0
,
89
,
93
,
124
,
92
,
94
,
95
,
0
,
0
,
0
,
1
22
,
123
,
90
,
91
,
85
,
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
,
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
,
0
,
0
,
0
,
0
,
0
,
...
...
include/linux/input.h
View file @
4d429dce
...
...
@@ -189,18 +189,18 @@ struct input_absinfo {
#define KEY_KP3 81
#define KEY_KP0 82
#define KEY_KPDOT 83
#define KEY_103RD 84
#define KEY_
F13
85
#define KEY_
ZENKAKUHANKAKU
85
#define KEY_102ND 86
#define KEY_F11 87
#define KEY_F12 88
#define KEY_
F14
89
#define KEY_
F15
90
#define KEY_
F16
91
#define KEY_
F17
92
#define KEY_
F18
93
#define KEY_
F19
94
#define KEY_
F20
95
#define KEY_
ROMAJI
89
#define KEY_
KATAKANA
90
#define KEY_
HIRAGANA
91
#define KEY_
HENKAN
92
#define KEY_
KATAKANAHIRAGANA
93
#define KEY_
MUHENKAN
94
#define KEY_
KPJPCOMMA
95
#define KEY_KPENTER 96
#define KEY_RIGHTCTRL 97
#define KEY_KPSLASH 98
...
...
@@ -225,11 +225,11 @@ struct input_absinfo {
#define KEY_KPEQUAL 117
#define KEY_KPPLUSMINUS 118
#define KEY_PAUSE 119
#define KEY_F21 120
#define KEY_
F22
121
#define KEY_
F23
122
#define KEY_
F24
123
#define KEY_
KPCOMMA
124
#define KEY_
KPCOMMA
121
#define KEY_
HANGUEL
122
#define KEY_
HANJA
123
#define KEY_
YEN
124
#define KEY_LEFTMETA 125
#define KEY_RIGHTMETA 126
#define KEY_COMPOSE 127
...
...
@@ -288,24 +288,18 @@ struct input_absinfo {
#define KEY_KPLEFTPAREN 179
#define KEY_KPRIGHTPAREN 180
#define KEY_INTL1 181
#define KEY_INTL2 182
#define KEY_INTL3 183
#define KEY_INTL4 184
#define KEY_INTL5 185
#define KEY_INTL6 186
#define KEY_INTL7 187
#define KEY_INTL8 188
#define KEY_INTL9 189
#define KEY_LANG1 190
#define KEY_LANG2 191
#define KEY_LANG3 192
#define KEY_LANG4 193
#define KEY_LANG5 194
#define KEY_LANG6 195
#define KEY_LANG7 196
#define KEY_LANG8 197
#define KEY_LANG9 198
#define KEY_F13 183
#define KEY_F14 184
#define KEY_F15 185
#define KEY_F16 186
#define KEY_F17 187
#define KEY_F18 188
#define KEY_F19 189
#define KEY_F20 190
#define KEY_F21 191
#define KEY_F22 192
#define KEY_F23 193
#define KEY_F24 194
#define KEY_PLAYCD 200
#define KEY_PAUSECD 201
...
...
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