Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 107303
b: refs/heads/master
c: dd1ac53
h: refs/heads/master
i:
  107301: a265fc6
  107299: 2927aae
  107295: 861ac7a
v: v3
  • Loading branch information
Jean Delvare authored and Mark M. Hoffman committed Aug 1, 2008
1 parent 9f28ea6 commit d594cab
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 88 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1f44809ac3d7a3fc977684dc3a95fa221f33fc15
refs/heads/master: dd1ac5384a08946a99e974bf5749d382e92ed3c0
11 changes: 4 additions & 7 deletions trunk/Documentation/hwmon/lm85
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,6 @@ initial testing of the ADM1027 it was 1.00 degC steps. Analog Devices has
confirmed this "bug". The ADT7463 is reported to work as described in the
documentation. The current lm85 driver does not show the offset register.

The ADT7463 has a THERM asserted counter. This counter has a 22.76ms
resolution and a range of 5.8 seconds. The driver implements a 32-bit
accumulator of the counter value to extend the range to over a year. The
counter will stay at it's max value until read.

See the vendor datasheets for more information. There is application note
from National (AN-1260) with some additional information about the LM85.
The Analog Devices datasheet is very detailed and describes a procedure for
Expand Down Expand Up @@ -206,13 +201,15 @@ Configuration choices:

The National LM85's have two vendor specific configuration
features. Tach. mode and Spinup Control. For more details on these,
see the LM85 datasheet or Application Note AN-1260.
see the LM85 datasheet or Application Note AN-1260. These features
are not currently supported by the lm85 driver.

The Analog Devices ADM1027 has several vendor specific enhancements.
The number of pulses-per-rev of the fans can be set, Tach monitoring
can be optimized for PWM operation, and an offset can be applied to
the temperatures to compensate for systemic errors in the
measurements.
measurements. These features are not currently supported by the lm85
driver.

In addition to the ADM1027 features, the ADT7463 also has Tmin control
and THERM asserted counts. Automatic Tmin control acts to adjust the
Expand Down
82 changes: 2 additions & 80 deletions trunk/drivers/hwmon/lm85.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,9 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102);

#define LM85_REG_PWM(nr) (0x30 + (nr))

#define ADT7463_REG_OPPOINT(nr) (0x33 + (nr))

#define ADT7463_REG_TMIN_CTL1 0x36
#define ADT7463_REG_TMIN_CTL2 0x37

#define LM85_REG_DEVICE 0x3d
#define LM85_REG_COMPANY 0x3e
#define LM85_REG_VERSTEP 0x3f
/* These are the recognized values for the above regs */
#define LM85_DEVICE_ADX 0x27
#define LM85_COMPANY_NATIONAL 0x01
#define LM85_COMPANY_ANALOG_DEV 0x41
#define LM85_COMPANY_SMSC 0x5c
Expand All @@ -91,27 +84,14 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102);
#define LM85_REG_AFAN_CONFIG(nr) (0x5c + (nr))
#define LM85_REG_AFAN_RANGE(nr) (0x5f + (nr))
#define LM85_REG_AFAN_SPIKE1 0x62
#define LM85_REG_AFAN_SPIKE2 0x63
#define LM85_REG_AFAN_MINPWM(nr) (0x64 + (nr))
#define LM85_REG_AFAN_LIMIT(nr) (0x67 + (nr))
#define LM85_REG_AFAN_CRITICAL(nr) (0x6a + (nr))
#define LM85_REG_AFAN_HYST1 0x6d
#define LM85_REG_AFAN_HYST2 0x6e

#define LM85_REG_TACH_MODE 0x74
#define LM85_REG_SPINUP_CTL 0x75

#define ADM1027_REG_TEMP_OFFSET(nr) (0x70 + (nr))
#define ADM1027_REG_CONFIG2 0x73
#define ADM1027_REG_INTMASK1 0x74
#define ADM1027_REG_INTMASK2 0x75
#define ADM1027_REG_EXTEND_ADC1 0x76
#define ADM1027_REG_EXTEND_ADC2 0x77
#define ADM1027_REG_CONFIG3 0x78
#define ADM1027_REG_FAN_PPR 0x7b

#define ADT7463_REG_THERM 0x79
#define ADT7463_REG_THERM_LIMIT 0x7A

#define EMC6D100_REG_ALARM3 0x7d
/* IN5, IN6 and IN7 */
Expand Down Expand Up @@ -263,13 +243,6 @@ static int ZONE_TO_REG(int zone)
#define HYST_TO_REG(val) SENSORS_LIMIT(((val) + 500) / 1000, 0, 15)
#define HYST_FROM_REG(val) ((val) * 1000)

#define OFFSET_TO_REG(val) SENSORS_LIMIT((val) / 25, -127, 127)
#define OFFSET_FROM_REG(val) ((val) * 25)

#define PPR_MASK(fan) (0x03 << ((fan) * 2))
#define PPR_TO_REG(val, fan) (SENSORS_LIMIT((val) - 1, 0, 3) << ((fan) * 2))
#define PPR_FROM_REG(val, fan) ((((val) >> ((fan) * 2)) & 0x03) + 1)

