mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-12 16:50:15 +00:00
vt1211: Rework the voltage and temperature conversions and the temperature
input order to match the Linux 2.6 driver.
libsensors: Change vt1211 temp3-7 magnitude from 1 to 3.
sensors.conf.eg: Adjust the vt1211 section to match the new driver
interface.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@4168 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
222efa20ac
commit
a4fc9253af
4 files changed
+168
-130
No files matched your search
@@ -8,6 +8,8 @@ lm_sensors CHANGES file
|
||||
Comment out all set statements
|
||||
Add an it8716 section
|
||||
Add a w83793 section
|
||||
Adjust the vt1211 section to match the new driver
|
||||
interface
|
||||
Library: Fix device scan when no i2c support is present
|
||||
Add support for W83627EHF voltage inputs and alarms
|
||||
Add support for the smsc47m192 driver
|
||||
@@ -17,6 +19,7 @@ lm_sensors CHANGES file
|
||||
Add support for the W83793 chip (Yuan Mu)
|
||||
Map the 2.6 adm1026's fan8 to fan0
|
||||
Missing sysfs busses and classes are not errors
|
||||
Change vt1211 temp3-7 magnitude from 1 to 3
|
||||
Makefile: Don't grep autoconf.h on user-space targets
|
||||
Fix depmod on non-running kernel version
|
||||
Remove empty include directories on make user_uninstall
|
||||
@@ -36,6 +39,8 @@ lm_sensors CHANGES file
|
||||
Add VT8237A and VT8251
|
||||
Module lm83: Add LM82 support (2.6 backport)
|
||||
Module vt1211: The VT1211 has no in6
|
||||
Rework the voltage and temperature conversions and the
|
||||
temperature input order to match the Linux 2.6 driver
|
||||
Module w83781d: Use real-time alarm registers when possible (2.6 backport)
|
||||
Add specific alarm and beep defines for the W83791D
|
||||
Module w83792d: Fix PWM range (2.6 backport)
|
||||
|
||||
+92
-70
@@ -2037,107 +2037,129 @@ chip "lm63-*"
|
||||
|
||||
|
||||
chip "vt1211-*"
|
||||
#
|
||||
|
||||
# 1 for temp, 0 for volt.
|
||||
# Sensor Voltage Mode Temp Mode config bit
|
||||
# -------- ------------ --------- --------------
|
||||
# Reading 1 temp3
|
||||
# Reading 3 temp1
|
||||
# UCH1/Reading2 in0 temp2 0x04 (4)
|
||||
# Reading 1 temp1
|
||||
# Reading 3 temp2
|
||||
# UCH1/Reading2 in0 temp3 0x04 (4)
|
||||
# UCH2 in1 temp4 0x08 (8)
|
||||
# UCH3 in2 temp5 0x10 (16)
|
||||
# UCH4 in3 temp6 0x20 (32)
|
||||
# UCH5 in4 temp7 0x40 (64)
|
||||
# 3.3V in5
|
||||
#
|
||||
# set uch1-2 to temp mode, uch3-5 to voltage mode
|
||||
#
|
||||
# set config 12
|
||||
ignore in0
|
||||
ignore in1
|
||||
|
||||
# Set uch1-2 to temp mode, uch3-5 to voltage mode. This works only
|
||||
# for the 2.4 driver. For the 2.6 driver use the uch_config module parameter.
|
||||
# If the value doesn't match the hardware wiring, you'll get weird readings!
|
||||
# set config 12
|
||||
|
||||
# The 2.6 driver will automatically ignore the inputs which are not
|
||||
# configured, but the 2.4 driver will not so you'll need to add ignore
|
||||
# statements depending on the config value above.
|
||||
# ignore in0
|
||||
# ignore in1
|
||||
# ignore temp3
|
||||
# ignore temp4
|
||||
ignore temp5
|
||||
ignore temp6
|
||||
ignore temp7
|
||||
|
||||
# IMPORTANT: If you get "ERROR: Can't get TEMPX data!" from "sensors",
|
||||
# where X is 2, 4, 5, 6 or 7, although you have this UCH set to
|
||||
# temperature, this generally means that this UCH isn't (physically)
|
||||
# used for temperature, so you should add an ignore statement for tempX
|
||||
# and change the "config" value to reflect the fact that this UCH is
|
||||
# probably used for voltage.
|
||||
|
||||
# label in0 "unused"
|
||||
# label in1 "unused"
|
||||
label in2 "VCore1"
|
||||
label in0 "+3.3V"
|
||||
label in1 "+2.5V"
|
||||
label in2 "VCore"
|
||||
label in3 "+5V"
|
||||
label in4 "+12V"
|
||||
label in5 "+3.3V"
|
||||
|
||||
label temp1 "Int Temp"
|
||||
label temp2 "MB1 Temp"
|
||||
label temp3 "Proc Temp"
|
||||
label temp4 "MB2 Temp"
|
||||
#
|
||||
# All voltage calculations have the form
|
||||
# ((@ * 100) - 3) / (K * 95.8), (@ * K * 0.958) + .03
|
||||
# where K = R2 / (R1 + R2).
|
||||
# Use the following K values based on input voltage.
|
||||
# This of course assumes the mobo has the resistors
|
||||
# recommended by Via in the datasheet.
|
||||
# Voltage K
|
||||
# VCore 1.0
|
||||
# 2.5 0.8333
|
||||
# 3.3 (in5 internal) 0.6296
|
||||
# 3.5 (3.3V ext.) 0.5952
|
||||
# 5.0 0.4167
|
||||
# 12.0 0.1754
|
||||
#
|
||||
# compute in0 ((@ * 100) - 3) / (0.5952 * 95.8), (@ * 0.5952 * 0.958) + .03
|
||||
# compute in1 ((@ * 100) - 3) / (0.8333 * 95.8), (@ * 0.8333 * 0.958) + .03
|
||||
compute in2 ((@ * 100) - 3) / (0.5952 * 95.8), (@ * 0.5952 * 0.958) + .03
|
||||
compute in3 ((@ * 100) - 3) / (0.4167 * 95.8), (@ * 0.4167 * 0.958) + .03
|
||||
compute in4 ((@ * 100) - 3) / (0.1754 * 95.8), (@ * 0.1754 * 0.958) + .03
|
||||
compute in5 ((@ * 100) - 3) / (0.6296 * 95.8), (@ * 0.6296 * 0.958) + .03
|
||||
label temp1 "CPU Temp"
|
||||
label temp2 "Int Temp"
|
||||
|
||||
# adjust this if your vid is wrong; see doc/vid
|
||||
label fan1 "Case Fan"
|
||||
label fan2 "CPU Fan"
|
||||
|
||||
# All voltage calculations have the form
|
||||
# compute inX @ * (1 + R1 / R2), @ / (1 + R1 / R2)
|
||||
#
|
||||
# The following are the resistor values as recommended by VIA
|
||||
# Voltage R1 R2
|
||||
# ------- ---- ----
|
||||
# VCore - - (no scaling)
|
||||
# 3.3 6.8k 10k
|
||||
# 2.5 2k 10k
|
||||
# 5.0 14k 10k
|
||||
# 12.0 47k 10k
|
||||
#
|
||||
# The VT1211 internal 3.3V (in5) is scaled by the driver and doesn't
|
||||
# need to be adjusted here. VCore doesn't need scaling at all.
|
||||
|
||||
compute in0 @ * (1 + 6.8 / 10), @ / (1 + 6.8 / 10)
|
||||
compute in1 @ * (1 + 2 / 10), @ / (1 + 2 / 10)
|
||||
compute in3 @ * (1 + 14 / 10), @ / (1 + 14 / 10)
|
||||
compute in4 @ * (1 + 47 / 10), @ / (1 + 47 / 10)
|
||||
|
||||
# Adjust this if your vid is wrong (for 2.4 only); see doc/vid
|
||||
# set vrm 9.1
|
||||
|
||||
# set in0_min 2.5 * 0.95
|
||||
# set in0_max 2.5 * 1.05
|
||||
# set in0_min 3.3 * 0.95
|
||||
# set in0_max 3.3 * 1.05
|
||||
# set in1_min 2.5 * 0.95
|
||||
# set in1_max 2.5 * 1.05
|
||||
# If your vid is wrong, hardcode the CPU voltage (e.g. 1.4)
|
||||
# set in2_min vid * 0.97
|
||||
# set in2_max vid * 1.03
|
||||
# set in3_min 5.0 * 0.95
|
||||
# set in3_max 5.0 * 1.05
|
||||
# set in4_min 12.0 * 0.90
|
||||
# set in4_max 12.0 * 1.10
|
||||
# set in5_min 3.3 * 0.95
|
||||
# set in5_max 3.3 * 1.05
|
||||
set in5_min 3.3 * 0.95
|
||||
set in5_max 3.3 * 1.05
|
||||
|
||||
compute temp1 (@ - 65) / 0.9686, (@ * 0.9686) + 65
|
||||
compute temp3 (@ - 65) / 0.9686, (@ * 0.9686) + 65
|
||||
# The temperature calculations are of the form
|
||||
# compute tempX (@ - Offset) / Gain, (@ * Gain) + Offset
|
||||
#
|
||||
# thermistor calculations.
|
||||
# 3435 is the thermistor beta.
|
||||
# '^' is the e**x operator; '`' is the ln(x) operator
|
||||
# (valid in library version 1.4.0 / lm_sensors 2.7.1 or higher)
|
||||
# This assumes that the thermistor forms a resistor divider with a resistor
|
||||
# equal to its nominal value @ 25C. If not, the math gets even harder.
|
||||
# The following are the gain and offset values as recommended by VIA
|
||||
# Diode Type Gain Offset
|
||||
# ---------- ---- ------
|
||||
# Intel CPU 0.9528 88.638
|
||||
# 0.9686 65.000 *)
|
||||
# VIA C3 Ezra 0.9528 83.869
|
||||
# VIA C3 Ezra-T 0.9528 73.869
|
||||
#
|
||||
compute temp2 (1 / (((1 / 3435) * (` ((253 - @) / (@ - 43)))) + (1 / 298.15))) - 273.15, \
|
||||
253 - (210 / (1 + (1 / (^ (((3435 * (25 - @)) / ((@ + 273.15) * 298.15)))))))
|
||||
compute temp4 (1 / (((1 / 3435) * (` ((253 - @) / (@ - 43)))) + (1 / 298.15))) - 273.15, \
|
||||
253 - (210 / (1 + (1 / (^ (((3435 * (25 - @)) / ((@ + 273.15) * 298.15)))))))
|
||||
compute temp5 (1 / (((1 / 3435) * (` ((253 - @) / (@ - 43)))) + (1 / 298.15))) - 273.15, \
|
||||
253 - (210 / (1 + (1 / (^ (((3435 * (25 - @)) / ((@ + 273.15) * 298.15)))))))
|
||||
compute temp6 (1 / (((1 / 3435) * (` ((253 - @) / (@ - 43)))) + (1 / 298.15))) - 273.15, \
|
||||
253 - (210 / (1 + (1 / (^ (((3435 * (25 - @)) / ((@ + 273.15) * 298.15)))))))
|
||||
compute temp7 (1 / (((1 / 3435) * (` ((253 - @) / (@ - 43)))) + (1 / 298.15))) - 273.15, \
|
||||
253 - (210 / (1 + (1 / (^ (((3435 * (25 - @)) / ((@ + 273.15) * 298.15)))))))
|
||||
# *) These are the values from the previous sensors.conf. I don't know
|
||||
# where they came from or how they got derived.
|
||||
#
|
||||
# The VT1211 internal temperature (temp2) is scaled by the driver
|
||||
# and doesn't need to be adjusted here.
|
||||
|
||||
# set temp2_hyst 40
|
||||
# set temp2_over 45
|
||||
compute temp1 (@ - 73.869) / 0.9528, (@ * 0.9528) + 73.869
|
||||
|
||||
# The thermistor calculations are of the form
|
||||
# compute tempX 1 / (1 / 298.15 - (` Vmax / @ - 1)) / B) - 273.15, \
|
||||
# Vmax / (1 + (^ (B / 298.15 - B / (273.15 + @))))
|
||||
#
|
||||
# B is the thermistor beta value, Vmax is the reference voltage, '^' is the
|
||||
# exp() operator and '`' is the ln() operator.
|
||||
# Given B = 3435 and Vmax = 2.2V and assuming that the thermistor forms a
|
||||
# resistor divider with a resistor equal to the thermistor's nominal value at
|
||||
# 25 degrees C, the following compute lines can be used:
|
||||
|
||||
compute temp3 1 / (1 / 298.15 - (` (2.2 / @ - 1)) / 3435) - 273.15, \
|
||||
2.2 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
|
||||
compute temp4 1 / (1 / 298.15 - (` (2.2 / @ - 1)) / 3435) - 273.15, \
|
||||
2.2 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
|
||||
compute temp5 1 / (1 / 298.15 - (` (2.2 / @ - 1)) / 3435) - 273.15, \
|
||||
2.2 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
|
||||
compute temp6 1 / (1 / 298.15 - (` (2.2 / @ - 1)) / 3435) - 273.15, \
|
||||
2.2 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
|
||||
compute temp7 1 / (1 / 298.15 - (` (2.2 / @ - 1)) / 3435) - 273.15, \
|
||||
2.2 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
|
||||
|
||||
# set temp1_hyst 80
|
||||
# set temp1_over 85
|
||||
# set temp2_hyst 60
|
||||
# set temp2_over 65
|
||||
# set temp3_hyst 60
|
||||
# set temp3_over 65
|
||||
# set temp4_hyst 40
|
||||
|
||||
+56
-45
@@ -99,9 +99,9 @@ superio_exit(void)
|
||||
changes from via686a.
|
||||
Sensor Voltage Mode Temp Mode
|
||||
-------- ------------ ---------
|
||||
Reading 1 temp3 Intel thermal diode
|
||||
Reading 3 temp1 VT1211 internal thermal diode
|
||||
UCH1/Reading2 in0 temp2
|
||||
Reading 1 temp1 Intel thermal diode
|
||||
Reading 3 temp2 VT1211 internal thermal diode
|
||||
UCH1/Reading2 in0 temp3
|
||||
UCH2 in1 temp4
|
||||
UCH3 in2 temp5
|
||||
UCH4 in3 temp6
|
||||
@@ -118,16 +118,16 @@ superio_exit(void)
|
||||
#define VT1211_REG_FAN_MIN(nr) (0x3a + (nr))
|
||||
#define VT1211_REG_FAN(nr) (0x28 + (nr))
|
||||
|
||||
static const u8 regtemp[] = { 0x20, 0x21, 0x1f, 0x22, 0x23, 0x24, 0x25 };
|
||||
static const u8 regover[] = { 0x39, 0x3d, 0x1d, 0x2b, 0x2d, 0x2f, 0x31 };
|
||||
static const u8 reghyst[] = { 0x3a, 0x3e, 0x1e, 0x2c, 0x2e, 0x30, 0x32 };
|
||||
static const u8 regtemp[] = { 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25 };
|
||||
static const u8 regover[] = { 0x39, 0x1d, 0x3d, 0x2b, 0x2d, 0x2f, 0x31 };
|
||||
static const u8 reghyst[] = { 0x3a, 0x1e, 0x3e, 0x2c, 0x2e, 0x30, 0x32 };
|
||||
|
||||
/* temps numbered 1-7 */
|
||||
#define VT1211_REG_TEMP(nr) (regtemp[(nr) - 1])
|
||||
#define VT1211_REG_TEMP_OVER(nr) (regover[(nr) - 1])
|
||||
#define VT1211_REG_TEMP_HYST(nr) (reghyst[(nr) - 1])
|
||||
#define VT1211_REG_TEMP_LOW3 0x4b /* bits 7-6 */
|
||||
#define VT1211_REG_TEMP_LOW2 0x49 /* bits 5-4 */
|
||||
#define VT1211_REG_TEMP_LOW1 0x4b /* bits 7-6 */
|
||||
#define VT1211_REG_TEMP_LOW3 0x49 /* bits 5-4 */
|
||||
#define VT1211_REG_TEMP_LOW47 0x4d
|
||||
|
||||
#define VT1211_REG_CONFIG 0x40
|
||||
@@ -140,10 +140,8 @@ static const u8 reghyst[] = { 0x3a, 0x3e, 0x1e, 0x2c, 0x2e, 0x30, 0x32 };
|
||||
#define VT1211_REG_TEMP2_CONFIG 0x4c
|
||||
|
||||
/* temps 1-7; voltages 0-5 */
|
||||
#define ISTEMP(i, ch_config) ((i) == 1 ? 1 : \
|
||||
(i) == 3 ? 1 : \
|
||||
(i) == 2 ? ((ch_config) >> 1) & 0x01 : \
|
||||
((ch_config) >> ((i)-1)) & 0x01)
|
||||
#define ISTEMP(i, ch_config) ((i) <= 2 ? 1 : \
|
||||
((ch_config) >> ((i)-1)) & 1)
|
||||
#define ISVOLT(i, ch_config) ((i) > 4 ? 1 : !(((ch_config) >> ((i)+2)) & 0x01))
|
||||
|
||||
#define DIV_FROM_REG(val) (1 << (val))
|
||||
@@ -151,13 +149,33 @@ static const u8 reghyst[] = { 0x3a, 0x3e, 0x1e, 0x2c, 0x2e, 0x30, 0x32 };
|
||||
#define PWM_FROM_REG(val) (val)
|
||||
#define PWM_TO_REG(val) SENSORS_LIMIT((val), 0, 255)
|
||||
|
||||
#define TEMP_FROM_REG(val) ((val)*10)
|
||||
#define TEMP_FROM_REG10(val) (((val)*10)/4)
|
||||
#define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5)/10):\
|
||||
((val)+5)/10),0,255))
|
||||
#define IN_FROM_REG(val) /*(((val)*10+5)/10)*/ (val)
|
||||
#define IN_TO_REG(val) (SENSORS_LIMIT((((val) * 10 + 5)/10),0,255))
|
||||
/* temp1 (i = 1) is an Intel thermal diode which is scaled in user space.
|
||||
temp2 (i = 2) is the internal temp diode so it's scaled in the driver
|
||||
according to some measurements taken on an EPIA M10000.
|
||||
temp3-7 are thermistor based so the driver returns the voltage measured at
|
||||
the pin (range 0V - 2.2V). */
|
||||
#define TEMP_FROM_REG(i, reg) ((i) == 1 ? (reg) * 10 : \
|
||||
(i) == 2 ? (reg) < 51 ? 0 : \
|
||||
((reg) - 51) * 10 : \
|
||||
((253 - (reg)) * 2200 + 105) / 210)
|
||||
/* for 10-bit temp values */
|
||||
#define TEMP_FROM_REG10(i, reg) ((i) == 1 ? (reg) * 10 / 4 : \
|
||||
(i) == 2 ? (reg) < 204 ? 0 : \
|
||||
((reg) - 204) * 10 / 4 : \
|
||||
((1012 - (reg)) * 550 + 105) / 210)
|
||||
#define TEMP_TO_REG(i, val) SENSORS_LIMIT( \
|
||||
((i) == 1 ? ((val) + 5) / 10 : \
|
||||
(i) == 2 ? ((val) + 5) / 10 + 51 : \
|
||||
253 - ((val) * 210 + 1100) / 2200), 0, 255)
|
||||
|
||||
/* in5 (i = 5) is special. It's the internal 3.3V so it's scaled in the
|
||||
driver according to the VT1211 BIOS porting guide */
|
||||
#define IN_FROM_REG(i, reg) ((reg) < 3 ? 0 : (i) == 5 ? \
|
||||
(((reg) - 3) * 15882 + 4790) / 9580 : \
|
||||
(((reg) - 3) * 10000 + 4790) / 9580)
|
||||
#define IN_TO_REG(i, val) (SENSORS_LIMIT((i) == 5 ? \
|
||||
((val) * 9580 + 7941) / 15882 + 3 : \
|
||||
((val) * 9580 + 5000) / 10000 + 3, 0, 255))
|
||||
|
||||
/********* FAN RPM CONVERSIONS ********/
|
||||
/* But this chip saturates back at 0, not at 255 like all the other chips.
|
||||
@@ -270,11 +288,11 @@ static struct i2c_driver vt1211_driver = {
|
||||
#define VT1211_ALARM_FAN1 0x40
|
||||
#define VT1211_ALARM_FAN2 0x80
|
||||
#define VT1211_ALARM_IN4 0x100
|
||||
#define VT1211_ALARM_TEMP2 0x800
|
||||
#define VT1211_ALARM_TEMP3 0x800
|
||||
#define VT1211_ALARM_CHAS 0x1000
|
||||
#define VT1211_ALARM_TEMP3 0x8000
|
||||
#define VT1211_ALARM_TEMP2 0x8000
|
||||
/* duplicates */
|
||||
#define VT1211_ALARM_IN0 VT1211_ALARM_TEMP2
|
||||
#define VT1211_ALARM_IN0 VT1211_ALARM_TEMP3
|
||||
#define VT1211_ALARM_TEMP4 VT1211_ALARM_IN1
|
||||
#define VT1211_ALARM_TEMP5 VT1211_ALARM_IN2
|
||||
#define VT1211_ALARM_TEMP6 VT1211_ALARM_IN3
|
||||
@@ -511,29 +529,22 @@ static void vt1211_update_client(struct i2c_client *client)
|
||||
VT1211_REG_TEMP(i)) << 2;
|
||||
switch(i) {
|
||||
case 1:
|
||||
/* ? */
|
||||
j = 0;
|
||||
j = (vt_rdval(client,
|
||||
VT1211_REG_TEMP_LOW1) >>
|
||||
6) & 3;
|
||||
break;
|
||||
case 2:
|
||||
j = (vt_rdval(client,
|
||||
VT1211_REG_TEMP_LOW2) &
|
||||
0x30) >> 4;
|
||||
j = 0;
|
||||
break;
|
||||
case 3:
|
||||
j = (vt_rdval(client,
|
||||
VT1211_REG_TEMP_LOW3) &
|
||||
0xc0) >> 6;
|
||||
VT1211_REG_TEMP_LOW3) >>
|
||||
4) & 3;
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
default:
|
||||
j = (vt_rdval(client,
|
||||
VT1211_REG_TEMP_LOW47) >>
|
||||
((i-4)*2)) & 0x03;
|
||||
break;
|
||||
|
||||
}
|
||||
data->temp[i - 1] |= j;
|
||||
data->temp_over[i - 1] = vt_rdval(client,
|
||||
@@ -579,18 +590,18 @@ void vt1211_in(struct i2c_client *client, int operation, int ctl_name,
|
||||
*nrels_mag = 2;
|
||||
else if (operation == SENSORS_PROC_REAL_READ) {
|
||||
vt1211_update_client(client);
|
||||
results[0] = IN_FROM_REG(data->in_min[nr]);
|
||||
results[1] = IN_FROM_REG(data->in_max[nr]);
|
||||
results[2] = IN_FROM_REG(data->in[nr]);
|
||||
results[0] = IN_FROM_REG(nr, data->in_min[nr]);
|
||||
results[1] = IN_FROM_REG(nr, data->in_max[nr]);
|
||||
results[2] = IN_FROM_REG(nr, data->in[nr]);
|
||||
*nrels_mag = 3;
|
||||
} else if (operation == SENSORS_PROC_REAL_WRITE) {
|
||||
if (*nrels_mag >= 1) {
|
||||
data->in_min[nr] = IN_TO_REG(results[0]);
|
||||
data->in_min[nr] = IN_TO_REG(nr, results[0]);
|
||||
vt1211_write_value(client, VT1211_REG_IN_MIN(nr),
|
||||
data->in_min[nr]);
|
||||
}
|
||||
if (*nrels_mag >= 2) {
|
||||
data->in_max[nr] = IN_TO_REG(results[1]);
|
||||
data->in_max[nr] = IN_TO_REG(nr, results[1]);
|
||||
vt1211_write_value(client, VT1211_REG_IN_MAX(nr),
|
||||
data->in_max[nr]);
|
||||
}
|
||||
@@ -633,22 +644,22 @@ void vt1211_temp(struct i2c_client *client, int operation, int ctl_name,
|
||||
int nr = ctl_name - VT1211_SYSCTL_TEMP1;
|
||||
|
||||
if (operation == SENSORS_PROC_REAL_INFO)
|
||||
*nrels_mag = 1;
|
||||
*nrels_mag = nr < 2 ? 1 : 3;
|
||||
else if (operation == SENSORS_PROC_REAL_READ) {
|
||||
vt1211_update_client(client);
|
||||
results[0] = TEMP_FROM_REG(data->temp_over[nr]);
|
||||
results[1] = TEMP_FROM_REG(data->temp_hyst[nr]);
|
||||
results[2] = TEMP_FROM_REG10(data->temp[nr]);
|
||||
results[0] = TEMP_FROM_REG(nr + 1, data->temp_over[nr]);
|
||||
results[1] = TEMP_FROM_REG(nr + 1, data->temp_hyst[nr]);
|
||||
results[2] = TEMP_FROM_REG10(nr + 1, data->temp[nr]);
|
||||
*nrels_mag = 3;
|
||||
} else if (operation == SENSORS_PROC_REAL_WRITE) {
|
||||
if (*nrels_mag >= 1) {
|
||||
data->temp_over[nr] = TEMP_TO_REG(results[0]);
|
||||
data->temp_over[nr] = TEMP_TO_REG(nr + 1, results[0]);
|
||||
vt1211_write_value(client,
|
||||
VT1211_REG_TEMP_OVER(nr + 1),
|
||||
data->temp_over[nr]);
|
||||
}
|
||||
if (*nrels_mag >= 2) {
|
||||
data->temp_hyst[nr] = TEMP_TO_REG(results[1]);
|
||||
data->temp_hyst[nr] = TEMP_TO_REG(nr + 1, results[1]);
|
||||
vt1211_write_value(client,
|
||||
VT1211_REG_TEMP_HYST(nr + 1),
|
||||
data->temp_hyst[nr]);
|
||||
|
||||
+15
-15
@@ -4750,45 +4750,45 @@ static sensors_chip_feature vt1211_features[] =
|
||||
SENSORS_VT1211_TEMP2, RW,
|
||||
VT1211_SYSCTL_TEMP2, VALUE(1), 1 },
|
||||
{ SENSORS_VT1211_TEMP3, "temp3", NOMAP, NOMAP,
|
||||
R, VT1211_SYSCTL_TEMP3, VALUE(3), 1 },
|
||||
R, VT1211_SYSCTL_TEMP3, VALUE(3), 3 },
|
||||
{ SENSORS_VT1211_TEMP3_HYST, "temp3_hyst", SENSORS_VT1211_TEMP3,
|
||||
SENSORS_VT1211_TEMP3, RW,
|
||||
VT1211_SYSCTL_TEMP3, VALUE(2), 1 },
|
||||
VT1211_SYSCTL_TEMP3, VALUE(2), 3 },
|
||||
{ SENSORS_VT1211_TEMP3_OVER, "temp3_over", SENSORS_VT1211_TEMP3,
|
||||
SENSORS_VT1211_TEMP3, RW,
|
||||
VT1211_SYSCTL_TEMP3, VALUE(1), 1 },
|
||||
VT1211_SYSCTL_TEMP3, VALUE(1), 3 },
|
||||
{ SENSORS_VT1211_TEMP4, "temp4", NOMAP, NOMAP,
|
||||
R, VT1211_SYSCTL_TEMP4, VALUE(3), 1 },
|
||||
R, VT1211_SYSCTL_TEMP4, VALUE(3), 3 },
|
||||
{ SENSORS_VT1211_TEMP4_HYST, "temp4_hyst", SENSORS_VT1211_TEMP4,
|
||||
SENSORS_VT1211_TEMP4, RW,
|
||||
VT1211_SYSCTL_TEMP4, VALUE(2), 1 },
|
||||
VT1211_SYSCTL_TEMP4, VALUE(2), 3 },
|
||||
{ SENSORS_VT1211_TEMP4_OVER, "temp4_over", SENSORS_VT1211_TEMP4,
|
||||
SENSORS_VT1211_TEMP4, RW,
|
||||
VT1211_SYSCTL_TEMP4, VALUE(1), 1 },
|
||||
VT1211_SYSCTL_TEMP4, VALUE(1), 3 },
|
||||
{ SENSORS_VT1211_TEMP5, "temp5", NOMAP, NOMAP,
|
||||
R, VT1211_SYSCTL_TEMP5, VALUE(3), 1 },
|
||||
R, VT1211_SYSCTL_TEMP5, VALUE(3), 3 },
|
||||
{ SENSORS_VT1211_TEMP5_HYST, "temp5_hyst", SENSORS_VT1211_TEMP5,
|
||||
SENSORS_VT1211_TEMP5, RW,
|
||||
VT1211_SYSCTL_TEMP5, VALUE(2), 1 },
|
||||
VT1211_SYSCTL_TEMP5, VALUE(2), 3 },
|
||||
{ SENSORS_VT1211_TEMP5_OVER, "temp5_over", SENSORS_VT1211_TEMP5,
|
||||
SENSORS_VT1211_TEMP5, RW,
|
||||
VT1211_SYSCTL_TEMP5, VALUE(1), 1 },
|
||||
VT1211_SYSCTL_TEMP5, VALUE(1), 3 },
|
||||
{ SENSORS_VT1211_TEMP6, "temp6", NOMAP, NOMAP,
|
||||
R, VT1211_SYSCTL_TEMP6, VALUE(3), 1 },
|
||||
R, VT1211_SYSCTL_TEMP6, VALUE(3), 3 },
|
||||
{ SENSORS_VT1211_TEMP6_HYST, "temp6_hyst", SENSORS_VT1211_TEMP6,
|
||||
SENSORS_VT1211_TEMP6, RW,
|
||||
VT1211_SYSCTL_TEMP6, VALUE(2), 1 },
|
||||
VT1211_SYSCTL_TEMP6, VALUE(2), 3 },
|
||||
{ SENSORS_VT1211_TEMP6_OVER, "temp6_over", SENSORS_VT1211_TEMP6,
|
||||
SENSORS_VT1211_TEMP6, RW,
|
||||
VT1211_SYSCTL_TEMP6, VALUE(1), 1 },
|
||||
VT1211_SYSCTL_TEMP6, VALUE(1), 3 },
|
||||
{ SENSORS_VT1211_TEMP7, "temp7", NOMAP, NOMAP,
|
||||
R, VT1211_SYSCTL_TEMP7, VALUE(3), 1 },
|
||||
R, VT1211_SYSCTL_TEMP7, VALUE(3), 3 },
|
||||
{ SENSORS_VT1211_TEMP7_HYST, "temp7_hyst", SENSORS_VT1211_TEMP7,
|
||||
SENSORS_VT1211_TEMP7, RW,
|
||||
VT1211_SYSCTL_TEMP7, VALUE(2), 1 },
|
||||
VT1211_SYSCTL_TEMP7, VALUE(2), 3 },
|
||||
{ SENSORS_VT1211_TEMP7_OVER, "temp7_over", SENSORS_VT1211_TEMP7,
|
||||
SENSORS_VT1211_TEMP7, RW,
|
||||
VT1211_SYSCTL_TEMP7, VALUE(1), 1 },
|
||||
VT1211_SYSCTL_TEMP7, VALUE(1), 3 },
|
||||
{ SENSORS_VT1211_FAN1_DIV, "fan1_div", SENSORS_VT1211_FAN1,
|
||||
NOMAP,
|
||||
RW, VT1211_SYSCTL_FAN_DIV, VALUE(1),
|
||||
|
||||
Reference in new issue
Block a user