diff options
author | Jiri Kosina <jkosina@suse.cz> | 2006-12-08 12:40:53 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-12-08 13:43:12 -0500 |
commit | 229695e51efc4ed5e04ab471c82591d0f432909d (patch) | |
tree | 9e333780589010c61224f185a4a83323305e7d8d /include | |
parent | dde5845a529ff753364a6d1aea61180946270bfa (diff) |
[PATCH] Generic HID layer - API
- fixed generic API (added neccessary EXPORT_SYMBOL, fixed hid.h to provide correct
prototypes)
- extended hid_device with open/close/event function pointers to driver-specific
functions
- added driver specific driver_data to hid_device
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/hid.h | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h index ee567ae6fec1..0473b45b73b8 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -403,11 +403,17 @@ struct hid_device { /* device report descriptor */ | |||
403 | unsigned collection_size; /* Number of allocated hid_collections */ | 403 | unsigned collection_size; /* Number of allocated hid_collections */ |
404 | unsigned maxcollection; /* Number of parsed collections */ | 404 | unsigned maxcollection; /* Number of parsed collections */ |
405 | unsigned maxapplication; /* Number of applications */ | 405 | unsigned maxapplication; /* Number of applications */ |
406 | unsigned short bus; /* BUS ID */ | ||
407 | unsigned short vendor; /* Vendor ID */ | ||
408 | unsigned short product; /* Product ID */ | ||
406 | unsigned version; /* HID version */ | 409 | unsigned version; /* HID version */ |
407 | unsigned country; /* HID country */ | 410 | unsigned country; /* HID country */ |
408 | struct hid_report_enum report_enum[HID_REPORT_TYPES]; | 411 | struct hid_report_enum report_enum[HID_REPORT_TYPES]; |
409 | 412 | ||
410 | struct usb_device *dev; /* USB device */ | 413 | struct usb_device *dev; /* device */ |
414 | |||
415 | /* USB specific fields */ | ||
416 | |||
411 | struct usb_interface *intf; /* USB interface */ | 417 | struct usb_interface *intf; /* USB interface */ |
412 | int ifnum; /* USB interface number */ | 418 | int ifnum; /* USB interface number */ |
413 | 419 | ||
@@ -454,6 +460,13 @@ struct hid_device { /* device report descriptor */ | |||
454 | char phys[64]; /* Device physical location */ | 460 | char phys[64]; /* Device physical location */ |
455 | char uniq[64]; /* Device unique identifier (serial #) */ | 461 | char uniq[64]; /* Device unique identifier (serial #) */ |
456 | 462 | ||
463 | void *driver_data; | ||
464 | |||
465 | /* device-specific function pointers */ | ||
466 | int (*hidinput_input_event) (struct input_dev *, unsigned int, unsigned int, int); | ||
467 | int (*hidinput_open) (struct input_dev *); | ||
468 | void (*hidinput_close) (struct input_dev *); | ||
469 | |||
457 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK | 470 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK |
458 | unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; | 471 | unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; |
459 | unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; | 472 | unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; |
@@ -502,17 +515,15 @@ struct hid_descriptor { | |||
502 | /* Applications from HID Usage Tables 4/8/99 Version 1.1 */ | 515 | /* Applications from HID Usage Tables 4/8/99 Version 1.1 */ |
503 | /* We ignore a few input applications that are not widely used */ | 516 | /* We ignore a few input applications that are not widely used */ |
504 | #define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001)) | 517 | #define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001)) |
518 | #else | ||
519 | #define IS_INPUT_APPLICATION(a) (0) | ||
520 | #endif | ||
521 | |||
522 | /* HID core API */ | ||
505 | extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32); | 523 | extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32); |
506 | extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report); | 524 | extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report); |
507 | extern int hidinput_connect(struct hid_device *); | 525 | extern int hidinput_connect(struct hid_device *); |
508 | extern void hidinput_disconnect(struct hid_device *); | 526 | extern void hidinput_disconnect(struct hid_device *); |
509 | #else | ||
510 | #define IS_INPUT_APPLICATION(a) (0) | ||
511 | static inline void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value) { } | ||
512 | static inline void hidinput_report_event(struct hid_device *hid, struct hid_report *report) { } | ||
513 | static inline int hidinput_connect(struct hid_device *hid) { return -ENODEV; } | ||
514 | static inline void hidinput_disconnect(struct hid_device *hid) { } | ||
515 | #endif | ||
516 | 527 | ||
517 | int hid_set_field(struct hid_field *, unsigned, __s32); | 528 | int hid_set_field(struct hid_field *, unsigned, __s32); |
518 | int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); | 529 | int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); |
@@ -536,5 +547,14 @@ static inline int hid_pidff_init(struct hid_device *hid) { return -ENODEV; } | |||
536 | #else | 547 | #else |
537 | static inline int hid_ff_init(struct hid_device *hid) { return -1; } | 548 | static inline int hid_ff_init(struct hid_device *hid) { return -1; } |
538 | #endif | 549 | #endif |
550 | #ifdef DEBUG | ||
551 | #define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \ | ||
552 | __FILE__ , ## arg) | ||
553 | #else | ||
554 | #define dbg(format, arg...) do {} while (0) | ||
555 | #endif | ||
556 | |||
557 | #define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ | ||
558 | __FILE__ , ## arg) | ||
539 | #endif | 559 | #endif |
540 | 560 | ||