diff options
| -rw-r--r-- | drivers/input/mouse/elan_i2c_core.c | 1 | ||||
| -rw-r--r-- | drivers/input/rmi4/rmi_f30.c | 5 | ||||
| -rw-r--r-- | drivers/input/tablet/gtco.c | 17 |
3 files changed, 14 insertions, 9 deletions
diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c index 0e761d079dc4..6d6b092e2da9 100644 --- a/drivers/input/mouse/elan_i2c_core.c +++ b/drivers/input/mouse/elan_i2c_core.c | |||
| @@ -1258,6 +1258,7 @@ static const struct acpi_device_id elan_acpi_id[] = { | |||
| 1258 | { "ELAN0605", 0 }, | 1258 | { "ELAN0605", 0 }, |
| 1259 | { "ELAN0609", 0 }, | 1259 | { "ELAN0609", 0 }, |
| 1260 | { "ELAN060B", 0 }, | 1260 | { "ELAN060B", 0 }, |
| 1261 | { "ELAN0611", 0 }, | ||
| 1261 | { "ELAN1000", 0 }, | 1262 | { "ELAN1000", 0 }, |
| 1262 | { } | 1263 | { } |
| 1263 | }; | 1264 | }; |
diff --git a/drivers/input/rmi4/rmi_f30.c b/drivers/input/rmi4/rmi_f30.c index 34dfee555b20..82e0f0d43d55 100644 --- a/drivers/input/rmi4/rmi_f30.c +++ b/drivers/input/rmi4/rmi_f30.c | |||
| @@ -232,9 +232,10 @@ static int rmi_f30_map_gpios(struct rmi_function *fn, | |||
| 232 | unsigned int trackstick_button = BTN_LEFT; | 232 | unsigned int trackstick_button = BTN_LEFT; |
| 233 | bool button_mapped = false; | 233 | bool button_mapped = false; |
| 234 | int i; | 234 | int i; |
| 235 | int button_count = min_t(u8, f30->gpioled_count, TRACKSTICK_RANGE_END); | ||
| 235 | 236 | ||
| 236 | f30->gpioled_key_map = devm_kcalloc(&fn->dev, | 237 | f30->gpioled_key_map = devm_kcalloc(&fn->dev, |
| 237 | f30->gpioled_count, | 238 | button_count, |
| 238 | sizeof(f30->gpioled_key_map[0]), | 239 | sizeof(f30->gpioled_key_map[0]), |
| 239 | GFP_KERNEL); | 240 | GFP_KERNEL); |
| 240 | if (!f30->gpioled_key_map) { | 241 | if (!f30->gpioled_key_map) { |
| @@ -242,7 +243,7 @@ static int rmi_f30_map_gpios(struct rmi_function *fn, | |||
| 242 | return -ENOMEM; | 243 | return -ENOMEM; |
| 243 | } | 244 | } |
| 244 | 245 | ||
| 245 | for (i = 0; i < f30->gpioled_count; i++) { | 246 | for (i = 0; i < button_count; i++) { |
| 246 | if (!rmi_f30_is_valid_button(i, f30->ctrl)) | 247 | if (!rmi_f30_is_valid_button(i, f30->ctrl)) |
| 247 | continue; | 248 | continue; |
| 248 | 249 | ||
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index b796e891e2ee..4b8b9d7aa75e 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c | |||
| @@ -230,13 +230,17 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report, | |||
| 230 | 230 | ||
| 231 | /* Walk this report and pull out the info we need */ | 231 | /* Walk this report and pull out the info we need */ |
| 232 | while (i < length) { | 232 | while (i < length) { |
| 233 | prefix = report[i]; | 233 | prefix = report[i++]; |
| 234 | |||
| 235 | /* Skip over prefix */ | ||
| 236 | i++; | ||
| 237 | 234 | ||
| 238 | /* Determine data size and save the data in the proper variable */ | 235 | /* Determine data size and save the data in the proper variable */ |
| 239 | size = PREF_SIZE(prefix); | 236 | size = (1U << PREF_SIZE(prefix)) >> 1; |
| 237 | if (i + size > length) { | ||
| 238 | dev_err(ddev, | ||
| 239 | "Not enough data (need %d, have %d)\n", | ||
| 240 | i + size, length); | ||
| 241 | break; | ||
| 242 | } | ||
| 243 | |||
| 240 | switch (size) { | 244 | switch (size) { |
| 241 | case 1: | 245 | case 1: |
| 242 | data = report[i]; | 246 | data = report[i]; |
| @@ -244,8 +248,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report, | |||
| 244 | case 2: | 248 | case 2: |
| 245 | data16 = get_unaligned_le16(&report[i]); | 249 | data16 = get_unaligned_le16(&report[i]); |
| 246 | break; | 250 | break; |
| 247 | case 3: | 251 | case 4: |
| 248 | size = 4; | ||
| 249 | data32 = get_unaligned_le32(&report[i]); | 252 | data32 = get_unaligned_le32(&report[i]); |
| 250 | break; | 253 | break; |
| 251 | } | 254 | } |
