diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c
index d693a86..517cecc 100644
--- a/plugins/sixaxis.c
+++ b/plugins/sixaxis.c
char **sysfs_path)
{
struct udev_device *hid_parent;
+ const char *hid_name;
const char *hid_id;
const struct cable_pairing *cp;
uint16_t vid, pid;
if (!hid_id || sscanf(hid_id, "%hx:%hx:%hx", bus, &vid, &pid) != 3)
return NULL;
- cp = get_pairing(vid, pid);
+ hid_name = udev_device_get_property_value(hid_parent, "HID_NAME");
+
+ cp = get_pairing(vid, pid, hid_name);
*sysfs_path = g_strdup(udev_device_get_syspath(udevice));
return cp;
diff --git a/profiles/input/server.c b/profiles/input/server.c
index d8b4137..79cf08a 100644
--- a/profiles/input/server.c
+++ b/profiles/input/server.c
vid = btd_device_get_vendor(device);
pid = btd_device_get_product(device);
- cp = get_pairing(vid, pid);
+ cp = get_pairing(vid, pid, NULL);
if (cp && (cp->type == CABLE_PAIRING_SIXAXIS ||
cp->type == CABLE_PAIRING_DS4))
return true;
diff --git a/profiles/input/sixaxis.h b/profiles/input/sixaxis.h
index a3cda70..ab88319 100644
--- a/profiles/input/sixaxis.h
+++ b/profiles/input/sixaxis.h
};
static inline const struct cable_pairing *
-get_pairing(uint16_t vid, uint16_t pid)
+get_pairing(uint16_t vid, uint16_t pid, const char *name)
{
static const struct cable_pairing devices[] = {
{
.type = CABLE_PAIRING_SIXAXIS,
},
{
+ .name = "SHANWAN PS3 GamePad",
+ .source = 0x0002,
+ .vid = 0x054c,
+ .pid = 0x0268,
+ .version = 0x0000,
+ .type = CABLE_PAIRING_SIXAXIS,
+ },
+ {
.name = "Navigation Controller",
.source = 0x0002,
.vid = 0x054c,
if (devices[i].pid != pid)
continue;
+ if (name && strcmp(name, devices[i].name))
+ continue;
+
return &devices[i];
}