diff --git a/lib/chips.c b/lib/chips.c index e25dbad8..8b088c91 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -5245,6 +5245,26 @@ static sensors_chip_feature max6650_features[] = { 0 } }; +#define SENSORS_SMSC57B397_TEMP(nr) \ + { SENSORS_SMSC57B397_TEMP##nr, "temp" #nr, NOMAP, NOMAP, R, 0, \ + VALUE(1), 1 } + +#define SENSORS_SMSC57B397_FAN(nr) \ + { SENSORS_SMSC57B397_FAN##nr, "fan" #nr, NOMAP, NOMAP, R, 0, \ + VALUE(1), 1 } + +static sensors_chip_feature smsc57b397_features[] = +{ + SENSORS_SMSC57B397_TEMP(1), + SENSORS_SMSC57B397_TEMP(2), + SENSORS_SMSC57B397_TEMP(3), + SENSORS_SMSC57B397_TEMP(4), + SENSORS_SMSC57B397_FAN(1), + SENSORS_SMSC57B397_FAN(2), + SENSORS_SMSC57B397_FAN(3), + SENSORS_SMSC57B397_FAN(4), +}; + sensors_chip_features sensors_chip_features_list[] = { { SENSORS_LM78_PREFIX, lm78_features }, @@ -5337,5 +5357,6 @@ sensors_chip_features sensors_chip_features_list[] = { SENSORS_ADM1030_PREFIX, adm1030_features }, { SENSORS_ADM1031_PREFIX, adm1031_features }, { SENSORS_LM93_PREFIX, lm93_features }, + { SENSORS_SMSC57B397_PREFIX, smsc57b397_features }, { 0 } }; diff --git a/lib/chips.h b/lib/chips.h index 9ebf53a2..98b92be4 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -2003,4 +2003,16 @@ #define SENSORS_MAX6650_FAN4_TACH 4 /* R */ #define SENSORS_MAX6650_SPEED 5 /* RW */ +/* SMSC57B397-NC chip */ +#define SENSORS_SMSC57B397_PREFIX "smsc57b397" + +#define SENSORS_SMSC57B397_TEMP1 0x01 /* R */ +#define SENSORS_SMSC57B397_TEMP2 0x02 /* R */ +#define SENSORS_SMSC57B397_TEMP3 0x03 /* R */ +#define SENSORS_SMSC57B397_TEMP4 0x04 /* R */ +#define SENSORS_SMSC57B397_FAN1 0x11 /* R */ +#define SENSORS_SMSC57B397_FAN2 0x12 /* R */ +#define SENSORS_SMSC57B397_FAN3 0x13 /* R */ +#define SENSORS_SMSC57B397_FAN4 0x14 /* R */ + #endif /* def LIB_SENSORS_CHIPS_H */ diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 8b4fd7a2..284cb800 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -1613,6 +1613,12 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect driver => "not-a-sensor", devid => 0x14, }, + { + name => "SMSC LPC57B397-NC Super IO", + driver => "smsc57b397", + devid => 0x6f, + logdev => 0x0a, + }, ], }, { diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index bdf16f22..644cfedb 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -5197,6 +5197,65 @@ void print_lm93(const sensors_chip_name *name) print_lm93_vid(name, SENSORS_LM93_VID2); } +/* print_smsc57b397_temp() + * where temp is a sensors feature ID + */ +static void print_smsc57b397_temp(const sensors_chip_name *name, int temp) +{ + char *label = NULL; + double cur; + int valid; + + if (!sensors_get_label_and_valid(*name,temp,&label,&valid) && + !sensors_get_feature(*name,temp,&cur)) { + if (valid) { + print_label(label,10); + print_temp_info(cur, 0, 0, SINGLE, 0, 0); + printf("\n"); + } + } else + printf("ERROR: Can't get TEMP data! (0x%04x)\n", temp); + + free_the_label(&label); +} + +#define PRINT_SMSC57B397_TEMP(num, name) \ + print_smsc57b397_temp((name), (SENSORS_SMSC57B397_TEMP1 + (num))) + +/* print_smsc57b397_fan() + * where fan is a sensors feature ID + */ +static void print_smsc57b397_fan(const sensors_chip_name *name, int fan) +{ + char *label = NULL; + double cur; + int valid; + + if (!sensors_get_label_and_valid(*name,fan,&label,&valid) && + !sensors_get_feature(*name,fan,&cur)) { + if (valid) { + print_label(label,10); + printf("%4.0f RPM\n", cur); + } + } else + printf("ERROR: Can't get FAN data! (0x%04x)\n", fan); + free_the_label(&label); +} + +#define PRINT_SMSC57B397_FAN(num, name) \ + print_smsc57b397_fan((name), (SENSORS_SMSC57B397_FAN1 + (num))) + +void print_smsc57b397(const sensors_chip_name *name) +{ + int ii; + + for (ii=0;ii<4;ii++) + PRINT_SMSC57B397_TEMP(ii, name); + + for (ii=0;ii<4;ii++) + PRINT_SMSC57B397_FAN(ii, name); +} + 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 f07378ee..6b28d9a8 100644 --- a/prog/sensors/chips.h +++ b/prog/sensors/chips.h @@ -66,5 +66,6 @@ extern void print_max1619(const sensors_chip_name *name); extern void print_xeontemp(const sensors_chip_name *name); extern void print_max6650(const sensors_chip_name *name); extern void print_adm1031(const sensors_chip_name *name); +extern void print_smsc57b397(const sensors_chip_name *name); #endif /* def PROG_SENSORS_CHIPS_H */ diff --git a/prog/sensors/main.c b/prog/sensors/main.c index 0ac43ccb..6bcf25ac 100644 --- a/prog/sensors/main.c +++ b/prog/sensors/main.c @@ -399,6 +399,7 @@ struct match matches[] = { { "adm1030", print_adm1031 }, { "adm1031", print_adm1031 }, { "lm93", print_lm93 }, + { "smsc57b397", print_smsc57b397 }, { NULL, NULL } };