@@ -27,6 +27,11 @@ static DEFINE_IDA(ps_player_id_allocator);
27
27
28
28
#define HID_PLAYSTATION_VERSION_PATCH 0x8000
29
29
30
+ enum PS_TYPE {
31
+ PS_TYPE_PS4_DUALSHOCK4 ,
32
+ PS_TYPE_PS5_DUALSENSE ,
33
+ };
34
+
30
35
/* Base class for playstation devices. */
31
36
struct ps_device {
32
37
struct list_head list ;
@@ -2687,17 +2692,14 @@ static int ps_probe(struct hid_device *hdev, const struct hid_device_id *id)
2687
2692
goto err_stop ;
2688
2693
}
2689
2694
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 ) {
2693
2696
dev = dualshock4_create (hdev );
2694
2697
if (IS_ERR (dev )) {
2695
2698
hid_err (hdev , "Failed to create dualshock4.\n" );
2696
2699
ret = PTR_ERR (dev );
2697
2700
goto err_close ;
2698
2701
}
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 ) {
2701
2703
dev = dualsense_create (hdev );
2702
2704
if (IS_ERR (dev )) {
2703
2705
hid_err (hdev , "Failed to create dualsense.\n" );
@@ -2731,16 +2733,26 @@ static void ps_remove(struct hid_device *hdev)
2731
2733
2732
2734
static const struct hid_device_id ps_devices [] = {
2733
2735
/* 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
+
2739
2747
/* 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 },
2744
2756
{ }
2745
2757
};
2746
2758
MODULE_DEVICE_TABLE (hid , ps_devices );
0 commit comments