Browse Source

Add complete close sequence to bf1 as it happens on serial.

Con Kolivas 12 years ago
parent
commit
f6e475d4fb
1 changed files with 14 additions and 11 deletions
  1. 14 11
      driver-bitfury.c

+ 14 - 11
driver-bitfury.c

@@ -14,26 +14,30 @@
 
 struct device_drv bitfury_drv;
 
+static void bitfury_empty_buffer(struct cgpu_info *bitfury)
+{
+	char buf[512];
+	int amount;
+
+	do {
+		usb_read(bitfury, buf, 512, &amount, C_PING);
+	} while (amount);
+}
+
 static void bitfury_open(struct cgpu_info *bitfury)
 {
 	/* Magic open sequence */
 	usb_transfer(bitfury, 0x21, 0x22, 0x0003, 0, C_BFO_OPEN);
+	bitfury_empty_buffer(bitfury);
 }
 
 static void bitfury_close(struct cgpu_info *bitfury)
 {
 	/* Magic close sequence */
 	usb_transfer(bitfury, 0x21, 0x22, 0, 0, C_BFO_CLOSE);
-}
-
-static void bitfury_empty_buffer(struct cgpu_info *bitfury)
-{
-	char buf[512];
-	int amount;
-
-	do {
-		usb_read(bitfury, buf, 512, &amount, C_PING);
-	} while (amount);
+	bitfury_empty_buffer(bitfury);
+	usb_transfer(bitfury, 0x23, 0x08, 0x9053, 1, C_BFO_CLOSE);
+	bitfury_empty_buffer(bitfury);
 }
 
 static void bitfury_identify(struct cgpu_info *bitfury)
@@ -64,7 +68,6 @@ static bool bitfury_detect_one(struct libusb_device *dev, struct usb_find_device
 		quit(1, "Failed to calloc info in bitfury_detect_one");
 	bitfury->device_data = info;
 
-	bitfury_empty_buffer(bitfury);
 	usb_buffer_enable(bitfury);
 
 	bitfury_open(bitfury);