2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-09-02 23:35:57 +00:00

adm1026 and auto-sensors.h patch from P.P.

git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@1777 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Mark D. Studebaker
2003-06-08 21:33:39 +00:00
parent 63443070b3
commit e9c0fce42a
22 changed files with 2695 additions and 29 deletions

22
CHANGES
View File

@@ -25,12 +25,13 @@ ask CVS about it:
File doc/chips/fscscy: Add watchdog documentation File doc/chips/fscscy: Add watchdog documentation
File sensors.conf.eg: Fix vt1211/vt8231 thermistor calculations File sensors.conf.eg: Fix vt1211/vt8231 thermistor calculations
Library: Add support for exponents and logarithms for vt1211/vt8235 temps; Library: Add support for exponents and logarithms for vt1211/vt8235 temps;
add lm85 support; add w83791d support add adm1026, lm85, w83791d support
Makefiles: Generate warnings if new library won't be found by ld.so; Makefiles: Generate warnings if new library won't be found by ld.so;
Modules now install in kernel/drivers/i2c/[busses,chips]; Modules now install in kernel/drivers/i2c/[busses,chips];
Ensure that headers in /usr/local/include are used first; Ensure that headers in /usr/local/include are used first;
Don't use /usr/include headers for modules; Don't use /usr/include headers for modules;
Handle multiple UTS_RELEASE definitions in linux/version.h Handle multiple UTS_RELEASE definitions in linux/version.h;
Automatically generate kernel/include/sensors.h
Modules (all): Cleanups including Modules (all): Cleanups including
- Add #include <i2c-proc.h> - Add #include <i2c-proc.h>
- C99 initializers - C99 initializers
@@ -49,32 +50,39 @@ ask CVS about it:
Modules (several): Add support for AMD Opteron VRM (VID) encoding Modules (several): Add support for AMD Opteron VRM (VID) encoding
Module adm1021: Set alarm on failed reads and report old value; Module adm1021: Set alarm on failed reads and report old value;
merge changes from kernel 2.5.54 merge changes from kernel 2.5.54
Module adm1026: New
Module bmcsensors: Fix compile when DEBUG=1 Module bmcsensors: Fix compile when DEBUG=1
Modules ddcmon, eeprom: Use i2c block reads if possible; Modules ddcmon, eeprom: Use i2c block reads if possible;
better error handling better error handling
Module ds1307: Add to Makefile
Module gl520sm: Fix temperature over/hyst writes Module gl520sm: Fix temperature over/hyst writes
Module lm75: merge changes from kernel 2.5.54 Module lm75: merge changes from kernel 2.5.54
Module lm85: New Module lm85: New
Module i2c-amd756: merge changes from kernel 2.5.54 Module i2c-amd756: merge changes from kernel 2.5.54
Module i2c-amd8111: merge changes from kernel 2.5.54 Module i2c-amd8111: merge changes from kernel 2.5.54
Module i2c-i810.c: Fix for some chips Module i2c-i801: Add support for 82801EB (ICH5)
Module i2c-nforce2.c: New Module i2c-i810: Fix for some chips
Module i2c-nforce2: New
Module i2c-sis645: Add support for SiS651, SiS961, SiS745 Module i2c-sis645: Add support for SiS651, SiS961, SiS745
Modules mtp008, smsc47m1, vt1211, vt8231, w83781d: Standardize and improve Modules mtp008, smsc47m1, vt1211, vt8231, w83781d: Standardize and improve
pwm and pwm enable support; update docs pwm and pwm enable support; update docs
Module w83781d: Add support for w83791d
Module w83627hf: New Module w83627hf: New
Program decode-dimms.pl: Recognize DDR and Rambus Program decode-dimms.pl: Recognize DDR and Rambus
Program eeprom: Fix writes for small eeproms Program eeprom: Fix writes for small eeproms
Program eeprom, eepromer: Use local i2c-dev.h for build Program eeprom, eepromer: Use local i2c-dev.h for build
Program lm_sensors.init: Call sensors -s in start() Program lm_sensors.init: Call sensors -s in start()
Program mkpatch: Fix vt8231 compile; keep tsunami from menu on non-alpha Program mkpatch: Fix vt8231 compile; keep tsunami from menu on non-alpha;
add adm1026,lm85 support
Program p4b_smbus: Fix 'make install', install in same place as other modules Program p4b_smbus: Fix 'make install', install in same place as other modules
Program pwmtest: New Program pwmtest: New
Program sensors: add lm85 support; add w83791d support Program sensors: add adm1026, lm85, w83791d support
Program sensors-detect: Add super i/o detection (smsc47m1, vt1211, Program sensors-detect: Add super i/o detection (smsc47m1, vt1211,
w83627hf, w83697hf); w83627hf, w83697hf);
Add support for SiS651, SiS961, SiS745, nForce2; Add support for SiS651, SiS961, SiS745, nForce2;
Support dmidecode 2.0 and later Support dmidecode 2.0 and later;
Fix "C" format error;
Add support for adm1026, 82801EB (ICH5)
2.7.0 (20021208) 2.7.0 (20021208)
NOTE: Requires i2c-2.7.0 or newer. NOTE: Requires i2c-2.7.0 or newer.

View File

@@ -85,3 +85,4 @@ problems.
Added support for amd8111 SMBus 1.0 controller to i2c-amd756. Added support for amd8111 SMBus 1.0 controller to i2c-amd756.
* Philip Pokorny <ppokorny@penguincomputing.com> * Philip Pokorny <ppokorny@penguincomputing.com>
Author of the LM85 chip driver. Author of the LM85 chip driver.
Author of the ADM1026 chip driver.

View File

@@ -171,6 +171,8 @@ AR := ar
INSTALL := install INSTALL := install
LN := ln -sfn LN := ln -sfn
GREP := grep GREP := grep
AWK := awk
SED := sed
# Determine the default compiler flags # Determine the default compiler flags
# Set CFLAGS or CPPFLAGS above to add your own flags to all. # Set CFLAGS or CPPFLAGS above to add your own flags to all.
@@ -286,7 +288,7 @@ version:
%.d: %.c %.d: %.c
$(CC) -M -MG $(MODCPPFLAGS) $(MODCFLAGS) $< | \ $(CC) -M -MG $(MODCPPFLAGS) $(MODCFLAGS) $< | \
sed -e 's@^\(.*\)\.o:@$*.d $*.o: Makefile '`dirname $*.d`/Module.mk' @' > $@ $(SED) -e 's@^\(.*\)\.o:@$*.d $*.o: Makefile '`dirname $*.d`/Module.mk' @' > $@
@@ -296,7 +298,7 @@ version:
%.rd: %.c %.rd: %.c
$(CC) -M -MG $(PROGCPPFLAGS) $(PROGCFLAGS) $< | \ $(CC) -M -MG $(PROGCPPFLAGS) $(PROGCFLAGS) $< | \
sed -e 's@^\(.*\)\.o:@$*.rd $*.ro: Makefile '`dirname $*.rd`/Module.mk' @' > $@ $(SED) -e 's@^\(.*\)\.o:@$*.rd $*.ro: Makefile '`dirname $*.rd`/Module.mk' @' > $@
%: %.ro %: %.ro
@@ -309,7 +311,7 @@ version:
%.ad: %.c %.ad: %.c
$(CC) -M -MG $(ARCPPFLAGS) $(ARCFLAGS) $< | \ $(CC) -M -MG $(ARCPPFLAGS) $(ARCFLAGS) $< | \
sed -e 's@^\(.*\)\.o:@$*.ad $*.ao: Makefile '`dirname $*.ad`/Module.mk' @' > $@ $(SED) -e 's@^\(.*\)\.o:@$*.ad $*.ao: Makefile '`dirname $*.ad`/Module.mk' @' > $@
# .lo files are used for shared libraries # .lo files are used for shared libraries
@@ -318,7 +320,7 @@ version:
%.ld: %.c %.ld: %.c
$(CC) -M -MG $(LIBCPPFLAGS) $(LIBCFLAGS) $< | \ $(CC) -M -MG $(LIBCPPFLAGS) $(LIBCFLAGS) $< | \
sed -e 's@^\(.*\)\.o:@$*.ld $*.lo: Makefile '`dirname $*.ld`/Module.mk' @' > $@ $(SED) -e 's@^\(.*\)\.o:@$*.ld $*.lo: Makefile '`dirname $*.ld`/Module.mk' @' > $@
# Flex and Bison # Flex and Bison

19
README
View File

