diff --git a/lib/chips.c b/lib/chips.c index 52ef7a0e..a1e2d7a7 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -4301,6 +4301,31 @@ static sensors_chip_feature fscpos_features[] = { { SENSORS_FSCPOS_WDOG_CONTROL, "wdog_control", SENSORS_FSCPOS_WDOG_PRESET, SENSORS_FSCPOS_WDOG_PRESET, RW }, FSCPOS_SYSCTL_WDOG, VALUE(3), 0 }, + /* below this line are features only exported with the new fschmd drv */ + { { SENSORS_FSCHMD_TEMP_ALARM(1), "temp1_alarm", SENSORS_FSCPOS_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(2), "temp2_alarm", SENSORS_FSCPOS_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(3), "temp3_alarm", SENSORS_FSCPOS_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(1), "temp1_fault", SENSORS_FSCPOS_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(2), "temp2_fault", SENSORS_FSCPOS_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(3), "temp3_fault", SENSORS_FSCPOS_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(1), "fan1_alarm", SENSORS_FSCPOS_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(2), "fan2_alarm", SENSORS_FSCPOS_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(3), "fan3_alarm", SENSORS_FSCPOS_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(1), "fan1_fault", SENSORS_FSCPOS_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(2), "fan2_fault", SENSORS_FSCPOS_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(3), "fan3_fault", SENSORS_FSCPOS_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, { { 0 }, 0 } }; @@ -4448,6 +4473,47 @@ static sensors_chip_feature fscscy_features[] = { { SENSORS_FSCSCY_WDOG_CONTROL, "wdog_control", SENSORS_FSCSCY_WDOG_PRESET, SENSORS_FSCSCY_WDOG_PRESET, RW }, FSCSCY_SYSCTL_WDOG, VALUE(3), 0 }, + /* below this line are features only exported with the new fschmd drv */ + { { SENSORS_FSCHMD_TEMP_ALARM(1), "temp1_alarm", SENSORS_FSCSCY_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(2), "temp2_alarm", SENSORS_FSCSCY_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(3), "temp3_alarm", SENSORS_FSCSCY_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(4), "temp4_alarm", SENSORS_FSCSCY_TEMP4, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(1), "temp1_fault", SENSORS_FSCSCY_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(2), "temp2_fault", SENSORS_FSCSCY_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(3), "temp3_fault", SENSORS_FSCSCY_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(4), "temp4_fault", SENSORS_FSCSCY_TEMP4, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(1), "fan1_alarm", SENSORS_FSCSCY_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(2), "fan2_alarm", SENSORS_FSCSCY_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(3), "fan3_alarm", SENSORS_FSCSCY_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(4), "fan4_alarm", SENSORS_FSCSCY_FAN4, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(5), "fan5_alarm", SENSORS_FSCSCY_FAN5, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(6), "fan6_alarm", SENSORS_FSCSCY_FAN6, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(1), "fan1_fault", SENSORS_FSCSCY_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(2), "fan2_fault", SENSORS_FSCSCY_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(3), "fan3_fault", SENSORS_FSCSCY_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(4), "fan4_fault", SENSORS_FSCSCY_FAN4, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(5), "fan5_fault", SENSORS_FSCSCY_FAN5, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(6), "fan6_fault", SENSORS_FSCSCY_FAN6, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, { { 0 }, 0 } }; @@ -4518,6 +4584,40 @@ static sensors_chip_feature fscscy_features[] = { { SENSORS_FSCHER_WDOG_CONTROL, "wdog_control", SENSORS_FSCHER_WDOG_PRESET, SENSORS_FSCHER_WDOG_PRESET, RW }, FSCHER_SYSCTL_WDOG, VALUE(3), 0 }, + /* below this line are features only exported with the new fschmd drv */ + { { SENSORS_FSCHMD_TEMP_MAX(1), "temp1_max", SENSORS_FSCHER_TEMP1, + SENSORS_FSCHER_TEMP1, RW }, + NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_MAX(2), "temp2_max", SENSORS_FSCHER_TEMP2, + SENSORS_FSCHER_TEMP2, RW }, + NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_MAX(3), "temp3_max", SENSORS_FSCHER_TEMP3, + SENSORS_FSCHER_TEMP3, RW }, + NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(1), "temp1_alarm", SENSORS_FSCHER_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(2), "temp2_alarm", SENSORS_FSCHER_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_ALARM(3), "temp3_alarm", SENSORS_FSCHER_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(1), "temp1_fault", SENSORS_FSCHER_TEMP1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(2), "temp2_fault", SENSORS_FSCHER_TEMP2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_TEMP_FAULT(3), "temp3_fault", SENSORS_FSCHER_TEMP3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(1), "fan1_alarm", SENSORS_FSCHER_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(2), "fan2_alarm", SENSORS_FSCHER_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_ALARM(3), "fan3_alarm", SENSORS_FSCHER_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(1), "fan1_fault", SENSORS_FSCHER_FAN1, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(2), "fan2_fault", SENSORS_FSCHER_FAN2, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, + { { SENSORS_FSCHMD_FAN_FAULT(3), "fan3_fault", SENSORS_FSCHER_FAN3, + NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, { { 0 }, 0 } }; @@ -6218,6 +6318,72 @@ static sensors_chip_feature f71882fg_features[] = { { 0 }, 0 } }; +#define SENSORS_FSCHMD_IN_FEATURES(nr) \ + { { SENSORS_FSCHMD_IN(nr), "in" #nr, \ + NOMAP, NOMAP, R }, \ + NOSYSCTL, VALUE(3), 3 } + +#define SENSORS_FSCHMD_TEMP_FEATURES(nr) \ + { { SENSORS_FSCHMD_TEMP(nr), "temp" #nr, \ + NOMAP, NOMAP, R }, \ + NOSYSCTL, VALUE(3), 3 }, \ + { { SENSORS_FSCHMD_TEMP_MAX(nr), "temp" #nr "_max", \ + SENSORS_FSCHMD_TEMP(nr), SENSORS_FSCHMD_TEMP(nr), RW }, \ + NOSYSCTL, VALUE(1), 3 }, \ + { { SENSORS_FSCHMD_TEMP_ALARM(nr), "temp" #nr "_alarm", \ + SENSORS_FSCHMD_TEMP(nr), NOMAP, R }, \ + NOSYSCTL, VALUE(1), 0 }, \ + { { SENSORS_FSCHMD_TEMP_FAULT(nr), "temp" #nr "_fault", \ + SENSORS_FSCHMD_TEMP(nr), NOMAP, R }, \ + NOSYSCTL, VALUE(2), 0 } + +#define SENSORS_FSCHMD_FAN_FEATURES(nr) \ + { { SENSORS_FSCHMD_FAN(nr), "fan" #nr, \ + NOMAP, NOMAP, R }, \ + NOSYSCTL, VALUE(2), 0 }, \ + { { SENSORS_FSCHMD_FAN_DIV(nr), "fan" #nr "_div", \ + SENSORS_FSCHMD_FAN(nr), NOMAP, R }, \ + NOSYSCTL, VALUE(1), 0 }, \ + { { SENSORS_FSCHMD_FAN_ALARM(nr), "fan" #nr "_alarm", \ + SENSORS_FSCHMD_FAN(nr), NOMAP, R }, \ + NOSYSCTL, VALUE(1), 0 }, \ + { { SENSORS_FSCHMD_FAN_FAULT(nr), "fan" #nr "_fault", \ + SENSORS_FSCHMD_FAN(nr), NOMAP, R }, \ + NOSYSCTL, VALUE(1), 0 } + +static sensors_chip_feature fschmd_features[] = +{ + SENSORS_FSCHMD_IN_FEATURES(0), + SENSORS_FSCHMD_IN_FEATURES(1), + SENSORS_FSCHMD_IN_FEATURES(2), + SENSORS_FSCHMD_TEMP_FEATURES(1), + SENSORS_FSCHMD_TEMP_FEATURES(2), + SENSORS_FSCHMD_TEMP_FEATURES(3), + SENSORS_FSCHMD_TEMP_FEATURES(4), + SENSORS_FSCHMD_TEMP_FEATURES(5), + SENSORS_FSCHMD_FAN_FEATURES(1), + SENSORS_FSCHMD_FAN_FEATURES(2), + SENSORS_FSCHMD_FAN_FEATURES(3), + SENSORS_FSCHMD_FAN_FEATURES(4), + SENSORS_FSCHMD_FAN_FEATURES(5), + { { 0 }, 0 } +}; + +static sensors_chip_feature fschrc_features[] = +{ + SENSORS_FSCHMD_IN_FEATURES(0), + SENSORS_FSCHMD_IN_FEATURES(1), + SENSORS_FSCHMD_IN_FEATURES(2), + SENSORS_FSCHMD_TEMP_FEATURES(1), + SENSORS_FSCHMD_TEMP_FEATURES(2), + SENSORS_FSCHMD_TEMP_FEATURES(3), + SENSORS_FSCHMD_FAN_FEATURES(1), + SENSORS_FSCHMD_FAN_FEATURES(2), + SENSORS_FSCHMD_FAN_FEATURES(3), + SENSORS_FSCHMD_FAN_FEATURES(4), + { { 0 }, 0 } +}; + sensors_chip_features sensors_chip_features_list[] = { { SENSORS_LM78_PREFIX, lm78_features }, @@ -6336,5 +6502,7 @@ sensors_chip_features sensors_chip_features_list[] = { SENSORS_SCH311X_PREFIX, dme1737_features }, { SENSORS_APPLESMC_PREFIX, applesmc_features }, { SENSORS_F71882FG_PREFIX, f71882fg_features }, + { SENSORS_FSCHMD_PREFIX, fschmd_features }, + { SENSORS_FSCHRC_PREFIX, fschrc_features }, { 0 } }; diff --git a/lib/chips.h b/lib/chips.h index e9483384..5492462f 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -2341,4 +2341,26 @@ #define SENSORS_F71882FG_TEMP_FAULT(n) (140 + (n)) #define SENSORS_F71882FG_TEMP_TYPE(n) (150 + (n)) +/* Fujitsu Siemens Computers Heimdal and Heracles */ +#define SENSORS_FSCHMD_PREFIX "fscher" +#define SENSORS_FSCHRC_PREFIX "fscher" + +/* Note, we start with feature numbers of 60+ to not have any overlapping + features with the old FSCPOS, FSCSCY and FSCHER feature lists, as the + FSCHMD feature defines for features only exported by the new FSCHMD driver + are reused in the feature lists of the FSCPOS, FSCSCY and FSCHER */ + +/* in n from 0 to 3 */ +#define SENSORS_FSCHMD_IN(n) (60 + (n)) +/* fan n from 1 to 5 (4 for the hrc) */ +#define SENSORS_FSCHMD_FAN(n) (70 + (n)) +#define SENSORS_FSCHMD_FAN_DIV(n) (80 + (n)) +#define SENSORS_FSCHMD_FAN_ALARM(n) (90 + (n)) +#define SENSORS_FSCHMD_FAN_FAULT(n) (100 + (n)) +/* temp n from 1 to 5 (3 for the hrc) */ +#define SENSORS_FSCHMD_TEMP(n) (110 + (n)) +#define SENSORS_FSCHMD_TEMP_MAX(n) (120 + (n)) +#define SENSORS_FSCHMD_TEMP_ALARM(n) (130 + (n)) +#define SENSORS_FSCHMD_TEMP_FAULT(n) (140 + (n)) + #endif /* def LIB_SENSORS_CHIPS_H */ diff --git a/lib/proc.c b/lib/proc.c index 4a7656f5..22944555 100644 --- a/lib/proc.c +++ b/lib/proc.c @@ -272,7 +272,8 @@ static const struct match matches[] = { Common magnitudes are #defined above. Common conversions are as follows: fan%d_min -> fan%d_min (for magnitude) - fan%d_state -> fan%d_status + fan%d_state -> fan%d_status (for old fscxxx drv) + fan%d_ripple -> fan%d_div (for old fscxxx drv, alt. name) fan%d -> fan%d_input pwm%d -> fan%d_pwm (alt. name) pwm%d_enable -> fan%d_pwm_enable (alt. name) @@ -289,7 +290,7 @@ static const struct match matches[] = { temp%d_min -> temp%d_min (for magnitude) temp%d_low -> temp%d_min temp%d_crit -> temp%d_crit (for magnitude) - temp%d_state -> temp%d_status + temp%d_state -> temp%d_status (for old fscxxx drv) temp%d_offset -> temp%d_offset (for magnitude) temp%d -> temp%d_input sensor%d -> temp%d_type @@ -346,6 +347,12 @@ static int getsysname(const sensors_chip_feature *feature, char *sysname, *sysmag = 0; return 0; } + if(sscanf(name, "fan%d_rippl%c%c", &num, &last, &check) == 2 && last == 'e') { + strcpy(sysname, name); + sprintf(altsysname, "fan%d_div", num); + *sysmag = 0; + return 0; + } if(sscanf(name, "fan%d%c", &num, &check) == 1) { sprintf(sysname, "fan%d_input", num); *sysmag = FANMAG; @@ -448,7 +455,8 @@ static int getsysname(const sensors_chip_feature *feature, char *sysname, /* give up, use old name (probably won't work though...) */ /* known to be the same: - "alarms", "beep_enable", "vrm", "fan%d_div" + "alarms", "beep_enable", "vrm", "fan%d_div" (except old fscxxx drivers + which use fan%d_ripple, fixed using altsysname for new drv. GRR) */ strcpy(sysname, name); *sysmag = feature->scaling; diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 3df50a2f..8ac2bef7 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -3517,9 +3517,16 @@ void print_fscpos(const sensors_chip_name *name) double voltage, temp, state, fan; int valid; + /* Check for the non standard temp1_state sysfs attr the old driver uses + if it isn't present we are talking to the new fschmd driver */ + if (sensors_get_feature(*name,SENSORS_FSCPOS_TEMP1_STATE,&state) != 0) { + print_fscpos_fschmd(name); + return; + } + + /* no need to read TEMP1_STATE, as we just successfully did that above */ if (!sensors_get_label_and_valid(*name,SENSORS_FSCPOS_TEMP1,&label,&valid) && - !sensors_get_feature(*name,SENSORS_FSCPOS_TEMP1,&temp) && - !sensors_get_feature(*name,SENSORS_FSCPOS_TEMP1_STATE,&state)) { + !sensors_get_feature(*name,SENSORS_FSCPOS_TEMP1,&temp)) { if (valid) { print_label(label,10); if((int) state & 0x01) @@ -3637,11 +3644,18 @@ void print_fscscy(const sensors_chip_name *name) char *label; double voltage, temp, templim, state, fan; int valid; + + /* Check for the non standard temp1_state sysfs attr the old driver uses + if it isn't present we are talking to the new fschmd driver */ + if (sensors_get_feature(*name,SENSORS_FSCSCY_TEMP1_STATE,&state) != 0) { + print_fscscy_fschmd(name); + return; + } + /* no need to read TEMP1_STATE, as we just successfully did that above */ if (!sensors_get_label_and_valid(*name,SENSORS_FSCSCY_TEMP1,&label,&valid) && !sensors_get_feature(*name,SENSORS_FSCSCY_TEMP1,&temp) && - !sensors_get_feature(*name,SENSORS_FSCSCY_TEMP1_LIM,&templim) && - !sensors_get_feature(*name,SENSORS_FSCSCY_TEMP1_STATE,&state)) { + !sensors_get_feature(*name,SENSORS_FSCSCY_TEMP1_LIM,&templim)) { if (valid) { print_label(label,10); if((int) state & 0x01) @@ -3819,9 +3833,16 @@ void print_fscher(const sensors_chip_name *name) double voltage, temp, state, fan; int valid; + /* Check for the non standard temp1_state sysfs attr the old driver uses + if it isn't present we are talking to the new fschmd driver */ + if (sensors_get_feature(*name,SENSORS_FSCHER_TEMP1_STATE,&state) != 0) { + print_fscher_fschmd(name); + return; + } + + /* no need to read TEMP1_STATE, as we just successfully did that above */ if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_TEMP1,&label,&valid) - && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP1,&temp) - && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP1_STATE,&state)) { + && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP1,&temp)) { if (valid) { print_label(label,10); if((int) state & 0x01) @@ -6282,6 +6303,148 @@ void print_thmc50(const sensors_chip_name *name) free(label); } +static void print_fschmd_in(const sensors_chip_name *name, int i, + int in_feature) +{ + char *label; + double cur; + int valid; + + if (!sensors_get_label_and_valid(*name, in_feature, &label, &valid) && + !sensors_get_feature(*name, in_feature, &cur)) { + if (valid) { + print_label(label, 10); + printf("%+6.2f V\n", cur); + } + } else { + printf("ERROR: Can't get in%d data!\n", i); + } + free(label); +} + +static void print_fschmd_fan(const sensors_chip_name *name, int i, + int fan_feature, int fan_div_feature) +{ + char *label; + double cur, div, alarm, fault; + int valid; + + if (!sensors_get_label_and_valid(*name, fan_feature, &label, &valid) && + !sensors_get_feature(*name, fan_feature, &cur) && + !sensors_get_feature(*name, fan_div_feature, &div) && + !sensors_get_feature(*name, SENSORS_FSCHMD_FAN_ALARM(i), &alarm) && + !sensors_get_feature(*name, SENSORS_FSCHMD_FAN_FAULT(i), &fault)) { + if (valid) { + print_label(label, 10); + if (fault) + printf(" FAULT\n"); + else + printf("%4.0f RPM (div = %1.0f) %s\n", cur, div, + alarm ? "ALARM" : ""); + } + } + /* no error on failure as we get used for various FSC chips and not all + have the same amount of fan sensors */ + + free(label); +} + +static void print_fschmd_temp(const sensors_chip_name *name, int i, + int temp_feature, int temp_max_feature) +{ + char *label; + double cur, max, alarm, fault; + int valid; + + if (!sensors_get_label_and_valid(*name, temp_feature, &label, &valid) && + !sensors_get_feature(*name, temp_feature, &cur) && + (!temp_max_feature || + !sensors_get_feature(*name, temp_max_feature, &max)) && + !sensors_get_feature(*name, SENSORS_FSCHMD_TEMP_ALARM(i), &alarm) && + !sensors_get_feature(*name, SENSORS_FSCHMD_TEMP_FAULT(i), &fault)) { + if (valid) { + print_label(label, 10); + if (fault) + printf(" FAULT\n"); + else { + /* The fscpos doesn't have max temp limits */ + if (temp_max_feature) + print_temp_info(cur, max, 0, MAXONLY, 1, 1); + else + print_temp_info(cur, 0, 0, SINGLE, 1, 1); + printf("%s\n", alarm ? "ALARM" : ""); + } + } + } + /* no error on failure as we get used for various FSC chips and not all + have the same amount of temp sensors */ + + free(label); +} + +void print_fschmd(const sensors_chip_name *name) +{ + int i; + + for (i = 0; i <= 2; i++) + print_fschmd_in(name, i, SENSORS_FSCHMD_IN(i)); + + for (i = 1; i <= 6; i++) + print_fschmd_fan(name, i, SENSORS_FSCHMD_FAN(i), + SENSORS_FSCHMD_FAN_DIV(i)); + + for (i = 1; i <= 5; i++) + print_fschmd_temp(name, i, SENSORS_FSCHMD_TEMP(i), + SENSORS_FSCHMD_TEMP_MAX(i)); +} + +void print_fscpos_fschmd(const sensors_chip_name *name) +{ + int i; + + for (i = 0; i < 3; i++) + print_fschmd_in(name, i, SENSORS_FSCPOS_VOLTAGE1 + i); + + for (i = 0; i < 3; i++) + print_fschmd_fan(name, i + 1, SENSORS_FSCPOS_FAN1 + i, + SENSORS_FSCPOS_FAN1_RIPPLE + i); + + for (i = 0; i < 3; i++) + print_fschmd_temp(name, i + 1, SENSORS_FSCPOS_TEMP1 + i, 0); +} + +void print_fscscy_fschmd(const sensors_chip_name *name) +{ + int i; + + for (i = 0; i < 3; i++) + print_fschmd_in(name, i, SENSORS_FSCSCY_VOLTAGE1 + i); + + for (i = 0; i < 6; i++) + print_fschmd_fan(name, i + 1, SENSORS_FSCSCY_FAN1 + i, + SENSORS_FSCSCY_FAN1_RIPPLE + i); + + for (i = 0; i < 4; i++) + print_fschmd_temp(name, i + 1, SENSORS_FSCSCY_TEMP1 + i, + SENSORS_FSCSCY_TEMP1_MAX + i); +} + +void print_fscher_fschmd(const sensors_chip_name *name) +{ + int i; + + for (i = 0; i < 3; i++) + print_fschmd_in(name, i, SENSORS_FSCHER_VOLTAGE1 + i); + + for (i = 0; i < 3; i++) + print_fschmd_fan(name, i + 1, SENSORS_FSCHER_FAN1 + i, + SENSORS_FSCHER_FAN1_RIPPLE + i); + + for (i = 0; i < 3; i++) + print_fschmd_temp(name, i + 1, SENSORS_FSCHER_TEMP1 + i, + SENSORS_FSCHMD_TEMP_MAX(i + 1)); +} + void print_unknown_chip(const sensors_chip_name *name) { int a,b,valid; diff --git a/prog/sensors/chips.h b/prog/sensors/chips.h index 9531633f..6448277f 100644 --- a/prog/sensors/chips.h +++ b/prog/sensors/chips.h @@ -81,5 +81,9 @@ extern void print_dme1737(const sensors_chip_name *name); extern void print_applesmc(const sensors_chip_name *name); extern void print_f71882fg(const sensors_chip_name *name); extern void print_thmc50(const sensors_chip_name *name); +extern void print_fschmd(const sensors_chip_name *name); +extern void print_fscpos_fschmd(const sensors_chip_name *name); +extern void print_fscscy_fschmd(const sensors_chip_name *name); +extern void print_fscher_fschmd(const sensors_chip_name *name); #endif /* def PROG_SENSORS_CHIPS_H */ diff --git a/prog/sensors/main.c b/prog/sensors/main.c index 2f480dea..b1a7daa5 100644 --- a/prog/sensors/main.c +++ b/prog/sensors/main.c @@ -429,6 +429,8 @@ static struct match matches[] = { { "f71882fg", print_f71882fg }, { "thmc50", print_thmc50 }, { "adm1022", print_thmc50 }, + { "fschmd", print_fschmd }, + { "fschrc", print_fschmd }, { NULL, NULL } };