X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Ffx2lafw%2Fprotocol.c;h=c87f659d07e249a28bfc5a771bf324eeb592934c;hb=41812aca436805b0614f2a8f31cf2f8ce494aea0;hp=6681b9efd67885009973fc7dcfad9a9e954b21ff;hpb=4df5739a9f4272e57d737dc3a957b2f723bbaad1;p=libsigrok.git diff --git a/src/hardware/fx2lafw/protocol.c b/src/hardware/fx2lafw/protocol.c index 6681b9ef..c87f659d 100644 --- a/src/hardware/fx2lafw/protocol.c +++ b/src/hardware/fx2lafw/protocol.c @@ -194,7 +194,7 @@ SR_PRIV int fx2lafw_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) uint8_t revid; char connection_id[64]; - drvc = di->priv; + drvc = di->context; devc = sdi->priv; usb = sdi->conn; @@ -244,6 +244,16 @@ SR_PRIV int fx2lafw_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) break; } + if (libusb_has_capability(LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)) { + if (libusb_kernel_driver_active(usb->devhdl, USB_INTERFACE) == 1) { + if ((ret = libusb_detach_kernel_driver(usb->devhdl, USB_INTERFACE)) < 0) { + sr_err("Failed to detach kernel driver: %s.", + libusb_error_name(ret)); + return SR_ERR; + } + } + } + ret = command_get_fw_version(usb->devhdl, &vi); if (ret != SR_OK) { sr_err("Failed to get firmware version."); @@ -375,7 +385,7 @@ static void resubmit_transfer(struct libusb_transfer *transfer) } -SR_PRIV void fx2lafw_receive_transfer(struct libusb_transfer *transfer) +SR_PRIV void LIBUSB_CALL fx2lafw_receive_transfer(struct libusb_transfer *transfer) { struct sr_dev_inst *sdi; struct dev_context *devc;