Add and use libusb_set_auto_detach_kernel_driver for the Switch 2 driver

This commit is contained in:
Vicki Pfau
2026-02-04 22:38:32 -08:00
committed by Sam Lantinga
parent b9743eabdd
commit e1b8ad0380
3 changed files with 3 additions and 0 deletions

View File

@@ -381,6 +381,7 @@ static bool HIDAPI_DriverSwitch2_InitUSB(SDL_HIDAPI_Device *device)
return SDL_SetError("Couldn't find bulk endpoints");
}
ctx->libusb->set_auto_detach_kernel_driver(ctx->device_handle, true);
int res = ctx->libusb->claim_interface(ctx->device_handle, ctx->interface_number);
if (res < 0) {
return SDL_SetError("Couldn't claim interface %d: %d\n", ctx->interface_number, res);

View File

@@ -79,6 +79,7 @@ bool SDL_InitLibUSB(SDL_LibUSBContext **ctx)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device_handle *, int), kernel_driver_active)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device_handle *, int), detach_kernel_driver)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device_handle *, int), attach_kernel_driver)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device_handle *, int), set_auto_detach_kernel_driver)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device_handle *, int, int), set_interface_alt_setting)
LOAD_LIBUSB_SYMBOL(struct libusb_transfer * (LIBUSB_CALL *)(int), alloc_transfer)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(struct libusb_transfer *), submit_transfer)

View File

@@ -57,6 +57,7 @@ typedef struct SDL_LibUSBContext
int (LIBUSB_CALL *kernel_driver_active)(libusb_device_handle *dev_handle, int interface_number);
int (LIBUSB_CALL *detach_kernel_driver)(libusb_device_handle *dev_handle, int interface_number);
int (LIBUSB_CALL *attach_kernel_driver)(libusb_device_handle *dev_handle, int interface_number);
int (LIBUSB_CALL *set_auto_detach_kernel_driver)(libusb_device_handle *dev_handle, int enable);
int (LIBUSB_CALL *set_interface_alt_setting)(libusb_device_handle *dev, int interface_number, int alternate_setting);
struct libusb_transfer * (LIBUSB_CALL *alloc_transfer)(int iso_packets);
int (LIBUSB_CALL *submit_transfer)(struct libusb_transfer *transfer);