Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID updates from Jiri Kosina: - quirk for devices that need to be pulled in much more aggresive way than mandated, by Johan Hovold - robustification of sanity checking of incoming reports in RMI driver, by Benjamin Tissoires - fixes, updates, and new HW support to SONY driver, by Frank Praznik - port of uHID to the new transport layer layout, by David Herrmann - robustification of Clear-Halt/reset in USB HID, by Alan Stern - native support for hopefully any future HID compliant wacom tablet. Those found on the various laptops (ISDv4/5) already are HID compliant and they should work in the future without any modification of the kernel. Written by Benjamin Tissoires. - a lot more simple fixes and device ID additions all over the place * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (45 commits) HID: uHID: fix excepted report type HID: usbhid: add another mouse that needs QUIRK_ALWAYS_POLL HID: wacom: implement the finger part of the HID generic handling HID: wacom: implement generic HID handling for pen generic devices HID: wacom: move allocation of inputs earlier HID: wacom: split out input allocation and registration HID: wacom: rename failN with some meaningful information HID: sony: Update the DualShock 4 touchpad resolution HID: wacom: fix timeout on probe for some wacoms HID: sony: Set touchpad bits in the input_configured callback HID: sony: Update file header and correct comments HID: sony: Corrections for the DualShock 4 HID descriptor HID: rmi: check sanity of the incoming report HID: wacom: make the WL connection friendly for the desktop HID: wacom - enable LED support for Wireless Intuos5/Pro HID: wacom - remove report_id from wacom_get_report interface HID: wacom - Clean up of sysfs HID: wacom - Add default permission defines for sysfs attributes HID: usbhid: fix PIXART optical mouse HID: Add Holtek USB ID 04d9:a0c2 ETEKCITY Scroll ...
This commit is contained in:
+96
-26
@@ -24,35 +24,23 @@
|
||||
#include <linux/hid.h>
|
||||
|
||||
enum uhid_event_type {
|
||||
UHID_CREATE,
|
||||
__UHID_LEGACY_CREATE,
|
||||
UHID_DESTROY,
|
||||
UHID_START,
|
||||
UHID_STOP,
|
||||
UHID_OPEN,
|
||||
UHID_CLOSE,
|
||||
UHID_OUTPUT,
|
||||
UHID_OUTPUT_EV, /* obsolete! */
|
||||
UHID_INPUT,
|
||||
UHID_FEATURE,
|
||||
UHID_FEATURE_ANSWER,
|
||||
__UHID_LEGACY_OUTPUT_EV,
|
||||
__UHID_LEGACY_INPUT,
|
||||
UHID_GET_REPORT,
|
||||
UHID_GET_REPORT_REPLY,
|
||||
UHID_CREATE2,
|
||||
UHID_INPUT2,
|
||||
UHID_SET_REPORT,
|
||||
UHID_SET_REPORT_REPLY,
|
||||
};
|
||||
|
||||
struct uhid_create_req {
|
||||
__u8 name[128];
|
||||
__u8 phys[64];
|
||||
__u8 uniq[64];
|
||||
__u8 __user *rd_data;
|
||||
__u16 rd_size;
|
||||
|
||||
__u16 bus;
|
||||
__u32 vendor;
|
||||
__u32 product;
|
||||
__u32 version;
|
||||
__u32 country;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_create2_req {
|
||||
__u8 name[128];
|
||||
__u8 phys[64];
|
||||
@@ -66,6 +54,16 @@ struct uhid_create2_req {
|
||||
__u8 rd_data[HID_MAX_DESCRIPTOR_SIZE];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
enum uhid_dev_flag {
|
||||
UHID_DEV_NUMBERED_FEATURE_REPORTS = (1ULL << 0),
|
||||
UHID_DEV_NUMBERED_OUTPUT_REPORTS = (1ULL << 1),
|
||||
UHID_DEV_NUMBERED_INPUT_REPORTS = (1ULL << 2),
|
||||
};
|
||||
|
||||
struct uhid_start_req {
|
||||
__u64 dev_flags;
|
||||
};
|
||||
|
||||
#define UHID_DATA_MAX 4096
|
||||
|
||||
enum uhid_report_type {
|
||||
@@ -74,11 +72,6 @@ enum uhid_report_type {
|
||||
UHID_INPUT_REPORT,
|
||||
};
|
||||
|
||||
struct uhid_input_req {
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
__u16 size;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_input2_req {
|
||||
__u16 size;
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
@@ -90,20 +83,83 @@ struct uhid_output_req {
|
||||
__u8 rtype;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* Obsolete! Newer kernels will no longer send these events but instead convert
|
||||
* it into raw output reports via UHID_OUTPUT. */
|
||||
struct uhid_get_report_req {
|
||||
__u32 id;
|
||||
__u8 rnum;
|
||||
__u8 rtype;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_get_report_reply_req {
|
||||
__u32 id;
|
||||
__u16 err;
|
||||
__u16 size;
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_set_report_req {
|
||||
__u32 id;
|
||||
__u8 rnum;
|
||||
__u8 rtype;
|
||||
__u16 size;
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_set_report_reply_req {
|
||||
__u32 id;
|
||||
__u16 err;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Compat Layer
|
||||
* All these commands and requests are obsolete. You should avoid using them in
|
||||
* new code. We support them for backwards-compatibility, but you might not get
|
||||
* access to new feature in case you use them.
|
||||
*/
|
||||
|
||||
enum uhid_legacy_event_type {
|
||||
UHID_CREATE = __UHID_LEGACY_CREATE,
|
||||
UHID_OUTPUT_EV = __UHID_LEGACY_OUTPUT_EV,
|
||||
UHID_INPUT = __UHID_LEGACY_INPUT,
|
||||
UHID_FEATURE = UHID_GET_REPORT,
|
||||
UHID_FEATURE_ANSWER = UHID_GET_REPORT_REPLY,
|
||||
};
|
||||
|
||||
/* Obsolete! Use UHID_CREATE2. */
|
||||
struct uhid_create_req {
|
||||
__u8 name[128];
|
||||
__u8 phys[64];
|
||||
__u8 uniq[64];
|
||||
__u8 __user *rd_data;
|
||||
__u16 rd_size;
|
||||
|
||||
__u16 bus;
|
||||
__u32 vendor;
|
||||
__u32 product;
|
||||
__u32 version;
|
||||
__u32 country;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* Obsolete! Use UHID_INPUT2. */
|
||||
struct uhid_input_req {
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
__u16 size;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* Obsolete! Kernel uses UHID_OUTPUT exclusively now. */
|
||||
struct uhid_output_ev_req {
|
||||
__u16 type;
|
||||
__u16 code;
|
||||
__s32 value;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* Obsolete! Kernel uses ABI compatible UHID_GET_REPORT. */
|
||||
struct uhid_feature_req {
|
||||
__u32 id;
|
||||
__u8 rnum;
|
||||
__u8 rtype;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* Obsolete! Use ABI compatible UHID_GET_REPORT_REPLY. */
|
||||
struct uhid_feature_answer_req {
|
||||
__u32 id;
|
||||
__u16 err;
|
||||
@@ -111,6 +167,15 @@ struct uhid_feature_answer_req {
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* UHID Events
|
||||
* All UHID events from and to the kernel are encoded as "struct uhid_event".
|
||||
* The "type" field contains a UHID_* type identifier. All payload depends on
|
||||
* that type and can be accessed via ev->u.XYZ accordingly.
|
||||
* If user-space writes short events, they're extended with 0s by the kernel. If
|
||||
* the kernel writes short events, user-space shall extend them with 0s.
|
||||
*/
|
||||
|
||||
struct uhid_event {
|
||||
__u32 type;
|
||||
|
||||
@@ -120,9 +185,14 @@ struct uhid_event {
|
||||
struct uhid_output_req output;
|
||||
struct uhid_output_ev_req output_ev;
|
||||
struct uhid_feature_req feature;
|
||||
struct uhid_get_report_req get_report;
|
||||
struct uhid_feature_answer_req feature_answer;
|
||||
struct uhid_get_report_reply_req get_report_reply;
|
||||
struct uhid_create2_req create2;
|
||||
struct uhid_input2_req input2;
|
||||
struct uhid_set_report_req set_report;
|
||||
struct uhid_set_report_reply_req set_report_reply;
|
||||
struct uhid_start_req start;
|
||||
} u;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user