mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-11 07:17:58 +00:00
usbutils - in init only change the config if needed
This commit is contained in:
parent
3245ec7ad5
commit
948f0057c4
52
usbutils.c
52
usbutils.c
@ -1485,6 +1485,7 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
|
|||||||
char devstr[STRBUFLEN+1];
|
char devstr[STRBUFLEN+1];
|
||||||
int err, i, j, k, pstate;
|
int err, i, j, k, pstate;
|
||||||
int bad = USB_INIT_FAIL;
|
int bad = USB_INIT_FAIL;
|
||||||
|
int cfg;
|
||||||
|
|
||||||
DEVLOCK(cgpu, pstate);
|
DEVLOCK(cgpu, pstate);
|
||||||
|
|
||||||
@ -1606,20 +1607,28 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = libusb_set_configuration(cgusb->handle, found->config);
|
cfg = -1;
|
||||||
if (err) {
|
err = libusb_get_configuration(cgusb->handle, &cfg);
|
||||||
switch(err) {
|
if (err)
|
||||||
case LIBUSB_ERROR_BUSY:
|
cfg = -1;
|
||||||
applog(LOG_WARNING,
|
|
||||||
"USB init, set config %d in use %s",
|
// Try to set it if we can't read it or it's different
|
||||||
found->config, devstr);
|
if (cfg != found->config) {
|
||||||
break;
|
err = libusb_set_configuration(cgusb->handle, found->config);
|
||||||
default:
|
if (err) {
|
||||||
applog(LOG_DEBUG,
|
switch(err) {
|
||||||
"USB init, failed to set config to %d, err %d %s",
|
case LIBUSB_ERROR_BUSY:
|
||||||
found->config, err, devstr);
|
applog(LOG_WARNING,
|
||||||
|
"USB init, set config %d in use %s",
|
||||||
|
found->config, devstr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
applog(LOG_DEBUG,
|
||||||
|
"USB init, failed to set config to %d, err %d %s",
|
||||||
|
found->config, err, devstr);
|
||||||
|
}
|
||||||
|
goto cldame;
|
||||||
}
|
}
|
||||||
goto cldame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = libusb_get_active_config_descriptor(dev, &config);
|
err = libusb_get_active_config_descriptor(dev, &config);
|
||||||
@ -1681,6 +1690,17 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
|
|||||||
goto cldame;
|
goto cldame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfg = -1;
|
||||||
|
err = libusb_get_configuration(cgusb->handle, &cfg);
|
||||||
|
if (err)
|
||||||
|
cfg = -1;
|
||||||
|
if (cfg != found->config) {
|
||||||
|
applog(LOG_WARNING,
|
||||||
|
"USB init, incorrect config (%d!=%d) after claim of %s",
|
||||||
|
cfg, found->config, devstr);
|
||||||
|
goto reldame;
|
||||||
|
}
|
||||||
|
|
||||||
cgusb->usbver = cgusb->descriptor->bcdUSB;
|
cgusb->usbver = cgusb->descriptor->bcdUSB;
|
||||||
|
|
||||||
// TODO: allow this with the right version of the libusb include and running library
|
// TODO: allow this with the right version of the libusb include and running library
|
||||||
@ -1732,6 +1752,10 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
|
|||||||
bad = USB_INIT_OK;
|
bad = USB_INIT_OK;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
|
reldame:
|
||||||
|
|
||||||
|
libusb_release_interface(cgusb->handle, found->interface);
|
||||||
|
|
||||||
cldame:
|
cldame:
|
||||||
|
|
||||||
cg_wlock(&cgusb_fd_lock);
|
cg_wlock(&cgusb_fd_lock);
|
||||||
@ -1897,6 +1921,8 @@ void usb_detect(struct device_drv *drv, bool (*device_detect)(struct libusb_devi
|
|||||||
|
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
applog(LOG_DEBUG, "USB scan devices: found no devices");
|
applog(LOG_DEBUG, "USB scan devices: found no devices");
|
||||||
|
else
|
||||||
|
nmsleep(166);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (total_count >= total_limit) {
|
if (total_count >= total_limit) {
|
||||||
|
Loading…
Reference in New Issue
Block a user