diff --git a/driver-bflsc.c b/driver-bflsc.c index ce0a59c0..cc49db21 100644 --- a/driver-bflsc.c +++ b/driver-bflsc.c @@ -807,13 +807,8 @@ static bool bflsc_detect_one(struct libusb_device *dev, struct usb_find_devices // TODO: fix ... everywhere ... bflsc->device_file = (FILE *)sc_info; - if (!usb_init(bflsc, dev, found)) { - applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)", - bflsc->drv->dname, - (int)(bflsc->usbinfo.bus_number), - (int)(bflsc->usbinfo.device_address)); + if (!usb_init(bflsc, dev, found)) goto shin; - } sprintf(devpath, "%d:%d", (int)(bflsc->usbinfo.bus_number), diff --git a/driver-bitforce.c b/driver-bitforce.c index cc4e4121..e1963f8d 100644 --- a/driver-bitforce.c +++ b/driver-bitforce.c @@ -179,19 +179,13 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic bitforce->deven = DEV_ENABLED; bitforce->threads = 1; - if (!usb_init(bitforce, dev, found)) { - applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)", - bitforce->drv->dname, - (int)(bitforce->usbinfo.bus_number), - (int)(bitforce->usbinfo.device_address)); + if (!usb_init(bitforce, dev, found)) goto shin; - } sprintf(devpath, "%d:%d", (int)(bitforce->usbinfo.bus_number), (int)(bitforce->usbinfo.device_address)); - // Allow 2 complete attempts if the 1st time returns an unrecognised reply ident_first = true; retry: diff --git a/driver-modminer.c b/driver-modminer.c index 63582738..f20e555d 100644 --- a/driver-modminer.c +++ b/driver-modminer.c @@ -126,13 +126,8 @@ static bool modminer_detect_one(struct libusb_device *dev, struct usb_find_devic mutex_init(modminer->modminer_mutex); modminer->fpgaid = (char)0; - if (!usb_init(modminer, dev, found)) { - applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)", - modminer->drv->dname, - (int)(modminer->usbinfo.bus_number), - (int)(modminer->usbinfo.device_address)); + if (!usb_init(modminer, dev, found)) goto shin; - } sprintf(devpath, "%d:%d", (int)(modminer->usbinfo.bus_number), diff --git a/usbutils.c b/usbutils.c index f133831b..37038624 100644 --- a/usbutils.c +++ b/usbutils.c @@ -1217,7 +1217,11 @@ static void release_cgpu(struct cgpu_info *cgpu) cgminer_usb_unlock_bd(cgpu->drv, cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address); } -bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) +#define USB_INIT_FAIL 0 +#define USB_INIT_OK 1 +#define USB_INIT_IGNORE 2 + +static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) { struct cg_usb_device *cgusb = NULL; struct libusb_config_descriptor *config = NULL; @@ -1226,6 +1230,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find unsigned char strbuf[STRBUFLEN+1]; char devstr[STRBUFLEN+1]; int err, i, j, k; + int bad = USB_INIT_FAIL; cgpu->usbinfo.bus_number = libusb_get_bus_number(dev); cgpu->usbinfo.device_address = libusb_get_device_address(dev); @@ -1301,8 +1306,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find err, devstr); goto cldame; } - if (strcmp((char *)man, found->iManufacturer)) + if (strcmp((char *)man, found->iManufacturer)) { + bad = USB_INIT_IGNORE; goto cldame; + } } if (found->iProduct) { @@ -1317,8 +1324,10 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find err, devstr); goto cldame; } - if (strcmp((char *)prod, found->iProduct)) + if (strcmp((char *)prod, found->iProduct)) { + bad = USB_INIT_IGNORE; goto cldame; + } } err = libusb_set_configuration(cgusb->handle, found->config); @@ -1435,7 +1444,7 @@ bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find cgpu->drv->name = (char *)(found->name); } - return true; + return USB_INIT_OK; cldame: @@ -1448,7 +1457,22 @@ dame: cgusb = free_cgusb(cgusb); - return false; + return bad; +} + +bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found) +{ + int ret; + + ret = _usb_init(cgpu, dev, found); + + if (ret == USB_INIT_FAIL) + applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)", + cgpu->drv->dname, + (int)(cgpu->usbinfo.bus_number), + (int)(cgpu->usbinfo.device_address)); + + return (ret == USB_INIT_OK); } static bool usb_check_device(struct device_drv *drv, struct libusb_device *dev, struct usb_find_devices *look)