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
nexedi
linux
Commits
395d5e87
Commit
395d5e87
authored
Jan 16, 2004
by
Vojtech Pavlik
Browse files
Options
Browse Files
Download
Plain Diff
Merge suse.cz:/home/vojtech/bk/linus into suse.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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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 @
395d5e87
...
...
@@ -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