|
|
@ -42,6 +42,8 @@ |
|
|
|
|
|
|
|
|
|
|
|
int opt_avalon_temp = AVALON_TEMP_TARGET; |
|
|
|
int opt_avalon_temp = AVALON_TEMP_TARGET; |
|
|
|
int opt_avalon_overheat = AVALON_TEMP_OVERHEAT; |
|
|
|
int opt_avalon_overheat = AVALON_TEMP_OVERHEAT; |
|
|
|
|
|
|
|
int opt_avalon_fan_min = AVALON_DEFAULT_FAN_MIN; |
|
|
|
|
|
|
|
int opt_avalon_fan_max = AVALON_DEFAULT_FAN_MAX; |
|
|
|
bool opt_avalon_auto; |
|
|
|
bool opt_avalon_auto; |
|
|
|
|
|
|
|
|
|
|
|
static int option_offset = -1; |
|
|
|
static int option_offset = -1; |
|
|
@ -448,6 +450,25 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count, |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *set_avalon_fan(char *arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int val1, val2, ret; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret = sscanf(arg, "%d-%d", &val1, &val2); |
|
|
|
|
|
|
|
if (ret < 1) |
|
|
|
|
|
|
|
return "No values passed to avalon-fan"; |
|
|
|
|
|
|
|
if (ret == 1) |
|
|
|
|
|
|
|
val2 = val1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (val1 < 0 || val1 > 100 || val2 < 0 || val2 > 100 || val2 < val1) |
|
|
|
|
|
|
|
return "Invalid value passed to avalon-fan"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
opt_avalon_fan_min = val1 * AVALON_PWM_MAX / 100; |
|
|
|
|
|
|
|
opt_avalon_fan_max = val2 * AVALON_PWM_MAX / 100; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void avalon_idle(struct cgpu_info *avalon, struct avalon_info *info) |
|
|
|
static void avalon_idle(struct cgpu_info *avalon, struct avalon_info *info) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int i; |
|
|
|
int i; |
|
|
@ -1011,7 +1032,7 @@ static inline void record_temp_fan(struct avalon_info *info, struct avalon_resul |
|
|
|
static void temp_rise(struct avalon_info *info, int temp) |
|
|
|
static void temp_rise(struct avalon_info *info, int temp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (temp >= opt_avalon_temp + AVALON_TEMP_HYSTERESIS * 3) { |
|
|
|
if (temp >= opt_avalon_temp + AVALON_TEMP_HYSTERESIS * 3) { |
|
|
|
info->fan_pwm = AVALON_DEFAULT_FAN_MAX_PWM; |
|
|
|
info->fan_pwm = AVALON_PWM_MAX; |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (temp >= opt_avalon_temp + AVALON_TEMP_HYSTERESIS * 2) |
|
|
|
if (temp >= opt_avalon_temp + AVALON_TEMP_HYSTERESIS * 2) |
|
|
@ -1023,14 +1044,14 @@ static void temp_rise(struct avalon_info *info, int temp) |
|
|
|
else |
|
|
|
else |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
if (info->fan_pwm > AVALON_DEFAULT_FAN_MAX_PWM) |
|
|
|
if (info->fan_pwm > opt_avalon_fan_max) |
|
|
|
info->fan_pwm = AVALON_DEFAULT_FAN_MAX_PWM; |
|
|
|
info->fan_pwm = opt_avalon_fan_max; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void temp_drop(struct avalon_info *info, int temp) |
|
|
|
static void temp_drop(struct avalon_info *info, int temp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (temp <= opt_avalon_temp - AVALON_TEMP_HYSTERESIS * 3) { |
|
|
|
if (temp <= opt_avalon_temp - AVALON_TEMP_HYSTERESIS * 3) { |
|
|
|
info->fan_pwm = AVALON_DEFAULT_FAN_MIN_PWM; |
|
|
|
info->fan_pwm = opt_avalon_fan_min; |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (temp <= opt_avalon_temp - AVALON_TEMP_HYSTERESIS * 2) |
|
|
|
if (temp <= opt_avalon_temp - AVALON_TEMP_HYSTERESIS * 2) |
|
|
@ -1040,8 +1061,8 @@ static void temp_drop(struct avalon_info *info, int temp) |
|
|
|
else if (temp < opt_avalon_temp) |
|
|
|
else if (temp < opt_avalon_temp) |
|
|
|
info->fan_pwm -= 1; |
|
|
|
info->fan_pwm -= 1; |
|
|
|
|
|
|
|
|
|
|
|
if (info->fan_pwm < AVALON_DEFAULT_FAN_MIN_PWM) |
|
|
|
if (info->fan_pwm < opt_avalon_fan_min) |
|
|
|
info->fan_pwm = AVALON_DEFAULT_FAN_MIN_PWM; |
|
|
|
info->fan_pwm = opt_avalon_fan_min; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static inline void adjust_fan(struct avalon_info *info) |
|
|
|
static inline void adjust_fan(struct avalon_info *info) |
|
|
|