@@ -8,10 +8,10 @@
OVERVIEW OF THE LM_SENSORS PACKAGE AND SUMMARY OF SUPPORTED DEVICES OVERVIEW OF THE LM_SENSORS PACKAGE AND SUMMARY OF SUPPORTED DEVICES
!!! THIS PACKAGE REQUIRES i2c-2.7.0 or later!!! !!! THIS PACKAGE REQUIRES i2c-2.8.0 or later!!!
FOR 2.5 KERNELS, we do not recommend attempting to compile this package. FOR 2.5 KERNELS, we do not recommend attempting to compile this package.
Use kernel patches linked from our download page instead!!! Use the drivers already in the 2.5 kernel development tree.
============================================================================= =============================================================================
@@ -19,15 +19,16 @@ This is the completely rewritten version 2 of lm_sensors, a collection of
modules for general SMBus access and hardware monitoring. modules for general SMBus access and hardware monitoring.
Version 1 is now officially unsupported. Version 1 is now officially unsupported.
WARNING! This package will compile for 2.2 and 2.4 kernels only. WARNING! This package will kernels 2.4.9 - 2.4.xx only.
Use lm_sensors-2.4.5 for 2.0 kernels. Use lm_sensors-2.4.5 for 2.0 kernels.
Use lm_sensors-2.7.0 for 2.2, 2.3, and 2.4.0 - 2.4.8 kernels.
Use the kernel patches linked from our download page for 2.5 kernels. Use the kernel patches linked from our download page for 2.5 kernels.
WARNING! You must get the latest i2c package, i2c-2.7.0, WARNING! You must get the latest i2c package, i2c-2.8.0,
EVEN IF your kernel does contain i2c support!!!!!!!!! EVEN IF your kernel does contain i2c support!!!!!!!!!
Kernels 2.3.34 and later, and all 2.4.x kernels, contain the Kernels 2.3.34 and later, and all 2.4.x kernels, contain the
I2C package. Kernels 2.4.13 - 2.4.19 contain i2c-2.6.1, I2C package. Kernels 2.4.13 - 2.4.20 contain i2c-2.6.1,
which is NOT sufficient for compilation of this package. which is NOT sufficient for compilation of this package.
See the lm_sensors download page for guidance: See the lm_sensors download page for guidance:
@@ -46,7 +47,7 @@ At least the following I2C/SMBus adapters are supported:
AMD 8111 SMBus 2.0 AMD 8111 SMBus 2.0
Apple Hydra (used on some PPC machines) Apple Hydra (used on some PPC machines)
DEC 21272/21274 (Tsunami/Typhoon - on Alpha boards) DEC 21272/21274 (Tsunami/Typhoon - on Alpha boards)
Intel I801 ICH/ICH0/ICH2/ICH3 (used in Intel 810, 810E, 815E, 820, 840 chipsets) Intel I801 ICH/ICH0/ICH2/ICH3/ICH4/ICH5
Intel PIIX4 (used in many Intel chipsets) Intel PIIX4 (used in many Intel chipsets)
Intel I810/I815 GMCH Intel I810/I815 GMCH
Intel 82443MX (440MX) Intel 82443MX (440MX)
@@ -60,8 +61,8 @@ At least the following I2C/SMBus adapters are supported:
At least the following hardware sensor chips are supported: At least the following hardware sensor chips are supported:
Analog Devices ADM1021, ADM1021A, ADM1022, ADM1023 Analog Devices ADM1021, ADM1021A, ADM1022, ADM1023, ADM1024,
ADM1024, ADM1025, ADM1027 and ADM9240 ADM1025, ADM1026, ADM1027 and ADM9240
ADT7463 ADT7463
Asus AS99127F, ASB100 Bach Asus AS99127F, ASB100 Bach
Dallas Semiconductor DS75, DS1621, DS1625, DS1775, and DS1780 Dallas Semiconductor DS75, DS1621, DS1625, DS1775, and DS1780
@@ -77,7 +78,7 @@ At least the following hardware sensor chips are supported:
LM80, LM81, LM84, LM85, LM87, and LM92 LM80, LM81, LM84, LM85, LM87, and LM92
Philips NE1617, NE1617A Philips NE1617, NE1617A
SiS 5595, 950 embedded sensors SiS 5595, 950 embedded sensors
SMSC 47M1xx embedded sensors SMSC 47M1xx embedded sensors, EMC6D100, EMC6D101
TI THMC10 and THMC50 TI THMC10 and THMC50
VIA Technologies VT1211 and VT82C686A/B embedded sensors VIA Technologies VT1211 and VT82C686A/B embedded sensors
Winbond W83781D, W83782D, W83783S, W83627HF, and W83697HF Winbond W83781D, W83782D, W83783S, W83627HF, and W83697HF

View File

@@ -63,6 +63,9 @@ adm1024
adm1025 adm1025
adm1025 2 6 - - yes no adm1025 2 6 - - yes no
adm1026
adm1026 3 17 8 2 pwm+dac yes no
adm9240 adm9240
adm9240 1 6 2 1 dac yes no adm9240 1 6 2 1 dac yes no
ds1780 1 6 2 1 dac yes no ds1780 1 6 2 1 dac yes no

217
doc/chips/adm1026 Normal file
View File

