Skip to content

Commit

Permalink
Merge branch 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelva…
Browse files Browse the repository at this point in the history
…re-2.6

* 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6:
  hwmon: (abituguru3) Fix CONFIG_DMI=n fallback to probe
  hwmon: (abituguru3) Enable DMI probing feature on IN9 32X MAX
  hwmon: (abituguru3) Match partial DMI board name strings
  hwmon: Add a driver for the ADT7475 hardware monitoring chip
  hwmon: (k8temp) Fix temperature reporting for (most) K8 RevG CPUs
  hwmon: (k8temp) Fix wrong sensor selection for AMD K8 RevF/RevG CPUs
  hwmon: (k8temp) Warn about fam F rev F errata
  • Loading branch information
torvalds committed Jan 16, 2009
2 parents 6364853 + 46a5f17 commit 7e92214
Show file tree
Hide file tree
Showing 6 changed files with 1,384 additions and 15 deletions.
87 changes: 87 additions & 0 deletions Documentation/hwmon/adt7475
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
This describes the interface for the ADT7475 driver:

(there are 4 fans, numbered fan1 to fan4):

fanX_input Read the current speed of the fan (in RPMs)
fanX_min Read/write the minimum speed of the fan. Dropping
below this sets an alarm.

(there are three PWMs, numbered pwm1 to pwm3):

pwmX Read/write the current duty cycle of the PWM. Writes
only have effect when auto mode is turned off (see
below). Range is 0 - 255.

pwmX_enable Fan speed control method:

0 - No control (fan at full speed)
1 - Manual fan speed control (using pwm[1-*])
2 - Automatic fan speed control

pwmX_auto_channels_temp Select which channels affect this PWM

1 - TEMP1 controls PWM
2 - TEMP2 controls PWM
4 - TEMP3 controls PWM
6 - TEMP2 and TEMP3 control PWM
7 - All three inputs control PWM

pwmX_freq Read/write the PWM frequency in Hz. The number
should be one of the following:

11 Hz
14 Hz
22 Hz
29 Hz
35 Hz
44 Hz
58 Hz
88 Hz

pwmX_auto_point1_pwm Read/write the minimum PWM duty cycle in automatic mode

pwmX_auto_point2_pwm Read/write the maximum PWM duty cycle in automatic mode

(there are three temperature settings numbered temp1 to temp3):

tempX_input Read the current temperature. The value is in milli
degrees of Celsius.

tempX_max Read/write the upper temperature limit - exceeding this
will cause an alarm.

tempX_min Read/write the lower temperature limit - exceeding this
will cause an alarm.

tempX_offset Read/write the temperature adjustment offset

tempX_crit Read/write the THERM limit for remote1.

tempX_crit_hyst Set the temperature value below crit where the
fans will stay on - this helps drive the temperature
low enough so it doesn't stay near the edge and
cause THERM to keep tripping.

tempX_auto_point1_temp Read/write the minimum temperature where the fans will
turn on in automatic mode.

tempX_auto_point2_temp Read/write the maximum temperature over which the fans
will run in automatic mode. tempX_auto_point1_temp
and tempX_auto_point2_temp together define the
range of automatic control.

tempX_alarm Read a 1 if the max/min alarm is set
tempX_fault Read a 1 if either temp1 or temp3 diode has a fault

(There are two voltage settings, in1 and in2):

inX_input Read the current voltage on VCC. Value is in
millivolts.

inX_min read/write the minimum voltage limit.
Dropping below this causes an alarm.

inX_max read/write the maximum voltage limit.
Exceeding this causes an alarm.

inX_alarm Read a 1 if the max/min alarm is set.
10 changes: 10 additions & 0 deletions drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,16 @@ config SENSORS_ADT7473
This driver can also be built as a module. If so, the module
will be called adt7473.

config SENSORS_ADT7475
tristate "Analog Devices ADT7475"
depends on I2C && EXPERIMENTAL
help
If you say yes here you get support for the Analog Devices
ADT7475 hardware monitoring chips.

This driver can also be build as a module. If so, the module
will be called adt7475.

config SENSORS_K8TEMP
tristate "AMD Athlon64/FX or Opteron temperature sensor"
depends on X86 && PCI && EXPERIMENTAL
Expand Down
2 changes: 2 additions & 0 deletions drivers/hwmon/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ obj-$(CONFIG_SENSORS_ADS7828) += ads7828.o
obj-$(CONFIG_SENSORS_ADT7462) += adt7462.o
obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o
obj-$(CONFIG_SENSORS_ADT7473) += adt7473.o
obj-$(CONFIG_SENSORS_ADT7475) += adt7475.o

obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o
obj-$(CONFIG_SENSORS_AMS) += ams/
obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
Expand Down
24 changes: 18 additions & 6 deletions drivers/hwmon/abituguru3.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "OTES1 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
{ 0x0011, "AT8 32X(ATI RD580-ULI M1575)", {
{ 0x0011, "AT8 32X", {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR", 1, 0, 20, 1, 0 },
{ "DDR VTT", 2, 0, 10, 1, 0 },
Expand Down Expand Up @@ -402,7 +402,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
{ 0x0016, "AW9D-MAX (Intel i975-ICH7)", {
{ 0x0016, "AW9D-MAX", {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
Expand Down Expand Up @@ -482,7 +482,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 Fan", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
{ 0x0019, NULL /* Unknown, need DMI string */, {
{ 0x0019, "IN9 32X MAX", {
{ "CPU Core", 7, 0, 10, 1, 0 },
{ "DDR2", 13, 0, 20, 1, 0 },
{ "DDR2 VTT", 14, 0, 10, 1, 0 },
Expand All @@ -509,7 +509,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
{ "AUX3 FAN", 36, 2, 60, 1, 0 },
{ NULL, 0, 0, 0, 0, 0 } }
},
{ 0x001A, "IP35 Pro(Intel P35-ICH9R)", {
{ 0x001A, "IP35 Pro", {
{ "CPU Core", 0, 0, 10, 1, 0 },
{ "DDR2", 1, 0, 20, 1, 0 },
{ "DDR2 VTT", 2, 0, 10, 1, 0 },
Expand Down Expand Up @@ -1128,6 +1128,7 @@ static int __init abituguru3_dmi_detect(void)
{
const char *board_vendor, *board_name;
int i, err = (force) ? 1 : -ENODEV;
size_t sublen;

board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
if (!board_vendor || strcmp(board_vendor, "http://www.abit.com.tw/"))
Expand All @@ -1137,9 +1138,20 @@ static int __init abituguru3_dmi_detect(void)
if (!board_name)
return err;

/* At the moment, we don't care about the part of the vendor
* DMI string contained in brackets. Truncate the string at
* the first occurrence of a bracket. Trim any trailing space
* from the substring.
*/
sublen = strcspn(board_name, "(");
while (sublen > 0 && board_name[sublen - 1] == ' ')
sublen--;

for (i = 0; abituguru3_motherboards[i].id; i++) {
const char *dmi_name = abituguru3_motherboards[i].dmi_name;
if (dmi_name && !strcmp(dmi_name, board_name))
if (!dmi_name || strlen(dmi_name) != sublen)
continue;
if (!strncasecmp(board_name, dmi_name, sublen))
break;
}

Expand All @@ -1153,7 +1165,7 @@ static int __init abituguru3_dmi_detect(void)

static inline int abituguru3_dmi_detect(void)
{
return -ENODEV;
return 1;
}

#endif /* CONFIG_DMI */
Expand Down
Loading

0 comments on commit 7e92214

Please sign in to comment.