@@ -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. */
3136struct 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
27322734static 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};
27462758MODULE_DEVICE_TABLE (hid , ps_devices );
0 commit comments