aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/mouse/elan_i2c_core.c1
-rw-r--r--drivers/input/rmi4/rmi_f30.c5
-rw-r--r--drivers/input/tablet/gtco.c17
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 }