mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
HID: cougar: Stop processing vendor events on hid-core
Special key events received by the custom vendor's hdev are translated to key events on the kbd iface's input device, so their processing must not continue. Return -EPERM from raw_event handler to effectively stop source events from being processed in hid-core. Signed-off-by: Daniel M. Lambea <dmlambea@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
6b003a8ddd
commit
75f1f19bdd
@ -261,26 +261,32 @@ static int cougar_raw_event(struct hid_device *hdev, struct hid_report *report,
|
||||
u8 *data, int size)
|
||||
{
|
||||
struct cougar *cougar;
|
||||
struct cougar_shared *shared;
|
||||
unsigned char code, action;
|
||||
int i;
|
||||
|
||||
cougar = hid_get_drvdata(hdev);
|
||||
if (!cougar->special_intf || !cougar->shared ||
|
||||
!cougar->shared->input || !cougar->shared->enabled)
|
||||
shared = cougar->shared;
|
||||
if (!cougar->special_intf || !shared)
|
||||
return 0;
|
||||
|
||||
if (!shared->enabled || !shared->input)
|
||||
return -EPERM;
|
||||
|
||||
code = data[COUGAR_FIELD_CODE];
|
||||
action = data[COUGAR_FIELD_ACTION];
|
||||
for (i = 0; cougar_mapping[i][0]; i++) {
|
||||
if (code == cougar_mapping[i][0]) {
|
||||
input_event(cougar->shared->input, EV_KEY,
|
||||
input_event(shared->input, EV_KEY,
|
||||
cougar_mapping[i][1], action);
|
||||
input_sync(cougar->shared->input);
|
||||
return 0;
|
||||
input_sync(shared->input);
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
hid_warn(hdev, "unmapped special key code %x: ignoring\n", code);
|
||||
return 0;
|
||||
/* Avoid warnings on the same unmapped key twice */
|
||||
if (action != 0)
|
||||
hid_warn(hdev, "unmapped special key code %0x: ignoring\n", code);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
static void cougar_remove(struct hid_device *hdev)
|
||||
|
Loading…
Reference in New Issue
Block a user