diff --git a/driver-avalon.c b/driver-avalon.c index 6543476f..34b20c82 100644 --- a/driver-avalon.c +++ b/driver-avalon.c @@ -229,37 +229,33 @@ static bool avalon_decode_nonce(struct thr_info *thr, struct cgpu_info *avalon, static int avalon_read(struct cgpu_info *avalon, char *buf, ssize_t len) { ssize_t aread = 0; - - while (len > 0) { - int amount, err, offset, cp; - char readbuf[AVALON_FTDI_READSIZE]; - - err = usb_read_once_timeout(avalon, readbuf, AVALON_FTDI_READSIZE, - &amount, AVALON_READ_TIMEOUT, - C_AVALON_READ); - if (err && err != LIBUSB_ERROR_TIMEOUT) { - applog(LOG_WARNING, "%s%i: Get avalon read got err %d", - avalon->drv->name, avalon->device_id, err); - nmsleep(AVALON_READ_TIMEOUT); - continue; - } - - if (amount < 3) - continue; - - offset = 2; - do { - cp = amount - 2; - if (cp > 62) - cp = 62; - memcpy(&buf[aread], readbuf, cp); - aread += cp; - amount -= cp + 2; - offset += 64; - } while (amount > 2); + int amount, err, offset, cp; + char readbuf[AVALON_FTDI_READSIZE]; + + err = usb_read_once_timeout(avalon, readbuf, len, &amount, + AVALON_READ_TIMEOUT, C_AVALON_READ); + if (err && err != LIBUSB_ERROR_TIMEOUT) { + applog(LOG_WARNING, "%s%i: Get avalon read got err %d", + avalon->drv->name, avalon->device_id, err); + nmsleep(AVALON_READ_TIMEOUT); + return 0; } - return AVA_GETS_OK; + if (amount < 3) + return 0; + + offset = 2; + do { + cp = amount - 2; + if (cp > 62) + cp = 62; + memcpy(&buf[aread], readbuf, cp); + aread += cp; + amount -= cp + 2; + offset += 64; + } while (amount > 2); + + return aread; } /* Wait until the ftdi chip returns a CTS saying we can send more data. The