diff options
| author | David Herrmann <dh.herrmann@googlemail.com> | 2012-06-10 09:16:22 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2012-06-18 07:42:02 -0400 |
| commit | e7191474a5459e6ba7039fadca6a32f3a5731909 (patch) | |
| tree | 004e573b35323ae0b92907334a4ef12e4aed4fe2 | |
| parent | ec4b7dea453e0f9fd0fbf1761b2d01eff64f264b (diff) | |
HID: uhid: forward open/close events to user-space
HID core notifies us with *_open/*_close callbacks when there is an actual
user of our device. We forward these to user-space so they can react on
this. This allows user-space to skip I/O unless they receive an OPEN
event. When they receive a CLOSE event they can stop I/O again to save
energy.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
| -rw-r--r-- | drivers/hid/uhid.c | 7 | ||||
| -rw-r--r-- | include/linux/uhid.h | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c index 2e7f3a023975..0226ba3f5307 100644 --- a/drivers/hid/uhid.c +++ b/drivers/hid/uhid.c | |||
| @@ -97,11 +97,16 @@ static void uhid_hid_stop(struct hid_device *hid) | |||
| 97 | 97 | ||
| 98 | static int uhid_hid_open(struct hid_device *hid) | 98 | static int uhid_hid_open(struct hid_device *hid) |
| 99 | { | 99 | { |
| 100 | return 0; | 100 | struct uhid_device *uhid = hid->driver_data; |
| 101 | |||
| 102 | return uhid_queue_event(uhid, UHID_OPEN); | ||
| 101 | } | 103 | } |
| 102 | 104 | ||
| 103 | static void uhid_hid_close(struct hid_device *hid) | 105 | static void uhid_hid_close(struct hid_device *hid) |
| 104 | { | 106 | { |
| 107 | struct uhid_device *uhid = hid->driver_data; | ||
| 108 | |||
| 109 | uhid_queue_event(uhid, UHID_CLOSE); | ||
| 105 | } | 110 | } |
| 106 | 111 | ||
| 107 | static int uhid_hid_input(struct input_dev *input, unsigned int type, | 112 | static int uhid_hid_input(struct input_dev *input, unsigned int type, |
diff --git a/include/linux/uhid.h b/include/linux/uhid.h index f8ce6f7571d8..351650b7a0f6 100644 --- a/include/linux/uhid.h +++ b/include/linux/uhid.h | |||
| @@ -27,6 +27,8 @@ enum uhid_event_type { | |||
| 27 | UHID_DESTROY, | 27 | UHID_DESTROY, |
| 28 | UHID_START, | 28 | UHID_START, |
| 29 | UHID_STOP, | 29 | UHID_STOP, |
| 30 | UHID_OPEN, | ||
| 31 | UHID_CLOSE, | ||
| 30 | UHID_INPUT, | 32 | UHID_INPUT, |
| 31 | }; | 33 | }; |
| 32 | 34 | ||
