SDL: Added an internal type for the Nintendo Switch 2 Pro controller

From e759cc850e29d8aa8e13e0cdec66fe285f54ba89 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 18 May 2026 09:23:38 -0700
Subject: [PATCH] Added an internal type for the Nintendo Switch 2 Pro
 controller

---
 src/joystick/SDL_joystick.c    | 5 ++++-
 src/joystick/controller_list.h | 2 +-
 src/joystick/controller_type.h | 1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
index 3e3fb95d5b69d..1b8278fc12faf 100644
--- a/src/joystick/SDL_joystick.c
+++ b/src/joystick/SDL_joystick.c
@@ -3163,6 +3163,7 @@ SDL_GamepadType SDL_GetGamepadTypeFromVIDPID(Uint16 vendor, Uint16 product, cons
             }
             break;
         case k_eControllerType_SwitchProController:
+        case k_eControllerType_Switch2ProController:
         case k_eControllerType_SwitchInputOnlyController:
             type = SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO;
             break;
@@ -3287,7 +3288,9 @@ bool SDL_IsJoystickDualSenseEdge(Uint16 vendor_id, Uint16 product_id)
 bool SDL_IsJoystickNintendoSwitchPro(Uint16 vendor_id, Uint16 product_id)
 {
     EControllerType eType = GuessControllerType(vendor_id, product_id);
-    return eType == k_eControllerType_SwitchProController || eType == k_eControllerType_SwitchInputOnlyController;
+    return eType == k_eControllerType_SwitchProController ||
+           eType == k_eControllerType_Switch2ProController ||
+           eType == k_eControllerType_SwitchInputOnlyController;
 }
 
 bool SDL_IsJoystickNintendoSwitchProInputOnly(Uint16 vendor_id, Uint16 product_id)
diff --git a/src/joystick/controller_list.h b/src/joystick/controller_list.h
index 7b53741a533a8..428035427ee61 100644
--- a/src/joystick/controller_list.h
+++ b/src/joystick/controller_list.h
@@ -601,7 +601,7 @@ static const ControllerDescription_t arrControllers[] = {
     // * ZhiXu Gamepad Wireless
     // * Sunwaytek Wireless Motion Controller for Nintendo Switch
 	{ MAKE_CONTROLLER_ID( 0x057e, 0x2009 ), k_eControllerType_SwitchProController, NULL },        // Nintendo Switch Pro Controller
-	{ MAKE_CONTROLLER_ID( 0x057e, 0x2069 ), k_eControllerType_SwitchProController, NULL },        // Nintendo Switch 2 Pro Controller
+	{ MAKE_CONTROLLER_ID( 0x057e, 0x2069 ), k_eControllerType_Switch2ProController, NULL },        // Nintendo Switch 2 Pro Controller
     //{ MAKE_CONTROLLER_ID( 0x057e, 0x2017 ), k_eControllerType_SwitchProController, NULL },        // Nintendo Online SNES Controller
     //{ MAKE_CONTROLLER_ID( 0x057e, 0x2019 ), k_eControllerType_SwitchProController, NULL },        // Nintendo Online N64 Controller
     //{ MAKE_CONTROLLER_ID( 0x057e, 0x201e ), k_eControllerType_SwitchProController, NULL },        // Nintendo Online SEGA Genesis Controller
diff --git a/src/joystick/controller_type.h b/src/joystick/controller_type.h
index cc49ae6f3c178..028a83dfacdd8 100644
--- a/src/joystick/controller_type.h
+++ b/src/joystick/controller_type.h
@@ -63,6 +63,7 @@ typedef enum
 	k_eControllerType_PS5EdgeController = 48,
 	k_eControllerType_HoriSteamController = 49,
 	k_eControllerType_8BitDoController = 50,
+	k_eControllerType_Switch2ProController = 51,
 	k_eControllerType_LastController,			// Don't add game controllers below this enumeration - this enumeration can change value
 
 	// Keyboards and Mice