Commit f3837916fd1fea2cd2cb9c4a97bd41ec17dd6311

kanoi 2013-08-15T17:14:16

Merge pull request #476 from kanoi/master avalon for timeout allow d='calculate it' and fix uninitialised

diff --git a/ASIC-README b/ASIC-README
index 433b9c2..e485032 100644
--- a/ASIC-README
+++ b/ASIC-README
@@ -169,6 +169,7 @@ to replace it. It should be changed according to the frequency (last setting).
 It is possible to set this a little lower if you are trying to tune for short
 block mining (eg p2pool) but much lower and the device will start creating
 duplicate shares.
+A value of 'd' means cgminer will calculate it for you based on the frequency
 
 Sample settings for valid different frequencies (last 2 values):
 34:375 *
diff --git a/driver-avalon.c b/driver-avalon.c
index 29e65be..3af5361 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -17,6 +17,7 @@
 #include <stdio.h>
 #include <sys/time.h>
 #include <sys/types.h>
+#include <ctype.h>
 #include <dirent.h>
 #include <unistd.h>
 #ifndef WIN32
@@ -332,11 +333,17 @@ static int avalon_reset(struct cgpu_info *avalon, bool initial)
 	return 0;
 }
 
+static int avalon_calc_timeout(int frequency)
+{
+	return AVALON_TIMEOUT_FACTOR / frequency;
+}
+
 static bool get_options(int this_option_offset, int *baud, int *miner_count,
 			int *asic_count, int *timeout, int *frequency)
 {
 	char buf[BUFSIZ+1];
 	char *ptr, *comma, *colon, *colon2, *colon3, *colon4;
+	bool timeout_default;
 	size_t max;
 	int i, tmp;
 
@@ -419,18 +426,23 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
 					colon2, AVALON_DEFAULT_ASIC_NUM);
 			}
 
+			timeout_default = false;
 			if (colon3 && *colon3) {
 				colon4 = strchr(colon3, ':');
 				if (colon4)
 					*(colon4++) = '\0';
 
-				tmp = atoi(colon3);
-				if (tmp > 0 && tmp <= 0xff)
-					*timeout = tmp;
+				if (tolower(*colon3) == 'd')
+					timeout_default = true;
 				else {
-					quit(1, "Invalid avalon-options for "
-						"timeout (%s) must be 1 ~ %d",
-						colon3, 0xff);
+					tmp = atoi(colon3);
+					if (tmp > 0 && tmp <= 0xff)
+						*timeout = tmp;
+					else {
+						quit(1, "Invalid avalon-options for "
+							"timeout (%s) must be 1 ~ %d",
+							colon3, 0xff);
+					}
 				}
 				if (colon4 && *colon4) {
 					tmp = atoi(colon4);
@@ -439,6 +451,8 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
 						     AVALON_MIN_FREQUENCY, AVALON_MAX_FREQUENCY);
 					}
 					*frequency = tmp;
+					if (timeout_default)
+						*timeout = avalon_calc_timeout(*frequency);
 				}
 			}
 		}
@@ -645,8 +659,7 @@ static int bitburner_get_core_voltage(struct cgpu_info *avalon)
 
 static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found)
 {
-	int baud, uninitialised_var(miner_count), uninitialised_var(asic_count),
-	    uninitialised_var(timeout), frequency = 0;
+	int baud, miner_count, asic_count, timeout, frequency;
 	int this_option_offset = ++option_offset;
 	struct avalon_info *info;
 	struct cgpu_info *avalon;
@@ -655,6 +668,12 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found
 
 	avalon = usb_alloc_cgpu(&avalon_drv, AVALON_MINER_THREADS);
 
+	baud = AVALON_IO_SPEED;
+	miner_count = AVALON_DEFAULT_MINER_NUM;
+	asic_count = AVALON_DEFAULT_ASIC_NUM;
+	timeout = AVALON_DEFAULT_TIMEOUT;
+	frequency = AVALON_DEFAULT_FREQUENCY;
+
 	configured = get_options(this_option_offset, &baud, &miner_count,
 				 &asic_count, &timeout, &frequency);
 
@@ -910,7 +929,7 @@ static void avalon_rotate_array(struct cgpu_info *avalon)
 
 static void avalon_set_timeout(struct avalon_info *info)
 {
-	info->timeout = AVALON_TIMEOUT_FACTOR / info->frequency;
+	info->timeout = avalon_calc_timeout(info->frequency);
 }
 
 static void avalon_set_freq(struct cgpu_info *avalon, int frequency)
diff --git a/driver-avalon.h b/driver-avalon.h
index 93f092d..562483b 100644
--- a/driver-avalon.h
+++ b/driver-avalon.h
@@ -36,7 +36,7 @@
 #define BITBURNER_DEFAULT_CORE_VOLTAGE 1200 /* in millivolts */
 #define BITBURNER_MIN_COREMV 1000
 /* change here if you want to risk killing it :)  */
-#define BITBURNER_MAX_COREMV 1310
+#define BITBURNER_MAX_COREMV 1400
 
 
 #define AVALON_DEFAULT_TIMEOUT 0x2D