Skip to content

Commit

Permalink
usb_device.c: detach/attach usb kernel driver explicitly
Browse files Browse the repository at this point in the history
Use `libusb_detach_kernel_driver` and `libusb_attach_kernel_driver`
instead of `libusb_auto_detach_kernel_driver` to be compatible with
older libusb versions without changing the behavior.

    TEST=Build with libusb >= 1.0.9

Change-Id: I1363fea13368b7ac1e9a3829864d06d123c4e157
Signed-off-by: Thomas Heijligen <[email protected]>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/67073
Reviewed-by: Peter Marheine <[email protected]>
Tested-by: build bot (Jenkins) <[email protected]>
Reviewed-by: Edward O'Callaghan <[email protected]>
Reviewed-by: Anastasia Klimchuk <[email protected]>
  • Loading branch information
heijligen authored and Anastasia Klimchuk committed Apr 12, 2023
1 parent 3eaef75 commit cb85aec
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions usb_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,9 +342,11 @@ int usb_device_claim(struct usb_device *device)
}
}

ret = LIBUSB(libusb_set_auto_detach_kernel_driver(device->handle, 1));
if (ret != 0) {
msg_perr("USB: Failed to enable auto kernel driver detach\n");
ret = LIBUSB(libusb_detach_kernel_driver(device->handle,
device->interface_descriptor->bInterfaceNumber));
if (ret != 0 && ret != LIBUSB_ERROR_NOT_FOUND && ret != LIBUSB_ERROR_NOT_SUPPORTED) {
msg_perr("Cannot detach the existing usb driver. %s\n",
libusb_error_name(ret));
return ret;
}

Expand All @@ -355,6 +357,8 @@ int usb_device_claim(struct usb_device *device)
if (ret != 0) {
msg_perr("USB: Could not claim device interface %d\n",
device->interface_descriptor->bInterfaceNumber);
libusb_attach_kernel_driver(device->handle,
device->interface_descriptor->bInterfaceNumber);
return ret;
}

Expand Down Expand Up @@ -384,6 +388,8 @@ struct usb_device *usb_device_free(struct usb_device *device)
if (device->handle != NULL) {
libusb_release_interface(device->handle,
device->interface_descriptor->bInterfaceNumber);
libusb_attach_kernel_driver(device->handle,
device->interface_descriptor->bInterfaceNumber);
libusb_close(device->handle);
}

Expand Down

0 comments on commit cb85aec

Please sign in to comment.