|
|
@ -918,6 +918,21 @@ static void avalon_set_timeout(struct avalon_info *info) |
|
|
|
info->timeout = AVALON_TIMEOUT_FACTOR / info->frequency; |
|
|
|
info->timeout = AVALON_TIMEOUT_FACTOR / info->frequency; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void avalon_set_freq(struct cgpu_info *avalon, int frequency) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
struct avalon_info *info = avalon->device_data; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
info->frequency = frequency; |
|
|
|
|
|
|
|
if (info->frequency > opt_avalon_freq_max) |
|
|
|
|
|
|
|
info->frequency = opt_avalon_freq_max; |
|
|
|
|
|
|
|
if (info->frequency < opt_avalon_freq_min) |
|
|
|
|
|
|
|
info->frequency = opt_avalon_freq_min; |
|
|
|
|
|
|
|
avalon_set_timeout(info); |
|
|
|
|
|
|
|
applog(LOG_WARNING, "%s%i: Set frequency to %d, timeout %d", |
|
|
|
|
|
|
|
avalon->drv->name, avalon->device_id, |
|
|
|
|
|
|
|
info->frequency, info->timeout); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void avalon_inc_freq(struct avalon_info *info) |
|
|
|
static void avalon_inc_freq(struct avalon_info *info) |
|
|
|
{ |
|
|
|
{ |
|
|
|
info->frequency += 2; |
|
|
|
info->frequency += 2; |
|
|
@ -1376,18 +1391,19 @@ static char *avalon_set_device(struct cgpu_info *avalon, char *option, char *set |
|
|
|
{ |
|
|
|
{ |
|
|
|
int val; |
|
|
|
int val; |
|
|
|
|
|
|
|
|
|
|
|
if (usb_ident(avalon) != IDENT_BTB) { |
|
|
|
|
|
|
|
sprintf(replybuf, "%s has no set options", avalon->drv->name); |
|
|
|
|
|
|
|
return replybuf; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (strcasecmp(option, "help") == 0) { |
|
|
|
if (strcasecmp(option, "help") == 0) { |
|
|
|
sprintf(replybuf, "millivolts: range %d-%d", |
|
|
|
sprintf(replybuf, "freq: range %d-%d millivolts: range %d-%d", |
|
|
|
|
|
|
|
AVALON_MIN_FREQUENCY, AVALON_MAX_FREQUENCY, |
|
|
|
BITBURNER_MIN_COREMV, BITBURNER_MAX_COREMV); |
|
|
|
BITBURNER_MIN_COREMV, BITBURNER_MAX_COREMV); |
|
|
|
return replybuf; |
|
|
|
return replybuf; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (strcasecmp(option, "millivolts") == 0 || strcasecmp(option, "mv") == 0) { |
|
|
|
if (strcasecmp(option, "millivolts") == 0 || strcasecmp(option, "mv") == 0) { |
|
|
|
|
|
|
|
if (usb_ident(avalon) != IDENT_BTB) { |
|
|
|
|
|
|
|
sprintf(replybuf, "%s cannot set millivolts", avalon->drv->name); |
|
|
|
|
|
|
|
return replybuf; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!setting || !*setting) { |
|
|
|
if (!setting || !*setting) { |
|
|
|
sprintf(replybuf, "missing millivolts setting"); |
|
|
|
sprintf(replybuf, "missing millivolts setting"); |
|
|
|
return replybuf; |
|
|
|
return replybuf; |
|
|
@ -1408,6 +1424,23 @@ static char *avalon_set_device(struct cgpu_info *avalon, char *option, char *set |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (strcasecmp(option, "freq") == 0) { |
|
|
|
|
|
|
|
if (!setting || !*setting) { |
|
|
|
|
|
|
|
sprintf(replybuf, "missing freq setting"); |
|
|
|
|
|
|
|
return replybuf; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val = atoi(setting); |
|
|
|
|
|
|
|
if (val < AVALON_MIN_FREQUENCY || val > AVALON_MAX_FREQUENCY) { |
|
|
|
|
|
|
|
sprintf(replybuf, "invalid freq: '%s' valid range %d-%d", |
|
|
|
|
|
|
|
setting, AVALON_MIN_FREQUENCY, AVALON_MAX_FREQUENCY); |
|
|
|
|
|
|
|
return replybuf; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
avalon_set_freq(avalon, val); |
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
sprintf(replybuf, "Unknown option: %s", option); |
|
|
|
sprintf(replybuf, "Unknown option: %s", option); |
|
|
|
return replybuf; |
|
|
|
return replybuf; |
|
|
|
} |
|
|
|
} |
|
|
|