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
d20e6336
Commit
d20e6336
authored
Jan 31, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
parents
fa3c791d
6dea9347
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
545 additions
and
266 deletions
+545
-266
drivers/input/joystick/a3d.c
drivers/input/joystick/a3d.c
+46
-42
drivers/input/joystick/db9.c
drivers/input/joystick/db9.c
+46
-39
drivers/input/joystick/gamecon.c
drivers/input/joystick/gamecon.c
+206
-155
drivers/input/joystick/grip.c
drivers/input/joystick/grip.c
+9
-2
drivers/input/joystick/iforce/iforce-main.c
drivers/input/joystick/iforce/iforce-main.c
+1
-1
drivers/input/joystick/iforce/iforce-packets.c
drivers/input/joystick/iforce/iforce-packets.c
+2
-2
drivers/input/joystick/iforce/iforce-usb.c
drivers/input/joystick/iforce/iforce-usb.c
+0
-1
drivers/input/joystick/sidewinder.c
drivers/input/joystick/sidewinder.c
+7
-3
drivers/input/joystick/tmdc.c
drivers/input/joystick/tmdc.c
+11
-4
drivers/input/joystick/turbografx.c
drivers/input/joystick/turbografx.c
+13
-7
drivers/input/joystick/twidjoy.c
drivers/input/joystick/twidjoy.c
+2
-2
drivers/input/misc/Kconfig
drivers/input/misc/Kconfig
+12
-0
drivers/input/misc/Makefile
drivers/input/misc/Makefile
+1
-0
drivers/input/misc/ixp4xx-beeper.c
drivers/input/misc/ixp4xx-beeper.c
+183
-0
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/psmouse-base.c
+1
-0
drivers/input/mousedev.c
drivers/input/mousedev.c
+3
-6
drivers/input/touchscreen/mk712.c
drivers/input/touchscreen/mk712.c
+1
-1
drivers/usb/input/hiddev.c
drivers/usb/input/hiddev.c
+1
-1
No files found.
drivers/input/joystick/a3d.c
View file @
d20e6336
...
...
@@ -57,7 +57,7 @@ static char *a3d_names[] = { NULL, "FP-Gaming Assassin 3D", "MadCatz Panther", "
struct
a3d
{
struct
gameport
*
gameport
;
struct
gameport
*
adc
;
struct
input_dev
dev
;
struct
input_dev
*
dev
;
int
axes
[
4
];
int
buttons
;
int
mode
;
...
...
@@ -115,7 +115,7 @@ static int a3d_csum(char *data, int count)
static
void
a3d_read
(
struct
a3d
*
a3d
,
unsigned
char
*
data
)
{
struct
input_dev
*
dev
=
&
a3d
->
dev
;
struct
input_dev
*
dev
=
a3d
->
dev
;
switch
(
a3d
->
mode
)
{
...
...
@@ -265,14 +265,20 @@ static void a3d_close(struct input_dev *dev)
static
int
a3d_connect
(
struct
gameport
*
gameport
,
struct
gameport_driver
*
drv
)
{
struct
a3d
*
a3d
;
struct
input_dev
*
input_dev
;
struct
gameport
*
adc
;
unsigned
char
data
[
A3D_MAX_LENGTH
];
int
i
;
int
err
;
if
(
!
(
a3d
=
kzalloc
(
sizeof
(
struct
a3d
),
GFP_KERNEL
)))
return
-
ENOMEM
;
a3d
=
kzalloc
(
sizeof
(
struct
a3d
),
GFP_KERNEL
);
input_dev
=
input_allocate_device
();
if
(
!
a3d
||
!
input_dev
)
{
err
=
-
ENOMEM
;
goto
fail1
;
}
a3d
->
dev
=
input_dev
;
a3d
->
gameport
=
gameport
;
gameport_set_drvdata
(
gameport
,
a3d
);
...
...
@@ -302,42 +308,48 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv)
sprintf
(
a3d
->
phys
,
"%s/input0"
,
gameport
->
phys
);
input_dev
->
name
=
a3d_names
[
a3d
->
mode
];
input_dev
->
phys
=
a3d
->
phys
;
input_dev
->
id
.
bustype
=
BUS_GAMEPORT
;
input_dev
->
id
.
vendor
=
GAMEPORT_ID_VENDOR_MADCATZ
;
input_dev
->
id
.
product
=
a3d
->
mode
;
input_dev
->
id
.
version
=
0x0100
;
input_dev
->
cdev
.
dev
=
&
gameport
->
dev
;
input_dev
->
private
=
a3d
;
input_dev
->
open
=
a3d_open
;
input_dev
->
close
=
a3d_close
;
if
(
a3d
->
mode
==
A3D_MODE_PXL
)
{
int
axes
[]
=
{
ABS_X
,
ABS_Y
,
ABS_THROTTLE
,
ABS_RUDDER
};
a3d
->
length
=
33
;
init_input_dev
(
&
a3d
->
dev
);
a3d
->
dev
.
evbit
[
0
]
|=
BIT
(
EV_ABS
)
|
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
a3d
->
dev
.
relbit
[
0
]
|=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
a3d
->
dev
.
absbit
[
0
]
|=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
)
|
BIT
(
ABS_THROTTLE
)
|
BIT
(
ABS_RUDDER
)
|
BIT
(
ABS_HAT0X
)
|
BIT
(
ABS_HAT0Y
)
|
BIT
(
ABS_HAT1X
)
|
BIT
(
ABS_HAT1Y
);
a3d
->
dev
.
keybit
[
LONG
(
BTN_MOUSE
)]
|=
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_MIDDLE
)
|
BIT
(
BTN_SIDE
)
|
BIT
(
BTN_EXTRA
);
a3d
->
dev
.
keybit
[
LONG
(
BTN_JOYSTICK
)]
|=
BIT
(
BTN_TRIGGER
)
|
BIT
(
BTN_THUMB
)
|
BIT
(
BTN_TOP
)
|
BIT
(
BTN_PINKIE
);
input_dev
->
evbit
[
0
]
|=
BIT
(
EV_ABS
)
|
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
input_dev
->
relbit
[
0
]
|=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
input_dev
->
absbit
[
0
]
|=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
)
|
BIT
(
ABS_THROTTLE
)
|
BIT
(
ABS_RUDDER
)
|
BIT
(
ABS_HAT0X
)
|
BIT
(
ABS_HAT0Y
)
|
BIT
(
ABS_HAT1X
)
|
BIT
(
ABS_HAT1Y
);
input_dev
->
keybit
[
LONG
(
BTN_MOUSE
)]
|=
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_MIDDLE
)
|
BIT
(
BTN_SIDE
)
|
BIT
(
BTN_EXTRA
);
input_dev
->
keybit
[
LONG
(
BTN_JOYSTICK
)]
|=
BIT
(
BTN_TRIGGER
)
|
BIT
(
BTN_THUMB
)
|
BIT
(
BTN_TOP
)
|
BIT
(
BTN_PINKIE
);
a3d_read
(
a3d
,
data
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
i
<
2
)
input_set_abs_params
(
&
a3d
->
dev
,
axes
[
i
],
48
,
a3d
->
dev
.
abs
[
axes
[
i
]]
*
2
-
48
,
0
,
8
);
input_set_abs_params
(
input_dev
,
axes
[
i
],
48
,
input_dev
->
abs
[
axes
[
i
]]
*
2
-
48
,
0
,
8
);
else
input_set_abs_params
(
&
a3d
->
dev
,
axes
[
i
],
2
,
253
,
0
,
0
);
input_set_abs_params
(
&
a3d
->
dev
,
ABS_HAT0X
+
i
,
-
1
,
1
,
0
,
0
);
input_set_abs_params
(
input_
dev
,
axes
[
i
],
2
,
253
,
0
,
0
);
input_set_abs_params
(
input_
dev
,
ABS_HAT0X
+
i
,
-
1
,
1
,
0
,
0
);
}
}
else
{
a3d
->
length
=
29
;
init_input_dev
(
&
a3d
->
dev
);
a3d
->
dev
.
evbit
[
0
]
|=
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
a3d
->
dev
.
relbit
[
0
]
|=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
a3d
->
dev
.
keybit
[
LONG
(
BTN_MOUSE
)]
|=
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_MIDDLE
);
input_dev
->
evbit
[
0
]
|=
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
input_dev
->
relbit
[
0
]
|=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
input_dev
->
keybit
[
LONG
(
BTN_MOUSE
)]
|=
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_MIDDLE
);
a3d_read
(
a3d
,
data
);
...
...
@@ -358,24 +370,17 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv)
}
}
a3d
->
dev
.
private
=
a3d
;
a3d
->
dev
.
open
=
a3d_open
;
a3d
->
dev
.
close
=
a3d_close
;
a3d
->
dev
.
name
=
a3d_names
[
a3d
->
mode
];
a3d
->
dev
.
phys
=
a3d
->
phys
;
a3d
->
dev
.
id
.
bustype
=
BUS_GAMEPORT
;
a3d
->
dev
.
id
.
vendor
=
GAMEPORT_ID_VENDOR_MADCATZ
;
a3d
->
dev
.
id
.
product
=
a3d
->
mode
;
a3d
->
dev
.
id
.
version
=
0x0100
;
input_register_device
(
&
a3d
->
dev
);
printk
(
KERN_INFO
"input: %s on %s
\n
"
,
a3d_names
[
a3d
->
mode
],
a3d
->
phys
);
err
=
input_register_device
(
a3d
->
dev
);
if
(
err
)
goto
fail3
;
return
0
;
fail2:
gameport_close
(
gameport
);
fail1:
gameport_set_drvdata
(
gameport
,
NULL
);
fail3:
if
(
a3d
->
adc
)
gameport_unregister_port
(
a3d
->
adc
);
fail2:
gameport_close
(
gameport
);
fail1:
gameport_set_drvdata
(
gameport
,
NULL
);
input_free_device
(
input_dev
);
kfree
(
a3d
);
return
err
;
}
...
...
@@ -384,11 +389,9 @@ static void a3d_disconnect(struct gameport *gameport)
{
struct
a3d
*
a3d
=
gameport_get_drvdata
(
gameport
);
input_unregister_device
(
&
a3d
->
dev
);
if
(
a3d
->
adc
)
{
input_unregister_device
(
a3d
->
dev
);
if
(
a3d
->
adc
)
gameport_unregister_port
(
a3d
->
adc
);
a3d
->
adc
=
NULL
;
}
gameport_close
(
gameport
);
gameport_set_drvdata
(
gameport
,
NULL
);
kfree
(
a3d
);
...
...
@@ -397,6 +400,7 @@ static void a3d_disconnect(struct gameport *gameport)
static
struct
gameport_driver
a3d_drv
=
{
.
driver
=
{
.
name
=
"adc"
,
.
owner
=
THIS_MODULE
,
},
.
description
=
DRIVER_DESC
,
.
connect
=
a3d_connect
,
...
...
drivers/input/joystick/db9.c
View file @
d20e6336
...
...
@@ -275,68 +275,70 @@ static unsigned char db9_saturn_read_packet(struct parport *port, unsigned char
/*
* db9_saturn_report() analyzes packet and reports.
*/
static
int
db9_saturn_report
(
unsigned
char
id
,
unsigned
char
data
[
60
],
struct
input_dev
*
dev
,
int
n
,
int
max_pads
)
static
int
db9_saturn_report
(
unsigned
char
id
,
unsigned
char
data
[
60
],
struct
input_dev
*
dev
s
[]
,
int
n
,
int
max_pads
)
{
struct
input_dev
*
dev
;
int
tmp
,
i
,
j
;
tmp
=
(
id
==
0x41
)
?
60
:
10
;
for
(
j
=
0
;
(
j
<
tmp
)
&&
(
n
<
max_pads
);
j
+=
10
,
n
++
)
{
for
(
j
=
0
;
j
<
tmp
&&
n
<
max_pads
;
j
+=
10
,
n
++
)
{
dev
=
devs
[
n
];
switch
(
data
[
j
])
{
case
0x16
:
/* multi controller (analog 4 axis) */
input_report_abs
(
dev
+
n
,
db9_abs
[
5
],
data
[
j
+
6
]);
input_report_abs
(
dev
,
db9_abs
[
5
],
data
[
j
+
6
]);
case
0x15
:
/* mission stick (analog 3 axis) */
input_report_abs
(
dev
+
n
,
db9_abs
[
3
],
data
[
j
+
4
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
4
],
data
[
j
+
5
]);
input_report_abs
(
dev
,
db9_abs
[
3
],
data
[
j
+
4
]);
input_report_abs
(
dev
,
db9_abs
[
4
],
data
[
j
+
5
]);
case
0x13
:
/* racing controller (analog 1 axis) */
input_report_abs
(
dev
+
n
,
db9_abs
[
2
],
data
[
j
+
3
]);
input_report_abs
(
dev
,
db9_abs
[
2
],
data
[
j
+
3
]);
case
0x34
:
/* saturn keyboard (udlr ZXC ASD QE Esc) */
case
0x02
:
/* digital pad (digital 2 axis + buttons) */
input_report_abs
(
dev
+
n
,
db9_abs
[
0
],
!
(
data
[
j
+
1
]
&
128
)
-
!
(
data
[
j
+
1
]
&
64
));
input_report_abs
(
dev
+
n
,
db9_abs
[
1
],
!
(
data
[
j
+
1
]
&
32
)
-
!
(
data
[
j
+
1
]
&
16
));
input_report_abs
(
dev
,
db9_abs
[
0
],
!
(
data
[
j
+
1
]
&
128
)
-
!
(
data
[
j
+
1
]
&
64
));
input_report_abs
(
dev
,
db9_abs
[
1
],
!
(
data
[
j
+
1
]
&
32
)
-
!
(
data
[
j
+
1
]
&
16
));
for
(
i
=
0
;
i
<
9
;
i
++
)
input_report_key
(
dev
+
n
,
db9_cd32_btn
[
i
],
~
data
[
j
+
db9_saturn_byte
[
i
]]
&
db9_saturn_mask
[
i
]);
input_report_key
(
dev
,
db9_cd32_btn
[
i
],
~
data
[
j
+
db9_saturn_byte
[
i
]]
&
db9_saturn_mask
[
i
]);
break
;
case
0x19
:
/* mission stick x2 (analog 6 axis + buttons) */
input_report_abs
(
dev
+
n
,
db9_abs
[
0
],
!
(
data
[
j
+
1
]
&
128
)
-
!
(
data
[
j
+
1
]
&
64
));
input_report_abs
(
dev
+
n
,
db9_abs
[
1
],
!
(
data
[
j
+
1
]
&
32
)
-
!
(
data
[
j
+
1
]
&
16
));
input_report_abs
(
dev
,
db9_abs
[
0
],
!
(
data
[
j
+
1
]
&
128
)
-
!
(
data
[
j
+
1
]
&
64
));
input_report_abs
(
dev
,
db9_abs
[
1
],
!
(
data
[
j
+
1
]
&
32
)
-
!
(
data
[
j
+
1
]
&
16
));
for
(
i
=
0
;
i
<
9
;
i
++
)
input_report_key
(
dev
+
n
,
db9_cd32_btn
[
i
],
~
data
[
j
+
db9_saturn_byte
[
i
]]
&
db9_saturn_mask
[
i
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
2
],
data
[
j
+
3
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
3
],
data
[
j
+
4
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
4
],
data
[
j
+
5
]);
input_report_key
(
dev
,
db9_cd32_btn
[
i
],
~
data
[
j
+
db9_saturn_byte
[
i
]]
&
db9_saturn_mask
[
i
]);
input_report_abs
(
dev
,
db9_abs
[
2
],
data
[
j
+
3
]);
input_report_abs
(
dev
,
db9_abs
[
3
],
data
[
j
+
4
]);
input_report_abs
(
dev
,
db9_abs
[
4
],
data
[
j
+
5
]);
/*
input_report_abs(dev
+ n
, db9_abs[8], (data[j + 6] & 128 ? 0 : 1) - (data[j + 6] & 64 ? 0 : 1));
input_report_abs(dev
+ n
, db9_abs[9], (data[j + 6] & 32 ? 0 : 1) - (data[j + 6] & 16 ? 0 : 1));
input_report_abs(dev, db9_abs[8], (data[j + 6] & 128 ? 0 : 1) - (data[j + 6] & 64 ? 0 : 1));
input_report_abs(dev, db9_abs[9], (data[j + 6] & 32 ? 0 : 1) - (data[j + 6] & 16 ? 0 : 1));
*/
input_report_abs
(
dev
+
n
,
db9_abs
[
6
],
data
[
j
+
7
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
7
],
data
[
j
+
8
]);
input_report_abs
(
dev
+
n
,
db9_abs
[
5
],
data
[
j
+
9
]);
input_report_abs
(
dev
,
db9_abs
[
6
],
data
[
j
+
7
]);
input_report_abs
(
dev
,
db9_abs
[
7
],
data
[
j
+
8
]);
input_report_abs
(
dev
,
db9_abs
[
5
],
data
[
j
+
9
]);
break
;
case
0xd3
:
/* sankyo ff (analog 1 axis + stop btn) */
input_report_key
(
dev
+
n
,
BTN_A
,
data
[
j
+
3
]
&
0x80
);
input_report_abs
(
dev
+
n
,
db9_abs
[
2
],
data
[
j
+
3
]
&
0x7f
);
input_report_key
(
dev
,
BTN_A
,
data
[
j
+
3
]
&
0x80
);
input_report_abs
(
dev
,
db9_abs
[
2
],
data
[
j
+
3
]
&
0x7f
);
break
;
case
0xe3
:
/* shuttle mouse (analog 2 axis + buttons. signed value) */
input_report_key
(
dev
+
n
,
BTN_START
,
data
[
j
+
1
]
&
0x08
);
input_report_key
(
dev
+
n
,
BTN_A
,
data
[
j
+
1
]
&
0x04
);
input_report_key
(
dev
+
n
,
BTN_C
,
data
[
j
+
1
]
&
0x02
);
input_report_key
(
dev
+
n
,
BTN_B
,
data
[
j
+
1
]
&
0x01
);
input_report_abs
(
dev
+
n
,
db9_abs
[
2
],
data
[
j
+
2
]
^
0x80
);
input_report_abs
(
dev
+
n
,
db9_abs
[
3
],
(
0xff
-
(
data
[
j
+
3
]
^
0x80
))
+
1
);
/* */
input_report_key
(
dev
,
BTN_START
,
data
[
j
+
1
]
&
0x08
);
input_report_key
(
dev
,
BTN_A
,
data
[
j
+
1
]
&
0x04
);
input_report_key
(
dev
,
BTN_C
,
data
[
j
+
1
]
&
0x02
);
input_report_key
(
dev
,
BTN_B
,
data
[
j
+
1
]
&
0x01
);
input_report_abs
(
dev
,
db9_abs
[
2
],
data
[
j
+
2
]
^
0x80
);
input_report_abs
(
dev
,
db9_abs
[
3
],
(
0xff
-
(
data
[
j
+
3
]
^
0x80
))
+
1
);
/* */
break
;
case
0xff
:
default:
/* no pad */
input_report_abs
(
dev
+
n
,
db9_abs
[
0
],
0
);
input_report_abs
(
dev
+
n
,
db9_abs
[
1
],
0
);
input_report_abs
(
dev
,
db9_abs
[
0
],
0
);
input_report_abs
(
dev
,
db9_abs
[
1
],
0
);
for
(
i
=
0
;
i
<
9
;
i
++
)
input_report_key
(
dev
+
n
,
db9_cd32_btn
[
i
],
0
);
input_report_key
(
dev
,
db9_cd32_btn
[
i
],
0
);
break
;
}
}
return
n
;
}
static
int
db9_saturn
(
int
mode
,
struct
parport
*
port
,
struct
input_dev
*
dev
)
static
int
db9_saturn
(
int
mode
,
struct
parport
*
port
,
struct
input_dev
*
dev
s
[]
)
{
unsigned
char
id
,
data
[
60
];
int
type
,
n
,
max_pads
;
...
...
@@ -361,7 +363,7 @@ static int db9_saturn(int mode, struct parport *port, struct input_dev *dev)
max_pads
=
min
(
db9_modes
[
mode
].
n_pads
,
DB9_MAX_DEVICES
);
for
(
tmp
=
0
,
i
=
0
;
i
<
n
;
i
++
)
{
id
=
db9_saturn_read_packet
(
port
,
data
,
type
+
i
,
1
);
tmp
=
db9_saturn_report
(
id
,
data
,
dev
,
tmp
,
max_pads
);
tmp
=
db9_saturn_report
(
id
,
data
,
dev
s
,
tmp
,
max_pads
);
}
return
0
;
}
...
...
@@ -489,7 +491,7 @@ static void db9_timer(unsigned long private)
case
DB9_SATURN_DPP
:
case
DB9_SATURN_DPP_2
:
db9_saturn
(
db9
->
mode
,
port
,
dev
);
db9_saturn
(
db9
->
mode
,
port
,
d
b9
->
d
ev
);
break
;
case
DB9_CD32_PAD
:
...
...
@@ -614,7 +616,7 @@ static struct db9 __init *db9_probe(int parport, int mode)
if
(
!
input_dev
)
{
printk
(
KERN_ERR
"db9.c: Not enough memory for input device
\n
"
);
err
=
-
ENOMEM
;
goto
err_
free
_devs
;
goto
err_
unreg
_devs
;
}
sprintf
(
db9
->
phys
[
i
],
"%s/input%d"
,
db9
->
pd
->
port
->
name
,
i
);
...
...
@@ -640,13 +642,17 @@ static struct db9 __init *db9_probe(int parport, int mode)
input_set_abs_params
(
input_dev
,
db9_abs
[
j
],
1
,
255
,
0
,
0
);
}
input_register_device
(
input_dev
);
err
=
input_register_device
(
input_dev
);
if
(
err
)
goto
err_free_dev
;
}
parport_put_port
(
pp
);
return
db9
;
err_free_devs:
err_free_dev:
input_free_device
(
db9
->
dev
[
i
]);
err_unreg_devs:
while
(
--
i
>=
0
)
input_unregister_device
(
db9
->
dev
[
i
]);
kfree
(
db9
);
...
...
@@ -658,7 +664,7 @@ static struct db9 __init *db9_probe(int parport, int mode)
return
ERR_PTR
(
err
);
}
static
void
__exit
db9_remove
(
struct
db9
*
db9
)
static
void
db9_remove
(
struct
db9
*
db9
)
{
int
i
;
...
...
@@ -696,7 +702,8 @@ static int __init db9_init(void)
if
(
err
)
{
while
(
--
i
>=
0
)
db9_remove
(
db9_base
[
i
]);
if
(
db9_base
[
i
])
db9_remove
(
db9_base
[
i
]);
return
err
;
}
...
...
drivers/input/joystick/gamecon.c
View file @
d20e6336
This diff is collapsed.
Click to expand it.
drivers/input/joystick/grip.c
View file @
d20e6336
...
...
@@ -192,6 +192,9 @@ static void grip_poll(struct gameport *gameport)
for
(
i
=
0
;
i
<
2
;
i
++
)
{
dev
=
grip
->
dev
[
i
];
if
(
!
dev
)
continue
;
grip
->
reads
++
;
switch
(
grip
->
mode
[
i
])
{
...
...
@@ -381,12 +384,15 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
if
(
t
>
0
)
set_bit
(
t
,
input_dev
->
keybit
);
input_register_device
(
grip
->
dev
[
i
]);
err
=
input_register_device
(
grip
->
dev
[
i
]);
if
(
err
)
goto
fail4
;
}
return
0
;
fail3:
for
(
i
=
0
;
i
<
2
;
i
++
)
fail4:
input_free_device
(
grip
->
dev
[
i
]);
fail3:
while
(
--
i
>=
0
)
if
(
grip
->
dev
[
i
])
input_unregister_device
(
grip
->
dev
[
i
]);
fail2:
gameport_close
(
gameport
);
...
...
@@ -411,6 +417,7 @@ static void grip_disconnect(struct gameport *gameport)
static
struct
gameport_driver
grip_drv
=
{
.
driver
=
{
.
name
=
"grip"
,
.
owner
=
THIS_MODULE
,
},
.
description
=
DRIVER_DESC
,
.
connect
=
grip_connect
,
...
...
drivers/input/joystick/iforce/iforce-main.c
View file @
d20e6336
...
...
@@ -345,7 +345,7 @@ int iforce_init_device(struct iforce *iforce)
int
i
;
input_dev
=
input_allocate_device
();
if
(
input_dev
)
if
(
!
input_dev
)
return
-
ENOMEM
;
init_waitqueue_head
(
&
iforce
->
wait
);
...
...
drivers/input/joystick/iforce/iforce-packets.c
View file @
d20e6336
...
...
@@ -167,9 +167,9 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data,
iforce
->
expect_packet
=
0
;
iforce
->
ecmd
=
cmd
;
memcpy
(
iforce
->
edata
,
data
,
IFORCE_MAX_LENGTH
);
wake_up
(
&
iforce
->
wait
);
}
#endif
wake_up
(
&
iforce
->
wait
);
if
(
!
iforce
->
type
)
{
being_used
--
;
...
...
@@ -264,7 +264,7 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
wait_event_interruptible_timeout
(
iforce
->
wait
,
iforce
->
ctrl
->
status
!=
-
EINPROGRESS
,
HZ
);
if
(
iforce
->
ctrl
->
status
!=
-
EINPROGRESS
)
{
if
(
iforce
->
ctrl
->
status
)
{
usb_unlink_urb
(
iforce
->
ctrl
);
return
-
1
;
}
...
...
drivers/input/joystick/iforce/iforce-usb.c
View file @
d20e6336
...
...
@@ -95,7 +95,6 @@ static void iforce_usb_irq(struct urb *urb, struct pt_regs *regs)
goto
exit
;
}
wake_up
(
&
iforce
->
wait
);
iforce_process_packet
(
iforce
,
(
iforce
->
data
[
0
]
<<
8
)
|
(
urb
->
actual_length
-
1
),
iforce
->
data
+
1
,
regs
);
...
...
drivers/input/joystick/sidewinder.c
View file @
d20e6336
...
...
@@ -736,7 +736,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
sprintf
(
sw
->
name
,
"Microsoft SideWinder %s"
,
sw_name
[
sw
->
type
]);
sprintf
(
sw
->
phys
[
i
],
"%s/input%d"
,
gameport
->
phys
,
i
);
input_dev
=
input_allocate_device
();
sw
->
dev
[
i
]
=
input_dev
=
input_allocate_device
();
if
(
!
input_dev
)
{
err
=
-
ENOMEM
;
goto
fail3
;
...
...
@@ -771,12 +771,15 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
dbg
(
"%s%s [%d-bit id %d data %d]
\n
"
,
sw
->
name
,
comment
,
m
,
l
,
k
);
input_register_device
(
sw
->
dev
[
i
]);
err
=
input_register_device
(
sw
->
dev
[
i
]);
if
(
err
)
goto
fail4
;
}
return
0
;
fail3:
while
(
--
i
>=
0
)
fail4:
input_free_device
(
sw
->
dev
[
i
]);
fail3:
while
(
--
i
>=
0
)
input_unregister_device
(
sw
->
dev
[
i
]);
fail2:
gameport_close
(
gameport
);
fail1:
gameport_set_drvdata
(
gameport
,
NULL
);
...
...
@@ -801,6 +804,7 @@ static void sw_disconnect(struct gameport *gameport)
static
struct
gameport_driver
sw_drv
=
{
.
driver
=
{
.
name
=
"sidewinder"
,
.
owner
=
THIS_MODULE
,
},
.
description
=
DRIVER_DESC
,
.
connect
=
sw_connect
,
...
...
drivers/input/joystick/tmdc.c
View file @
d20e6336
...
...
@@ -284,13 +284,13 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
struct
tmdc_port
*
port
;
struct
input_dev
*
input_dev
;
int
i
,
j
,
b
=
0
;
int
err
;
tmdc
->
port
[
idx
]
=
port
=
kzalloc
(
sizeof
(
struct
tmdc_port
),
GFP_KERNEL
);
input_dev
=
input_allocate_device
();
if
(
!
port
||
!
input_dev
)
{
kfree
(
port
);
input_free_device
(
input_dev
);
return
-
ENOMEM
;
err
=
-
ENOMEM
;
goto
fail
;
}
port
->
mode
=
data
[
TMDC_BYTE_ID
];
...
...
@@ -347,9 +347,15 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
b
+=
port
->
btnc
[
i
];
}
input_register_device
(
port
->
dev
);
err
=
input_register_device
(
port
->
dev
);
if
(
err
)
goto
fail
;
return
0
;
fail:
input_free_device
(
input_dev
);
kfree
(
port
);
return
err
;
}
/*
...
...
@@ -424,6 +430,7 @@ static void tmdc_disconnect(struct gameport *gameport)
static
struct
gameport_driver
tmdc_drv
=
{
.
driver
=
{
.
name
=
"tmdc"
,
.
owner
=
THIS_MODULE
,
},
.
description
=
DRIVER_DESC
,
.
connect
=
tmdc_connect
,
...
...
drivers/input/joystick/turbografx.c
View file @
d20e6336
...
...
@@ -204,14 +204,14 @@ static struct tgfx __init *tgfx_probe(int parport, int *n_buttons, int n_devs)
if
(
n_buttons
[
i
]
>
6
)
{
printk
(
KERN_ERR
"turbografx.c: Invalid number of buttons %d
\n
"
,
n_buttons
[
i
]);
err
=
-
EINVAL
;
goto
err_
free
_devs
;
goto
err_
unreg
_devs
;
}
tgfx
->
dev
[
i
]
=
input_dev
=
input_allocate_device
();
if
(
!
input_dev
)
{
printk
(
KERN_ERR
"turbografx.c: Not enough memory for input device
\n
"
);
err
=
-
ENOMEM
;
goto
err_
free
_devs
;
goto
err_
unreg
_devs
;
}
tgfx
->
sticks
|=
(
1
<<
i
);
...
...
@@ -238,7 +238,9 @@ static struct tgfx __init *tgfx_probe(int parport, int *n_buttons, int n_devs)
for
(
j
=
0
;
j
<
n_buttons
[
i
];
j
++
)
set_bit
(
tgfx_buttons
[
j
],
input_dev
->
keybit
);
input_register_device
(
tgfx
->
dev
[
i
]);
err
=
input_register_device
(
tgfx
->
dev
[
i
]);
if
(
err
)
goto
err_free_dev
;
}
if
(
!
tgfx
->
sticks
)
{
...
...
@@ -249,9 +251,12 @@ static struct tgfx __init *tgfx_probe(int parport, int *n_buttons, int n_devs)
return
tgfx
;
err_free_devs:
err_free_dev:
input_free_device
(
tgfx
->
dev
[
i
]);
err_unreg_devs:
while
(
--
i
>=
0
)
input_unregister_device
(
tgfx
->
dev
[
i
]);
if
(
tgfx
->
dev
[
i
])
input_unregister_device
(
tgfx
->
dev
[
i
]);
err_free_tgfx:
kfree
(
tgfx
);
err_unreg_pardev:
...
...
@@ -262,7 +267,7 @@ static struct tgfx __init *tgfx_probe(int parport, int *n_buttons, int n_devs)
return
ERR_PTR
(
err
);
}
static
void
__exit
tgfx_remove
(
struct
tgfx
*
tgfx
)
static
void
tgfx_remove
(
struct
tgfx
*
tgfx
)
{
int
i
;
...
...
@@ -300,7 +305,8 @@ static int __init tgfx_init(void)
if
(
err
)
{
while
(
--
i
>=
0
)
tgfx_remove
(
tgfx_base
[
i
]);
if
(
tgfx_base
[
i
])
tgfx_remove
(
tgfx_base
[
i
]);
return
err
;
}
...
...
drivers/input/joystick/twidjoy.c
View file @
d20e6336
...
...
@@ -265,13 +265,13 @@ static struct serio_driver twidjoy_drv = {
* The functions for inserting/removing us as a module.
*/
int
__init
twidjoy_init
(
void
)
static
int
__init
twidjoy_init
(
void
)
{
serio_register_driver
(
&
twidjoy_drv
);
return
0
;
}
void
__exit
twidjoy_exit
(
void
)
static
void
__exit
twidjoy_exit
(
void
)
{
serio_unregister_driver
(
&
twidjoy_drv
);
}
...
...
drivers/input/misc/Kconfig
View file @
d20e6336
...
...
@@ -50,6 +50,18 @@ config INPUT_WISTRON_BTNS
To compile this driver as a module, choose M here: the module will
be called wistron_btns.
config INPUT_IXP4XX_BEEPER
tristate "IXP4XX Beeper support"
depends on ARCH_IXP4XX
help
If you say yes here, you can connect a beeper to the
ixp4xx gpio pins. This is used by the LinkSys NSLU2.
If unsure, say Y.
To compile this driver as a module, choose M here: the
module will be called ixp4xx-beeper.
config INPUT_UINPUT
tristate "User level driver support"
help
...
...
drivers/input/misc/Makefile
View file @
d20e6336
...
...
@@ -11,3 +11,4 @@ obj-$(CONFIG_INPUT_98SPKR) += 98spkr.o
obj-$(CONFIG_INPUT_UINPUT)
+=
uinput.o
obj-$(CONFIG_INPUT_WISTRON_BTNS)
+=
wistron_btns.o
obj-$(CONFIG_HP_SDC_RTC)
+=
hp_sdc_rtc.o
obj-$(CONFIG_INPUT_IXP4XX_BEEPER)
+=
ixp4xx-beeper.o
drivers/input/misc/ixp4xx-beeper.c
0 → 100644
View file @
d20e6336
/*
* Generic IXP4xx beeper driver
*
* Copyright (C) 2005 Tower Technologies
*
* based on nslu2-io.c
* Copyright (C) 2004 Karen Spearel
*
* Author: Alessandro Zummo <a.zummo@towertech.it>
* Maintainers: http://www.nslu2-linux.org/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#include <linux/module.h>
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <asm/hardware.h>
MODULE_AUTHOR
(
"Alessandro Zummo <a.zummo@towertech.it>"
);
MODULE_DESCRIPTION
(
"ixp4xx beeper driver"
);
MODULE_LICENSE
(
"GPL"
);
static
DEFINE_SPINLOCK
(
beep_lock
);
static
void
ixp4xx_spkr_control
(
unsigned
int
pin
,
unsigned
int
count
)
{
unsigned
long
flags
;
spin_lock_irqsave
(
&
beep_lock
,
flags
);
if
(
count
)
{
gpio_line_config
(
pin
,
IXP4XX_GPIO_OUT
);
gpio_line_set
(
pin
,
IXP4XX_GPIO_LOW
);
*
IXP4XX_OSRT2
=
(
count
&
~
IXP4XX_OST_RELOAD_MASK
)
|
IXP4XX_OST_ENABLE
;
}
else
{
gpio_line_config
(
pin
,
IXP4XX_GPIO_IN
);
gpio_line_set
(
pin
,
IXP4XX_GPIO_HIGH
);
*
IXP4XX_OSRT2
=
0
;
}
spin_unlock_irqrestore
(
&
beep_lock
,
flags
);
}
static
int
ixp4xx_spkr_event
(
struct
input_dev
*
dev
,
unsigned
int
type
,
unsigned
int
code
,
int
value
)
{
unsigned
int
pin
=
(
unsigned
int
)
dev
->
private
;
unsigned
int
count
=
0
;
if
(
type
!=
EV_SND
)
return
-
1
;
switch
(
code
)
{
case
SND_BELL
:
if
(
value
)
value
=
1000
;
case
SND_TONE
:
break
;
default:
return
-
1
;
}
if
(
value
>
20
&&
value
<
32767
)
#ifndef FREQ
count
=
(
ixp4xx_get_board_tick_rate
()
/
(
value
*
4
))
-
1
;
#else
count
=
(
FREQ
/
(
value
*
4
))
-
1
;
#endif
ixp4xx_spkr_control
(
pin
,
count
);
return
0
;
}
static
irqreturn_t
ixp4xx_spkr_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
/* clear interrupt */
*
IXP4XX_OSST
=
IXP4XX_OSST_TIMER_2_PEND
;
/* flip the beeper output */
*
IXP4XX_GPIO_GPOUTR
^=
(
1
<<
(
unsigned
int
)
dev_id
);
return
IRQ_HANDLED
;
}
static
int
__devinit
ixp4xx_spkr_probe
(
struct
platform_device
*
dev
)
{
struct
input_dev
*
input_dev
;
int
err
;
input_dev
=
input_allocate_device
();
if
(
!
input_dev
)
return
-
ENOMEM
;
input_dev
->
private
=
(
void
*
)
dev
->
id
;
input_dev
->
name
=
"ixp4xx beeper"
,
input_dev
->
phys
=
"ixp4xx/gpio"
;
input_dev
->
id
.
bustype
=
BUS_HOST
;
input_dev
->
id
.
vendor
=
0x001f
;
input_dev
->
id
.
product
=
0x0001
;
input_dev
->
id
.
version
=
0x0100
;
input_dev
->
cdev
.
dev
=
&
dev
->
dev
;
input_dev
->
evbit
[
0
]
=
BIT
(
EV_SND
);
input_dev
->
sndbit
[
0
]
=
BIT
(
SND_BELL
)
|
BIT
(
SND_TONE
);
input_dev
->
event
=
ixp4xx_spkr_event
;
err
=
request_irq
(
IRQ_IXP4XX_TIMER2
,
&
ixp4xx_spkr_interrupt
,
SA_INTERRUPT
|
SA_TIMER
,
"ixp4xx-beeper"
,
(
void
*
)
dev
->
id
);
if
(
err
)
goto
err_free_device
;
err
=
input_register_device
(
input_dev
);
if
(
err
)
goto
err_free_irq
;
platform_set_drvdata
(
dev
,
input_dev
);
return
0
;
err_free_irq:
free_irq
(
IRQ_IXP4XX_TIMER2
,
dev
);
err_free_device:
input_free_device
(
input_dev
);
return
err
;
}
static
int
__devexit
ixp4xx_spkr_remove
(
struct
platform_device
*
dev
)
{
struct
input_dev
*
input_dev
=
platform_get_drvdata
(
dev
);
unsigned
int
pin
=
(
unsigned
int
)
input_dev
->
private
;
input_unregister_device
(
input_dev
);
platform_set_drvdata
(
dev
,
NULL
);
/* turn the speaker off */
disable_irq
(
IRQ_IXP4XX_TIMER2
);
ixp4xx_spkr_control
(
pin
,
0
);
free_irq
(
IRQ_IXP4XX_TIMER2
,
dev
);
return
0
;
}
static
void
ixp4xx_spkr_shutdown
(
struct
platform_device
*
dev
)
{
struct
input_dev
*
input_dev
=
platform_get_drvdata
(
dev
);
unsigned
int
pin
=
(
unsigned
int
)
input_dev
->
private
;
/* turn off the speaker */
disable_irq
(
IRQ_IXP4XX_TIMER2
);
ixp4xx_spkr_control
(
pin
,
0
);
}
static
struct
platform_driver
ixp4xx_spkr_platform_driver
=
{
.
driver
=
{
.
name
=
"ixp4xx-beeper"
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
ixp4xx_spkr_probe
,
.
remove
=
__devexit_p
(
ixp4xx_spkr_remove
),
.
shutdown
=
ixp4xx_spkr_shutdown
,
};
static
int
__init
ixp4xx_spkr_init
(
void
)
{
return
platform_driver_register
(
&
ixp4xx_spkr_platform_driver
);
}
static
void
__exit
ixp4xx_spkr_exit
(
void
)
{
platform_driver_unregister
(
&
ixp4xx_spkr_platform_driver
);
}
module_init
(
ixp4xx_spkr_init
);
module_exit
(
ixp4xx_spkr_exit
);
drivers/input/mouse/psmouse-base.c
View file @
d20e6336
...
...
@@ -403,6 +403,7 @@ static int genius_detect(struct psmouse *psmouse, int set_properties)
set_bit
(
REL_WHEEL
,
psmouse
->
dev
->
relbit
);
psmouse
->
vendor
=
"Genius"
;
psmouse
->
name
=
"Mouse"
;
psmouse
->
pktsize
=
4
;
}
...
...
drivers/input/mousedev.c
View file @
d20e6336
...
...
@@ -356,7 +356,7 @@ static void mousedev_free(struct mousedev *mousedev)
kfree
(
mousedev
);
}
static
int
mixdev_release
(
void
)
static
void
mixdev_release
(
void
)
{
struct
input_handle
*
handle
;
...
...
@@ -370,8 +370,6 @@ static int mixdev_release(void)
mousedev_free
(
mousedev
);
}
}
return
0
;
}
static
int
mousedev_release
(
struct
inode
*
inode
,
struct
file
*
file
)
...
...
@@ -384,9 +382,8 @@ static int mousedev_release(struct inode * inode, struct file * file)
if
(
!--
list
->
mousedev
->
open
)
{
if
(
list
->
mousedev
->
minor
==
MOUSEDEV_MIX
)
return
mixdev_release
();
if
(
!
mousedev_mix
.
open
)
{
mixdev_release
();
else
if
(
!
mousedev_mix
.
open
)
{
if
(
list
->
mousedev
->
exist
)
input_close_device
(
&
list
->
mousedev
->
handle
);
else
...
...
drivers/input/touchscreen/mk712.c
View file @
d20e6336
...
...
@@ -154,7 +154,7 @@ static void mk712_close(struct input_dev *dev)
spin_unlock_irqrestore
(
&
mk712_lock
,
flags
);
}
int
__init
mk712_init
(
void
)
static
int
__init
mk712_init
(
void
)
{
int
err
;
...
...
drivers/usb/input/hiddev.c
View file @
d20e6336
...
...
@@ -631,7 +631,7 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
else
if
((
cmd
==
HIDIOCGUSAGES
||
cmd
==
HIDIOCSUSAGES
)
&&
(
uref_multi
->
num_values
>
HID_MAX_MULTI_USAGES
||
uref
->
usage_index
+
uref_multi
->
num_values
>
=
field
->
report_count
))
uref
->
usage_index
+
uref_multi
->
num_values
>
field
->
report_count
))
goto
inval
;
}
...
...
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