Add magic BF1 bitfury open and close control sequences.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
diff --git a/driver-bitfury.c b/driver-bitfury.c
index f1fd3de..6ec794a 100644
--- a/driver-bitfury.c
+++ b/driver-bitfury.c
@@ -14,6 +14,23 @@
struct device_drv bitfury_drv;
+static void bitfury_open(struct cgpu_info *bitfury)
+{
+ /* Magic open sequence */
+ usb_transfer(bitfury, 0x21, 0x22, 0x0003, 0, C_BFO_OPEN);
+}
+
+static void bitfury_close(struct cgpu_info *bitfury)
+{
+ /* Magic close sequence */
+ usb_transfer(bitfury, 0x21, 0x22, 0, 0, C_BFO_CLOSE);
+}
+
+static void bitfury_initialise(struct cgpu_info *bitfury)
+{
+ bitfury_open(bitfury);
+}
+
static bool bitfury_detect_one(struct libusb_device *dev, struct usb_find_devices *found)
{
struct cgpu_info *bitfury;
@@ -26,7 +43,11 @@ static bool bitfury_detect_one(struct libusb_device *dev, struct usb_find_device
}
applog(LOG_WARNING, "%s%d: Found at %s", bitfury->drv->name,
bitfury->device_id, bitfury->device_path);
- return true;
+
+ bitfury_initialise(bitfury);
+
+ bitfury_close(bitfury);
+ return false;
}
static void bitfury_detect(void)
@@ -69,6 +90,9 @@ static void bitfury_init(struct cgpu_info __maybe_unused *bitfury)
static void bitfury_shutdown(struct thr_info __maybe_unused *thr)
{
+ struct cgpu_info *bitfury = thr->cgpu;
+
+ bitfury_close(bitfury);
}
/* Currently hardcoded to BF1 devices */
diff --git a/usbutils.h b/usbutils.h
index 05a7b67..29501e2 100644
--- a/usbutils.h
+++ b/usbutils.h
@@ -321,7 +321,9 @@ struct cg_usb_info {
USB_ADD_COMMAND(C_FTDI_STATUS, "FTDIStatus") \
USB_ADD_COMMAND(C_ENABLE_UART, "EnableUART") \
USB_ADD_COMMAND(C_BB_SET_VOLTAGE, "SetCoreVoltage") \
- USB_ADD_COMMAND(C_BB_GET_VOLTAGE, "GetCoreVoltage")
+ USB_ADD_COMMAND(C_BB_GET_VOLTAGE, "GetCoreVoltage") \
+ USB_ADD_COMMAND(C_BFO_OPEN, "BF1Open") \
+ USB_ADD_COMMAND(C_BFO_CLOSE, "BF1Close")
/* Create usb_cmds enum from USB_PARSE_COMMANDS macro */
#define USB_ADD_COMMAND(X, Y) X,