/* Chip sampling rates
*
* Some sensors are not updated more frequently than once per second
Expand Down Expand Up @@ -330,23 +303,15 @@ struct lm85_data {
s8 temp[3]; /* Register value */
s8 temp_min[3]; /* Register value */
s8 temp_max[3]; /* Register value */
s8 temp_offset[3]; /* Register value */
u16 fan[4]; /* Register value */
u16 fan_min[4]; /* Register value */
u8 pwm[3]; /* Register value */
u8 spinup_ctl; /* Register encoding, combined */
u8 tach_mode; /* Register encoding, combined */
u8 temp_ext[3]; /* Decoded values */
u8 in_ext[8]; /* Decoded values */
u8 fan_ppr; /* Register value */
u8 smooth[3]; /* Register encoding */
u8 smooth[1]; /* Register encoding */
u8 vid; /* Register value */
u8 vrm; /* VRM version */
u8 syncpwm3; /* Saved PWM3 for TACH 2,3,4 config */
u8 oppoint[3]; /* Register value */
u16 tmin_ctl; /* Register value */
unsigned long therm_total; /* Cummulative therm count */
u8 therm_limit; /* Register value */
u32 alarms; /* Register encoding, combined */
struct lm85_autofan autofan[3];
struct lm85_zone zone[3];
Expand Down Expand Up @@ -1335,10 +1300,6 @@ static int lm85_read_value(struct i2c_client *client, u8 reg)
res = i2c_smbus_read_byte_data(client, reg) & 0xff;
res |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
break;
case ADT7463_REG_TMIN_CTL1: /* Read WORD MSB, LSB */
res = i2c_smbus_read_byte_data(client, reg) << 8;
res |= i2c_smbus_read_byte_data(client, reg + 1) & 0xff;
break;
default: /* Read BYTE data */
res = i2c_smbus_read_byte_data(client, reg);
break;
Expand All @@ -1365,11 +1326,6 @@ static int lm85_write_value(struct i2c_client *client, u8 reg, int value)
res |= i2c_smbus_write_byte_data(client, reg + 1,
(value >> 8) & 0xff);
break;
case ADT7463_REG_TMIN_CTL1: /* Write WORD MSB, LSB */
res = i2c_smbus_write_byte_data(client, reg,
(value >> 8) & 0xff);
res |= i2c_smbus_write_byte_data(client, reg + 1, value & 0xff);
break;
default: /* Write BYTE data */
res = i2c_smbus_write_byte_data(client, reg, value);
break;
Expand Down Expand Up @@ -1483,12 +1439,7 @@ static struct lm85_data *lm85_update_device(struct device *dev)

data->alarms = lm85_read_value(client, LM85_REG_ALARM1);

if (data->type == adt7463) {
if (data->therm_total < ULONG_MAX - 256) {
data->therm_total +=
lm85_read_value(client, ADT7463_REG_THERM);
}
} else if (data->type == emc6d100) {
if (data->type == emc6d100) {
/* Three more voltage sensors */
for (i = 5; i <= 7; ++i) {
data->in[i] = lm85_read_value(client,
Expand Down Expand Up @@ -1585,9 +1536,6 @@ static struct lm85_data *lm85_update_device(struct device *dev)
data->autofan[0].min_off = (i & 0x20) != 0;
data->autofan[1].min_off = (i & 0x40) != 0;
data->autofan[2].min_off = (i & 0x80) != 0;
i = lm85_read_value(client, LM85_REG_AFAN_SPIKE2);
data->smooth[1] = (i >> 4) & 0x0f;
data->smooth[2] = i & 0x0f;

i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
data->zone[0].hyst = (i >> 4) & 0x0f;
Expand All @@ -1596,32 +1544,6 @@ static struct lm85_data *lm85_update_device(struct device *dev)
i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
data->zone[2].hyst = (i >> 4) & 0x0f;

if (data->type == lm85b || data->type == lm85c) {
data->tach_mode = lm85_read_value(client,
LM85_REG_TACH_MODE);
data->spinup_ctl = lm85_read_value(client,
LM85_REG_SPINUP_CTL);
} else if (data->type == adt7463 || data->type == adm1027) {
if (data->type == adt7463) {
for (i = 0; i <= 2; ++i) {
data->oppoint[i] = lm85_read_value(client,
ADT7463_REG_OPPOINT(i));
}
data->tmin_ctl = lm85_read_value(client,
ADT7463_REG_TMIN_CTL1);
data->therm_limit = lm85_read_value(client,
ADT7463_REG_THERM_LIMIT);
}
for (i = 0; i <= 2; ++i) {
data->temp_offset[i] = lm85_read_value(client,
ADM1027_REG_TEMP_OFFSET(i));
}
data->tach_mode = lm85_read_value(client,
ADM1027_REG_CONFIG3);
data->fan_ppr = lm85_read_value(client,
ADM1027_REG_FAN_PPR);
}

data->last_config = jiffies;
} /* last_config */

Expand Down

0 comments on commit d594cab

Please sign in to comment.