- err = libusb_open(dev, &hdl);
- if (err != 0) {
- g_warning("failed to open device: %d", err);
- return 1;
+/*
+ * The libusbx darwin backend is broken: it can report a kernel driver being
+ * active, but detaching it always returns an error.
+ */
+#if !defined(__APPLE__)
+ if (libusb_kernel_driver_active(hdl, 0) == 1) {
+ if ((ret = libusb_detach_kernel_driver(hdl, 0)) < 0) {
+ sr_err("failed to detach kernel driver: %s",
+ libusb_error_name(ret));
+ return SR_ERR;
+ }