From cb85aec5cec75e5750a1d846411d8a42bf1b9f7b Mon Sep 17 00:00:00 2001 From: Thomas Heijligen Date: Thu, 25 Aug 2022 13:41:14 +0200 Subject: usb_device.c: detach/attach usb kernel driver explicitly 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 Reviewed-on: https://review.coreboot.org/c/flashrom/+/67073 Reviewed-by: Peter Marheine Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan Reviewed-by: Anastasia Klimchuk --- usb_device.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/usb_device.c b/usb_device.c index b3c966cc..c9c8d92a 100644 --- a/usb_device.c +++ b/usb_device.c @@ -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; } @@ -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; } @@ -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); } -- cgit v1.2.3