Skip to content

Commit 8f607e0

Browse files
Max StaudtJiri Kosina
authored andcommitted
HID: playstation: Simplify device type ID
Distinguish PS4/PS5 type controllers using .driver_data in MODULE_DEVICE_TABLE rather than by VID/PID. This allows adding compatible controllers with different VID/PID. Signed-off-by: Max Staudt <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent c759302 commit 8f607e0

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

drivers/hid/hid-playstation.c

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ static DEFINE_IDA(ps_player_id_allocator);
2727

2828
#define HID_PLAYSTATION_VERSION_PATCH 0x8000
2929

30+
enum PS_TYPE {
31+
PS_TYPE_PS4_DUALSHOCK4,
32+
PS_TYPE_PS5_DUALSENSE,
33+
};
34+
3035
/* Base class for playstation devices. */
3136
struct ps_device {
3237
struct list_head list;
@@ -2687,17 +2692,14 @@ static int ps_probe(struct hid_device *hdev, const struct hid_device_id *id)
26872692
goto err_stop;
26882693
}
26892694

2690-
if (hdev->product == USB_DEVICE_ID_SONY_PS4_CONTROLLER ||
2691-
hdev->product == USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 ||
2692-
hdev->product == USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) {
2695+
if (id->driver_data == PS_TYPE_PS4_DUALSHOCK4) {
26932696
dev = dualshock4_create(hdev);
26942697
if (IS_ERR(dev)) {
26952698
hid_err(hdev, "Failed to create dualshock4.\n");
26962699
ret = PTR_ERR(dev);
26972700
goto err_close;
26982701
}
2699-
} else if (hdev->product == USB_DEVICE_ID_SONY_PS5_CONTROLLER ||
2700-
hdev->product == USB_DEVICE_ID_SONY_PS5_CONTROLLER_2) {
2702+
} else if (id->driver_data == PS_TYPE_PS5_DUALSENSE) {
27012703
dev = dualsense_create(hdev);
27022704
if (IS_ERR(dev)) {
27032705
hid_err(hdev, "Failed to create dualsense.\n");
@@ -2731,16 +2733,26 @@ static void ps_remove(struct hid_device *hdev)
27312733

27322734
static const struct hid_device_id ps_devices[] = {
27332735
/* Sony DualShock 4 controllers for PS4 */
2734-
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
2735-
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
2736-
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
2737-
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
2738-
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) },
2736+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
2737+
.driver_data = PS_TYPE_PS4_DUALSHOCK4 },
2738+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
2739+
.driver_data = PS_TYPE_PS4_DUALSHOCK4 },
2740+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
2741+
.driver_data = PS_TYPE_PS4_DUALSHOCK4 },
2742+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
2743+
.driver_data = PS_TYPE_PS4_DUALSHOCK4 },
2744+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE),
2745+
.driver_data = PS_TYPE_PS4_DUALSHOCK4 },
2746+
27392747
/* Sony DualSense controllers for PS5 */
2740-
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
2741-
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
2742-
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER_2) },
2743-
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER_2) },
2748+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER),
2749+
.driver_data = PS_TYPE_PS5_DUALSENSE },
2750+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER),
2751+
.driver_data = PS_TYPE_PS5_DUALSENSE },
2752+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER_2),
2753+
.driver_data = PS_TYPE_PS5_DUALSENSE },
2754+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER_2),
2755+
.driver_data = PS_TYPE_PS5_DUALSENSE },
27442756
{ }
27452757
};
27462758
MODULE_DEVICE_TABLE(hid, ps_devices);

0 commit comments

Comments
 (0)