aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/hid.h
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2007-05-14 03:57:40 -0400
committerJiri Kosina <jkosina@suse.cz>2007-10-14 08:47:26 -0400
commit86166b7bcda0bcb53525114fa1c87ac432be478e (patch)
tree1f6afc4c1c1d7a6dd88236f3c11fde61c1885b14 /include/linux/hid.h
parentefc493f9d5463d933a64a2758fbe6d9bb8300cbb (diff)
HID: add hidraw interface
hidraw is an interface that is going to obsolete hiddev one day. Many userland applications are using libusb instead of using kernel-provided hiddev interface. This is caused by various reasons - the HID parser in kernel doesn't handle all the HID hardware on the planet properly, some devices might require its own specific quirks/drivers, etc. hiddev interface tries to do its best to parse all the received reports properly, and presents only parsed usages into userspace. This is however often not enough, and that's the reason why many userland applications just don't use hiddev at all, and rather use libusb to read raw USB events and process them on their own. Another drawback of hiddev is that it is USB-specific. hidraw interface provides userspace readers with really raw HID reports, no matter what the low-level transport layer is (USB/BT), and gives the userland applications all the freedom to process the HID reports in a way they wish to. Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'include/linux/hid.h')
-rw-r--r--include/linux/hid.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 898103b401f..0ac2b5260b2 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -403,6 +403,7 @@ struct hid_control_fifo {
403 403
404#define HID_CLAIMED_INPUT 1 404#define HID_CLAIMED_INPUT 1
405#define HID_CLAIMED_HIDDEV 2 405#define HID_CLAIMED_HIDDEV 2
406#define HID_CLAIMED_HIDRAW 4
406 407
407#define HID_CTRL_RUNNING 1 408#define HID_CTRL_RUNNING 1
408#define HID_OUT_RUNNING 2 409#define HID_OUT_RUNNING 2
@@ -438,6 +439,7 @@ struct hid_device { /* device report descriptor */
438 439
439 struct list_head inputs; /* The list of inputs */ 440 struct list_head inputs; /* The list of inputs */
440 void *hiddev; /* The hiddev structure */ 441 void *hiddev; /* The hiddev structure */
442 void *hidraw;
441 int minor; /* Hiddev minor number */ 443 int minor; /* Hiddev minor number */
442 444
443 wait_queue_head_t wait; /* For sleeping */ 445 wait_queue_head_t wait; /* For sleeping */
@@ -458,6 +460,9 @@ struct hid_device { /* device report descriptor */
458 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, 460 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
459 struct hid_usage *, __s32); 461 struct hid_usage *, __s32);
460 void (*hiddev_report_event) (struct hid_device *, struct hid_report *); 462 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
463
464 /* handler for raw output data, used by hidraw */
465 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t);
461#ifdef CONFIG_USB_HIDINPUT_POWERBOOK 466#ifdef CONFIG_USB_HIDINPUT_POWERBOOK
462 unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; 467 unsigned long pb_pressed_fn[NBITS(KEY_MAX)];
463 unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; 468 unsigned long pb_pressed_numlock[NBITS(KEY_MAX)];