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