Commit aa938f79 authored by Jiri Kosina's avatar Jiri Kosina Committed by Greg Kroah-Hartman

[PATCH] Generic HID layer - hiddev

- hiddev is USB-only (agreed with Marcel Holtmann that Bluetooth currently
  doesn't need it, and future planned interface (rawhid) will be more flexible
  and usable)
- both HID and USB-hid can be now compiled as modules (wasn't possible before
  hiddev was fully separated from generic HID layer)
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 4916b3a5
...@@ -819,8 +819,8 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, s ...@@ -819,8 +819,8 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, s
hid_dump_input(usage, value); hid_dump_input(usage, value);
if (hid->claimed & HID_CLAIMED_INPUT) if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_hid_event(hid, field, usage, value); hidinput_hid_event(hid, field, usage, value);
if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt) if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event)
hiddev_hid_event(hid, field, usage, value); hid->hiddev_hid_event(hid, field, usage, value);
} }
/* /*
...@@ -940,3 +940,5 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value) ...@@ -940,3 +940,5 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
} }
EXPORT_SYMBOL_GPL(hid_set_field); EXPORT_SYMBOL_GPL(hid_set_field);
MODULE_LICENSE(DRIVER_LICENSE);
...@@ -1284,6 +1284,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf) ...@@ -1284,6 +1284,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
hid->hidinput_input_event = usb_hidinput_input_event; hid->hidinput_input_event = usb_hidinput_input_event;
hid->hidinput_open = hidinput_open; hid->hidinput_open = hidinput_open;
hid->hidinput_close = hidinput_close; hid->hidinput_close = hidinput_close;
#ifdef CONFIG_USB_HIDDEV
hid->hiddev_hid_event = hiddev_hid_event;
#endif
return hid; return hid;
......
...@@ -433,6 +433,10 @@ struct hid_device { /* device report descriptor */ ...@@ -433,6 +433,10 @@ struct hid_device { /* device report descriptor */
int (*hidinput_open) (struct input_dev *); int (*hidinput_open) (struct input_dev *);
void (*hidinput_close) (struct input_dev *); void (*hidinput_close) (struct input_dev *);
/* hiddev event handler */
void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
struct hid_usage *, __s32);
#ifdef CONFIG_USB_HIDINPUT_POWERBOOK #ifdef CONFIG_USB_HIDINPUT_POWERBOOK
unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; unsigned long pb_pressed_fn[NBITS(KEY_MAX)];
unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; unsigned long pb_pressed_numlock[NBITS(KEY_MAX)];
...@@ -477,13 +481,9 @@ struct hid_descriptor { ...@@ -477,13 +481,9 @@ struct hid_descriptor {
#define resolv_event(a,b) do { } while (0) #define resolv_event(a,b) do { } while (0)
#endif #endif
#ifdef CONFIG_HID
/* Applications from HID Usage Tables 4/8/99 Version 1.1 */ /* Applications from HID Usage Tables 4/8/99 Version 1.1 */
/* We ignore a few input applications that are not widely used */ /* We ignore a few input applications that are not widely used */
#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001)) #define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001))
#else
#define IS_INPUT_APPLICATION(a) (0)
#endif
/* HID core API */ /* HID core API */
extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32); extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment