diff options
Diffstat (limited to 'drivers/hid/hid-core.c')
-rw-r--r-- | drivers/hid/hid-core.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 1e1a7770a6b9..49f18f5b2514 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
@@ -543,6 +543,7 @@ void hid_free_device(struct hid_device *device) | |||
543 | } | 543 | } |
544 | 544 | ||
545 | kfree(device->rdesc); | 545 | kfree(device->rdesc); |
546 | kfree(device->collection); | ||
546 | kfree(device); | 547 | kfree(device); |
547 | } | 548 | } |
548 | EXPORT_SYMBOL_GPL(hid_free_device); | 549 | EXPORT_SYMBOL_GPL(hid_free_device); |
@@ -880,6 +881,10 @@ static void hid_output_field(struct hid_field *field, __u8 *data) | |||
880 | unsigned size = field->report_size; | 881 | unsigned size = field->report_size; |
881 | unsigned n; | 882 | unsigned n; |
882 | 883 | ||
884 | /* make sure the unused bits in the last byte are zeros */ | ||
885 | if (count > 0 && size > 0) | ||
886 | data[(count*size-1)/8] = 0; | ||
887 | |||
883 | for (n = 0; n < count; n++) { | 888 | for (n = 0; n < count; n++) { |
884 | if (field->logical_minimum < 0) /* signed values */ | 889 | if (field->logical_minimum < 0) /* signed values */ |
885 | implement(data, offset + n * size, size, s32ton(field->value[n], size)); | 890 | implement(data, offset + n * size, size, s32ton(field->value[n], size)); |
@@ -947,7 +952,7 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i | |||
947 | } | 952 | } |
948 | 953 | ||
949 | #ifdef DEBUG_DATA | 954 | #ifdef DEBUG_DATA |
950 | printk(KERN_DEBUG __FILE__ ": report (size %u) (%snumbered)\n", len, report_enum->numbered ? "" : "un"); | 955 | printk(KERN_DEBUG __FILE__ ": report (size %u) (%snumbered)\n", size, report_enum->numbered ? "" : "un"); |
951 | #endif | 956 | #endif |
952 | 957 | ||
953 | n = 0; /* Normally report number is 0 */ | 958 | n = 0; /* Normally report number is 0 */ |