@@ -0,0 +1,217 @@
Kernel driver `adm1026.o'
======================
Status: In development
Supported chips:
* Analog Devices ADM1026
Prefix `adm1026'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
Author: Philip Pokorny <ppokorny@penguincomputing.com>
for Penguin Computing
Module Parameters
-----------------
* force: short array (min = 1, max = 48)
List of adapter,address pairs to boldly assume to be present
* force_adm1026: short array (min = 1, max = 48)
List of adapter,address pairs which are unquestionably assumed to contain
an `adm1026' chip
* ignore: short array (min = 1, max = 48)
List of adapter,address pairs not to scan
* ignore_range: short array (min = 1, max = 48)
List of adapter,start-addr,end-addr triples not to scan
* probe: short array (min = 1, max = 48)
List of adapter,address pairs to scan additionally
* probe_range: short array (min = 1, max = 48)
List of adapter,start-addr,end-addr triples to scan additionally
The following only apply to the first ADM1026 detected. These are a
workaround for if your BIOS hasn't setup your chip.
* gpio_input: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inputs
* gpio_output: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as outputs
* gpio_inverted: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inverted
* gpio_normal: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as normal/non-inverted
* gpio_fan: int array (min = 1, max = 8)
List of GPIO pins (0-7) to program as fan tachs
Description
-----------
This driver implements support for the Analog Devices ADM1026. Analog
Devices calls it a "complete thermal system management controller."
The ADM1026 implements three (3) temperature sensors, 17 voltage
sensors, 16 general purpose digital I/O lines, eight (8) fan speed
sensors (8-bit), an analog output and a PWM output along with limit,
alarm and mask bits for all of the above. There is even 8k bytes of
EEPROM memory on chip.
Temperatures are measured in degrees Celcius. There are two external
sensor inputs and one internal sensor. Each sensor has a high and low
limit. If the limit is exceeded, an interrupt (#SMBALERT) can be
generated. The interrupts can be masked. In addition, there are
over-temp limits for each sensor. If this limit is exceeded, the
#THERM output will be asserted. The current temperature and limits
have a resolution of 1 degree.
FAN rotation speeds are reported in RPM (rotations per minute) but
measured in counts of a 22.5kHz internal clock. Each fan has a high
limit which corresponds to a minimum fan speed. If the limit is
exceeded, an interrupt can be generated. Each fan can be programmed
to divide the reference clock by 1, 2, 4 or 8. Not all RPM values can
accurately be represented, so some rounding is done. With a divider of
8, the slowest measureable speed of a one pulse per rev fan is 1323
RPM. Two pulse per rev fans can be measured as slow as 661 RPM.
Voltage sensors (in0 to in16) report their values in volts. An alarm
is triggered if the voltage has crossed a programmable minimum or
maximum limit. Note that minimum in this case always means 'closest
to zero'; this is important for negative voltage measurements.
Several inputs have integrated attenuators so they can measure higher
voltages directly. 3.3V, 5V, 12V, -12V and battery voltage all have
dedicated inputs. There are several inputs scaled to 0-3V full-scale
range for SCSI terminator power. The remaining inputs are not scaled
and have a 0-2.5V full-scale range. A 2.5V or 1.82V reference voltage
is provided for negative voltage measurements.
If an alarm triggers, it will remain triggered until the hardware
register is read at least once. This means that the cause for the
alarm may already have disappeared! Note that in the current
implementation, all hardware registers are read whenever any data is
read (unless it is less than 2.0 seconds since the last update). This
means that you can easily miss once-only alarms.
The ADM1026 measures continuously. Analog inputs are measured about 4
times a second. Fan speed measurement time depends on fan speed and
divisor. It can take as long as 1.5 seconds to measure all fan
speeds.
The ADM1026 has the ability to automaticaly control fan speed based on
the temperature sensor inputs. Both the PWM output and the DAC output
can be used to control fan speed. Usually only one of these two
outputs will be used. Write the minimum PWM or DAC value to the
appropriate control register. Then set the low temperature limit in
the tmin values for each temperature sensor. The range of control is
fixed at 20 degC, and the largest difference between current and tmin
of the temperature sensors sets the control output. See the datasheet
for several example circuits for controlling fan speed with the PWM
and DAC outputs. The fan speed sensors do not have PWM compensation,
so it is probably best to control the fan voltage from the power
lead rather than on the ground lead.
The datasheet shows an example application with VID signals attached
to GPIO lines. Unfortunately, the chip may not be connected to the
VID lines in this way. The driver assumes that the chips *is*
connected this way to get a vid voltage. If the VID value is wrong or
not wired as shown in the example, then you will need to write the
correct VID value to the driver either based on the GPIO values or
setting it directly. The value written to VID should be the *raw* VID
value (0 to 0x3f) or -1 (to restore the default value). When read,
the vid interface returns the scaled voltage according to the VRM spec
selected.
Example sensors.conf
--------------------
Here is an example sensors.conf configuration section for the ADM1026.
--------- cut here ---------
chip "adm1026-*"
# Voltage inputs
label in0 "V2.25_0" # Scaled for "SCSI terminator"?
label in1 "V2.25_1" # supply voltage?
label in2 "V2.25_2"
label in3 "V2.25_3"
label in4 "V2.25_4"
label in5 "V2.25_5"
label in6 "V1.875_0" # Unscaled inputs
label in7 "V1.875_1"
# If temp3 is enabled, in8 and in9 are disabled.
# label in8 "V1.875_2"
# label in9 "V1.875_3"
ignore in8
ignore in9
# Dedicated voltage inputs
label in10 "Vbat"
label in11 "V3.3STBY"
label in12 "V3.3MAIN"
label in13 "V5"
label in14 "Vccp"
label in15 "V12"
label in16 "V-12"
# Temperature inputs
label temp1 "Board"
label temp2 "CPU0"
label temp3 "CPU1"
# Fan inputs
label fan0 "CPU_Fan"
label fan1 "Fan1"
label fan2 "Fan2"
label fan3 "Fan3"
label fan4 "Fan4"
label fan5 "Fan5"
label fan6 "Fan6"
label fan7 "Fan7"
# PWM Outputs
label pwm "PWM"
# Voltage scaling is done on-chip. No 'compute' directive
# should be necessary. If in0-in9 have external scaling,
# set it here.
# compute in0 @ * 2.5, @ / 2.5
# Adjust fans speeds for actual pulses per rev
# compute fan0 @ / 2, @ * 2 # 2 pulse per rev
# compute fan1 @ / 3, @ * 3 # 3 pulse per rev
# compute fan2 @ / 4, @ * 4 # 4 pulse per rev
# compute fan3 @ / 8, @ * 8 # 8 pulse per rev
# Set VRM version
set vrm 9.1
# set vid 1.580
# Set voltage limits
set in10_min 3.0 * 0.95
set in10_max 3.0 * 1.05
set in11_min 3.3 * 0.95
set in11_max 3.3 * 1.05
set in12_min 3.3 * 0.95
set in12_max 3.3 * 1.05
set in13_min 5.0 * 0.95
set in13_max 5.0 * 1.05
# Uncomment if VID is wired or set above
# set in14_min vid * 0.95
# set in14_max vid * 1.05
set in15_min 12 * 0.95
set in15_max 12 * 1.05
set in16_min -12 * 0.95
set in16_max -12 * 1.05
# Set Fan limits
set fan0_min 7000
set fan1_min 7000
set fan2_min 7000
set fan3_min 7000
set fan4_min 3000
set fan5_min 3000
set fan6_min 3000
set fan7_min 3000

View File

@@ -46,6 +46,9 @@ endif
ifneq ($(shell if grep -q '^CONFIG_SENSORS_ADM1025=y' $(LINUX)/.config; then echo 1; fi),1) ifneq ($(shell if grep -q '^CONFIG_SENSORS_ADM1025=y' $(LINUX)/.config; then echo 1; fi),1)
KERNELCHIPSTARGETS += $(MODULE_DIR)/adm1025.o KERNELCHIPSTARGETS += $(MODULE_DIR)/adm1025.o
endif endif
ifneq ($(shell if grep -q '^CONFIG_SENSORS_ADM1026=y' $(LINUX)/.config; then echo 1; fi),1)
KERNELCHIPSTARGETS += $(MODULE_DIR)/adm1026.o
endif
ifneq ($(shell if grep -q '^CONFIG_SENSORS_ADM9240=y' $(LINUX)/.config; then echo 1; fi),1) ifneq ($(shell if grep -q '^CONFIG_SENSORS_ADM9240=y' $(LINUX)/.config; then echo 1; fi),1)
KERNELCHIPSTARGETS += $(MODULE_DIR)/adm9240.o KERNELCHIPSTARGETS += $(MODULE_DIR)/adm9240.o
endif endif

1757
kernel/chips/adm1026.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -483,6 +483,9 @@ static struct i2c_driver lm85_driver = {
.detach_client = &lm85_detach_client, .detach_client = &lm85_detach_client,
}; };
/* Unique ID assigned to each LM85 detected */
static int lm85_id = 0;
/* -- SENSORS SYSCTL START -- */ /* -- SENSORS SYSCTL START -- */
/* Common parameters */ /* Common parameters */
#define LM85_SYSCTL_IN0 1000 #define LM85_SYSCTL_IN0 1000
@@ -552,9 +555,6 @@ static struct i2c_driver lm85_driver = {
#define LM85_ALARM_TEMP3_FAULT 0x08000 #define LM85_ALARM_TEMP3_FAULT 0x08000
/* -- SENSORS SYSCTL END -- */ /* -- SENSORS SYSCTL END -- */
/* Unique ID assigned to each LM85 detected */
static int lm85_id = 0;
/* The /proc/sys entries */ /* The /proc/sys entries */
/* These files are created for each detected LM85. This is just a template; /* These files are created for each detected LM85. This is just a template;
* The actual list is built from this and additional per-chip * The actual list is built from this and additional per-chip
@@ -1567,6 +1567,7 @@ void lm85_pwm_config(struct i2c_client *client, int operation, int ctl_name,
*nrels_mag = 5; *nrels_mag = 5;
} else if (operation == SENSORS_PROC_REAL_WRITE) { } else if (operation == SENSORS_PROC_REAL_WRITE) {
int old_config ; int old_config ;
down(&data->update_lock); down(&data->update_lock);
old_config = data->autofan[nr].config ; old_config = data->autofan[nr].config ;
if (*nrels_mag > 4) { if (*nrels_mag > 4) {
@@ -1929,7 +1930,7 @@ void adt7463_therm_signal(struct i2c_client *client, int operation,
static int __init sm_lm85_init(void) static int __init sm_lm85_init(void)
{ {
printk("lm85 version %s (%s)\n", LM_VERSION, LM_DATE); printk("lm85: Version %s (%s)\n", LM_VERSION, LM_DATE);
printk("lm85: See http://www.penguincomputing.com/lm_sensors for more info.\n" ); printk("lm85: See http://www.penguincomputing.com/lm_sensors for more info.\n" );
return i2c_add_driver(&lm85_driver); return i2c_add_driver(&lm85_driver);
} }

View File

@@ -60,7 +60,7 @@ static void lm92_alarms (struct i2c_client *client,int operation,int ctl_name,in
/* -- SENSORS SYSCTL START -- */ /* -- SENSORS SYSCTL START -- */
#define LM92_SYSCTL_ALARMS 2001 /* high, low, critical */ #define LM92_SYSCTL_ALARMS 2001 /* high, low, critical */
#define LM92_SYSCTL_TEMP 1200 /* high, low, critical, hysterisis, input */ #define LM92_SYSCTL_TEMP 1200 /* high, low, critical, hysteresis, input */
#define LM92_ALARM_TEMP_HIGH 0x01 #define LM92_ALARM_TEMP_HIGH 0x01
#define LM92_ALARM_TEMP_LOW 0x02 #define LM92_ALARM_TEMP_LOW 0x02

View File

@@ -26,6 +26,19 @@ ifneq ($(shell if grep -q '^CONFIG_SENSORS=y' $(LINUX)/.config; then echo 1; fi)
KERNELINCLUDEFILES += $(MODULE_DIR)/sensors.h KERNELINCLUDEFILES += $(MODULE_DIR)/sensors.h
endif endif
$(KERNELINCLUDEDIR)/sensors.h: $(KERNELINCLUDEDIR)/sensors.h.template
( cat $@.template ; \
$(AWK) '/SENSORS SYSCTL START/,/SENSORS SYSCTL END/' $(KERNELCHIPSDIR)/*.c ;\
echo '#endif' \
) > $@
$(KERNELINCLUDEDIR)/sensors.hd:
( $(GREP) 'SENSORS SYSCTL START' /dev/null $(KERNELCHIPSDIR)/*.c | \
$(SED) -e 's/:.*//' -e 's#^#$(KERNELINCLUDEDIR)/sensors.h: #' ) > $@
# Get dependancies of sensors.h
INCLUDEFILES += $(MODULE_DIR)/sensors.hd
install-all-kernel-include: install-all-kernel-include:
if [ -n "$(KERNELINCLUDEFILES)" ] ; then \ if [ -n "$(KERNELINCLUDEFILES)" ] ; then \
$(MKDIR) $(DESTDIR)$(SYSINCLUDEDIR) ; \ $(MKDIR) $(DESTDIR)$(SYSINCLUDEDIR) ; \
@@ -35,6 +48,6 @@ install-all-kernel-include:
install :: install-all-kernel-include install :: install-all-kernel-include
clean-all-kernel-include: clean-all-kernel-include:
$(RM) $(KERNELINCLUDEDIR)/*.h.install $(RM) $(KERNELINCLUDEDIR)/*.h.install $(KERNELINCLUDEDIR)/sensors.h $(KERNELINCLUDEDIR)/sensors.hd
clean :: clean-all-kernel-include clean :: clean-all-kernel-include

View File

@@ -0,0 +1,53 @@
/*
sensors.h - Part of lm_sensors, Linux kernel modules for hardware
monitoring
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LIB_SENSORS_H
#define LIB_SENSORS_H
/* This file is intended to be included from userland utilities only.
*
* Individual drivers define their own SYSCTL and ALARM values in
* the driver itself surrounded by the following 'trigger' lines:
*
* -- SENSORS SYSCTL START --
* -- SENSORS SYSCTL END --
*/
/* From linux/i2c-proc.h */
/* Sysctl IDs */
#ifdef DEV_HWMON
#define DEV_SENSORS DEV_HWMON
#else /* ndef DEV_HWMOM */
#define DEV_SENSORS 2 /* The id of the lm_sensors directory within the
dev table */
#endif /* def DEV_HWMON */
/* The maximum length of the prefix */
#define SENSORS_PREFIX_MAX 20
#define SENSORS_CHIPS 1
struct i2c_chips_data {
int sysctl_id;
char name[SENSORS_PREFIX_MAX + 13];
};

View File

@@ -2081,7 +2081,323 @@ static sensors_chip_feature adm1025_features[] =
SENSORS_MODE_R, ADM1025_SYSCTL_ALARMS, VALUE(1), 0 }, SENSORS_MODE_R, ADM1025_SYSCTL_ALARMS, VALUE(1), 0 },
{ 0 } { 0 }
}; };
static sensors_chip_feature adm1026_features[] = {
{ SENSORS_ADM1026_ALARMS, "alarms",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_ALARMS, VALUE(1), 0 },
{ SENSORS_ADM1026_ALARM_MASK, "alarm_mask",
SENSORS_ADM1026_ALARMS, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_ALARM_MASK, VALUE(1), 0 },
{ SENSORS_ADM1026_GPIO, "gpio",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_GPIO, VALUE(1), 0 },
{ SENSORS_ADM1026_GPIO_MASK, "gpio_mask",
SENSORS_ADM1026_GPIO, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_GPIO_MASK, VALUE(1), 0 },
{ SENSORS_ADM1026_VID, "vid",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_VID, VALUE(1), 3 },
{ SENSORS_ADM1026_VRM, "vrm",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_VRM, VALUE(1), 1 },
{ SENSORS_ADM1026_PWM, "pwm",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_PWM, VALUE(1), 0 },
{ SENSORS_ADM1026_AFC_PWM, "afc_pwm",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_PWM, VALUE(1), 0 },
{ SENSORS_ADM1026_DAC, "analog_out",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_ANALOG_OUT, VALUE(1), 0 },
{ SENSORS_ADM1026_AFC_DAC, "afc_analog_out",
SENSORS_ADM1026_DAC, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_AFC, VALUE(2), 0 },
{ SENSORS_ADM1026_IN0, "in0",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN0, VALUE(3), 3 },
{ SENSORS_ADM1026_IN0_MIN, "in0_min",
SENSORS_ADM1026_IN0, SENSORS_ADM1026_IN0, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN0, VALUE(1), 3 },
{ SENSORS_ADM1026_IN0_MAX, "in0_max",
SENSORS_ADM1026_IN0, SENSORS_ADM1026_IN0, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN0, VALUE(2), 3 },
{ SENSORS_ADM1026_IN1, "in1",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN1, VALUE(3), 3 },
{ SENSORS_ADM1026_IN1_MIN, "in1_min",
SENSORS_ADM1026_IN1, SENSORS_ADM1026_IN1, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN1, VALUE(1), 3 },
{ SENSORS_ADM1026_IN1_MAX, "in1_max",
SENSORS_ADM1026_IN1, SENSORS_ADM1026_IN1, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN1, VALUE(2), 3 },
{ SENSORS_ADM1026_IN2, "in2",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN2, VALUE(3), 3 },
{ SENSORS_ADM1026_IN2_MIN, "in2_min",
SENSORS_ADM1026_IN2, SENSORS_ADM1026_IN2, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN2, VALUE(1), 3 },
{ SENSORS_ADM1026_IN2_MAX, "in2_max",
SENSORS_ADM1026_IN2, SENSORS_ADM1026_IN2, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN2, VALUE(2), 3 },
{ SENSORS_ADM1026_IN3, "in3",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN3, VALUE(3), 3 },
{ SENSORS_ADM1026_IN3_MIN, "in3_min",
SENSORS_ADM1026_IN3, SENSORS_ADM1026_IN3, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN3, VALUE(1), 3 },
{ SENSORS_ADM1026_IN3_MAX, "in3_max",
SENSORS_ADM1026_IN3, SENSORS_ADM1026_IN3, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN3, VALUE(2), 3 },
{ SENSORS_ADM1026_IN4, "in4",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN4, VALUE(3), 3 },
{ SENSORS_ADM1026_IN4_MIN, "in4_min",
SENSORS_ADM1026_IN4, SENSORS_ADM1026_IN4, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN4, VALUE(1), 3 },
{ SENSORS_ADM1026_IN4_MAX, "in4_max",
SENSORS_ADM1026_IN4, SENSORS_ADM1026_IN4, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN4, VALUE(2), 3 },
{ SENSORS_ADM1026_IN5, "in5",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN5, VALUE(3), 3 },
{ SENSORS_ADM1026_IN5_MIN, "in5_min",
SENSORS_ADM1026_IN5, SENSORS_ADM1026_IN5, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN5, VALUE(1), 3 },
{ SENSORS_ADM1026_IN5_MAX, "in5_max",
SENSORS_ADM1026_IN5, SENSORS_ADM1026_IN5, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN5, VALUE(2), 3 },
{ SENSORS_ADM1026_IN6, "in6",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN6, VALUE(3), 3 },
{ SENSORS_ADM1026_IN6_MIN, "in6_min",
SENSORS_ADM1026_IN6, SENSORS_ADM1026_IN6, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN6, VALUE(1), 3 },
{ SENSORS_ADM1026_IN6_MAX, "in6_max",
SENSORS_ADM1026_IN6, SENSORS_ADM1026_IN6, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN6, VALUE(2), 3 },
{ SENSORS_ADM1026_IN7, "in7",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN7, VALUE(3), 3 },
{ SENSORS_ADM1026_IN7_MIN, "in7_min",
SENSORS_ADM1026_IN7, SENSORS_ADM1026_IN7, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN7, VALUE(1), 3 },
{ SENSORS_ADM1026_IN7_MAX, "in7_max",
SENSORS_ADM1026_IN7, SENSORS_ADM1026_IN7, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN7, VALUE(2), 3 },
{ SENSORS_ADM1026_IN8, "in8",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN8, VALUE(3), 3 },
{ SENSORS_ADM1026_IN8_MIN, "in8_min",
SENSORS_ADM1026_IN8, SENSORS_ADM1026_IN8, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN8, VALUE(1), 3 },
{ SENSORS_ADM1026_IN8_MAX, "in8_max",
SENSORS_ADM1026_IN8, SENSORS_ADM1026_IN8, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN8, VALUE(2), 3 },
{ SENSORS_ADM1026_IN9, "in9",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN9, VALUE(3), 3 },
{ SENSORS_ADM1026_IN9_MIN, "in9_min",
SENSORS_ADM1026_IN9, SENSORS_ADM1026_IN9, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN9, VALUE(1), 3 },
{ SENSORS_ADM1026_IN9_MAX, "in9_max",
SENSORS_ADM1026_IN9, SENSORS_ADM1026_IN9, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN9, VALUE(2), 3 },
{ SENSORS_ADM1026_IN10, "in10",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN10, VALUE(3), 3 },
{ SENSORS_ADM1026_IN10_MIN, "in10_min",
SENSORS_ADM1026_IN10, SENSORS_ADM1026_IN10, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN10, VALUE(1), 3 },
{ SENSORS_ADM1026_IN10_MAX, "in10_max",
SENSORS_ADM1026_IN10, SENSORS_ADM1026_IN10, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN10, VALUE(2), 3 },
{ SENSORS_ADM1026_IN11, "in11",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN11, VALUE(3), 3 },
{ SENSORS_ADM1026_IN11_MIN, "in11_min",
SENSORS_ADM1026_IN11, SENSORS_ADM1026_IN11, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN11, VALUE(1), 3 },
{ SENSORS_ADM1026_IN11_MAX, "in11_max",
SENSORS_ADM1026_IN11, SENSORS_ADM1026_IN11, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN11, VALUE(2), 3 },
{ SENSORS_ADM1026_IN12, "in12",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN12, VALUE(3), 3 },
{ SENSORS_ADM1026_IN12_MIN, "in12_min",
SENSORS_ADM1026_IN12, SENSORS_ADM1026_IN12, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN12, VALUE(1), 3 },
{ SENSORS_ADM1026_IN12_MAX, "in12_max",
SENSORS_ADM1026_IN12, SENSORS_ADM1026_IN12, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN12, VALUE(2), 3 },
{ SENSORS_ADM1026_IN13, "in13",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN13, VALUE(3), 3 },
{ SENSORS_ADM1026_IN13_MIN, "in13_min",
SENSORS_ADM1026_IN13, SENSORS_ADM1026_IN13, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN13, VALUE(1), 3 },
{ SENSORS_ADM1026_IN13_MAX, "in13_max",
SENSORS_ADM1026_IN13, SENSORS_ADM1026_IN13, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN13, VALUE(2), 3 },
{ SENSORS_ADM1026_IN14, "in14",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN14, VALUE(3), 3 },
{ SENSORS_ADM1026_IN14_MIN, "in14_min",
SENSORS_ADM1026_IN14, SENSORS_ADM1026_IN14, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN14, VALUE(1), 3 },
{ SENSORS_ADM1026_IN14_MAX, "in14_max",
SENSORS_ADM1026_IN14, SENSORS_ADM1026_IN14, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN14, VALUE(2), 3 },
{ SENSORS_ADM1026_IN15, "in15",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN15, VALUE(3), 3 },
{ SENSORS_ADM1026_IN15_MIN, "in15_min",
SENSORS_ADM1026_IN15, SENSORS_ADM1026_IN15, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN15, VALUE(1), 3 },
{ SENSORS_ADM1026_IN15_MAX, "in15_max",
SENSORS_ADM1026_IN15, SENSORS_ADM1026_IN15, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN15, VALUE(2), 3 },
{ SENSORS_ADM1026_IN16, "in16",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_IN16, VALUE(3), 3 },
{ SENSORS_ADM1026_IN16_MIN, "in16_min",
SENSORS_ADM1026_IN16, SENSORS_ADM1026_IN16, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN16, VALUE(1), 3 },
{ SENSORS_ADM1026_IN16_MAX, "in16_max",
SENSORS_ADM1026_IN16, SENSORS_ADM1026_IN16, SENSORS_MODE_RW,
ADM1026_SYSCTL_IN16, VALUE(2), 3 },
{ SENSORS_ADM1026_FAN0, "fan0",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN0, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN0_MIN, "fan0_min",
SENSORS_ADM1026_FAN0, SENSORS_ADM1026_FAN0, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN0, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN0_DIV, "fan0_div",
SENSORS_ADM1026_FAN0, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN1, "fan1",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN1, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN1_MIN, "fan1_min",
SENSORS_ADM1026_FAN1, SENSORS_ADM1026_FAN1, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN1, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN1_DIV, "fan1_div",
SENSORS_ADM1026_FAN1, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN2, "fan2",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN2, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN2_MIN, "fan2_min",
SENSORS_ADM1026_FAN2, SENSORS_ADM1026_FAN2, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN2, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN2_DIV, "fan2_div",
SENSORS_ADM1026_FAN2, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(3), 0 },
{ SENSORS_ADM1026_FAN3, "fan3",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN3, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN3_MIN, "fan3_min",
SENSORS_ADM1026_FAN3, SENSORS_ADM1026_FAN3, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN3, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN3_DIV, "fan3_div",
SENSORS_ADM1026_FAN3, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(4), 0 },
{ SENSORS_ADM1026_FAN4, "fan4",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN4, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN4_MIN, "fan4_min",
SENSORS_ADM1026_FAN4, SENSORS_ADM1026_FAN4, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN4, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN4_DIV, "fan4_div",
SENSORS_ADM1026_FAN4, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(5), 0 },
{ SENSORS_ADM1026_FAN5, "fan5",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN5, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN5_MIN, "fan5_min",
SENSORS_ADM1026_FAN5, SENSORS_ADM1026_FAN5, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN5, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN5_DIV, "fan5_div",
SENSORS_ADM1026_FAN5, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(6), 0 },
{ SENSORS_ADM1026_FAN6, "fan6",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN6, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN6_MIN, "fan6_min",
SENSORS_ADM1026_FAN6, SENSORS_ADM1026_FAN6, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN6, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN6_DIV, "fan6_div",
SENSORS_ADM1026_FAN6, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(7), 0 },
{ SENSORS_ADM1026_FAN7, "fan7",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_FAN7, VALUE(2), 0 },
{ SENSORS_ADM1026_FAN7_MIN, "fan7_min",
SENSORS_ADM1026_FAN7, SENSORS_ADM1026_FAN7, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN7, VALUE(1), 0 },
{ SENSORS_ADM1026_FAN7_DIV, "fan7_div",
SENSORS_ADM1026_FAN7, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_FAN_DIV, VALUE(8), 0 },
{ SENSORS_ADM1026_TEMP1, "temp1",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_TEMP1, VALUE(3), 0 },
{ SENSORS_ADM1026_TEMP1_MIN, "temp1_min",
SENSORS_ADM1026_TEMP1, SENSORS_ADM1026_TEMP1, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP1, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP1_MAX, "temp1_max",
SENSORS_ADM1026_TEMP1, SENSORS_ADM1026_TEMP1, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP1, VALUE(2), 0 },
{ SENSORS_ADM1026_TEMP1_OFFSET, "temp1_offset",
SENSORS_ADM1026_TEMP1, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_OFFSET1, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP1_TMIN, "temp1_tmin",
SENSORS_ADM1026_TEMP1, SENSORS_ADM1026_TEMP1, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_TMIN1, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP1_THERM, "temp1_therm",
SENSORS_ADM1026_TEMP1, SENSORS_ADM1026_TEMP1, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_THERM1, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP2, "temp2",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_TEMP2, VALUE(3), 0 },
{ SENSORS_ADM1026_TEMP2_MIN, "temp2_min",
SENSORS_ADM1026_TEMP2, SENSORS_ADM1026_TEMP2, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP2, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP2_MAX, "temp2_max",
SENSORS_ADM1026_TEMP2, SENSORS_ADM1026_TEMP2, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP2, VALUE(2), 0 },
{ SENSORS_ADM1026_TEMP2_OFFSET, "temp2_offset",
SENSORS_ADM1026_TEMP2, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_OFFSET2, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP2_TMIN, "temp2_tmin",
SENSORS_ADM1026_TEMP2, SENSORS_ADM1026_TEMP2, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_TMIN2, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP2_THERM, "temp2_therm",
SENSORS_ADM1026_TEMP2, SENSORS_ADM1026_TEMP2, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_THERM2, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP3, "temp3",
SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, SENSORS_MODE_R,
ADM1026_SYSCTL_TEMP3, VALUE(3), 0 },
{ SENSORS_ADM1026_TEMP3_MIN, "temp3_min",
SENSORS_ADM1026_TEMP3, SENSORS_ADM1026_TEMP3, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP3, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP3_MAX, "temp3_max",
SENSORS_ADM1026_TEMP3, SENSORS_ADM1026_TEMP3, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP3, VALUE(2), 0 },
{ SENSORS_ADM1026_TEMP3_OFFSET, "temp3_offset",
SENSORS_ADM1026_TEMP3, SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_OFFSET3, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP3_TMIN, "temp3_tmin",
SENSORS_ADM1026_TEMP3, SENSORS_ADM1026_TEMP3, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_TMIN3, VALUE(1), 0 },
{ SENSORS_ADM1026_TEMP3_THERM, "temp3_therm",
SENSORS_ADM1026_TEMP3, SENSORS_ADM1026_TEMP3, SENSORS_MODE_RW,
ADM1026_SYSCTL_TEMP_THERM3, VALUE(1), 0 },
{ 0 }
};
static sensors_chip_feature via686a_features[] = static sensors_chip_feature via686a_features[] =
{ {
{ SENSORS_VIA686A_IN0, "2.0V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, { SENSORS_VIA686A_IN0, "2.0V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
@@ -3966,6 +4282,7 @@ sensors_chip_features sensors_chip_features_list[] =
/* Cheat on ADM1022 for now - no separate #defines */ /* Cheat on ADM1022 for now - no separate #defines */
{ SENSORS_ADM1022_PREFIX, thmc50_features }, { SENSORS_ADM1022_PREFIX, thmc50_features },
{ SENSORS_ADM1025_PREFIX, adm1025_features }, { SENSORS_ADM1025_PREFIX, adm1025_features },
{ SENSORS_ADM1026_PREFIX, adm1026_features },
{ SENSORS_VIA686A_PREFIX, via686a_features }, { SENSORS_VIA686A_PREFIX, via686a_features },
{ SENSORS_DDCMON_PREFIX, ddcmon_features }, { SENSORS_DDCMON_PREFIX, ddcmon_features },
{ SENSORS_EEPROM_PREFIX, eeprom_features }, { SENSORS_EEPROM_PREFIX, eeprom_features },

View File

@@ -945,6 +945,118 @@
#define SENSORS_ADM1025_ALARMS 81 /* R */ #define SENSORS_ADM1025_ALARMS 81 /* R */
#define SENSORS_ADM1026_PREFIX "adm1026"
/* NOTE: print_adm1026 (sensors) depends on the ordering
* of these entries in each group. For example
* fan#, fan#_div, fan#_min
* temp#, temp#_max, temp#_min, temp#_offset
* and the ordering of the groups
* in0, in1, ... in9, in10, in11
*/
#define SENSORS_ADM1026_AFC_DAC 1 /* RW -- afc_analog_out */
#define SENSORS_ADM1026_AFC_PWM 2 /* RW -- afc_pwm */
#define SENSORS_ADM1026_ALARMS 3 /* R -- alarms */
#define SENSORS_ADM1026_ALARM_MASK 4 /* R -- alarm_mask */
#define SENSORS_ADM1026_DAC 5 /* RW -- analog_out */
#define SENSORS_ADM1026_GPIO 6 /* R -- gpio */
#define SENSORS_ADM1026_GPIO_MASK 7 /* R -- gpio_mask */
#define SENSORS_ADM1026_PWM 8 /* RW -- pwm */
#define SENSORS_ADM1026_VID 9 /* RW -- vid */
#define SENSORS_ADM1026_VRM 10 /* RW -- vrm */
#define SENSORS_ADM1026_FAN0 11 /* R -- fan0 */
#define SENSORS_ADM1026_FAN0_DIV 12 /* RW -- fan0_div */
#define SENSORS_ADM1026_FAN0_MIN 13 /* RW -- fan0_min */
#define SENSORS_ADM1026_FAN1 14 /* R -- fan1 */
#define SENSORS_ADM1026_FAN1_DIV 15 /* RW -- fan1_div */
#define SENSORS_ADM1026_FAN1_MIN 16 /* RW -- fan1_min */
#define SENSORS_ADM1026_FAN2 17 /* R -- fan2 */
#define SENSORS_ADM1026_FAN2_DIV 18 /* RW -- fan2_div */
#define SENSORS_ADM1026_FAN2_MIN 19 /* RW -- fan2_min */
#define SENSORS_ADM1026_FAN3 20 /* R -- fan3 */
#define SENSORS_ADM1026_FAN3_DIV 21 /* RW -- fan3_div */
#define SENSORS_ADM1026_FAN3_MIN 22 /* RW -- fan3_min */
#define SENSORS_ADM1026_FAN4 23 /* R -- fan4 */
#define SENSORS_ADM1026_FAN4_DIV 24 /* RW -- fan4_div */
#define SENSORS_ADM1026_FAN4_MIN 25 /* RW -- fan4_min */
#define SENSORS_ADM1026_FAN5 26 /* R -- fan5 */
#define SENSORS_ADM1026_FAN5_DIV 27 /* RW -- fan5_div */
#define SENSORS_ADM1026_FAN5_MIN 28 /* RW -- fan5_min */
#define SENSORS_ADM1026_FAN6 29 /* R -- fan6 */
#define SENSORS_ADM1026_FAN6_DIV 30 /* RW -- fan6_div */
#define SENSORS_ADM1026_FAN6_MIN 31 /* RW -- fan6_min */
#define SENSORS_ADM1026_FAN7 32 /* R -- fan7 */
#define SENSORS_ADM1026_FAN7_DIV 33 /* RW -- fan7_div */
#define SENSORS_ADM1026_FAN7_MIN 34 /* RW -- fan7_min */
#define SENSORS_ADM1026_IN0 35 /* R -- in0 */
#define SENSORS_ADM1026_IN0_MAX 36 /* RW -- in0_max */
#define SENSORS_ADM1026_IN0_MIN 37 /* RW -- in0_min */
#define SENSORS_ADM1026_IN1 38 /* R -- in1 */
#define SENSORS_ADM1026_IN1_MAX 39 /* RW -- in1_max */
#define SENSORS_ADM1026_IN1_MIN 40 /* RW -- in1_min */
#define SENSORS_ADM1026_IN2 41 /* R -- in2 */
#define SENSORS_ADM1026_IN2_MAX 42 /* RW -- in2_max */
#define SENSORS_ADM1026_IN2_MIN 43 /* RW -- in2_min */
#define SENSORS_ADM1026_IN3 44 /* R -- in3 */
#define SENSORS_ADM1026_IN3_MAX 45 /* RW -- in3_max */
#define SENSORS_ADM1026_IN3_MIN 46 /* RW -- in3_min */
#define SENSORS_ADM1026_IN4 47 /* R -- in4 */
#define SENSORS_ADM1026_IN4_MAX 48 /* RW -- in4_max */
#define SENSORS_ADM1026_IN4_MIN 49 /* RW -- in4_min */
#define SENSORS_ADM1026_IN5 50 /* R -- in5 */
#define SENSORS_ADM1026_IN5_MAX 51 /* RW -- in5_max */
#define SENSORS_ADM1026_IN5_MIN 52 /* RW -- in5_min */
#define SENSORS_ADM1026_IN6 53 /* R -- in6 */
#define SENSORS_ADM1026_IN6_MAX 54 /* RW -- in6_max */
#define SENSORS_ADM1026_IN6_MIN 55 /* RW -- in6_min */
#define SENSORS_ADM1026_IN7 56 /* R -- in7 */
#define SENSORS_ADM1026_IN7_MAX 57 /* RW -- in7_max */
#define SENSORS_ADM1026_IN7_MIN 58 /* RW -- in7_min */
#define SENSORS_ADM1026_IN8 59 /* R -- in8 */
#define SENSORS_ADM1026_IN8_MAX 60 /* RW -- in8_max */
#define SENSORS_ADM1026_IN8_MIN 61 /* RW -- in8_min */
#define SENSORS_ADM1026_IN9 62 /* R -- in9 */
#define SENSORS_ADM1026_IN9_MAX 63 /* RW -- in9_max */
#define SENSORS_ADM1026_IN9_MIN 64 /* RW -- in9_min */
#define SENSORS_ADM1026_IN10 65 /* R -- in10 */
#define SENSORS_ADM1026_IN10_MAX 66 /* RW -- in10_max */
#define SENSORS_ADM1026_IN10_MIN 67 /* RW -- in10_min */
#define SENSORS_ADM1026_IN11 68 /* R -- in11 */
#define SENSORS_ADM1026_IN11_MAX 69 /* RW -- in11_max */
#define SENSORS_ADM1026_IN11_MIN 70 /* RW -- in11_min */
#define SENSORS_ADM1026_IN12 71 /* R -- in12 */
#define SENSORS_ADM1026_IN12_MAX 72 /* RW -- in12_max */
#define SENSORS_ADM1026_IN12_MIN 73 /* RW -- in12_min */
#define SENSORS_ADM1026_IN13 74 /* R -- in13 */
#define SENSORS_ADM1026_IN13_MAX 75 /* RW -- in13_max */
#define SENSORS_ADM1026_IN13_MIN 76 /* RW -- in13_min */
#define SENSORS_ADM1026_IN14 77 /* R -- in14 */
#define SENSORS_ADM1026_IN14_MAX 78 /* RW -- in14_max */
#define SENSORS_ADM1026_IN14_MIN 79 /* RW -- in14_min */
#define SENSORS_ADM1026_IN15 80 /* R -- in15 */
#define SENSORS_ADM1026_IN15_MAX 81 /* RW -- in15_max */
#define SENSORS_ADM1026_IN15_MIN 82 /* RW -- in15_min */
#define SENSORS_ADM1026_IN16 83 /* R -- in16 */
#define SENSORS_ADM1026_IN16_MAX 84 /* RW -- in16_max */
#define SENSORS_ADM1026_IN16_MIN 85 /* RW -- in16_min */
#define SENSORS_ADM1026_TEMP1 86 /* R -- temp1 */
#define SENSORS_ADM1026_TEMP1_MAX 87 /* RW -- temp1_max */
#define SENSORS_ADM1026_TEMP1_MIN 88 /* RW -- temp1_min */
#define SENSORS_ADM1026_TEMP1_OFFSET 89 /* RW -- temp1_offset */
#define SENSORS_ADM1026_TEMP1_THERM 90 /* RW -- temp1_therm */
#define SENSORS_ADM1026_TEMP1_TMIN 91 /* RW -- temp1_tmin */
#define SENSORS_ADM1026_TEMP2 92 /* R -- temp2 */
#define SENSORS_ADM1026_TEMP2_MAX 93 /* RW -- temp2_max */
#define SENSORS_ADM1026_TEMP2_MIN 94 /* RW -- temp2_min */
#define SENSORS_ADM1026_TEMP2_OFFSET 95 /* RW -- temp2_offset */
#define SENSORS_ADM1026_TEMP2_THERM 96 /* RW -- temp2_therm */
#define SENSORS_ADM1026_TEMP2_TMIN 97 /* RW -- temp2_tmin */
#define SENSORS_ADM1026_TEMP3 98 /* R -- temp3 */
#define SENSORS_ADM1026_TEMP3_MAX 99 /* RW -- temp3_max */
#define SENSORS_ADM1026_TEMP3_MIN 100 /* RW -- temp3_min */
#define SENSORS_ADM1026_TEMP3_OFFSET 101 /* RW -- temp3_offset */
#define SENSORS_ADM1026_TEMP3_THERM 102 /* RW -- temp3_therm */
#define SENSORS_ADM1026_TEMP3_TMIN 103 /* RW -- temp3_tmin */
#define SENSORS_VIA686A_PREFIX "via686a" #define SENSORS_VIA686A_PREFIX "via686a"

View File

@@ -183,6 +183,7 @@ int sensors_write_proc(sensors_chip_name name, int feature, double value)
sysctl_name[3] = the_feature->sysctl; sysctl_name[3] = the_feature->sysctl;
if (sysctl(sysctl_name, 4, buf, &buflen, NULL, 0)) if (sysctl(sysctl_name, 4, buf, &buflen, NULL, 0))
return -SENSORS_ERR_PROC; return -SENSORS_ERR_PROC;
if (sysctl_name[0] != CTL_DEV) { sysctl_name[0] = CTL_DEV ; }
for (mag = the_feature->scaling; mag > 0; mag --) for (mag = the_feature->scaling; mag > 0; mag --)
value *= 10.0; value *= 10.0;
for (; mag < 0; mag ++) for (; mag < 0; mag ++)

View File

@@ -15,6 +15,7 @@ if [ "$CONFIG_I2C_PROC" = "m" -o "$CONFIG_I2C_PROC" = "y" ] ; then
dep_tristate ' Analog Devices ADM1021 and compatibles' CONFIG_SENSORS_ADM1021 $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Analog Devices ADM1021 and compatibles' CONFIG_SENSORS_ADM1021 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Analog Devices ADM1024' CONFIG_SENSORS_ADM1024 $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Analog Devices ADM1024' CONFIG_SENSORS_ADM1024 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Analog Devices ADM1025' CONFIG_SENSORS_ADM1025 $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Analog Devices ADM1025' CONFIG_SENSORS_ADM1025 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Analog Devices ADM1026' CONFIG_SENSORS_ADM1026 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Analog Devices ADM9240 and compatibles' CONFIG_SENSORS_ADM9240 $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Analog Devices ADM9240 and compatibles' CONFIG_SENSORS_ADM9240 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Dallas DS1621 and DS1625' CONFIG_SENSORS_DS1621 $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Dallas DS1621 and DS1625' CONFIG_SENSORS_DS1621 $CONFIG_I2C $CONFIG_I2C_PROC
dep_tristate ' Fujitsu-Siemens Poseidon' CONFIG_SENSORS_FSCPOS $CONFIG_I2C $CONFIG_I2C_PROC dep_tristate ' Fujitsu-Siemens Poseidon' CONFIG_SENSORS_FSCPOS $CONFIG_I2C $CONFIG_I2C_PROC

View File

@@ -21,6 +21,7 @@ kernel/sensors.c drivers/sensors/sensors.c
kernel/chips/adm1021.c drivers/sensors/adm1021.c kernel/chips/adm1021.c drivers/sensors/adm1021.c
kernel/chips/adm1024.c drivers/sensors/adm1024.c kernel/chips/adm1024.c drivers/sensors/adm1024.c
kernel/chips/adm1025.c drivers/sensors/adm1025.c kernel/chips/adm1025.c drivers/sensors/adm1025.c
kernel/chips/adm1026.c drivers/sensors/adm1026.c
kernel/chips/adm9240.c drivers/sensors/adm9240.c kernel/chips/adm9240.c drivers/sensors/adm9240.c
kernel/chips/bt869.c drivers/sensors/bt869.c kernel/chips/bt869.c drivers/sensors/bt869.c
kernel/chips/ddcmon.c drivers/sensors/ddcmon.c kernel/chips/ddcmon.c drivers/sensors/ddcmon.c

View File

@@ -94,6 +94,7 @@ sub gen_Documentation_Configure_help
m@Analog Devices ADM1021 and compatibles@ or m@Analog Devices ADM1021 and compatibles@ or
m@Analog Devices ADM1024@ or m@Analog Devices ADM1024@ or
m@Analog Devices ADM1025@ or m@Analog Devices ADM1025@ or
m@Analog Devices ADM1026@ or
m@Analog Devices ADM9240 and compatibles@ or m@Analog Devices ADM9240 and compatibles@ or
m@Dallas DS1621 and DS1625@ or m@Dallas DS1621 and DS1625@ or
m@Fujitsu-Siemens Poseidon@ or m@Fujitsu-Siemens Poseidon@ or
@@ -106,6 +107,7 @@ sub gen_Documentation_Configure_help
m@National Semiconductors LM75 and compatibles@ or m@National Semiconductors LM75 and compatibles@ or
m@National Semiconductors LM78@ or m@National Semiconductors LM78@ or
m@National Semiconductors LM80@ or m@National Semiconductors LM80@ or
m@National Semiconductors LM85 and compatibles@ or
m@National Semiconductors LM87@ or m@National Semiconductors LM87@ or
m@Silicon Integrated Systems Corp. SiS5595 Sensor@ or m@Silicon Integrated Systems Corp. SiS5595 Sensor@ or
m@Texas Instruments THMC50 / Analog Devices ADM1022@ or m@Texas Instruments THMC50 / Analog Devices ADM1022@ or
@@ -283,6 +285,16 @@ CONFIG_SENSORS_ADM1025
in the lm_sensors package, which you can download at in the lm_sensors package, which you can download at
http://www.lm-sensors.nu http://www.lm-sensors.nu
Analog Devices ADM1026
CONFIG_SENSORS_ADM1026
If you say yes here you get support for Analog Devices ADM1026 sensor
chips. This can also be built as a module which can be inserted and
removed while the kernel is running.
You will also need the latest user-space utilties: you can find them
in the lm_sensors package, which you can download at
http://www.lm-sensors.nu
Analog Devices ADM9240 and compatibles Analog Devices ADM9240 and compatibles
CONFIG_SENSORS_ADM9240 CONFIG_SENSORS_ADM9240
If you say yes here you get support for Analog Devices ADM9240 If you say yes here you get support for Analog Devices ADM9240
@@ -406,6 +418,18 @@ CONFIG_SENSORS_LM80
in the lm_sensors package, which you can download at in the lm_sensors package, which you can download at
http://www.lm-sensors.nu http://www.lm-sensors.nu
National Semiconductor LM85
CONFIG_SENSORS_LM85
If you say yes here you get support for National Semiconductor LM85
sensor chips and compatibles. Compatible chips include the Analog
Devices ADM1027 and ADT7463 and SMSC EMC6D100 and EMC6D101. This
can also be built as a module which can be inserted and removed
while the kernel is running.
You will also need the latest user-space utilties: you can find them
in the lm_sensors package, which you can download at
http://www.lm-sensors.nu
National Semiconductor LM87 National Semiconductor LM87
CONFIG_SENSORS_LM87 CONFIG_SENSORS_LM87
If you say yes here you get support for National Semiconductor LM87 If you say yes here you get support for National Semiconductor LM87
@@ -873,6 +897,7 @@ obj-$(CONFIG_SENSORS) += sensors.o
obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o
obj-$(CONFIG_SENSORS_ADM1024) += adm1024.o obj-$(CONFIG_SENSORS_ADM1024) += adm1024.o
obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o
obj-$(CONFIG_SENSORS_ADM1026) += adm1026.o
obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o
obj-$(CONFIG_SENSORS_BT869) += bt869.o obj-$(CONFIG_SENSORS_BT869) += bt869.o
obj-$(CONFIG_SENSORS_DDCMON) += ddcmon.o obj-$(CONFIG_SENSORS_DDCMON) += ddcmon.o
@@ -957,6 +982,14 @@ else
endif endif
endif endif
ifeq ($(CONFIG_SENSORS_ADM1026),y)
L_OBJS += adm1026.o
else
ifeq ($(CONFIG_SENSORS_ADM1026),m)
M_OBJS += adm1026.o
endif
endif
ifeq ($(CONFIG_SENSORS_ADM9240),y) ifeq ($(CONFIG_SENSORS_ADM9240),y)
L_OBJS += adm9240.o L_OBJS += adm9240.o
else else
@@ -1053,6 +1086,14 @@ else
endif endif
endif endif
ifeq ($(CONFIG_SENSORS_LM85),y)
L_OBJS += lm85.o
else
ifeq ($(CONFIG_SENSORS_LM85),m)
M_OBJS += lm85.o
endif
endif
ifeq ($(CONFIG_SENSORS_LM87),y) ifeq ($(CONFIG_SENSORS_LM87),y)
L_OBJS += lm87.o L_OBJS += lm87.o
else else

View File

@@ -761,7 +761,8 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
lm87_detect ite_detect ite_isa_detect ite_alias_detect lm87_detect ite_detect ite_isa_detect ite_alias_detect
ddcmonitor_detect ds1621_detect adm1024_detect fscpos_detect ddcmonitor_detect ds1621_detect adm1024_detect fscpos_detect
fscscy_detect pcf8591_detect arp_detect ipmi_kcs_detect fscscy_detect pcf8591_detect arp_detect ipmi_kcs_detect
ipmi_smic_detect via8231_isa_detect lm85_detect smartbatt_detect); ipmi_smic_detect via8231_isa_detect lm85_detect smartbatt_detect
adm1026_detect);
# This is a list of all recognized chips. # This is a list of all recognized chips.
# Each entry must have the following fields: # Each entry must have the following fields:
@@ -955,6 +956,12 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
i2c_addrs => [0x2c..0x2f], i2c_addrs => [0x2c..0x2f],
i2c_detect => sub { adm9240_detect 2, @_ } i2c_detect => sub { adm9240_detect 2, @_ }
}, },
{
name => "Analog Devices ADM1026",
driver => "adm1026",
i2c_addrs => [0x2c,0x2d,0x2e],
i2c_detect => sub { adm1026_detect 0, @_ }
},
{ {
name => "Analog Devices ADM1025", name => "Analog Devices ADM1025",
driver => "adm1025", driver => "adm1025",
@@ -2525,6 +2532,24 @@ sub adm1025_detect
return (8); return (8);
} }
# $_[0]: Chip to detect (0 = ADM1026)
# $_[1]: A reference to the file descriptor to access this chip.
# We may assume an i2c_set_slave_addr was already done.
# $_[2]: Address
# Returns: undef if not detected, (8) if detected.
# Registers used:
# 0x16: Company ID
# 0x17: Revision
sub adm1026_detect
{
my $reg;
my ($chip, $file,$addr) = @_;
$reg = i2c_smbus_read_byte_data($file,0x16);
return unless ($reg == 0x41);
return unless (i2c_smbus_read_byte_data($file,0x17) & 0xf0) == 0x40;
return (8);
}
# $_[0]: Chip to detect (0 = ADM1024) # $_[0]: Chip to detect (0 = ADM1024)
# $_[1]: A reference to the file descriptor to access this chip. # $_[1]: A reference to the file descriptor to access this chip.
# We may assume an i2c_set_slave_addr was already done. # We may assume an i2c_set_slave_addr was already done.

View File

@@ -3967,6 +3967,112 @@ void print_bmc(const sensors_chip_name *name)
} }
} }
static long adm1026_alarms_in[] = {
ADM1026_ALARM_IN0, ADM1026_ALARM_IN1, ADM1026_ALARM_IN2,
ADM1026_ALARM_IN3, ADM1026_ALARM_IN4, ADM1026_ALARM_IN5,
ADM1026_ALARM_IN6, ADM1026_ALARM_IN7, ADM1026_ALARM_IN8,
ADM1026_ALARM_IN9, ADM1026_ALARM_IN10, ADM1026_ALARM_IN11,
ADM1026_ALARM_IN12, ADM1026_ALARM_IN13, ADM1026_ALARM_IN14,
ADM1026_ALARM_IN15, ADM1026_ALARM_IN16
};
static long adm1026_alarms_temp[] = {
ADM1026_ALARM_TEMP1, ADM1026_ALARM_TEMP2, ADM1026_ALARM_TEMP3
};
void print_adm1026(const sensors_chip_name *name)
{
char *label = NULL;
double cur,min,max;
long alarms, gpio;
int valid, i;
if (!sensors_get_feature(*name,SENSORS_ADM1026_ALARMS,&cur)) {
alarms = cur + 0.5;
} else {
printf("ERROR: Can't get alarm data!\n");
alarms = 0;
}
/* Seventeen voltage sensors */
for (i = 0; i <= 16 ; ++i) {
int feat_base = SENSORS_ADM1026_IN0 + (3 * i);
int feat_max = feat_base +1, feat_min = feat_base +2;
if (!sensors_get_label_and_valid(*name,feat_base,&label,&valid) &&
!sensors_get_feature(*name,feat_base,&cur) &&
!sensors_get_feature(*name,feat_min,&min) &&
!sensors_get_feature(*name,feat_max,&max)) {
if (valid) {
print_label(label,10);
printf("%+6.2f V (min = %+6.2f V, max = %+6.2f V) %s\n",
cur,min,max,(alarms&adm1026_alarms_in[i])?"ALARM":"");
}
} else {
printf("ERROR: Can't get IN%d data!\n",i);
}
free_the_label(&label);
};
/* Eight fan sensors */
for (i = 0; i <= 7 ; ++i) {
int feat_base = SENSORS_ADM1026_FAN0 + (3 * i);
int feat_div = feat_base +1, feat_min = feat_base +2;
if (!sensors_get_label_and_valid(*name,feat_base,&label,&valid) &&
!sensors_get_feature(*name,feat_base,&cur) &&
!sensors_get_feature(*name,feat_min,&min) &&
!sensors_get_feature(*name,feat_div,&max)) {
if (valid) {
print_label(label,10);
printf("%4.0f RPM (min = %4.0f RPM, div = %1.0f) %s\n",
cur,min,max,(alarms&(ADM1026_ALARM_FAN0<<i))?"ALARM":"");
}
} else {
printf("ERROR: Can't get FAN%d data!\n",i);
}
free_the_label(&label);
};
/* Three temperature sensors
* NOTE: 6 config values per temperature
* 0 current
* 1 max
* 2 min
* 3 offset (to current)
* 4 therm (SMBAlert)
* 5 tmin (AFC)
*/
for (i = 0; i <= 2 ; ++i) {
int feat_base = SENSORS_ADM1026_TEMP1 + (6 * i);
int feat_max = feat_base +1;
int feat_min = feat_base +2;
if (!sensors_get_label_and_valid(*name,feat_base,&label,&valid) &&
!sensors_get_feature(*name,feat_base,&cur) &&
!sensors_get_feature(*name,feat_min,&min) &&
!sensors_get_feature(*name,feat_max,&max)) {
if (valid) {
print_label(label,10);
print_temp_info( cur, max, min, MINMAX, 0, 0);
puts( (alarms&adm1026_alarms_temp[i])?" ALARM":"" );
}
} else {
printf("ERROR: Can't get TEMP%d data!\n",i+1);
}
free_the_label(&label);
};
/* VID/VRM */
if (!sensors_get_label_and_valid(*name,SENSORS_ADM1026_VID,&label,&valid)
&& !sensors_get_feature(*name,SENSORS_ADM1026_VID,&cur)
&& !sensors_get_feature(*name,SENSORS_ADM1026_VRM,&min) ) {
if (valid) {
print_label(label,10);
printf("%+6.3f V (VRM Version %4.1f)\n",cur,min);
}
}
free_the_label(&label);
}
void print_unknown_chip(const sensors_chip_name *name) void print_unknown_chip(const sensors_chip_name *name)
{ {
int a,b,valid; int a,b,valid;

View File

@@ -28,8 +28,9 @@ extern void print_ds1621(const sensors_chip_name *name);
extern void print_mtp008(const sensors_chip_name *name); extern void print_mtp008(const sensors_chip_name *name);
extern void print_lm75(const sensors_chip_name *name); extern void print_lm75(const sensors_chip_name *name);
extern void print_adm1021(const sensors_chip_name *name); extern void print_adm1021(const sensors_chip_name *name);
extern void print_adm1025(const sensors_chip_name *name);
extern void print_adm1024(const sensors_chip_name *name); extern void print_adm1024(const sensors_chip_name *name);
extern void print_adm1025(const sensors_chip_name *name);
extern void print_adm1026(const sensors_chip_name *name);
extern void print_adm9240(const sensors_chip_name *name); extern void print_adm9240(const sensors_chip_name *name);
extern void print_lm78(const sensors_chip_name *name); extern void print_lm78(const sensors_chip_name *name);
extern void print_sis5595(const sensors_chip_name *name); extern void print_sis5595(const sensors_chip_name *name);

View File

@@ -366,6 +366,8 @@ void do_a_print(sensors_chip_name name)
print_vt8231(&name); print_vt8231(&name);
else if (!strcmp(name.prefix,"bmc")) else if (!strcmp(name.prefix,"bmc"))
print_bmc(&name); print_bmc(&name);
else if (!strcmp(name.prefix,"adm1026"))
print_adm1026(&name);
else else
print_unknown_chip(&name); print_unknown_chip(&name);
printf("\n"); printf("\n");