--- rtl-sdr-0.6/src/librtlsdr.c.orig	2018-08-26 14:54:51.000000000 +0200
+++ rtl-sdr-0.6/src/librtlsdr.c	2019-10-02 10:35:11.510191867 +0200
@@ -534,6 +534,7 @@
 int rtlsdr_demod_write_reg(rtlsdr_dev_t *dev, uint8_t page, uint16_t addr, uint16_t val, uint8_t len)
 {
 	int r;
+	int retries = 2;
 	unsigned char data[2];
 	uint16_t index = 0x10 | page;
 	addr = (addr << 8) | 0x20;
@@ -545,13 +546,15 @@
 
 	data[1] = val & 0xff;
 
-	r = libusb_control_transfer(dev->devh, CTRL_OUT, 0, addr, index, data, len, CTRL_TIMEOUT);
-
+	do {
+		r = libusb_control_transfer(dev->devh, CTRL_OUT, 0, addr, index, data, len, CTRL_TIMEOUT);
+		rtlsdr_demod_read_reg(dev, 0x0a, 0x01, 1);
+		retries--;
+	} while (retries > 0 && r < 0);
+    
 	if (r < 0)
 		fprintf(stderr, "%s failed with %d\n", __FUNCTION__, r);
 
-	rtlsdr_demod_read_reg(dev, 0x0a, 0x01, 1);
-
 	return (r == len) ? 0 : -1;
 }
 
