diff options
| -rw-r--r-- | drivers/hid/hid-logitech-hidpp.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c index e1f3aca4ba31..7efbd8bd49c1 100644 --- a/drivers/hid/hid-logitech-hidpp.c +++ b/drivers/hid/hid-logitech-hidpp.c | |||
| @@ -282,6 +282,33 @@ static inline bool hidpp_report_is_connect_event(struct hidpp_report *report) | |||
| 282 | (report->rap.sub_id == 0x41); | 282 | (report->rap.sub_id == 0x41); |
| 283 | } | 283 | } |
| 284 | 284 | ||
| 285 | /** | ||
| 286 | * hidpp_prefix_name() prefixes the current given name with "Logitech ". | ||
| 287 | */ | ||
| 288 | static void hidpp_prefix_name(char **name, int name_length) | ||
| 289 | { | ||
| 290 | #define PREFIX_LENGTH 9 /* "Logitech " */ | ||
| 291 | |||
| 292 | int new_length; | ||
| 293 | char *new_name; | ||
| 294 | |||
| 295 | if (name_length > PREFIX_LENGTH && | ||
| 296 | strncmp(*name, "Logitech ", PREFIX_LENGTH) == 0) | ||
| 297 | /* The prefix has is already in the name */ | ||
| 298 | return; | ||
| 299 | |||
| 300 | new_length = PREFIX_LENGTH + name_length; | ||
| 301 | new_name = kzalloc(new_length, GFP_KERNEL); | ||
| 302 | if (!new_name) | ||
| 303 | return; | ||
| 304 | |||
| 305 | snprintf(new_name, new_length, "Logitech %s", *name); | ||
| 306 | |||
| 307 | kfree(*name); | ||
| 308 | |||
| 309 | *name = new_name; | ||
| 310 | } | ||
| 311 | |||
| 285 | /* -------------------------------------------------------------------------- */ | 312 | /* -------------------------------------------------------------------------- */ |
| 286 | /* HIDP++ 1.0 commands */ | 313 | /* HIDP++ 1.0 commands */ |
| 287 | /* -------------------------------------------------------------------------- */ | 314 | /* -------------------------------------------------------------------------- */ |
| @@ -321,6 +348,10 @@ static char *hidpp_get_unifying_name(struct hidpp_device *hidpp_dev) | |||
| 321 | return NULL; | 348 | return NULL; |
| 322 | 349 | ||
| 323 | memcpy(name, &response.rap.params[2], len); | 350 | memcpy(name, &response.rap.params[2], len); |
| 351 | |||
| 352 | /* include the terminating '\0' */ | ||
| 353 | hidpp_prefix_name(&name, len + 1); | ||
| 354 | |||
| 324 | return name; | 355 | return name; |
| 325 | } | 356 | } |
| 326 | 357 | ||
| @@ -498,6 +529,9 @@ static char *hidpp_get_device_name(struct hidpp_device *hidpp) | |||
| 498 | index += ret; | 529 | index += ret; |
| 499 | } | 530 | } |
| 500 | 531 | ||
| 532 | /* include the terminating '\0' */ | ||
| 533 | hidpp_prefix_name(&name, __name_length + 1); | ||
| 534 | |||
| 501 | return name; | 535 | return name; |
| 502 | } | 536 | } |
| 503 | 537 | ||
