|
@@ -282,6 +282,33 @@ static inline bool hidpp_report_is_connect_event(struct hidpp_report *report)
|
|
|
(report->rap.sub_id == 0x41);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * hidpp_prefix_name() prefixes the current given name with "Logitech ".
|
|
|
+ */
|
|
|
+static void hidpp_prefix_name(char **name, int name_length)
|
|
|
+{
|
|
|
+#define PREFIX_LENGTH 9 /* "Logitech " */
|
|
|
+
|
|
|
+ int new_length;
|
|
|
+ char *new_name;
|
|
|
+
|
|
|
+ if (name_length > PREFIX_LENGTH &&
|
|
|
+ strncmp(*name, "Logitech ", PREFIX_LENGTH) == 0)
|
|
|
+ /* The prefix has is already in the name */
|
|
|
+ return;
|
|
|
+
|
|
|
+ new_length = PREFIX_LENGTH + name_length;
|
|
|
+ new_name = kzalloc(new_length, GFP_KERNEL);
|
|
|
+ if (!new_name)
|
|
|
+ return;
|
|
|
+
|
|
|
+ snprintf(new_name, new_length, "Logitech %s", *name);
|
|
|
+
|
|
|
+ kfree(*name);
|
|
|
+
|
|
|
+ *name = new_name;
|
|
|
+}
|
|
|
+
|
|
|
/* -------------------------------------------------------------------------- */
|
|
|
/* HIDP++ 1.0 commands */
|
|
|
/* -------------------------------------------------------------------------- */
|
|
@@ -321,6 +348,10 @@ static char *hidpp_get_unifying_name(struct hidpp_device *hidpp_dev)
|
|
|
return NULL;
|
|
|
|
|
|
memcpy(name, &response.rap.params[2], len);
|
|
|
+
|
|
|
+ /* include the terminating '\0' */
|
|
|
+ hidpp_prefix_name(&name, len + 1);
|
|
|
+
|
|
|
return name;
|
|
|
}
|
|
|
|
|
@@ -498,6 +529,9 @@ static char *hidpp_get_device_name(struct hidpp_device *hidpp)
|
|
|
index += ret;
|
|
|
}
|
|
|
|
|
|
+ /* include the terminating '\0' */
|
|
|
+ hidpp_prefix_name(&name, __name_length + 1);
|
|
|
+
|
|
|
return name;
|
|
|
}
|
|
|
|