mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 15:44:13 +08:00
f5cd71cfdb
For now only supports one model and only filters out bogus reports sent when the keyboard has been configured through hidraw. Without this, as events are not released, soft repeat floods userspace with unknown key events. Signed-off-by: Philippe Valembois <lephilousophe@gmail.com> Link: https://lore.kernel.org/r/20230125211511.12266-1-lephilousophe@gmail.com Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
54 lines
1.3 KiB
C
54 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* HID driver for EVision devices
|
|
* For now, only ignore bogus consumer reports
|
|
* sent after the keyboard has been configured
|
|
*
|
|
* Copyright (c) 2022 Philippe Valembois
|
|
*/
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/input.h>
|
|
#include <linux/hid.h>
|
|
#include <linux/module.h>
|
|
|
|
#include "hid-ids.h"
|
|
|
|
static int evision_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|
struct hid_field *field, struct hid_usage *usage,
|
|
unsigned long **bit, int *max)
|
|
{
|
|
if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)
|
|
return 0;
|
|
|
|
/* Ignore key down event */
|
|
if ((usage->hid & HID_USAGE) >> 8 == 0x05)
|
|
return -1;
|
|
/* Ignore key up event */
|
|
if ((usage->hid & HID_USAGE) >> 8 == 0x06)
|
|
return -1;
|
|
|
|
switch (usage->hid & HID_USAGE) {
|
|
/* Ignore configuration saved event */
|
|
case 0x0401: return -1;
|
|
/* Ignore reset event */
|
|
case 0x0402: return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static const struct hid_device_id evision_devices[] = {
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_EVISION, USB_DEVICE_ID_EVISION_ICL01) },
|
|
{ }
|
|
};
|
|
MODULE_DEVICE_TABLE(hid, evision_devices);
|
|
|
|
static struct hid_driver evision_driver = {
|
|
.name = "evision",
|
|
.id_table = evision_devices,
|
|
.input_mapping = evision_input_mapping,
|
|
};
|
|
module_hid_driver(evision_driver);
|
|
|
|
MODULE_LICENSE("GPL");
|