From 66572938807e8f41bea771a4e2aa4861888ca92d Mon Sep 17 00:00:00 2001 From: Simon Budig Date: Mon, 15 Jan 2007 17:28:47 +0100 Subject: [PATCH] --- yaml --- r: 45543 b: refs/heads/master c: d4ae650a904612ffb7edd3f28b69b022988d2466 h: refs/heads/master i: 45541: 55737b588d98111f0343b6981513ab8409464ab5 45539: 21c161d387b690934d224a9e1f6316ce0f8d78cb 45535: dcdbb71cf1814c44a94f4319450c03d1e394e627 v: v3 --- [refs] | 2 +- trunk/drivers/hid/hid-core.c | 4 ++++ trunk/drivers/hid/hid-input.c | 19 ++++++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 5e419edead17..e37caf73d59e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 641266fdaa3c137c632f8ad2e4124248bafe7a98 +refs/heads/master: d4ae650a904612ffb7edd3f28b69b022988d2466 diff --git a/trunk/drivers/hid/hid-core.c b/trunk/drivers/hid/hid-core.c index 1e1a7770a6b9..38db8321b211 100644 --- a/trunk/drivers/hid/hid-core.c +++ b/trunk/drivers/hid/hid-core.c @@ -880,6 +880,10 @@ 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)); diff --git a/trunk/drivers/hid/hid-input.c b/trunk/drivers/hid/hid-input.c index 28689e3eb552..95b9573c5f93 100644 --- a/trunk/drivers/hid/hid-input.c +++ b/trunk/drivers/hid/hid-input.c @@ -364,9 +364,22 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel break; case HID_UP_LED: - if (((usage->hid - 1) & 0xffff) >= LED_MAX) - goto ignore; - map_led((usage->hid - 1) & 0xffff); + + switch (usage->hid & 0xffff) { /* HID-Value: */ + case 0x01: map_led (LED_NUML); break; /* "Num Lock" */ + case 0x02: map_led (LED_CAPSL); break; /* "Caps Lock" */ + case 0x03: map_led (LED_SCROLLL); break; /* "Scroll Lock" */ + case 0x04: map_led (LED_COMPOSE); break; /* "Compose" */ + case 0x05: map_led (LED_KANA); break; /* "Kana" */ + case 0x27: map_led (LED_SLEEP); break; /* "Stand-By" */ + case 0x4c: map_led (LED_SUSPEND); break; /* "System Suspend" */ + case 0x09: map_led (LED_MUTE); break; /* "Mute" */ + case 0x4b: map_led (LED_MISC); break; /* "Generic Indicator" */ + case 0x19: map_led (LED_MAIL); break; /* "Message Waiting" */ + case 0x4d: map_led (LED_CHARGING); break; /* "External Power Connected" */ + + default: goto ignore; + } break; case HID_UP_DIGITIZER: