aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/uhid.c
diff options
context:
space:
mode:
authorFrank Praznik <frank.praznik@oh.rr.com>2014-01-22 13:49:43 -0500
committerJiri Kosina <jkosina@suse.cz>2014-01-29 08:23:42 -0500
commit596cfdd80ab8ad11c750511da2c8c9a33f188ba0 (patch)
tree7266007b518015bee998d610cec35087cfee9f4b /drivers/hid/uhid.c
parent975a683271e690e7e467b274f22efadf1e696b5e (diff)
HID: Add the transport-driver function to the uhid driver
Add the uhid_output_report transport-driver function to the uhid driver. Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com> Acked-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/uhid.c')
-rw-r--r--drivers/hid/uhid.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
index cedc6da93c19..f5a2b1931143 100644
--- a/drivers/hid/uhid.c
+++ b/drivers/hid/uhid.c
@@ -244,12 +244,39 @@ static int uhid_hid_output_raw(struct hid_device *hid, __u8 *buf, size_t count,
244 return count; 244 return count;
245} 245}
246 246
247static int uhid_hid_output_report(struct hid_device *hid, __u8 *buf,
248 size_t count)
249{
250 struct uhid_device *uhid = hid->driver_data;
251 unsigned long flags;
252 struct uhid_event *ev;
253
254 if (count < 1 || count > UHID_DATA_MAX)
255 return -EINVAL;
256
257 ev = kzalloc(sizeof(*ev), GFP_KERNEL);
258 if (!ev)
259 return -ENOMEM;
260
261 ev->type = UHID_OUTPUT;
262 ev->u.output.size = count;
263 ev->u.output.rtype = UHID_OUTPUT_REPORT;
264 memcpy(ev->u.output.data, buf, count);
265
266 spin_lock_irqsave(&uhid->qlock, flags);
267 uhid_queue(uhid, ev);
268 spin_unlock_irqrestore(&uhid->qlock, flags);
269
270 return count;
271}
272
247static struct hid_ll_driver uhid_hid_driver = { 273static struct hid_ll_driver uhid_hid_driver = {
248 .start = uhid_hid_start, 274 .start = uhid_hid_start,
249 .stop = uhid_hid_stop, 275 .stop = uhid_hid_stop,
250 .open = uhid_hid_open, 276 .open = uhid_hid_open,
251 .close = uhid_hid_close, 277 .close = uhid_hid_close,
252 .parse = uhid_hid_parse, 278 .parse = uhid_hid_parse,
279 .output_report = uhid_hid_output_report,
253}; 280};
254 281
255#ifdef CONFIG_COMPAT 282#ifdef CONFIG_COMPAT