From f67324f3be9e831af5b3ed83078278f63b22238b Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Mon, 27 Oct 2003 21:14:26 +0000 Subject: [PATCH] New FSC Hermes chip driver, contributed by Reinhard Nissl . git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2029 7894878c-1315-0410-8ee3-d5d059ff63e0 --- CHANGES | 3 +- CONTRIBUTORS | 4 +- README | 2 +- doc/chips/SUMMARY | 6 +++ etc/sensors.conf.eg | 36 ++++++++++--- kernel/chips/Module.mk | 3 ++ lib/chips.c | 77 ++++++++++++++++++++++++++++ lib/chips.h | 32 ++++++++++++ prog/sensors/chips.c | 113 +++++++++++++++++++++++++++++++++++++++++ prog/sensors/chips.h | 1 + prog/sensors/main.c | 2 + 11 files changed, 268 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index b48b38de..7a342bb4 100644 --- a/CHANGES +++ b/CHANGES @@ -22,7 +22,8 @@ ask CVS about it: Makefiles: Install burntest, fancontrol, pwmconfig, decode-*.pl Module bmcsensors: Fix voltage scaling, voltage and fan limits Module i2c-piix4: Add support for CSB6 - Module i2c-sis630: sync with 2.6.0-X driver version. + Module i2c-sis630: Sync with 2.6.0-X driver version + Module fscher: New (Fujitsu-Siemens Hermes driver) Program sensors-detect: Prefer Super I/O drivers; Fix w83627hf detection; detect CSB6 diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 68ff6080..84efc67d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -92,4 +92,6 @@ problems. Author of the SAA1064 chip driver. * John Morris (john.morris@spirentcom.com) Author of the MAX6650 chip driver. - +* Reinhard Nissl + Author of the fscher driver. + diff --git a/README b/README index 6e6ab409..7383eedb 100644 --- a/README +++ b/README @@ -73,7 +73,7 @@ At least the following hardware sensor chips are supported: Asus AS99127F, ASB100 Bach Dallas Semiconductor DS75, DS1621, DS1625, DS1775, and DS1780 Hewlett Packard Maxilife (several revisions including '99 NBA) - Fujitsu Siemens Poseidon, Scylla + Fujitsu Siemens Poseidon, Scylla, Hermes Genesys Logic GL518SM (rev 00, 80), GL520SM, GL523SM Intel Xeon processor embedded sensors ITE IT8705F, IT8712F embedded sensors diff --git a/doc/chips/SUMMARY b/doc/chips/SUMMARY index ea30182e..140bfafa 100644 --- a/doc/chips/SUMMARY +++ b/doc/chips/SUMMARY @@ -80,6 +80,9 @@ ds1621 (the following chip is detected as a ds1621) ds1625 1 - - - yes no +fscher + fscher 3 3 3 - yes no + fscpos fscpos 3 3 3 - yes no @@ -126,6 +129,9 @@ lm85 lm87 lm87 2-3 6-8 0-2 1 pwm yes no +lm90 + lm90 2 - - - yes no + lm92 lm92 1 - - - yes no diff --git a/etc/sensors.conf.eg b/etc/sensors.conf.eg index 195fb543..89df9f18 100644 --- a/etc/sensors.conf.eg +++ b/etc/sensors.conf.eg @@ -1398,11 +1398,10 @@ chip "it87-*" "it8705-*" "it8712-*" # ignore fan2 # ignore fan3 -chip "fscpos-*" -# -# values for the fujitsu siemens poseidon chip -# +chip "fscpos-*" +# Fujitsu-Siemens Poseidon chip + # Temperature label temp1 "Temp1/CPU" @@ -1421,11 +1420,10 @@ chip "fscpos-*" label volt5 "+5V" label voltbatt "+3.3V" -chip "fscscy-*" -# -# values for the fujitsu siemens Scylla chip -# +chip "fscscy-*" +# Fujitsu-Siemens Scylla chip + # Temperature label temp1 "Temp1/CPU0" @@ -1449,6 +1447,28 @@ chip "fscscy-*" label voltbatt "+3.3V" +chip "fscher-*" +# Fujitsu-Siemens Hermes chip + +# Temperature + + label temp1 "Temp1/CPU" + label temp2 "Temp2/MB" + label temp3 "Temp3/AUX" + +# Fans + + label fan1 "Fan1/CPU" + label fan2 "Fan2/AUX" + label fan3 "Fan3/PS" + +# Voltage + + label in0 "+12V" + label in1 "+5V" + label in2 "Battery" + + chip "pcf8591-*" # # values for the Philips PCF8591 chip diff --git a/kernel/chips/Module.mk b/kernel/chips/Module.mk index 105be044..cd074dba 100644 --- a/kernel/chips/Module.mk +++ b/kernel/chips/Module.mk @@ -75,6 +75,9 @@ endif ifneq ($(shell if grep -q '^CONFIG_SENSORS_FSCSCY=y' $(LINUX)/.config; then echo 1; fi),1) KERNELCHIPSTARGETS += $(MODULE_DIR)/fscscy.o endif +ifneq ($(shell if grep -q '^CONFIG_SENSORS_FSCHER=y' $(LINUX)/.config; then echo 1; fi),1) +KERNELCHIPSTARGETS += $(MODULE_DIR)/fscher.o +endif ifneq ($(shell if grep -q '^CONFIG_SENSORS_GL518SM=y' $(LINUX)/.config; then echo 1; fi),1) KERNELCHIPSTARGETS += $(MODULE_DIR)/gl518sm.o endif diff --git a/lib/chips.c b/lib/chips.c index 247b8e1a..8a228081 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -3921,6 +3921,81 @@ static sensors_chip_feature fscscy_features[] = { 0 } }; + static sensors_chip_feature fscher_features[] = + { + { SENSORS_FSCHER_REV, "rev", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_REV, VALUE(1), 0 }, + { SENSORS_FSCHER_EVENT, "alarms", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_EVENT, VALUE(1), 0 }, + { SENSORS_FSCHER_CONTROL, "control", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, FSCHER_SYSCTL_CONTROL, VALUE(1), 0 }, + { SENSORS_FSCHER_VOLTAGE1, "in0", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_VOLT0, VALUE(1), 2 }, + { SENSORS_FSCHER_VOLTAGE2, "in1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_VOLT1, VALUE(1), 2 }, + { SENSORS_FSCHER_VOLTAGE3, "in2", SENSORS_NO_MAPPING, + SENSORS_NO_MAPPING, SENSORS_MODE_R, + FSCHER_SYSCTL_VOLT2, VALUE(1), 2 }, + { SENSORS_FSCHER_TEMP1, "temp1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_TEMP0, VALUE(2), 0 }, + { SENSORS_FSCHER_TEMP2, "temp2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_TEMP1, VALUE(2), 0 }, + { SENSORS_FSCHER_TEMP3, "temp3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_TEMP2, VALUE(2), 0 }, + { SENSORS_FSCHER_TEMP1_STATE, "temp1_state", SENSORS_FSCHER_TEMP1, + SENSORS_FSCHER_TEMP1, SENSORS_MODE_RW, + FSCHER_SYSCTL_TEMP0, VALUE(1), 0 }, + { SENSORS_FSCHER_TEMP2_STATE, "temp2_state", SENSORS_FSCHER_TEMP2, + SENSORS_FSCHER_TEMP2, SENSORS_MODE_RW, + FSCHER_SYSCTL_TEMP1, VALUE(1), 0 }, + { SENSORS_FSCHER_TEMP3_STATE, "temp3_state", SENSORS_FSCHER_TEMP3, + SENSORS_FSCHER_TEMP3, SENSORS_MODE_RW, + FSCHER_SYSCTL_TEMP2, VALUE(1), 0 }, + { SENSORS_FSCHER_FAN1, "fan1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_FAN0, VALUE(4), 0 }, + { SENSORS_FSCHER_FAN2, "fan2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_FAN1, VALUE(4), 0 }, + { SENSORS_FSCHER_FAN3, "fan3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_R, FSCHER_SYSCTL_FAN2, VALUE(4), 0 }, + { SENSORS_FSCHER_FAN1_MIN, "fan1_min", SENSORS_FSCHER_FAN1, + SENSORS_FSCHER_FAN1, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN0, VALUE(2), 0 }, + { SENSORS_FSCHER_FAN2_MIN, "fan2_min", SENSORS_FSCHER_FAN2, + SENSORS_FSCHER_FAN2, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN1, VALUE(2), 0 }, + { SENSORS_FSCHER_FAN3_MIN, "fan3_min", SENSORS_FSCHER_FAN3, + SENSORS_FSCHER_FAN3, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN2, VALUE(2), 0 }, + { SENSORS_FSCHER_FAN1_STATE, "fan1_state", SENSORS_FSCHER_FAN1, + SENSORS_FSCHER_FAN1, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN0, VALUE(1), 0 }, + { SENSORS_FSCHER_FAN2_STATE, "fan2_state", SENSORS_FSCHER_FAN2, + SENSORS_FSCHER_FAN2, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN1, VALUE(1), 0 }, + { SENSORS_FSCHER_FAN3_STATE, "fan3_state", SENSORS_FSCHER_FAN3, + SENSORS_FSCHER_FAN3, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN2, VALUE(1), 0 }, + { SENSORS_FSCHER_FAN1_RIPPLE, "fan1_ripple", SENSORS_FSCHER_FAN1, + SENSORS_FSCHER_FAN1, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN0, VALUE(3), 0 }, + { SENSORS_FSCHER_FAN2_RIPPLE, "fan2_ripple", SENSORS_FSCHER_FAN2, + SENSORS_FSCHER_FAN2, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN1, VALUE(3), 0 }, + { SENSORS_FSCHER_FAN3_RIPPLE, "fan3_ripple", SENSORS_FSCHER_FAN3, + SENSORS_FSCHER_FAN3, SENSORS_MODE_RW, + FSCHER_SYSCTL_FAN2, VALUE(3), 0 }, + { SENSORS_FSCHER_WDOG_PRESET, "wdog_preset", SENSORS_NO_MAPPING, + SENSORS_NO_MAPPING, SENSORS_MODE_RW, + FSCHER_SYSCTL_WDOG, VALUE(1), 0 }, + { SENSORS_FSCHER_WDOG_STATE, "wdog_state", SENSORS_FSCHER_WDOG_PRESET, + SENSORS_FSCHER_WDOG_PRESET, SENSORS_MODE_RW, + FSCHER_SYSCTL_WDOG, VALUE(2), 0 }, + { SENSORS_FSCHER_WDOG_CONTROL, "wdog_control", SENSORS_FSCHER_WDOG_PRESET, + SENSORS_FSCHER_WDOG_PRESET, SENSORS_MODE_RW, + FSCHER_SYSCTL_WDOG, VALUE(3), 0 }, + { 0 } + }; + static sensors_chip_feature pcf8591_features[] = { { SENSORS_PCF8591_AIN_CONF, "ain_conf", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, @@ -4603,6 +4678,7 @@ static sensors_chip_feature max6650_features[] = { SENSORS_MAX6650_SPEED, "speed", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW, MAX6650_SYSCTL_SPEED, VALUE(1), 0 }, + { 0 } }; sensors_chip_features sensors_chip_features_list[] = @@ -4660,6 +4736,7 @@ sensors_chip_features sensors_chip_features_list[] = { SENSORS_IT87_PREFIX, it87_features }, { SENSORS_FSCPOS_PREFIX, fscpos_features }, { SENSORS_FSCSCY_PREFIX, fscscy_features }, + { SENSORS_FSCHER_PREFIX, fscher_features }, { SENSORS_PCF8591_PREFIX, pcf8591_features }, { SENSORS_VT1211_PREFIX, vt1211_features }, { SENSORS_SMSC47M1_PREFIX, smsc47m1_features }, diff --git a/lib/chips.h b/lib/chips.h index 74d779c1..6fb4f077 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -1490,6 +1490,38 @@ #define SENSORS_FSCSCY_WDOG_STATE 52 /* RW */ #define SENSORS_FSCSCY_WDOG_CONTROL 52 /* RW */ +/* fsc hermes chip */ + +#define SENSORS_FSCHER_PREFIX "fscher" + +#define SENSORS_FSCHER_REV 1 /* R */ +#define SENSORS_FSCHER_EVENT 2 /* R */ +#define SENSORS_FSCHER_CONTROL 3 /* RW */ +#define SENSORS_FSCHER_FAN1 4 /* R */ +#define SENSORS_FSCHER_FAN2 5 /* R */ +#define SENSORS_FSCHER_FAN3 6 /* R */ +#define SENSORS_FSCHER_FAN1_MIN 7 /* RW */ +#define SENSORS_FSCHER_FAN2_MIN 8 /* RW */ +#define SENSORS_FSCHER_FAN3_MIN 9 /* RW */ +#define SENSORS_FSCHER_FAN1_STATE 10 /* RW */ +#define SENSORS_FSCHER_FAN2_STATE 11 /* RW */ +#define SENSORS_FSCHER_FAN3_STATE 12 /* RW */ +#define SENSORS_FSCHER_FAN1_RIPPLE 13 /* RW */ +#define SENSORS_FSCHER_FAN2_RIPPLE 14 /* RW */ +#define SENSORS_FSCHER_FAN3_RIPPLE 15 /* RW */ +#define SENSORS_FSCHER_TEMP1 16 /* R */ +#define SENSORS_FSCHER_TEMP2 17 /* R */ +#define SENSORS_FSCHER_TEMP3 18 /* R */ +#define SENSORS_FSCHER_TEMP1_STATE 19 /* RW */ +#define SENSORS_FSCHER_TEMP2_STATE 20 /* RW */ +#define SENSORS_FSCHER_TEMP3_STATE 21 /* RW */ +#define SENSORS_FSCHER_VOLTAGE1 22 /* R */ +#define SENSORS_FSCHER_VOLTAGE2 23 /* R */ +#define SENSORS_FSCHER_VOLTAGE3 24 /* R */ +#define SENSORS_FSCHER_WDOG_PRESET 25/* RW */ +#define SENSORS_FSCHER_WDOG_STATE 26/* RW */ +#define SENSORS_FSCHER_WDOG_CONTROL 27/* RW */ + /* PCF8591 chip. */ #define SENSORS_PCF8591_PREFIX "pcf8591" diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 2380d9ca..f8e7d828 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -3511,6 +3511,119 @@ void print_fscscy(const sensors_chip_name *name) free_the_label(&label); } +void print_fscher(const sensors_chip_name *name) +{ + char *label = NULL; + double voltage, temp,state,fan,min_rpm; + int valid; + + 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)) { + if (valid) { + print_label(label,10); + if((int) state & 0x01) + printf("\t%+6.2f C \n",temp); + else + printf("\tfailed\n"); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_TEMP2,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP2,&temp) + && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP2_STATE,&state)) { + if (valid) { + print_label(label,10); + if((int) state & 0x01) + printf("\t%+6.2f C \n",temp); + else + printf("\tfailed\n"); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_TEMP3,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP3,&temp) + && !sensors_get_feature(*name,SENSORS_FSCHER_TEMP3_STATE,&state)) { + if (valid) { + print_label(label,10); + if((int) state & 0x01) + printf("\t%+6.2f C \n",temp); + else + printf("\tfailed\n"); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_FAN1,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN1,&fan) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN1_MIN,&min_rpm) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN1_STATE,&state)) { + if (valid) { + print_label(label,10); + if((int) state & 0x02) + printf("\tfaulty\n"); + else if (fan < min_rpm) + printf("\t%6.0f RPM (not present or faulty)\n",fan); + else + printf("\t%6.0f RPM \n",fan); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_FAN2,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN2,&fan) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN2_MIN,&min_rpm) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN2_STATE,&state)) { + if (valid) { + print_label(label,10); + if((int) state & 0x02) + printf("\tfaulty\n"); + else if (fan < min_rpm) + printf("\t%6.0f RPM (not present or faulty)\n",fan); + else + printf("\t%6.0f RPM \n",fan); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_FAN3,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN3,&fan) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN3_MIN,&min_rpm) + && !sensors_get_feature(*name,SENSORS_FSCHER_FAN3_STATE,&state)) { + if (valid) { + print_label(label,10); + if((int) state & 0x02) + printf("\tfaulty\n"); + else if (fan < min_rpm) + printf("\t%6.0f RPM (not present or faulty)\n",fan); + else + printf("\t%6.0f RPM \n",fan); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_VOLTAGE1,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_VOLTAGE1,&voltage)) { + if (valid) { + print_label(label,10); + printf("\t%+6.2f V\n",voltage); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_VOLTAGE2,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_VOLTAGE2,&voltage)) { + if (valid) { + print_label(label,10); + printf("\t%+6.2f V\n",voltage); + } + } + free_the_label(&label); + if (!sensors_get_label_and_valid(*name,SENSORS_FSCHER_VOLTAGE3,&label,&valid) + && !sensors_get_feature(*name,SENSORS_FSCHER_VOLTAGE3,&voltage)) { + if (valid) { + print_label(label,10); + printf("\t%+6.2f V\n",voltage); + } + } + free_the_label(&label); +} + void print_pcf8591(const sensors_chip_name *name) { char *label; diff --git a/prog/sensors/chips.h b/prog/sensors/chips.h index 3de1a2c7..2d4533d8 100644 --- a/prog/sensors/chips.h +++ b/prog/sensors/chips.h @@ -46,6 +46,7 @@ extern void print_lm87(const sensors_chip_name *name); extern void print_it87(const sensors_chip_name *name); extern void print_fscpos(const sensors_chip_name *name); extern void print_fscscy(const sensors_chip_name *name); +extern void print_fscher(const sensors_chip_name *name); extern void print_pcf8591(const sensors_chip_name *name); extern void print_vt1211(const sensors_chip_name *name); extern void print_smsc47m1(const sensors_chip_name *name); diff --git a/prog/sensors/main.c b/prog/sensors/main.c index 238389ed..c8e16ead 100644 --- a/prog/sensors/main.c +++ b/prog/sensors/main.c @@ -361,6 +361,8 @@ void do_a_print(sensors_chip_name name) print_fscpos(&name); else if (!strcmp(name.prefix,"fscscy")) print_fscscy(&name); + else if (!strcmp(name.prefix,"fscher")) + print_fscher(&name); else if (!strcmp(name.prefix,"pcf8591")) print_pcf8591(&name); else if (!strcmp(name.prefix,"vt1211"))