Просмотр исходного кода

Add and use libusb_set_auto_detach_kernel_driver for the Switch 2 driver

Vicki Pfau 4 недель назад
Родитель
Сommit
e1b8ad0380
3 измененных файлов с 3 добавлено и 0 удалено
  1. 1 0
      src/joystick/hidapi/SDL_hidapi_switch2.c
  2. 1 0
      src/misc/SDL_libusb.c
  3. 1 0
      src/misc/SDL_libusb.h

+ 1 - 0
src/joystick/hidapi/SDL_hidapi_switch2.c

@@ -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);

+ 1 - 0
src/misc/SDL_libusb.c

@@ -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)

+ 1 - 0
src/misc/SDL_libusb.h

@@ -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);