HID: increase maximum global item tag report size to 256
authorSong, Hongyan <hongyan.song@intel.com>
Fri, 3 Aug 2018 06:45:59 +0000 (14:45 +0800)
committerJiri Kosina <jkosina@suse.cz>
Tue, 28 Aug 2018 11:43:53 +0000 (13:43 +0200)
The maximum globale report size has changed from 32->...->96->128 in the past
years.  With the development usage of HID, the report_size max value 128 cannot
satisfy all requirements.

There are applications need to expose intrinsic metadata to camera stabilizing
applications such as 3DFE application. 3DFE intrinsic is designed to express
environmental information about sensor that may dynamically change while the
sensor is running (such data include noise spectral density, bias standard
deviation)

A sensor data field is SENSOR_VALUE_PAIR that consists of a PROPERTYKEY and
PROPVARIANT pair. It need to report a unique PROPERTYKEY for each data field.

Take “Noise Spectral Density” as an example, it report count will be
defined as below:

"Size of Property key GUID(16 Byte) + property key index(4 Byte) +
size of Noise Spectral Density value(4 Byte)"

In this case, the data report max is totally 192(24Byte), which is larger than
128, while max size 128 blocked it as illegal length. So increase the report
size to satisfy it and more demands in the future.

Signed-off-by: Song Hongyan <hongyan.song@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index 3da354a..ef009db 100644 (file)
@@ -406,7 +406,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
 
        case HID_GLOBAL_ITEM_TAG_REPORT_SIZE:
                parser->global.report_size = item_udata(item);
-               if (parser->global.report_size > 128) {
+               if (parser->global.report_size > 256) {
                        hid_err(parser->device, "invalid report_size %d\n",
                                        parser->global.report_size);
                        return -1;