OSDN Git Service

greybus: hid: Use payload-size to get report size
authorViresh Kumar <viresh.kumar@linaro.org>
Fri, 3 Apr 2015 06:30:48 +0000 (12:00 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Mon, 6 Apr 2015 08:53:41 +0000 (10:53 +0200)
Report size isn't passed as first two bytes of the report according to
USB-HID spec. Get it from payload-size.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/hid.c

index 5935aa6..556cf9b 100644 (file)
@@ -155,7 +155,6 @@ static int gb_hid_irq_handler(u8 type, struct gb_operation *op)
        struct gb_connection *connection = op->connection;
        struct gb_hid *ghid = connection->private;
        struct gb_hid_input_report_request *request = op->request->payload;
-       int size;
 
        if (type != GB_HID_TYPE_IRQ_EVENT) {
                dev_err(&connection->dev,
@@ -163,24 +162,9 @@ static int gb_hid_irq_handler(u8 type, struct gb_operation *op)
                return -EINVAL;
        }
 
-       if (op->request->payload_size < 2) {
-               dev_err(&connection->dev, "short report received\n");
-               return -EINVAL;
-       }
-
-       /*
-        * FIXME: add report size to Greybus HID protocol if we need to parse
-        *        it here.
-        */
-       size = request->report[0] | request->report[1] << 8;
-       if (size < 2 || size > op->request->payload_size - 2) {
-               dev_err(&connection->dev, "bad report size: %d\n", size);
-               return -EINVAL;
-       }
-
        if (test_bit(GB_HID_STARTED, &ghid->flags))
                hid_input_report(ghid->hid, HID_INPUT_REPORT,
-                                request->report + 2, size - 2, 1);
+                                request->report, op->request->payload_size, 1);
 
        return 0;
 }