Merge branch 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6
* 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6: hwmon: (abituguru3) enable DMI probing feature on AW9D-MAX hwmon: (abituguru3) Cosmetic whitespace fixes hwmon: (adt7473) Fix voltage conversion routines hwmon: (lm90) Add support for the LM99 16 degree offset hwmon: (lm90) Fix handling of hysteresis value hwmon-vid: Add support for AMD family 10h CPUs hwmon: (w83781d) Fix linking when built-in
This commit is contained in:
commit
b1cd2ee3b9
@ -8,7 +8,7 @@ Supported chips:
|
|||||||
Datasheet: Publicly available at the National Semiconductor website
|
Datasheet: Publicly available at the National Semiconductor website
|
||||||
http://www.national.com/pf/LM/LM90.html
|
http://www.national.com/pf/LM/LM90.html
|
||||||
* National Semiconductor LM89
|
* National Semiconductor LM89
|
||||||
Prefix: 'lm99'
|
Prefix: 'lm89' (no auto-detection)
|
||||||
Addresses scanned: I2C 0x4c and 0x4d
|
Addresses scanned: I2C 0x4c and 0x4d
|
||||||
Datasheet: Publicly available at the National Semiconductor website
|
Datasheet: Publicly available at the National Semiconductor website
|
||||||
http://www.national.com/mpf/LM/LM89.html
|
http://www.national.com/mpf/LM/LM89.html
|
||||||
|
@ -178,7 +178,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM", 26, 1, 1, 1, 0 },
|
{ "PWM", 26, 1, 1, 1, 0 },
|
||||||
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
||||||
{ "NB Fan", 33, 2, 60, 1, 0 },
|
{ "NB Fan", 33, 2, 60, 1, 0 },
|
||||||
@ -200,7 +200,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM1", 26, 1, 1, 1, 0 },
|
{ "PWM1", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM2", 27, 1, 1, 1, 0 },
|
{ "PWM2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM3", 28, 1, 1, 1, 0 },
|
{ "PWM3", 28, 1, 1, 1, 0 },
|
||||||
@ -229,7 +229,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM", 26, 1, 1, 1, 0 },
|
{ "PWM", 26, 1, 1, 1, 0 },
|
||||||
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
||||||
{ "NB Fan", 33, 2, 60, 1, 0 },
|
{ "NB Fan", 33, 2, 60, 1, 0 },
|
||||||
@ -250,7 +250,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM", 26, 1, 1, 1, 0 },
|
{ "PWM", 26, 1, 1, 1, 0 },
|
||||||
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
||||||
{ "NB Fan", 33, 2, 60, 1, 0 },
|
{ "NB Fan", 33, 2, 60, 1, 0 },
|
||||||
@ -342,7 +342,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM1", 26, 1, 1, 1, 0 },
|
{ "PWM1", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM2", 27, 1, 1, 1, 0 },
|
{ "PWM2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM3", 28, 1, 1, 1, 0 },
|
{ "PWM3", 28, 1, 1, 1, 0 },
|
||||||
@ -371,7 +371,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM", 26, 1, 1, 1, 0 },
|
{ "PWM", 26, 1, 1, 1, 0 },
|
||||||
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
{ "CPU Fan", 32, 2, 60, 1, 0 },
|
||||||
{ "NB Fan", 33, 2, 60, 1, 0 },
|
{ "NB Fan", 33, 2, 60, 1, 0 },
|
||||||
@ -402,7 +402,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
|
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
|
||||||
{ NULL, 0, 0, 0, 0, 0 } }
|
{ NULL, 0, 0, 0, 0, 0 } }
|
||||||
},
|
},
|
||||||
{ 0x0016, NULL /* AW9D-MAX, need DMI string */, {
|
{ 0x0016, "AW9D-MAX (Intel i975-ICH7)", {
|
||||||
{ "CPU Core", 0, 0, 10, 1, 0 },
|
{ "CPU Core", 0, 0, 10, 1, 0 },
|
||||||
{ "DDR2", 1, 0, 20, 1, 0 },
|
{ "DDR2", 1, 0, 20, 1, 0 },
|
||||||
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
|
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
|
||||||
@ -416,7 +416,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM1", 26, 1, 1, 1, 0 },
|
{ "PWM1", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM2", 27, 1, 1, 1, 0 },
|
{ "PWM2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM3", 28, 1, 1, 1, 0 },
|
{ "PWM3", 28, 1, 1, 1, 0 },
|
||||||
@ -446,7 +446,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "ATX +3.3V", 10, 0, 20, 1, 0 },
|
{ "ATX +3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "ATX 5VSB", 11, 0, 30, 1, 0 },
|
{ "ATX 5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 26, 1, 1, 1, 0 },
|
{ "System", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM", 27, 1, 1, 1, 0 },
|
{ "PWM", 27, 1, 1, 1, 0 },
|
||||||
{ "CPU FAN", 32, 2, 60, 1, 0 },
|
{ "CPU FAN", 32, 2, 60, 1, 0 },
|
||||||
{ "SYS FAN", 34, 2, 60, 1, 0 },
|
{ "SYS FAN", 34, 2, 60, 1, 0 },
|
||||||
@ -469,7 +469,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase1", 26, 1, 1, 1, 0 },
|
{ "PWM Phase1", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
||||||
@ -487,7 +487,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "DDR2", 13, 0, 20, 1, 0 },
|
{ "DDR2", 13, 0, 20, 1, 0 },
|
||||||
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
|
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
|
||||||
{ "CPU VTT", 3, 0, 20, 1, 0 },
|
{ "CPU VTT", 3, 0, 20, 1, 0 },
|
||||||
{ "NB 1.2V ", 4, 0, 10, 1, 0 },
|
{ "NB 1.2V", 4, 0, 10, 1, 0 },
|
||||||
{ "SB 1.5V", 6, 0, 10, 1, 0 },
|
{ "SB 1.5V", 6, 0, 10, 1, 0 },
|
||||||
{ "HyperTransport", 5, 0, 10, 1, 0 },
|
{ "HyperTransport", 5, 0, 10, 1, 0 },
|
||||||
{ "ATX +12V (24-Pin)", 12, 0, 60, 1, 0 },
|
{ "ATX +12V (24-Pin)", 12, 0, 60, 1, 0 },
|
||||||
@ -496,7 +496,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "ATX +3.3V", 10, 0, 20, 1, 0 },
|
{ "ATX +3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "ATX 5VSB", 11, 0, 30, 1, 0 },
|
{ "ATX 5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase1", 26, 1, 1, 1, 0 },
|
{ "PWM Phase1", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
||||||
@ -523,8 +523,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
|
|||||||
{ "+3.3V", 10, 0, 20, 1, 0 },
|
{ "+3.3V", 10, 0, 20, 1, 0 },
|
||||||
{ "5VSB", 11, 0, 30, 1, 0 },
|
{ "5VSB", 11, 0, 30, 1, 0 },
|
||||||
{ "CPU", 24, 1, 1, 1, 0 },
|
{ "CPU", 24, 1, 1, 1, 0 },
|
||||||
{ "System ", 25, 1, 1, 1, 0 },
|
{ "System", 25, 1, 1, 1, 0 },
|
||||||
{ "PWM ", 26, 1, 1, 1, 0 },
|
{ "PWM", 26, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
{ "PWM Phase2", 27, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
{ "PWM Phase3", 28, 1, 1, 1, 0 },
|
||||||
{ "PWM Phase4", 29, 1, 1, 1, 0 },
|
{ "PWM Phase4", 29, 1, 1, 1, 0 },
|
||||||
@ -947,7 +947,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
|
|||||||
if (!abituguru3_motherboards[i].dmi_name) {
|
if (!abituguru3_motherboards[i].dmi_name) {
|
||||||
printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
|
printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
|
||||||
"not detected using DMI. Please send the output of "
|
"not detected using DMI. Please send the output of "
|
||||||
"\"dmidecode\" to the abituguru3 maintainer"
|
"\"dmidecode\" to the abituguru3 maintainer "
|
||||||
"(see MAINTAINERS)\n");
|
"(see MAINTAINERS)\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -319,35 +319,24 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On this chip, voltages are given as a count of steps between a minimum
|
* Conversions
|
||||||
* and maximum voltage, not a direct voltage.
|
|
||||||
*/
|
*/
|
||||||
static const int volt_convert_table[][2] = {
|
|
||||||
{2997, 3},
|
/* IN are scaled acording to built-in resistors */
|
||||||
{4395, 4},
|
static const int adt7473_scaling[] = { /* .001 Volts */
|
||||||
|
2250, 3300
|
||||||
};
|
};
|
||||||
|
#define SCALE(val, from, to) (((val) * (to) + ((from) / 2)) / (from))
|
||||||
|
|
||||||
static int decode_volt(int volt_index, u8 raw)
|
static int decode_volt(int volt_index, u8 raw)
|
||||||
{
|
{
|
||||||
int cmax = volt_convert_table[volt_index][0];
|
return SCALE(raw, 192, adt7473_scaling[volt_index]);
|
||||||
int cmin = volt_convert_table[volt_index][1];
|
|
||||||
return ((raw * (cmax - cmin)) / 255) + cmin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 encode_volt(int volt_index, int cooked)
|
static u8 encode_volt(int volt_index, int cooked)
|
||||||
{
|
{
|
||||||
int cmax = volt_convert_table[volt_index][0];
|
int raw = SCALE(cooked, adt7473_scaling[volt_index], 192);
|
||||||
int cmin = volt_convert_table[volt_index][1];
|
return SENSORS_LIMIT(raw, 0, 255);
|
||||||
u8 x;
|
|
||||||
|
|
||||||
if (cooked > cmax)
|
|
||||||
cooked = cmax;
|
|
||||||
else if (cooked < cmin)
|
|
||||||
cooked = cmin;
|
|
||||||
|
|
||||||
x = ((cooked - cmin) * 255) / (cmax - cmin);
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t show_volt_min(struct device *dev,
|
static ssize_t show_volt_min(struct device *dev,
|
||||||
|
@ -180,6 +180,7 @@ static struct vrm_model vrm_models[] = {
|
|||||||
{X86_VENDOR_AMD, 0x6, ANY, ANY, 90}, /* Athlon Duron etc */
|
{X86_VENDOR_AMD, 0x6, ANY, ANY, 90}, /* Athlon Duron etc */
|
||||||
{X86_VENDOR_AMD, 0xF, 0x3F, ANY, 24}, /* Athlon 64, Opteron */
|
{X86_VENDOR_AMD, 0xF, 0x3F, ANY, 24}, /* Athlon 64, Opteron */
|
||||||
{X86_VENDOR_AMD, 0xF, ANY, ANY, 25}, /* NPT family 0Fh */
|
{X86_VENDOR_AMD, 0xF, ANY, ANY, 25}, /* NPT family 0Fh */
|
||||||
|
{X86_VENDOR_AMD, 0x10, ANY, ANY, 25}, /* NPT family 10h */
|
||||||
{X86_VENDOR_INTEL, 0x6, 0x9, ANY, 13}, /* Pentium M (130 nm) */
|
{X86_VENDOR_INTEL, 0x6, 0x9, ANY, 13}, /* Pentium M (130 nm) */
|
||||||
{X86_VENDOR_INTEL, 0x6, 0xB, ANY, 85}, /* Tualatin */
|
{X86_VENDOR_INTEL, 0x6, 0xB, ANY, 85}, /* Tualatin */
|
||||||
{X86_VENDOR_INTEL, 0x6, 0xD, ANY, 13}, /* Pentium M (90 nm) */
|
{X86_VENDOR_INTEL, 0x6, 0xD, ANY, 13}, /* Pentium M (90 nm) */
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
* made by National Semiconductor. Both have an increased remote
|
* made by National Semiconductor. Both have an increased remote
|
||||||
* temperature measurement accuracy (1 degree), and the LM99
|
* temperature measurement accuracy (1 degree), and the LM99
|
||||||
* additionally shifts remote temperatures (measured and limits) by 16
|
* additionally shifts remote temperatures (measured and limits) by 16
|
||||||
* degrees, which allows for higher temperatures measurement. The
|
* degrees, which allows for higher temperatures measurement.
|
||||||
* driver doesn't handle it since it can be done easily in user-space.
|
|
||||||
* Note that there is no way to differentiate between both chips.
|
* Note that there is no way to differentiate between both chips.
|
||||||
|
* When device is auto-detected, the driver will assume an LM99.
|
||||||
*
|
*
|
||||||
* This driver also supports the LM86, another sensor chip made by
|
* This driver also supports the LM86, another sensor chip made by
|
||||||
* National Semiconductor. It is exactly similar to the LM90 except it
|
* National Semiconductor. It is exactly similar to the LM90 except it
|
||||||
@ -169,8 +169,8 @@ static const struct i2c_device_id lm90_id[] = {
|
|||||||
{ "adt7461", adt7461 },
|
{ "adt7461", adt7461 },
|
||||||
{ "lm90", lm90 },
|
{ "lm90", lm90 },
|
||||||
{ "lm86", lm86 },
|
{ "lm86", lm86 },
|
||||||
{ "lm89", lm99 },
|
{ "lm89", lm86 },
|
||||||
{ "lm99", lm99 }, /* Missing temperature offset */
|
{ "lm99", lm99 },
|
||||||
{ "max6646", max6646 },
|
{ "max6646", max6646 },
|
||||||
{ "max6647", max6646 },
|
{ "max6647", max6646 },
|
||||||
{ "max6649", max6646 },
|
{ "max6649", max6646 },
|
||||||
@ -366,6 +366,10 @@ static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
|
|||||||
else
|
else
|
||||||
temp = temp_from_s8(data->temp8[attr->index]);
|
temp = temp_from_s8(data->temp8[attr->index]);
|
||||||
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
if (data->kind == lm99 && attr->index == 3)
|
||||||
|
temp += 16000;
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", temp);
|
return sprintf(buf, "%d\n", temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,6 +389,10 @@ static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
|
|||||||
long val = simple_strtol(buf, NULL, 10);
|
long val = simple_strtol(buf, NULL, 10);
|
||||||
int nr = attr->index;
|
int nr = attr->index;
|
||||||
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
if (data->kind == lm99 && attr->index == 3)
|
||||||
|
val -= 16000;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
if (data->kind == adt7461)
|
if (data->kind == adt7461)
|
||||||
data->temp8[nr] = temp_to_u8_adt7461(data, val);
|
data->temp8[nr] = temp_to_u8_adt7461(data, val);
|
||||||
@ -411,6 +419,10 @@ static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
|
|||||||
else
|
else
|
||||||
temp = temp_from_s16(data->temp11[attr->index]);
|
temp = temp_from_s16(data->temp11[attr->index]);
|
||||||
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
if (data->kind == lm99 && attr->index <= 2)
|
||||||
|
temp += 16000;
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", temp);
|
return sprintf(buf, "%d\n", temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,6 +444,10 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
|
|||||||
long val = simple_strtol(buf, NULL, 10);
|
long val = simple_strtol(buf, NULL, 10);
|
||||||
int nr = attr->index;
|
int nr = attr->index;
|
||||||
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
if (data->kind == lm99 && attr->index <= 2)
|
||||||
|
val -= 16000;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
if (data->kind == adt7461)
|
if (data->kind == adt7461)
|
||||||
data->temp11[nr] = temp_to_u16_adt7461(data, val);
|
data->temp11[nr] = temp_to_u16_adt7461(data, val);
|
||||||
@ -461,9 +477,15 @@ static ssize_t show_temphyst(struct device *dev, struct device_attribute *devatt
|
|||||||
|
|
||||||
if (data->kind == adt7461)
|
if (data->kind == adt7461)
|
||||||
temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
|
temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
|
||||||
|
else if (data->kind == max6646)
|
||||||
|
temp = temp_from_u8(data->temp8[attr->index]);
|
||||||
else
|
else
|
||||||
temp = temp_from_s8(data->temp8[attr->index]);
|
temp = temp_from_s8(data->temp8[attr->index]);
|
||||||
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
if (data->kind == lm99 && attr->index == 3)
|
||||||
|
temp += 16000;
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst));
|
return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,12 +495,19 @@ static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
|
|||||||
struct i2c_client *client = to_i2c_client(dev);
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
struct lm90_data *data = i2c_get_clientdata(client);
|
struct lm90_data *data = i2c_get_clientdata(client);
|
||||||
long val = simple_strtol(buf, NULL, 10);
|
long val = simple_strtol(buf, NULL, 10);
|
||||||
long hyst;
|
int temp;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
hyst = temp_from_s8(data->temp8[2]) - val;
|
if (data->kind == adt7461)
|
||||||
|
temp = temp_from_u8_adt7461(data, data->temp8[2]);
|
||||||
|
else if (data->kind == max6646)
|
||||||
|
temp = temp_from_u8(data->temp8[2]);
|
||||||
|
else
|
||||||
|
temp = temp_from_s8(data->temp8[2]);
|
||||||
|
|
||||||
|
data->temp_hyst = hyst_to_reg(temp - val);
|
||||||
i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
|
i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
|
||||||
hyst_to_reg(hyst));
|
data->temp_hyst);
|
||||||
mutex_unlock(&data->update_lock);
|
mutex_unlock(&data->update_lock);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -682,6 +711,15 @@ static int lm90_detect(struct i2c_client *new_client, int kind,
|
|||||||
} else
|
} else
|
||||||
if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
|
if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
|
||||||
kind = lm99;
|
kind = lm99;
|
||||||
|
dev_info(&adapter->dev,
|
||||||
|
"Assuming LM99 chip at "
|
||||||
|
"0x%02x\n", address);
|
||||||
|
dev_info(&adapter->dev,
|
||||||
|
"If it is an LM89, pass "
|
||||||
|
"force_lm86=%d,0x%02x when "
|
||||||
|
"loading the lm90 driver\n",
|
||||||
|
i2c_adapter_id(adapter),
|
||||||
|
address);
|
||||||
} else
|
} else
|
||||||
if (address == 0x4C
|
if (address == 0x4C
|
||||||
&& (chip_id & 0xF0) == 0x10) { /* LM86 */
|
&& (chip_id & 0xF0) == 0x10) { /* LM86 */
|
||||||
|
@ -1968,7 +1968,7 @@ exit:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit
|
static void
|
||||||
w83781d_isa_unregister(void)
|
w83781d_isa_unregister(void)
|
||||||
{
|
{
|
||||||
if (pdev) {
|
if (pdev) {
|
||||||
@ -2017,7 +2017,7 @@ w83781d_isa_register(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit
|
static void
|
||||||
w83781d_isa_unregister(void)
|
w83781d_isa_unregister(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user