HID: input: tag touchscreens as such if the physical is not there
Some devices (Elan, Synaptics...) are sometimes not setting a physical in their finger collections. hid-input will consider them to be pen devices, leading to some wrong behavior in user space. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Reviewed-by: Ping Cheng <ping.cheng@wacom.com> Acked-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
b79c1abae5
commit
3c2b0dbd69
@ -828,10 +828,31 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
|
||||
break;
|
||||
|
||||
case 0x32: /* InRange */
|
||||
switch (field->physical & 0xff) {
|
||||
case 0x21: map_key(BTN_TOOL_MOUSE); break;
|
||||
case 0x22: map_key(BTN_TOOL_FINGER); break;
|
||||
default: map_key(BTN_TOOL_PEN); break;
|
||||
switch (field->physical) {
|
||||
case HID_DG_PUCK:
|
||||
map_key(BTN_TOOL_MOUSE);
|
||||
break;
|
||||
case HID_DG_FINGER:
|
||||
map_key(BTN_TOOL_FINGER);
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* If the physical is not given,
|
||||
* rely on the application.
|
||||
*/
|
||||
if (!field->physical) {
|
||||
switch (field->application) {
|
||||
case HID_DG_TOUCHSCREEN:
|
||||
case HID_DG_TOUCHPAD:
|
||||
map_key_clear(BTN_TOOL_FINGER);
|
||||
break;
|
||||
default:
|
||||
map_key_clear(BTN_TOOL_PEN);
|
||||
}
|
||||
} else {
|
||||
map_key(BTN_TOOL_PEN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user