mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-08 16:11:26 +00:00
(mds) w83627hf only has 2 pwm whether on ISA or I2C bus.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@797 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
03ef21e58b
commit
c4bf748b21
4 files changed
+38
-72
No files matched your search
@@ -17,7 +17,7 @@ ask CVS about it:
|
||||
Module ddcmon: Fixed bus scan which could hang SMBus
|
||||
Module maxilife: Add support for Maxilife '99 (NBA)
|
||||
Module via686a: Enable sensors if not enabled by BIOS
|
||||
Module w83781d: Improve w83783s support
|
||||
Module w83781d: Improve w83783s support, w83627hf always has 2 pwm
|
||||
Program sensors-detect: Fix i801 detection
|
||||
|
||||
2.5.0 (20000312)
|
||||
|
||||
+1
-1
@@ -96,7 +96,7 @@ w83781d
|
||||
w83781d 3 7 3 - yes yes
|
||||
w83782d 3 9 3 2-4 pwm yes yes
|
||||
w83783s 1-2 5-6 3 2 pwm yes no
|
||||
w83627hf 3 9 3 2-4 pwm yes yes (LPC)
|
||||
w83627hf 3 9 3 2 pwm yes yes (LPC)
|
||||
|
||||
|
||||
|
||||
|
||||
+8
-30
@@ -12,7 +12,7 @@ Supported chips:
|
||||
* Winbond W83781D
|
||||
Prefix 'w83781d'
|
||||
Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
|
||||
Datasheet: Publicly available at the Winbond website
|
||||
Datasheet: Publicly available at the Winbond website (www.winbond.com.tw)
|
||||
* Winbond W83782D
|
||||
Prefix 'w83782d'
|
||||
Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
|
||||
@@ -24,7 +24,7 @@ Supported chips:
|
||||
* Winbond W83627HF
|
||||
Prefix 'w83627hf'
|
||||
Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
|
||||
Datasheet: Unavailable from Winbond
|
||||
Datasheet: Publicly available at the Winbond website
|
||||
* Asus AS99127F
|
||||
Prefix 'as99127f'
|
||||
Addresses scanned: I2C 0x20 - 0x2f (inclusive)
|
||||
@@ -68,8 +68,8 @@ We will refer to them collectively as W8378* chips.
|
||||
|
||||
There is quite some difference between these chips, but they are similar
|
||||
enough that it was sensible to put them together in one driver.
|
||||
The W83627HF chip is assumed to be identical to the W83782D.
|
||||
The AS99127F chip is assumed to be identical to an I2C-only W83782D.
|
||||
The W83627HF chip is assumed to be identical to the ISA W83782D.
|
||||
The AS99127F chip is similar to an I2C-only W83782D.
|
||||
|
||||
Detection of these chips can sometimes be foiled because they can be in
|
||||
an internal state that allows no clean access. If you know the address
|
||||
@@ -99,7 +99,7 @@ sensor(s) of 0.5 degree.
|
||||
FAN rotation speeds are reported in RPM (rotations per minute). An alarm is
|
||||
triggered if the rotation speed has dropped below a programmable limit. FAN
|
||||
readings can be divided by a programmable divider (1, 2, 4 or 8 for the
|
||||
W83781D; 1, 2, 4, 8, 16, 32, 64 or 128 for the W83782D and W83783S) to give
|
||||
W83781D; 1, 2, 4, 8, 16, 32, 64 or 128 for the others) to give
|
||||
the readings more range or accuracy. This is important because some FANs
|
||||
report only one 'tick' each rotation, while others report two - making
|
||||
all readings twice as high. Not all RPM values can accurately be represented,
|
||||
@@ -127,7 +127,7 @@ rt interface, but this is not very useful, because these tables are
|
||||
under NDA.
|
||||
|
||||
In addition to the alarms described above, there is a CHAS alarm on the
|
||||
W83781D and W83782D which triggers if your computer case is open.
|
||||
chips which triggers if your computer case is open.
|
||||
|
||||
When an alarm goes off, you can be warned by a beeping signal through
|
||||
your computer speaker. It is possible to enable all beeping globally,
|
||||
@@ -457,27 +457,10 @@ Chip `w83783s'
|
||||
|
||||
|
||||
|
||||
Old documentation
|
||||
-----------------
|
||||
Miscellaneous documentation
|
||||
===========================
|
||||
|
||||
|
||||
Winbond 83781D driver
|
||||
---------------------
|
||||
Supports the following Winbond chips:
|
||||
|
||||
Chip #vin #fanin #pwm #temp wchipid i2c ISA
|
||||
------------------------------------------------------------
|
||||
w83781d 7 3 0 3 0x10 yes yes
|
||||
w83782d 9 3 2-4 3 0x30 yes yes
|
||||
w83783s 5-6 3 2 1-2 0x40 yes no
|
||||
|
||||
|
||||
Stability
|
||||
---------
|
||||
w83781d: tested, stable
|
||||
w83782d: beta tested, some minor bugs and things to do.
|
||||
w83783s: untested
|
||||
|
||||
|
||||
/PROC ENTRIES
|
||||
-------------
|
||||
@@ -510,15 +493,10 @@ Additional entries not in the lm78:
|
||||
Only set at initialization; not updated every 1.5 seconds.
|
||||
|
||||
|
||||
The driver only updates its values each 1.5 seconds; reading it more often
|
||||
will do no harm, but will return 'old' values.
|
||||
|
||||
|
||||
TO DO:
|
||||
-----
|
||||
782d programmable pins
|
||||
783s temp2 (labeled as temp1 in data sheet) at different location
|
||||
than 781d/782d, not implemented yet.
|
||||
|
||||
|
||||
NOTES:
|
||||
|
||||
+28
-40
@@ -868,14 +868,13 @@ int w83781d_detect(struct i2c_adapter *adapter, int address,
|
||||
/* Register a new directory entry with module sensors */
|
||||
if ((i = sensors_register_entry(new_client,
|
||||
type_name,
|
||||
kind ==
|
||||
w83781d ?
|
||||
w83781d_dir_table_template : kind
|
||||
==
|
||||
w83783s ?
|
||||
w83783s_dir_table_template : is_isa
|
||||
? w83782d_isa_dir_table_template :
|
||||
w83782d_i2c_dir_table_template,
|
||||
kind == w83781d ?
|
||||
w83781d_dir_table_template :
|
||||
kind == w83783s ?
|
||||
w83783s_dir_table_template :
|
||||
(is_isa || kind == w83627hf) ?
|
||||
w83782d_isa_dir_table_template :
|
||||
w83782d_i2c_dir_table_template,
|
||||
THIS_MODULE)) < 0) {
|
||||
err = i;
|
||||
goto ERROR7;
|
||||
@@ -1026,20 +1025,20 @@ int w83781d_read_value(struct i2c_client *client, u16 reg)
|
||||
lm75[bank - 1]);
|
||||
/* convert from ISA to LM75 I2C addresses */
|
||||
switch (reg & 0xff) {
|
||||
case 0x50:
|
||||
case 0x50: /* TEMP */
|
||||
res =
|
||||
swap_bytes(i2c_smbus_read_word_data
|
||||
(cl, 0));
|
||||
break;
|
||||
case 0x52:
|
||||
case 0x52: /* CONFIG */
|
||||
res = i2c_smbus_read_byte_data(cl, 1);
|
||||
break;
|
||||
case 0x53:
|
||||
case 0x53: /* HYST */
|
||||
res =
|
||||
swap_bytes(i2c_smbus_read_word_data
|
||||
(cl, 2));
|
||||
break;
|
||||
case 0x55:
|
||||
case 0x55: /* OVER */
|
||||
default:
|
||||
res =
|
||||
swap_bytes(i2c_smbus_read_word_data
|
||||
@@ -1103,24 +1102,21 @@ int w83781d_write_value(struct i2c_client *client, u16 reg, u16 value)
|
||||
value & 0xff);
|
||||
} else {
|
||||
/* switch to subclient */
|
||||
cl =
|
||||
&(((struct w83781d_data *) (client->data))->
|
||||
cl = &(((struct w83781d_data *) (client->data))->
|
||||
lm75[bank - 1]);
|
||||
/* convert from ISA to LM75 I2C addresses */
|
||||
switch (reg & 0xff) {
|
||||
case 0x52:
|
||||
case 0x52: /* CONFIG */
|
||||
i2c_smbus_write_byte_data(cl, 1,
|
||||
value & 0xff);
|
||||
break;
|
||||
case 0x53:
|
||||
case 0x53: /* HYST */
|
||||
i2c_smbus_write_word_data(cl, 2,
|
||||
swap_bytes
|
||||
(value));
|
||||
swap_bytes(value));
|
||||
break;
|
||||
case 0x55:
|
||||
case 0x55: /* OVER */
|
||||
i2c_smbus_write_word_data(cl, 3,
|
||||
swap_bytes
|
||||
(value));
|
||||
swap_bytes(value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1361,14 +1357,11 @@ void w83781d_update_client(struct i2c_client *client)
|
||||
data->pwm[i - 1] =
|
||||
w83781d_read_value(client,
|
||||
W83781D_REG_PWM(i));
|
||||
if (
|
||||
((data->type == w83783s)
|
||||
||
|
||||
(((data->
|
||||
type == w83782d)
|
||||
|| (data->type == w83627hf)
|
||||
|| data->type == as99127f)
|
||||
&& i2c_is_isa_client(client)))
|
||||
if (((data->type == w83783s)
|
||||
|| (data->type == w83627hf)
|
||||
|| (((data->type == w83782d)
|
||||
|| (data->type == as99127f))
|
||||
&& i2c_is_isa_client(client)))
|
||||
&& i == 2)
|
||||
break;
|
||||
}
|
||||
@@ -1759,15 +1752,13 @@ void w83781d_sens(struct i2c_client *client, int operation, int ctl_name,
|
||||
if (*nrels_mag >= 1) {
|
||||
switch (results[0]) {
|
||||
case 1: /* PII/Celeron diode */
|
||||
tmp =
|
||||
w83781d_read_value(client,
|
||||
tmp = w83781d_read_value(client,
|
||||
W83781D_REG_SCFG1);
|
||||
w83781d_write_value(client,
|
||||
W83781D_REG_SCFG1,
|
||||
tmp | BIT_SCFG1[nr -
|
||||
1]);
|
||||
tmp =
|
||||
w83781d_read_value(client,
|
||||
tmp = w83781d_read_value(client,
|
||||
W83781D_REG_SCFG2);
|
||||
w83781d_write_value(client,
|
||||
W83781D_REG_SCFG2,
|
||||
@@ -1776,15 +1767,13 @@ void w83781d_sens(struct i2c_client *client, int operation, int ctl_name,
|
||||
data->sens[nr - 1] = results[0];
|
||||
break;
|
||||
case 2: /* 3904 */
|
||||
tmp =
|
||||
w83781d_read_value(client,
|
||||
tmp = w83781d_read_value(client,
|
||||
W83781D_REG_SCFG1);
|
||||
w83781d_write_value(client,
|
||||
W83781D_REG_SCFG1,
|
||||
tmp | BIT_SCFG1[nr -
|
||||
1]);
|
||||
tmp =
|
||||
w83781d_read_value(client,
|
||||
tmp = w83781d_read_value(client,
|
||||
W83781D_REG_SCFG2);
|
||||
w83781d_write_value(client,
|
||||
W83781D_REG_SCFG2,
|
||||
@@ -1793,8 +1782,7 @@ void w83781d_sens(struct i2c_client *client, int operation, int ctl_name,
|
||||
data->sens[nr - 1] = results[0];
|
||||
break;
|
||||
case W83781D_DEFAULT_BETA: /* thermistor */
|
||||
tmp =
|
||||
w83781d_read_value(client,
|
||||
tmp = w83781d_read_value(client,
|
||||
W83781D_REG_SCFG1);
|
||||
w83781d_write_value(client,
|
||||
W83781D_REG_SCFG1,
|
||||
@@ -1878,7 +1866,7 @@ EXPORT_NO_SYMBOLS;
|
||||
#ifdef MODULE
|
||||
|
||||
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
|
||||
"Philip Edelbrock <phil@netroedge .com>, "
|
||||
"Philip Edelbrock <phil@netroedge.com>, "
|
||||
"and Mark Studebaker <mdsxyz123@yahoo.com>");
|
||||
MODULE_DESCRIPTION("W83781D driver");
|
||||
|
||||
|
||||
Reference in new issue
Block a user