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
e7de3690
Commit
e7de3690
authored
Jan 14, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
parents
87530db5
eab9edd2
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
551 additions
and
88 deletions
+551
-88
drivers/input/mouse/alps.c
drivers/input/mouse/alps.c
+38
-0
drivers/input/mouse/logips2pp.c
drivers/input/mouse/logips2pp.c
+1
-1
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/psmouse-base.c
+252
-64
drivers/input/mouse/psmouse.h
drivers/input/mouse/psmouse.h
+8
-1
drivers/input/mouse/synaptics.c
drivers/input/mouse/synaptics.c
+2
-0
drivers/input/serio/i8042-x86ia64io.h
drivers/input/serio/i8042-x86ia64io.h
+7
-0
drivers/usb/input/Kconfig
drivers/usb/input/Kconfig
+10
-0
drivers/usb/input/hid-core.c
drivers/usb/input/hid-core.c
+30
-0
drivers/usb/input/hid-input.c
drivers/usb/input/hid-input.c
+176
-3
drivers/usb/input/hid.h
drivers/usb/input/hid.h
+19
-11
drivers/usb/input/pid.c
drivers/usb/input/pid.c
+1
-1
drivers/usb/input/wacom.c
drivers/usb/input/wacom.c
+7
-7
No files found.
drivers/input/mouse/alps.c
View file @
e7de3690
...
@@ -348,6 +348,40 @@ static int alps_tap_mode(struct psmouse *psmouse, int enable)
...
@@ -348,6 +348,40 @@ static int alps_tap_mode(struct psmouse *psmouse, int enable)
return
0
;
return
0
;
}
}
/*
* alps_poll() - poll the touchpad for current motion packet.
* Used in resync.
*/
static
int
alps_poll
(
struct
psmouse
*
psmouse
)
{
struct
alps_data
*
priv
=
psmouse
->
private
;
unsigned
char
buf
[
6
];
int
poll_failed
;
if
(
priv
->
i
->
flags
&
ALPS_PASS
)
alps_passthrough_mode
(
psmouse
,
1
);
poll_failed
=
ps2_command
(
&
psmouse
->
ps2dev
,
buf
,
PSMOUSE_CMD_POLL
|
(
psmouse
->
pktsize
<<
8
))
<
0
;
if
(
priv
->
i
->
flags
&
ALPS_PASS
)
alps_passthrough_mode
(
psmouse
,
0
);
if
(
poll_failed
||
(
buf
[
0
]
&
priv
->
i
->
mask0
)
!=
priv
->
i
->
byte0
)
return
-
1
;
if
((
psmouse
->
badbyte
&
0xc8
)
==
0x08
)
{
/*
* Poll the track stick ...
*/
if
(
ps2_command
(
&
psmouse
->
ps2dev
,
buf
,
PSMOUSE_CMD_POLL
|
(
3
<<
8
)))
return
-
1
;
}
memcpy
(
psmouse
->
packet
,
buf
,
sizeof
(
buf
));
return
0
;
}
static
int
alps_reconnect
(
struct
psmouse
*
psmouse
)
static
int
alps_reconnect
(
struct
psmouse
*
psmouse
)
{
{
struct
alps_data
*
priv
=
psmouse
->
private
;
struct
alps_data
*
priv
=
psmouse
->
private
;
...
@@ -451,10 +485,14 @@ int alps_init(struct psmouse *psmouse)
...
@@ -451,10 +485,14 @@ int alps_init(struct psmouse *psmouse)
input_register_device
(
priv
->
dev2
);
input_register_device
(
priv
->
dev2
);
psmouse
->
protocol_handler
=
alps_process_byte
;
psmouse
->
protocol_handler
=
alps_process_byte
;
psmouse
->
poll
=
alps_poll
;
psmouse
->
disconnect
=
alps_disconnect
;
psmouse
->
disconnect
=
alps_disconnect
;
psmouse
->
reconnect
=
alps_reconnect
;
psmouse
->
reconnect
=
alps_reconnect
;
psmouse
->
pktsize
=
6
;
psmouse
->
pktsize
=
6
;
/* We are having trouble resyncing ALPS touchpads so disable it for now */
psmouse
->
resync_time
=
0
;
return
0
;
return
0
;
init_fail:
init_fail:
...
...
drivers/input/mouse/logips2pp.c
View file @
e7de3690
...
@@ -117,7 +117,7 @@ static int ps2pp_cmd(struct psmouse *psmouse, unsigned char *param, unsigned cha
...
@@ -117,7 +117,7 @@ static int ps2pp_cmd(struct psmouse *psmouse, unsigned char *param, unsigned cha
if
(
psmouse_sliced_command
(
psmouse
,
command
))
if
(
psmouse_sliced_command
(
psmouse
,
command
))
return
-
1
;
return
-
1
;
if
(
ps2_command
(
&
psmouse
->
ps2dev
,
param
,
PSMOUSE_CMD_POLL
))
if
(
ps2_command
(
&
psmouse
->
ps2dev
,
param
,
PSMOUSE_CMD_POLL
|
0x0300
))
return
-
1
;
return
-
1
;
return
0
;
return
0
;
...
...
drivers/input/mouse/psmouse-base.c
View file @
e7de3690
This diff is collapsed.
Click to expand it.
drivers/input/mouse/psmouse.h
View file @
e7de3690
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
#define PSMOUSE_CMD_GETINFO 0x03e9
#define PSMOUSE_CMD_GETINFO 0x03e9
#define PSMOUSE_CMD_SETSTREAM 0x00ea
#define PSMOUSE_CMD_SETSTREAM 0x00ea
#define PSMOUSE_CMD_SETPOLL 0x00f0
#define PSMOUSE_CMD_SETPOLL 0x00f0
#define PSMOUSE_CMD_POLL 0x0
3eb
#define PSMOUSE_CMD_POLL 0x0
0eb
/* caller sets number of bytes to receive */
#define PSMOUSE_CMD_GETID 0x02f2
#define PSMOUSE_CMD_GETID 0x02f2
#define PSMOUSE_CMD_SETRATE 0x10f3
#define PSMOUSE_CMD_SETRATE 0x10f3
#define PSMOUSE_CMD_ENABLE 0x00f4
#define PSMOUSE_CMD_ENABLE 0x00f4
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
enum
psmouse_state
{
enum
psmouse_state
{
PSMOUSE_IGNORE
,
PSMOUSE_IGNORE
,
PSMOUSE_INITIALIZING
,
PSMOUSE_INITIALIZING
,
PSMOUSE_RESYNCING
,
PSMOUSE_CMD_MODE
,
PSMOUSE_CMD_MODE
,
PSMOUSE_ACTIVATED
,
PSMOUSE_ACTIVATED
,
};
};
...
@@ -38,15 +39,19 @@ struct psmouse {
...
@@ -38,15 +39,19 @@ struct psmouse {
void
*
private
;
void
*
private
;
struct
input_dev
*
dev
;
struct
input_dev
*
dev
;
struct
ps2dev
ps2dev
;
struct
ps2dev
ps2dev
;
struct
work_struct
resync_work
;
char
*
vendor
;
char
*
vendor
;
char
*
name
;
char
*
name
;
unsigned
char
packet
[
8
];
unsigned
char
packet
[
8
];
unsigned
char
badbyte
;
unsigned
char
pktcnt
;
unsigned
char
pktcnt
;
unsigned
char
pktsize
;
unsigned
char
pktsize
;
unsigned
char
type
;
unsigned
char
type
;
unsigned
char
acks_disable_command
;
unsigned
int
model
;
unsigned
int
model
;
unsigned
long
last
;
unsigned
long
last
;
unsigned
long
out_of_sync
;
unsigned
long
out_of_sync
;
unsigned
long
num_resyncs
;
enum
psmouse_state
state
;
enum
psmouse_state
state
;
char
devname
[
64
];
char
devname
[
64
];
char
phys
[
32
];
char
phys
[
32
];
...
@@ -54,6 +59,7 @@ struct psmouse {
...
@@ -54,6 +59,7 @@ struct psmouse {
unsigned
int
rate
;
unsigned
int
rate
;
unsigned
int
resolution
;
unsigned
int
resolution
;
unsigned
int
resetafter
;
unsigned
int
resetafter
;
unsigned
int
resync_time
;
unsigned
int
smartscroll
;
/* Logitech only */
unsigned
int
smartscroll
;
/* Logitech only */
psmouse_ret_t
(
*
protocol_handler
)(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
);
psmouse_ret_t
(
*
protocol_handler
)(
struct
psmouse
*
psmouse
,
struct
pt_regs
*
regs
);
...
@@ -62,6 +68,7 @@ struct psmouse {
...
@@ -62,6 +68,7 @@ struct psmouse {
int
(
*
reconnect
)(
struct
psmouse
*
psmouse
);
int
(
*
reconnect
)(
struct
psmouse
*
psmouse
);
void
(
*
disconnect
)(
struct
psmouse
*
psmouse
);
void
(
*
disconnect
)(
struct
psmouse
*
psmouse
);
int
(
*
poll
)(
struct
psmouse
*
psmouse
);
void
(
*
pt_activate
)(
struct
psmouse
*
psmouse
);
void
(
*
pt_activate
)(
struct
psmouse
*
psmouse
);
void
(
*
pt_deactivate
)(
struct
psmouse
*
psmouse
);
void
(
*
pt_deactivate
)(
struct
psmouse
*
psmouse
);
...
...
drivers/input/mouse/synaptics.c
View file @
e7de3690
...
@@ -652,6 +652,8 @@ int synaptics_init(struct psmouse *psmouse)
...
@@ -652,6 +652,8 @@ int synaptics_init(struct psmouse *psmouse)
psmouse
->
disconnect
=
synaptics_disconnect
;
psmouse
->
disconnect
=
synaptics_disconnect
;
psmouse
->
reconnect
=
synaptics_reconnect
;
psmouse
->
reconnect
=
synaptics_reconnect
;
psmouse
->
pktsize
=
6
;
psmouse
->
pktsize
=
6
;
/* Synaptics can usually stay in sync without extra help */
psmouse
->
resync_time
=
0
;
if
(
SYN_CAP_PASS_THROUGH
(
priv
->
capabilities
))
if
(
SYN_CAP_PASS_THROUGH
(
priv
->
capabilities
))
synaptics_pt_create
(
psmouse
);
synaptics_pt_create
(
psmouse
);
...
...
drivers/input/serio/i8042-x86ia64io.h
View file @
e7de3690
...
@@ -173,6 +173,13 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
...
@@ -173,6 +173,13 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"PC-MM20 Series"
),
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"PC-MM20 Series"
),
},
},
},
},
{
.
ident
=
"Sony Vaio FS-115b"
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Sony Corporation"
),
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"VGN-FS115B"
),
},
},
{
}
{
}
};
};
...
...
drivers/usb/input/Kconfig
View file @
e7de3690
...
@@ -37,6 +37,16 @@ config USB_HIDINPUT
...
@@ -37,6 +37,16 @@ config USB_HIDINPUT
If unsure, say Y.
If unsure, say Y.
config USB_HIDINPUT_POWERBOOK
bool "Enable support for iBook/PowerBook special keys"
default n
depends on USB_HIDINPUT
help
Say Y here if you want support for the special keys (Fn, Numlock) on
Apple iBooks and PowerBooks.
If unsure, say N.
config HID_FF
config HID_FF
bool "Force feedback support (EXPERIMENTAL)"
bool "Force feedback support (EXPERIMENTAL)"
depends on USB_HIDINPUT && EXPERIMENTAL
depends on USB_HIDINPUT && EXPERIMENTAL
...
...
drivers/usb/input/hid-core.c
View file @
e7de3690
...
@@ -1450,6 +1450,9 @@ void hid_init_reports(struct hid_device *hid)
...
@@ -1450,6 +1450,9 @@ void hid_init_reports(struct hid_device *hid)
#define USB_VENDOR_ID_APPLE 0x05ac
#define USB_VENDOR_ID_APPLE 0x05ac
#define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304
#define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304
#define USB_VENDOR_ID_CHERRY 0x046a
#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
/*
/*
* Alphabetically sorted blacklist by quirk type.
* Alphabetically sorted blacklist by quirk type.
*/
*/
...
@@ -1580,6 +1583,16 @@ static const struct hid_blacklist {
...
@@ -1580,6 +1583,16 @@ static const struct hid_blacklist {
{
USB_VENDOR_ID_SAITEK
,
USB_DEVICE_ID_SAITEK_RUMBLEPAD
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_SAITEK
,
USB_DEVICE_ID_SAITEK_RUMBLEPAD
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_TOPMAX
,
USB_DEVICE_ID_TOPMAX_COBRAPAD
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_TOPMAX
,
USB_DEVICE_ID_TOPMAX_COBRAPAD
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_CHERRY
,
USB_DEVICE_ID_CHERRY_CYMOTION
,
HID_QUIRK_CYMOTION
},
{
USB_VENDOR_ID_APPLE
,
0x020E
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x020F
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x0214
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x0215
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x0216
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x030A
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
USB_VENDOR_ID_APPLE
,
0x030B
,
HID_QUIRK_POWERBOOK_HAS_FN
},
{
0
,
0
}
{
0
,
0
}
};
};
...
@@ -1626,6 +1639,20 @@ static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
...
@@ -1626,6 +1639,20 @@ static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
usb_buffer_free
(
dev
,
hid
->
bufsize
,
hid
->
ctrlbuf
,
hid
->
ctrlbuf_dma
);
usb_buffer_free
(
dev
,
hid
->
bufsize
,
hid
->
ctrlbuf
,
hid
->
ctrlbuf_dma
);
}
}
/*
* Cherry Cymotion keyboard have an invalid HID report descriptor,
* that needs fixing before we can parse it.
*/
static
void
hid_fixup_cymotion_descriptor
(
char
*
rdesc
,
int
rsize
)
{
if
(
rsize
>=
17
&&
rdesc
[
11
]
==
0x3c
&&
rdesc
[
12
]
==
0x02
)
{
info
(
"Fixing up Cherry Cymotion report descriptor"
);
rdesc
[
11
]
=
rdesc
[
16
]
=
0xff
;
rdesc
[
12
]
=
rdesc
[
17
]
=
0x03
;
}
}
static
struct
hid_device
*
usb_hid_configure
(
struct
usb_interface
*
intf
)
static
struct
hid_device
*
usb_hid_configure
(
struct
usb_interface
*
intf
)
{
{
struct
usb_host_interface
*
interface
=
intf
->
cur_altsetting
;
struct
usb_host_interface
*
interface
=
intf
->
cur_altsetting
;
...
@@ -1673,6 +1700,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
...
@@ -1673,6 +1700,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
return
NULL
;
return
NULL
;
}
}
if
((
quirks
&
HID_QUIRK_CYMOTION
))
hid_fixup_cymotion_descriptor
(
rdesc
,
rsize
);
#ifdef DEBUG_DATA
#ifdef DEBUG_DATA
printk
(
KERN_DEBUG
__FILE__
": report descriptor (size %u, read %d) = "
,
rsize
,
n
);
printk
(
KERN_DEBUG
__FILE__
": report descriptor (size %u, read %d) = "
,
rsize
,
n
);
for
(
n
=
0
;
n
<
rsize
;
n
++
)
for
(
n
=
0
;
n
<
rsize
;
n
++
)
...
...
drivers/usb/input/hid-input.c
View file @
e7de3690
...
@@ -73,6 +73,160 @@ static const struct {
...
@@ -73,6 +73,160 @@ static const struct {
#define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0)
#define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0)
#define map_ff_effect(c) do { set_bit(c, input->ffbit); } while (0)
#define map_ff_effect(c) do { set_bit(c, input->ffbit); } while (0)
#ifdef CONFIG_USB_HIDINPUT_POWERBOOK
struct
hidinput_key_translation
{
u16
from
;
u16
to
;
u8
flags
;
};
#define POWERBOOK_FLAG_FKEY 0x01
static
struct
hidinput_key_translation
powerbook_fn_keys
[]
=
{
{
KEY_BACKSPACE
,
KEY_DELETE
},
{
KEY_F1
,
KEY_BRIGHTNESSDOWN
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F2
,
KEY_BRIGHTNESSUP
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F3
,
KEY_MUTE
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F4
,
KEY_VOLUMEDOWN
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F5
,
KEY_VOLUMEUP
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F6
,
KEY_NUMLOCK
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F7
,
KEY_SWITCHVIDEOMODE
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F8
,
KEY_KBDILLUMTOGGLE
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F9
,
KEY_KBDILLUMDOWN
,
POWERBOOK_FLAG_FKEY
},
{
KEY_F10
,
KEY_KBDILLUMUP
,
POWERBOOK_FLAG_FKEY
},
{
KEY_UP
,
KEY_PAGEUP
},
{
KEY_DOWN
,
KEY_PAGEDOWN
},
{
KEY_LEFT
,
KEY_HOME
},
{
KEY_RIGHT
,
KEY_END
},
{
}
};
static
struct
hidinput_key_translation
powerbook_numlock_keys
[]
=
{
{
KEY_J
,
KEY_KP1
},
{
KEY_K
,
KEY_KP2
},
{
KEY_L
,
KEY_KP3
},
{
KEY_U
,
KEY_KP4
},
{
KEY_I
,
KEY_KP5
},
{
KEY_O
,
KEY_KP6
},
{
KEY_7
,
KEY_KP7
},
{
KEY_8
,
KEY_KP8
},
{
KEY_9
,
KEY_KP9
},
{
KEY_M
,
KEY_KP0
},
{
KEY_DOT
,
KEY_KPDOT
},
{
KEY_SLASH
,
KEY_KPPLUS
},
{
KEY_SEMICOLON
,
KEY_KPMINUS
},
{
KEY_P
,
KEY_KPASTERISK
},
{
KEY_MINUS
,
KEY_KPEQUAL
},
{
KEY_0
,
KEY_KPSLASH
},
{
KEY_F6
,
KEY_NUMLOCK
},
{
KEY_KPENTER
,
KEY_KPENTER
},
{
KEY_BACKSPACE
,
KEY_BACKSPACE
},
{
}
};
static
int
usbhid_pb_fnmode
=
1
;
module_param_named
(
pb_fnmode
,
usbhid_pb_fnmode
,
int
,
0644
);
MODULE_PARM_DESC
(
pb_fnmode
,
"Mode of fn key on PowerBooks (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst)"
);
static
struct
hidinput_key_translation
*
find_translation
(
struct
hidinput_key_translation
*
table
,
u16
from
)
{
struct
hidinput_key_translation
*
trans
;
/* Look for the translation */
for
(
trans
=
table
;
trans
->
from
;
trans
++
)
if
(
trans
->
from
==
from
)
return
trans
;
return
NULL
;
}
static
int
hidinput_pb_event
(
struct
hid_device
*
hid
,
struct
input_dev
*
input
,
struct
hid_usage
*
usage
,
__s32
value
)
{
struct
hidinput_key_translation
*
trans
;
if
(
usage
->
code
==
KEY_FN
)
{
if
(
value
)
hid
->
quirks
|=
HID_QUIRK_POWERBOOK_FN_ON
;
else
hid
->
quirks
&=
~
HID_QUIRK_POWERBOOK_FN_ON
;
input_event
(
input
,
usage
->
type
,
usage
->
code
,
value
);
return
1
;
}
if
(
usbhid_pb_fnmode
)
{
int
do_translate
;
trans
=
find_translation
(
powerbook_fn_keys
,
usage
->
code
);
if
(
trans
)
{
if
(
test_bit
(
usage
->
code
,
hid
->
pb_pressed_fn
))
do_translate
=
1
;
else
if
(
trans
->
flags
&
POWERBOOK_FLAG_FKEY
)
do_translate
=
(
usbhid_pb_fnmode
==
2
&&
(
hid
->
quirks
&
HID_QUIRK_POWERBOOK_FN_ON
))
||
(
usbhid_pb_fnmode
==
1
&&
!
(
hid
->
quirks
&
HID_QUIRK_POWERBOOK_FN_ON
));
else
do_translate
=
(
hid
->
quirks
&
HID_QUIRK_POWERBOOK_FN_ON
);
if
(
do_translate
)
{
if
(
value
)
set_bit
(
usage
->
code
,
hid
->
pb_pressed_fn
);
else
clear_bit
(
usage
->
code
,
hid
->
pb_pressed_fn
);
input_event
(
input
,
usage
->
type
,
trans
->
to
,
value
);
return
1
;
}
}
if
(
test_bit
(
usage
->
code
,
hid
->
pb_pressed_numlock
)
||
test_bit
(
LED_NUML
,
input
->
led
))
{
trans
=
find_translation
(
powerbook_numlock_keys
,
usage
->
code
);
if
(
trans
)
{
if
(
value
)
set_bit
(
usage
->
code
,
hid
->
pb_pressed_numlock
);
else
clear_bit
(
usage
->
code
,
hid
->
pb_pressed_numlock
);
input_event
(
input
,
usage
->
type
,
trans
->
to
,
value
);
}
return
1
;
}
}
return
0
;
}
static
void
hidinput_pb_setup
(
struct
input_dev
*
input
)
{
struct
hidinput_key_translation
*
trans
;
set_bit
(
KEY_NUMLOCK
,
input
->
keybit
);
/* Enable all needed keys */
for
(
trans
=
powerbook_fn_keys
;
trans
->
from
;
trans
++
)
set_bit
(
trans
->
to
,
input
->
keybit
);
for
(
trans
=
powerbook_numlock_keys
;
trans
->
from
;
trans
++
)
set_bit
(
trans
->
to
,
input
->
keybit
);
}
#else
static
inline
int
hidinput_pb_event
(
struct
hid_device
*
hid
,
struct
input_dev
*
input
,
struct
hid_usage
*
usage
,
__s32
value
)
{
return
0
;
}
static
inline
void
hidinput_pb_setup
(
struct
input_dev
*
input
)
{
}
#endif
static
void
hidinput_configure_usage
(
struct
hid_input
*
hidinput
,
struct
hid_field
*
field
,
static
void
hidinput_configure_usage
(
struct
hid_input
*
hidinput
,
struct
hid_field
*
field
,
struct
hid_usage
*
usage
)
struct
hid_usage
*
usage
)
{
{
...
@@ -135,8 +289,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
...
@@ -135,8 +289,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
HID_UP_SIMULATION
:
case
HID_UP_SIMULATION
:
switch
(
usage
->
hid
&
0xffff
)
{
switch
(
usage
->
hid
&
0xffff
)
{
case
0xba
:
map_abs
(
ABS_RUDDER
);
break
;
case
0xba
:
map_abs
(
ABS_RUDDER
);
break
;
case
0xbb
:
map_abs
(
ABS_THROTTLE
);
break
;
case
0xbb
:
map_abs
(
ABS_THROTTLE
);
break
;
case
0xc4
:
map_abs
(
ABS_GAS
);
break
;
case
0xc5
:
map_abs
(
ABS_BRAKE
);
break
;
case
0xc8
:
map_abs
(
ABS_WHEEL
);
break
;
default:
goto
ignore
;
default:
goto
ignore
;
}
}
break
;
break
;
...
@@ -289,11 +446,19 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
...
@@ -289,11 +446,19 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
0x226
:
map_key_clear
(
KEY_STOP
);
break
;
case
0x226
:
map_key_clear
(
KEY_STOP
);
break
;
case
0x227
:
map_key_clear
(
KEY_REFRESH
);
break
;
case
0x227
:
map_key_clear
(
KEY_REFRESH
);
break
;
case
0x22a
:
map_key_clear
(
KEY_BOOKMARKS
);
break
;
case
0x22a
:
map_key_clear
(
KEY_BOOKMARKS
);
break
;
case
0x233
:
map_key_clear
(
KEY_SCROLLUP
);
break
;
case
0x234
:
map_key_clear
(
KEY_SCROLLDOWN
);
break
;
case
0x238
:
map_rel
(
REL_HWHEEL
);
break
;
case
0x238
:
map_rel
(
REL_HWHEEL
);
break
;
case
0x279
:
map_key_clear
(
KEY_REDO
);
break
;
case
0x279
:
map_key_clear
(
KEY_REDO
);
break
;
case
0x289
:
map_key_clear
(
KEY_REPLY
);
break
;
case
0x289
:
map_key_clear
(
KEY_REPLY
);
break
;
case
0x28b
:
map_key_clear
(
KEY_FORWARDMAIL
);
break
;
case
0x28b
:
map_key_clear
(
KEY_FORWARDMAIL
);
break
;
case
0x28c
:
map_key_clear
(
KEY_SEND
);
break
;
case
0x28c
:
map_key_clear
(
KEY_SEND
);
break
;
/* Reported on a Cherry Cymotion keyboard */
case
0x301
:
map_key_clear
(
KEY_PROG1
);
break
;
case
0x302
:
map_key_clear
(
KEY_PROG2
);
break
;
case
0x303
:
map_key_clear
(
KEY_PROG3
);
break
;
default:
goto
ignore
;
default:
goto
ignore
;
}
}
break
;
break
;
...
@@ -325,7 +490,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
...
@@ -325,7 +490,12 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
set_bit
(
EV_REP
,
input
->
evbit
);
set_bit
(
EV_REP
,
input
->
evbit
);
switch
(
usage
->
hid
&
HID_USAGE
)
{
switch
(
usage
->
hid
&
HID_USAGE
)
{
case
0x003
:
map_key_clear
(
KEY_FN
);
break
;
case
0x003
:
/* The fn key on Apple PowerBooks */
map_key_clear
(
KEY_FN
);
hidinput_pb_setup
(
input
);
break
;
default:
goto
ignore
;
default:
goto
ignore
;
}
}
break
;
break
;
...
@@ -482,6 +652,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
...
@@ -482,6 +652,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
return
;
return
;
}
}
if
((
hid
->
quirks
&
HID_QUIRK_POWERBOOK_HAS_FN
)
&&
hidinput_pb_event
(
hid
,
input
,
usage
,
value
))
return
;
if
(
usage
->
hat_min
<
usage
->
hat_max
||
usage
->
hat_dir
)
{
if
(
usage
->
hat_min
<
usage
->
hat_max
||
usage
->
hat_dir
)
{
int
hat_dir
=
usage
->
hat_dir
;
int
hat_dir
=
usage
->
hat_dir
;
if
(
!
hat_dir
)
if
(
!
hat_dir
)
...
@@ -524,7 +697,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
...
@@ -524,7 +697,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
return
;
return
;
}
}
if
((
usage
->
type
==
EV_KEY
)
&&
(
usage
->
code
==
0
))
/* Key 0 is "unassigned", not KEY_UNKNOWN */
if
((
usage
->
type
==
EV_KEY
)
&&
(
usage
->
code
==
0
))
/* Key 0 is "unassigned", not KEY_UNKNOWN */
return
;
return
;
input_event
(
input
,
usage
->
type
,
usage
->
code
,
value
);
input_event
(
input
,
usage
->
type
,
usage
->
code
,
value
);
...
...
drivers/usb/input/hid.h
View file @
e7de3690
...
@@ -235,17 +235,20 @@ struct hid_item {
...
@@ -235,17 +235,20 @@ struct hid_item {
* HID device quirks.
* HID device quirks.
*/
*/
#define HID_QUIRK_INVERT 0x001
#define HID_QUIRK_INVERT 0x00000001
#define HID_QUIRK_NOTOUCH 0x002
#define HID_QUIRK_NOTOUCH 0x00000002
#define HID_QUIRK_IGNORE 0x004
#define HID_QUIRK_IGNORE 0x00000004
#define HID_QUIRK_NOGET 0x008
#define HID_QUIRK_NOGET 0x00000008
#define HID_QUIRK_HIDDEV 0x010
#define HID_QUIRK_HIDDEV 0x00000010
#define HID_QUIRK_BADPAD 0x020
#define HID_QUIRK_BADPAD 0x00000020
#define HID_QUIRK_MULTI_INPUT 0x040
#define HID_QUIRK_MULTI_INPUT 0x00000040
#define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x080
#define HID_QUIRK_2WHEEL_MOUSE_HACK_7 0x00000080
#define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x100
#define HID_QUIRK_2WHEEL_MOUSE_HACK_5 0x00000100
#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x200
#define HID_QUIRK_2WHEEL_MOUSE_HACK_ON 0x00000200
#define HID_QUIRK_2WHEEL_POWERMOUSE 0x400
#define HID_QUIRK_2WHEEL_POWERMOUSE 0x00000400
#define HID_QUIRK_CYMOTION 0x00000800
#define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000
#define HID_QUIRK_POWERBOOK_FN_ON 0x00002000
/*
/*
* This is the global environment of the parser. This information is
* This is the global environment of the parser. This information is
...
@@ -431,6 +434,11 @@ struct hid_device { /* device report descriptor */
...
@@ -431,6 +434,11 @@ struct hid_device { /* device report descriptor */
void
(
*
ff_exit
)(
struct
hid_device
*
);
/* Called by hid_exit_ff(hid) */
void
(
*
ff_exit
)(
struct
hid_device
*
);
/* Called by hid_exit_ff(hid) */
int
(
*
ff_event
)(
struct
hid_device
*
hid
,
struct
input_dev
*
input
,
int
(
*
ff_event
)(
struct
hid_device
*
hid
,
struct
input_dev
*
input
,
unsigned
int
type
,
unsigned
int
code
,
int
value
);
unsigned
int
type
,
unsigned
int
code
,
int
value
);
#ifdef CONFIG_USB_HIDINPUT_POWERBOOK
unsigned
long
pb_pressed_fn
[
NBITS
(
KEY_MAX
)];
unsigned
long
pb_pressed_numlock
[
NBITS
(
KEY_MAX
)];
#endif
};
};
#define HID_GLOBAL_STACK_SIZE 4
#define HID_GLOBAL_STACK_SIZE 4
...
...
drivers/usb/input/pid.c
View file @
e7de3690
...
@@ -259,7 +259,7 @@ static int hid_pid_upload_effect(struct input_dev *dev,
...
@@ -259,7 +259,7 @@ static int hid_pid_upload_effect(struct input_dev *dev,
int
hid_pid_init
(
struct
hid_device
*
hid
)
int
hid_pid_init
(
struct
hid_device
*
hid
)
{
{
struct
hid_ff_pid
*
private
;
struct
hid_ff_pid
*
private
;
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
);
struct
input_dev
*
input_dev
=
hidinput
->
input
;
struct
input_dev
*
input_dev
=
hidinput
->
input
;
private
=
hid
->
ff_private
=
kzalloc
(
sizeof
(
struct
hid_ff_pid
),
GFP_KERNEL
);
private
=
hid
->
ff_private
=
kzalloc
(
sizeof
(
struct
hid_ff_pid
),
GFP_KERNEL
);
...
...
drivers/usb/input/wacom.c
View file @
e7de3690
...
@@ -95,7 +95,7 @@ MODULE_LICENSE(DRIVER_LICENSE);
...
@@ -95,7 +95,7 @@ MODULE_LICENSE(DRIVER_LICENSE);
enum
{
enum
{
PENPARTNER
=
0
,
PENPARTNER
=
0
,
GRAPHIRE
,
GRAPHIRE
,
G4
,
WACOM_
G4
,
PL
,
PL
,
INTUOS
,
INTUOS
,
INTUOS3
,
INTUOS3
,
...
@@ -373,7 +373,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
...
@@ -373,7 +373,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case
2
:
/* Mouse with wheel */
case
2
:
/* Mouse with wheel */
input_report_key
(
dev
,
BTN_MIDDLE
,
data
[
1
]
&
0x04
);
input_report_key
(
dev
,
BTN_MIDDLE
,
data
[
1
]
&
0x04
);
if
(
wacom
->
features
->
type
==
G4
)
{
if
(
wacom
->
features
->
type
==
WACOM_
G4
)
{
rw
=
data
[
7
]
&
0x04
?
-
(
data
[
7
]
&
0x03
)
:
(
data
[
7
]
&
0x03
);
rw
=
data
[
7
]
&
0x04
?
-
(
data
[
7
]
&
0x03
)
:
(
data
[
7
]
&
0x03
);
input_report_rel
(
dev
,
REL_WHEEL
,
rw
);
input_report_rel
(
dev
,
REL_WHEEL
,
rw
);
}
else
}
else
...
@@ -385,7 +385,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
...
@@ -385,7 +385,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
id
=
CURSOR_DEVICE_ID
;
id
=
CURSOR_DEVICE_ID
;
input_report_key
(
dev
,
BTN_LEFT
,
data
[
1
]
&
0x01
);
input_report_key
(
dev
,
BTN_LEFT
,
data
[
1
]
&
0x01
);
input_report_key
(
dev
,
BTN_RIGHT
,
data
[
1
]
&
0x02
);
input_report_key
(
dev
,
BTN_RIGHT
,
data
[
1
]
&
0x02
);
if
(
wacom
->
features
->
type
==
G4
)
if
(
wacom
->
features
->
type
==
WACOM_
G4
)
input_report_abs
(
dev
,
ABS_DISTANCE
,
data
[
6
]);
input_report_abs
(
dev
,
ABS_DISTANCE
,
data
[
6
]);
else
else
input_report_abs
(
dev
,
ABS_DISTANCE
,
data
[
7
]);
input_report_abs
(
dev
,
ABS_DISTANCE
,
data
[
7
]);
...
@@ -410,7 +410,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
...
@@ -410,7 +410,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
input_sync
(
dev
);
input_sync
(
dev
);
/* send pad data */
/* send pad data */
if
(
wacom
->
features
->
type
==
G4
)
{
if
(
wacom
->
features
->
type
==
WACOM_
G4
)
{
/* fist time sending pad data */
/* fist time sending pad data */
if
(
wacom
->
tool
[
1
]
!=
BTN_TOOL_FINGER
)
{
if
(
wacom
->
tool
[
1
]
!=
BTN_TOOL_FINGER
)
{
wacom
->
id
[
1
]
=
0
;
wacom
->
id
[
1
]
=
0
;
...
@@ -713,8 +713,8 @@ static struct wacom_features wacom_features[] = {
...
@@ -713,8 +713,8 @@ static struct wacom_features wacom_features[] = {
{
"Wacom Graphire2 5x7"
,
8
,
13918
,
10206
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire2 5x7"
,
8
,
13918
,
10206
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire3"
,
8
,
10208
,
7424
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire3"
,
8
,
10208
,
7424
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire3 6x8"
,
8
,
16704
,
12064
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire3 6x8"
,
8
,
16704
,
12064
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Graphire4 4x5"
,
8
,
10208
,
7424
,
511
,
32
,
G4
,
wacom_graphire_irq
},
{
"Wacom Graphire4 4x5"
,
8
,
10208
,
7424
,
511
,
32
,
WACOM_
G4
,
wacom_graphire_irq
},
{
"Wacom Graphire4 6x8"
,
8
,
16704
,
12064
,
511
,
32
,
G4
,
wacom_graphire_irq
},
{
"Wacom Graphire4 6x8"
,
8
,
16704
,
12064
,
511
,
32
,
WACOM_
G4
,
wacom_graphire_irq
},
{
"Wacom Volito"
,
8
,
5104
,
3712
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Volito"
,
8
,
5104
,
3712
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom PenStation2"
,
8
,
3250
,
2320
,
255
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom PenStation2"
,
8
,
3250
,
2320
,
255
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Volito2 4x5"
,
8
,
5104
,
3712
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
{
"Wacom Volito2 4x5"
,
8
,
5104
,
3712
,
511
,
32
,
GRAPHIRE
,
wacom_graphire_irq
},
...
@@ -859,7 +859,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
...
@@ -859,7 +859,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
input_set_abs_params
(
input_dev
,
ABS_PRESSURE
,
0
,
wacom
->
features
->
pressure_max
,
0
,
0
);
input_set_abs_params
(
input_dev
,
ABS_PRESSURE
,
0
,
wacom
->
features
->
pressure_max
,
0
,
0
);
switch
(
wacom
->
features
->
type
)
{
switch
(
wacom
->
features
->
type
)
{
case
G4
:
case
WACOM_
G4
:
input_dev
->
evbit
[
0
]
|=
BIT
(
EV_MSC
);
input_dev
->
evbit
[
0
]
|=
BIT
(
EV_MSC
);
input_dev
->
mscbit
[
0
]
|=
BIT
(
MSC_SERIAL
);
input_dev
->
mscbit
[
0
]
|=
BIT
(
MSC_SERIAL
);
input_dev
->
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_FINGER
);
input_dev
->
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_FINGER
);
...
...
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