mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-06 15:51:34 +00:00
Add 'init' parameter to control initialization.
Use 'init=0' to skip initialization, this should fix
those pesky PC's that crash when you load w83781d.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@1209 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
1 parent
fd0e00db82
commit
e7fc40b690
4 files changed
+125
-108
No files matched your search
@@ -29,6 +29,7 @@ ask CVS about it:
|
||||
Module it87: Merge alarm_* /proc entries to alarms
|
||||
Module sis5595: Fix support for rev B0
|
||||
Module via686a: Make limit initializations reliable
|
||||
Module w83781d: Allow init=0 parameter to bypass initialization
|
||||
Program isadump: Add flat address space (PCI) support
|
||||
Program mkpatch.pl: Add support for i2c-ali1535, adm1024, ds1621,
|
||||
fscpos, it87, maxilife, mtp008
|
||||
|
||||
@@ -12,6 +12,7 @@ SUMMARY
|
||||
ignore_range=bus,startaddress,endaddress
|
||||
probe=bus,address
|
||||
probe_range=bus,startaddress,endaddress
|
||||
init=[0,1] (default 1)
|
||||
|
||||
All arguments are in decimal unless prefixed by "0x".
|
||||
|
||||
@@ -88,6 +89,12 @@ very strange results...
|
||||
It is used to program the base address of the sensor registers.
|
||||
This is required if the BIOS does not initialize the base address.
|
||||
|
||||
`init' is used to tell a driver to bypass initializing a chip.
|
||||
This may be necessary if the BIOS has initialized the chip a certain way
|
||||
and the driver should not overwrite that initialization.
|
||||
The default is 1, so the only useful value is `init=0'.
|
||||
This parameter is not supported by most drivers.
|
||||
|
||||
==================================
|
||||
EXAMPLE
|
||||
|
||||
|
||||
@@ -59,6 +59,9 @@ Module Parameters
|
||||
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
|
||||
* init=[0,1] (default 1)
|
||||
Use 'init=0' to bypass initializing the chip.
|
||||
Try this if your computer crashes when you load the module.
|
||||
|
||||
|
||||
Description
|
||||
|
||||
+114
-108
@@ -71,6 +71,10 @@ static unsigned int normal_isa_range[] = { SENSORS_ISA_END };
|
||||
/* Insmod parameters */
|
||||
SENSORS_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f);
|
||||
|
||||
static int init = 1;
|
||||
MODULE_PARM(init, "i");
|
||||
MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
|
||||
|
||||
/* Many W83781D constants specified below */
|
||||
|
||||
/* Length of ISA address segment */
|
||||
@@ -1189,8 +1193,8 @@ void w83781d_init_client(struct i2c_client *client)
|
||||
int type = data->type;
|
||||
u8 tmp;
|
||||
|
||||
if(type != as99127f) { /* this resets registers we don't have
|
||||
documentation for on the as99127f */
|
||||
if(init && type != as99127f) { /* this resets registers we don't have
|
||||
documentation for on the as99127f */
|
||||
/* save this register */
|
||||
i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG);
|
||||
/* Reset all except Watchdog values and last conversion values
|
||||
@@ -1236,7 +1240,7 @@ void w83781d_init_client(struct i2c_client *client)
|
||||
that the others support it as well....
|
||||
*/
|
||||
|
||||
if (type == w83781d) {
|
||||
if (init && type == w83781d) {
|
||||
u16 k = 0;
|
||||
/*
|
||||
Auto-indexing doesn't seem to work...
|
||||
@@ -1256,115 +1260,117 @@ void w83781d_init_client(struct i2c_client *client)
|
||||
}
|
||||
#endif /* W83781D_RT */
|
||||
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(0),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_0));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(0),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_0));
|
||||
if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(1),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_1));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(1),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_1));
|
||||
}
|
||||
if(init) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(0),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_0));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(0),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_0));
|
||||
if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(1),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_1));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(1),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_1));
|
||||
}
|
||||
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(2),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_2));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(2),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_2));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(3),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_3));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(3),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_3));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(4),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_4));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(4),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_4));
|
||||
if (type == w83781d || type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(5),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_5));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(5),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_5));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(5),
|
||||
IN_TO_REG(W83782D_INIT_IN_MIN_5));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(5),
|
||||
IN_TO_REG(W83782D_INIT_IN_MAX_5));
|
||||
}
|
||||
if (type == w83781d || type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(6),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_6));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(6),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_6));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(6),
|
||||
IN_TO_REG(W83782D_INIT_IN_MIN_6));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(6),
|
||||
IN_TO_REG(W83782D_INIT_IN_MAX_6));
|
||||
}
|
||||
if ((type == w83782d) || (type == w83627hf)) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(7),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_7));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(7),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_7));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(8),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_8));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(8),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_8));
|
||||
w83781d_write_value(client, W83781D_REG_VBAT,
|
||||
(w83781d_read_value(client, W83781D_REG_VBAT) | 0x01));
|
||||
}
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(1),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2));
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(2),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2));
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(3),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(2),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_2));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(2),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_2));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(3),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_3));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(3),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_3));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(4),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_4));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(4),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_4));
|
||||
if (type == w83781d || type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(5),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_5));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(5),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_5));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(5),
|
||||
IN_TO_REG(W83782D_INIT_IN_MIN_5));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(5),
|
||||
IN_TO_REG(W83782D_INIT_IN_MAX_5));
|
||||
}
|
||||
if (type == w83781d || type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(6),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_6));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(6),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_6));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(6),
|
||||
IN_TO_REG(W83782D_INIT_IN_MIN_6));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(6),
|
||||
IN_TO_REG(W83782D_INIT_IN_MAX_6));
|
||||
}
|
||||
if ((type == w83782d) || (type == w83627hf)) {
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(7),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_7));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(7),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_7));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MIN(8),
|
||||
IN_TO_REG(W83781D_INIT_IN_MIN_8));
|
||||
w83781d_write_value(client, W83781D_REG_IN_MAX(8),
|
||||
IN_TO_REG(W83781D_INIT_IN_MAX_8));
|
||||
w83781d_write_value(client, W83781D_REG_VBAT,
|
||||
(w83781d_read_value(client, W83781D_REG_VBAT) | 0x01));
|
||||
}
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(1),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2));
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(2),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2));
|
||||
w83781d_write_value(client, W83781D_REG_FAN_MIN(3),
|
||||
FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2));
|
||||
|
||||
w83781d_write_value(client, W83781D_REG_TEMP_OVER,
|
||||
TEMP_TO_REG(W83781D_INIT_TEMP_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP_HYST,
|
||||
TEMP_TO_REG(W83781D_INIT_TEMP_HYST));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP_OVER,
|
||||
TEMP_TO_REG(W83781D_INIT_TEMP_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP_HYST,
|
||||
TEMP_TO_REG(W83781D_INIT_TEMP_HYST));
|
||||
|
||||
if (type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_OVER,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_HYST,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_HYST));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_OVER,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_HYST,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_HYST));
|
||||
}
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_CONFIG, 0x00);
|
||||
if (type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_OVER,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_HYST,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_HYST));
|
||||
} else {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_OVER,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_HYST,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP2_HYST));
|
||||
}
|
||||
w83781d_write_value(client, W83781D_REG_TEMP2_CONFIG, 0x00);
|
||||
|
||||
if (type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_OVER,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_HYST,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_HYST));
|
||||
} else if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_OVER,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_HYST,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_HYST));
|
||||
}
|
||||
if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_CONFIG,
|
||||
0x00);
|
||||
}
|
||||
/* enable PWM2 control (can't hurt since PWM reg should have been
|
||||
reset to 0xff) */
|
||||
if (type != w83781d) {
|
||||
w83781d_write_value(client, W83781D_REG_PWMCLK12, 0x19);
|
||||
if (type == as99127f) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_OVER,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_HYST,
|
||||
AS99127_TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_HYST));
|
||||
} else if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_OVER,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_OVER));
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_HYST,
|
||||
TEMP_ADD_TO_REG
|
||||
(W83781D_INIT_TEMP3_HYST));
|
||||
}
|
||||
if (type != w83783s) {
|
||||
w83781d_write_value(client, W83781D_REG_TEMP3_CONFIG,
|
||||
0x00);
|
||||
}
|
||||
/* enable PWM2 control (can't hurt since PWM reg should have
|
||||
been reset to 0xff) */
|
||||
if (type != w83781d) {
|
||||
w83781d_write_value(client, W83781D_REG_PWMCLK12, 0x19);
|
||||
}
|
||||
}
|
||||
|
||||
/* Start monitoring */
|
||||
|
||||
Reference in new issue
Block a user