Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.2-rc7 54 lines 1.3 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * HID driver for some ITE "special" devices 4 * Copyright (c) 2017 Hans de Goede <hdegoede@redhat.com> 5 */ 6 7#include <linux/device.h> 8#include <linux/input.h> 9#include <linux/hid.h> 10#include <linux/module.h> 11 12#include "hid-ids.h" 13 14static int ite_event(struct hid_device *hdev, struct hid_field *field, 15 struct hid_usage *usage, __s32 value) 16{ 17 struct input_dev *input; 18 19 if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput) 20 return 0; 21 22 input = field->hidinput->input; 23 24 /* 25 * The ITE8595 always reports 0 as value for the rfkill button. Luckily 26 * it is the only button in its report, and it sends a report on 27 * release only, so receiving a report means the button was pressed. 28 */ 29 if (usage->hid == HID_GD_RFKILL_BTN) { 30 input_event(input, EV_KEY, KEY_RFKILL, 1); 31 input_sync(input); 32 input_event(input, EV_KEY, KEY_RFKILL, 0); 33 input_sync(input); 34 return 1; 35 } 36 37 return 0; 38} 39 40static const struct hid_device_id ite_devices[] = { 41 { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) }, 42 { HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) }, 43 { } 44}; 45MODULE_DEVICE_TABLE(hid, ite_devices); 46 47static struct hid_driver ite_driver = { 48 .name = "itetech", 49 .id_table = ite_devices, 50 .event = ite_event, 51}; 52module_hid_driver(ite_driver); 53 54MODULE_LICENSE("GPL");