summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2007-04-15 22:30:15 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2007-05-01 17:05:54 -0700
commit68e26a3dfdc0bd9d5f547761f174072ac6ffd418 (patch)
tree1b377f52fc4dbed5e2a95bf4466f6644e102cae8
parentd44da5e9d31b3f386db33b50bb16ca4d0734d184 (diff)
downloadlwn-68e26a3dfdc0bd9d5f547761f174072ac6ffd418.tar.gz
lwn-68e26a3dfdc0bd9d5f547761f174072ac6ffd418.zip
HID: zeroing of bytes in output fields is bogus
HID: zeroing of bytes in output fields is bogus This patch removes bogus zeroing of unused bits in output reports, introduced in Simon's patch in commit d4ae650a. According to the specification, any sane device should not care about values of unused bits. What is worse, the zeroing is done in a way which is broken and might clear certain bits in output reports which are actually _used_ - a device that has multiple fields with one value of the size 1 bit each might serve as an example of why this is bogus - the second call of hid_output_report() would clear the first bit of report, which has already been set up previously. This patch will break LEDs on SpaceNavigator, because this device is broken and takes into account the bits which it shouldn't touch. The quirk for this particular device will be provided in a separate patch. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/hid/hid-core.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 1ecad3ecef2b..f6fb5b3d6bc6 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -876,10 +876,6 @@ static void hid_output_field(struct hid_field *field, __u8 *data)
unsigned size = field->report_size;
unsigned n;
- /* make sure the unused bits in the last byte are zeros */
- if (count > 0 && size > 0)
- data[(count*size-1)/8] = 0;
-
for (n = 0; n < count; n++) {
if (field->logical_minimum < 0) /* signed values */
implement(data, offset + n * size, size, s32ton(field->value[n], size));