Commit 40b42f1e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6

* 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6: (44 commits)
  i2c: Delete the i2c-isa pseudo bus driver
  hwmon: refuse to load abituguru driver on non-Abit boards
  hwmon: fix Abit Uguru3 driver detection on some motherboards
  hwmon/w83627ehf: Be quiet when no chip is found
  hwmon/w83627ehf: No need to initialize fan_min
  hwmon/w83627ehf: Export the thermal sensor types
  hwmon/w83627ehf: Enable VBAT monitoring
  hwmon/w83627ehf: Add support for the VID inputs
  hwmon/w83627ehf: Fix timing issues
  hwmon/w83627ehf: Add error messages for two error cases
  hwmon/w83627ehf: Convert to a platform driver
  hwmon/w83627ehf: Update the Kconfig entry
  make coretemp_device_remove() static
  hwmon: Add LM93 support
  hwmon: Improve the pwmN_enable documentation
  hwmon/smsc47b397: Don't report missing fans as spinning at 82 RPM
  hwmon: Add support for newer uGuru's
  hwmon/f71805f: Add temperature-tracking fan control mode
  hwmon/w83627ehf: Preserve speed reading when changing fan min
  hwmon: fix detection of abituguru volt inputs
  ...

Manual fixup of trivial conflict in MAINTAINERS file
parents 5a021e9f e24b8cb4
...@@ -164,15 +164,6 @@ Who: Kay Sievers <kay.sievers@suse.de> ...@@ -164,15 +164,6 @@ Who: Kay Sievers <kay.sievers@suse.de>
--------------------------- ---------------------------
What: i2c-isa
When: December 2006
Why: i2c-isa is a non-sense and doesn't fit in the device driver
model. Drivers relying on it are better implemented as platform
drivers.
Who: Jean Delvare <khali@linux-fr.org>
---------------------------
What: i2c_adapter.list What: i2c_adapter.list
When: July 2007 When: July 2007
Why: Superfluous, this list duplicates the one maintained by the driver Why: Superfluous, this list duplicates the one maintained by the driver
......
...@@ -2,7 +2,7 @@ Kernel driver abituguru ...@@ -2,7 +2,7 @@ Kernel driver abituguru
======================= =======================
Supported chips: Supported chips:
* Abit uGuru revision 1-3 (Hardware Monitor part only) * Abit uGuru revision 1 & 2 (Hardware Monitor part only)
Prefix: 'abituguru' Prefix: 'abituguru'
Addresses scanned: ISA 0x0E0 Addresses scanned: ISA 0x0E0
Datasheet: Not available, this driver is based on reverse engineering. Datasheet: Not available, this driver is based on reverse engineering.
...@@ -20,8 +20,8 @@ Supported chips: ...@@ -20,8 +20,8 @@ Supported chips:
uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8) uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8)
uGuru 2.2.0.0 ~ 2.2.0.6 (AA8 Fatal1ty) uGuru 2.2.0.0 ~ 2.2.0.6 (AA8 Fatal1ty)
uGuru 2.3.0.0 ~ 2.3.0.9 (AN8) uGuru 2.3.0.0 ~ 2.3.0.9 (AN8)
uGuru 3.0.0.0 ~ 3.0.1.2 (AW8, AL8, NI8) uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X,
uGuru 4.xxxxx? (AT8 32X) (2) AW9D-MAX) (2)
1) For revisions 2 and 3 uGuru's the driver can autodetect the 1) For revisions 2 and 3 uGuru's the driver can autodetect the
sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's
this doesnot always work. For these uGuru's the autodection can this doesnot always work. For these uGuru's the autodection can
...@@ -30,8 +30,9 @@ Supported chips: ...@@ -30,8 +30,9 @@ Supported chips:
bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1 bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1
You may also need to specify the fan_sensors option for these boards You may also need to specify the fan_sensors option for these boards
fan_sensors=5 fan_sensors=5
2) The current version of the abituguru driver is known to NOT work 2) There is a seperate abituguru3 driver for these motherboards,
on these Motherboards the abituguru (without the 3 !) driver will not work on these
motherboards (and visa versa)!
Authors: Authors:
Hans de Goede <j.w.r.degoede@hhs.nl>, Hans de Goede <j.w.r.degoede@hhs.nl>,
...@@ -43,8 +44,10 @@ Module Parameters ...@@ -43,8 +44,10 @@ Module Parameters
----------------- -----------------
* force: bool Force detection. Note this parameter only causes the * force: bool Force detection. Note this parameter only causes the
detection to be skipped, if the uGuru can't be read detection to be skipped, and thus the insmod to
the module initialization (insmod) will still fail. succeed. If the uGuru can't be read the actual hwmon
driver will not load and thus no hwmon device will get
registered.
* bank1_types: int[] Bank1 sensortype autodetection override: * bank1_types: int[] Bank1 sensortype autodetection override:
-1 autodetect (default) -1 autodetect (default)
0 volt sensor 0 volt sensor
...@@ -69,13 +72,15 @@ dmesg | grep abituguru ...@@ -69,13 +72,15 @@ dmesg | grep abituguru
Description Description
----------- -----------
This driver supports the hardware monitoring features of the Abit uGuru chip This driver supports the hardware monitoring features of the first and
found on Abit uGuru featuring motherboards (most modern Abit motherboards). second revision of the Abit uGuru chip found on Abit uGuru featuring
motherboards (most modern Abit motherboards).
The uGuru chip in reality is a Winbond W83L950D in disguise (despite Abit The first and second revision of the uGuru chip in reality is a Winbond
claiming it is "a new microprocessor designed by the ABIT Engineers"). W83L950D in disguise (despite Abit claiming it is "a new microprocessor
Unfortunatly this doesn't help since the W83L950D is a generic designed by the ABIT Engineers"). Unfortunatly this doesn't help since the
microcontroller with a custom Abit application running on it. W83L950D is a generic microcontroller with a custom Abit application running
on it.
Despite Abit not releasing any information regarding the uGuru, Olle Despite Abit not releasing any information regarding the uGuru, Olle
Sandberg <ollebull@gmail.com> has managed to reverse engineer the sensor part Sandberg <ollebull@gmail.com> has managed to reverse engineer the sensor part
......
Kernel driver abituguru3
========================
Supported chips:
* Abit uGuru revision 3 (Hardware Monitor part, reading only)
Prefix: 'abituguru3'
Addresses scanned: ISA 0x0E0
Datasheet: Not available, this driver is based on reverse engineering.
Note:
The uGuru is a microcontroller with onboard firmware which programs
it to behave as a hwmon IC. There are many different revisions of the
firmware and thus effectivly many different revisions of the uGuru.
Below is an incomplete list with which revisions are used for which
Motherboards:
uGuru 1.00 ~ 1.24 (AI7, KV8-MAX3, AN7)
uGuru 2.0.0.0 ~ 2.0.4.2 (KV8-PRO)
uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8)
uGuru 2.3.0.0 ~ 2.3.0.9 (AN8)
uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X,
AW9D-MAX)
The abituguru3 driver is only for revison 3.0.x.x motherboards,
this driver will not work on older motherboards. For older
motherboards use the abituguru (without the 3 !) driver.
Authors:
Hans de Goede <j.w.r.degoede@hhs.nl>,
(Initial reverse engineering done by Louis Kruger)
Module Parameters
-----------------
* force: bool Force detection. Note this parameter only causes the
detection to be skipped, and thus the insmod to
succeed. If the uGuru can't be read the actual hwmon
driver will not load and thus no hwmon device will get
registered.
* verbose: bool Should the driver be verbose?
0/off/false normal output
1/on/true + verbose error reporting (default)
Default: 1 (the driver is still in the testing phase)
Description
-----------
This driver supports the hardware monitoring features of the third revision of
the Abit uGuru chip, found on recent Abit uGuru featuring motherboards.
The 3rd revision of the uGuru chip in reality is a Winbond W83L951G.
Unfortunatly this doesn't help since the W83L951G is a generic microcontroller
with a custom Abit application running on it.
Despite Abit not releasing any information regarding the uGuru revision 3,
Louis Kruger has managed to reverse engineer the sensor part of the uGuru.
Without his work this driver would not have been possible.
Known Issues
------------
The voltage and frequency control parts of the Abit uGuru are not supported,
neither is writing any of the sensor settings and writing / reading the
fanspeed control registers (FanEQ)
If you encounter any problems please mail me <j.w.r.degoede@hhs.nl> and
include the output of: "dmesg | grep abituguru"
This diff is collapsed.
...@@ -5,11 +5,11 @@ Supported chips: ...@@ -5,11 +5,11 @@ Supported chips:
* Fintek F71805F/FG * Fintek F71805F/FG
Prefix: 'f71805f' Prefix: 'f71805f'
Addresses scanned: none, address read from Super I/O config space Addresses scanned: none, address read from Super I/O config space
Datasheet: Provided by Fintek on request Datasheet: Available from the Fintek website
* Fintek F71872F/FG * Fintek F71872F/FG
Prefix: 'f71872f' Prefix: 'f71872f'
Addresses scanned: none, address read from Super I/O config space Addresses scanned: none, address read from Super I/O config space
Datasheet: Provided by Fintek on request Datasheet: Available from the Fintek website
Author: Jean Delvare <khali@linux-fr.org> Author: Jean Delvare <khali@linux-fr.org>
...@@ -128,7 +128,9 @@ it. ...@@ -128,7 +128,9 @@ it.
When the PWM method is used, you can select the operating frequency, When the PWM method is used, you can select the operating frequency,
from 187.5 kHz (default) to 31 Hz. The best frequency depends on the from 187.5 kHz (default) to 31 Hz. The best frequency depends on the
fan model. As a rule of thumb, lower frequencies seem to give better fan model. As a rule of thumb, lower frequencies seem to give better
control, but may generate annoying high-pitch noise. Fintek recommends control, but may generate annoying high-pitch noise. So a frequency just
above the audible range, such as 25 kHz, may be a good choice; if this
doesn't give you good linear control, try reducing it. Fintek recommends
not going below 1 kHz, as the fan tachometers get confused by lower not going below 1 kHz, as the fan tachometers get confused by lower
frequencies as well. frequencies as well.
...@@ -136,16 +138,23 @@ When the DC method is used, Fintek recommends not going below 5 V, which ...@@ -136,16 +138,23 @@ When the DC method is used, Fintek recommends not going below 5 V, which
corresponds to a pwm value of 106 for the driver. The driver doesn't corresponds to a pwm value of 106 for the driver. The driver doesn't
enforce this limit though. enforce this limit though.
Three different fan control modes are supported: Three different fan control modes are supported; the mode number is written
to the pwm<n>_enable file.
* Manual mode * 1: Manual mode
You ask for a specific PWM duty cycle or DC voltage. You ask for a specific PWM duty cycle or DC voltage by writing to the
pwm<n> file.
* Fan speed mode * 2: Temperature mode
You ask for a specific fan speed. This mode assumes that pwm1 You define 3 temperature/fan speed trip points using the
corresponds to fan1, pwm2 to fan2 and pwm3 to fan3. pwm<n>_auto_point<m>_temp and _fan files. These define a staircase
relationship between temperature and fan speed with two additional points
interpolated between the values that you define. When the temperature
is below auto_point1_temp the fan is switched off.
* Temperature mode * 3: Fan speed mode
You define 3 temperature/fan speed trip points, and the fan speed is You ask for a specific fan speed by writing to the fan<n>_target file.
adjusted depending on the measured temperature, using interpolation.
This mode is not yet supported by the driver. Both of the automatic modes require that pwm1 corresponds to fan1, pwm2 to
fan2 and pwm3 to fan3. Temperature mode also requires that temp1 corresponds
to pwm1 and fan1, etc.
...@@ -12,11 +12,12 @@ Supported chips: ...@@ -12,11 +12,12 @@ Supported chips:
Addresses scanned: from Super I/O config space (8 I/O ports) Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: Publicly available at the ITE website Datasheet: Publicly available at the ITE website
http://www.ite.com.tw/ http://www.ite.com.tw/
* IT8716F * IT8716F/IT8726F
Prefix: 'it8716' Prefix: 'it8716'
Addresses scanned: from Super I/O config space (8 I/O ports) Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: Publicly available at the ITE website Datasheet: Publicly available at the ITE website
http://www.ite.com.tw/product_info/file/pc/IT8716F_V0.3.ZIP http://www.ite.com.tw/product_info/file/pc/IT8716F_V0.3.ZIP
http://www.ite.com.tw/product_info/file/pc/IT8726F_V0.3.pdf
* IT8718F * IT8718F
Prefix: 'it8718' Prefix: 'it8718'
Addresses scanned: from Super I/O config space (8 I/O ports) Addresses scanned: from Super I/O config space (8 I/O ports)
...@@ -68,7 +69,7 @@ Description ...@@ -68,7 +69,7 @@ Description
----------- -----------
This driver implements support for the IT8705F, IT8712F, IT8716F, This driver implements support for the IT8705F, IT8712F, IT8716F,
IT8718F and SiS950 chips. IT8718F, IT8726F and SiS950 chips.
These chips are 'Super I/O chips', supporting floppy disks, infrared ports, These chips are 'Super I/O chips', supporting floppy disks, infrared ports,
joysticks and other miscellaneous stuff. For hardware monitoring, they joysticks and other miscellaneous stuff. For hardware monitoring, they
...@@ -97,6 +98,10 @@ clock divider mess) but not compatible with the older chips and ...@@ -97,6 +98,10 @@ clock divider mess) but not compatible with the older chips and
revisions. For now, the driver only uses the 16-bit mode on the revisions. For now, the driver only uses the 16-bit mode on the
IT8716F and IT8718F. IT8716F and IT8718F.
The IT8726F is just bit enhanced IT8716F with additional hardware
for AMD power sequencing. Therefore the chip will appear as IT8716F
to userspace applications.
Temperatures are measured in degrees Celsius. An alarm is triggered once Temperatures are measured in degrees Celsius. An alarm is triggered once
when the Overtemperature Shutdown limit is crossed. when the Overtemperature Shutdown limit is crossed.
......
...@@ -48,6 +48,18 @@ Supported chips: ...@@ -48,6 +48,18 @@ Supported chips:
Addresses scanned: I2C 0x4c, 0x4d (unsupported 0x4e) Addresses scanned: I2C 0x4c, 0x4d (unsupported 0x4e)
Datasheet: Publicly available at the Maxim website Datasheet: Publicly available at the Maxim website
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578 http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578
* Maxim MAX6680
Prefix: 'max6680'
Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
0x4c, 0x4d and 0x4e
Datasheet: Publicly available at the Maxim website
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370
* Maxim MAX6681
Prefix: 'max6680'
Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
0x4c, 0x4d and 0x4e
Datasheet: Publicly available at the Maxim website
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370
Author: Jean Delvare <khali@linux-fr.org> Author: Jean Delvare <khali@linux-fr.org>
...@@ -59,11 +71,15 @@ Description ...@@ -59,11 +71,15 @@ Description
The LM90 is a digital temperature sensor. It senses its own temperature as The LM90 is a digital temperature sensor. It senses its own temperature as
well as the temperature of up to one external diode. It is compatible well as the temperature of up to one external diode. It is compatible
with many other devices such as the LM86, the LM89, the LM99, the ADM1032, with many other devices such as the LM86, the LM89, the LM99, the ADM1032,
the MAX6657, MAX6658 and the MAX6659 all of which are supported by this driver. the MAX6657, MAX6658, MAX6659, MAX6680 and the MAX6681 all of which are
Note that there is no easy way to differentiate between the last three supported by this driver.
variants. The extra address and features of the MAX6659 are not supported by
this driver. Additionally, the ADT7461 is supported if found in ADM1032 Note that there is no easy way to differentiate between the MAX6657,
compatibility mode. MAX6658 and MAX6659 variants. The extra address and features of the
MAX6659 are not supported by this driver. The MAX6680 and MAX6681 only
differ in their pinout, therefore they obviously can't (and don't need to)
be distinguished. Additionally, the ADT7461 is supported if found in
ADM1032 compatibility mode.
The specificity of this family of chipsets over the ADM1021/LM84 The specificity of this family of chipsets over the ADM1021/LM84
family is that it features critical limits with hysteresis, and an family is that it features critical limits with hysteresis, and an
...@@ -93,18 +109,22 @@ ADM1032: ...@@ -93,18 +109,22 @@ ADM1032:
* ALERT is triggered by open remote sensor. * ALERT is triggered by open remote sensor.
* SMBus PEC support for Write Byte and Receive Byte transactions. * SMBus PEC support for Write Byte and Receive Byte transactions.
ADT7461 ADT7461:
* Extended temperature range (breaks compatibility) * Extended temperature range (breaks compatibility)
* Lower resolution for remote temperature * Lower resolution for remote temperature
MAX6657 and MAX6658: MAX6657 and MAX6658:
* Remote sensor type selection * Remote sensor type selection
MAX6659 MAX6659:
* Selectable address * Selectable address
* Second critical temperature limit * Second critical temperature limit
* Remote sensor type selection * Remote sensor type selection
MAX6680 and MAX6681:
* Selectable address
* Remote sensor type selection
All temperature values are given in degrees Celsius. Resolution All temperature values are given in degrees Celsius. Resolution
is 1.0 degree for the local temperature, 0.125 degree for the remote is 1.0 degree for the local temperature, 0.125 degree for the remote
temperature. temperature.
...@@ -141,7 +161,7 @@ SMBus Read Byte, and PEC will work properly. ...@@ -141,7 +161,7 @@ SMBus Read Byte, and PEC will work properly.
Additionally, the ADM1032 doesn't support SMBus Send Byte with PEC. Additionally, the ADM1032 doesn't support SMBus Send Byte with PEC.
Instead, it will try to write the PEC value to the register (because the Instead, it will try to write the PEC value to the register (because the
SMBus Send Byte transaction with PEC is similar to a Write Byte transaction SMBus Send Byte transaction with PEC is similar to a Write Byte transaction
without PEC), which is not what we want. Thus, PEC is explicitely disabled without PEC), which is not what we want. Thus, PEC is explicitly disabled
on SMBus Send Byte transactions in the lm90 driver. on SMBus Send Byte transactions in the lm90 driver.
PEC on byte data transactions represents a significant increase in bandwidth PEC on byte data transactions represents a significant increase in bandwidth
......
This diff is collapsed.
...@@ -4,6 +4,7 @@ Kernel driver smsc47b397 ...@@ -4,6 +4,7 @@ Kernel driver smsc47b397
Supported chips: Supported chips:
* SMSC LPC47B397-NC * SMSC LPC47B397-NC
* SMSC SCH5307-NS * SMSC SCH5307-NS
* SMSC SCH5317
Prefix: 'smsc47b397' Prefix: 'smsc47b397'
Addresses scanned: none, address read from Super I/O config space Addresses scanned: none, address read from Super I/O config space
Datasheet: In this file Datasheet: In this file
...@@ -18,8 +19,8 @@ The following specification describes the SMSC LPC47B397-NC[1] sensor chip ...@@ -18,8 +19,8 @@ The following specification describes the SMSC LPC47B397-NC[1] sensor chip
provided by Craig Kelly (In-Store Broadcast Network) and edited/corrected provided by Craig Kelly (In-Store Broadcast Network) and edited/corrected
by Mark M. Hoffman <mhoffman@lightlink.com>. by Mark M. Hoffman <mhoffman@lightlink.com>.
[1] And SMSC SCH5307-NS, which has a different device ID but is otherwise [1] And SMSC SCH5307-NS and SCH5317, which have different device IDs but are
compatible. otherwise compatible.
* * * * * * * * * *
...@@ -131,7 +132,7 @@ OUT DX,AL ...@@ -131,7 +132,7 @@ OUT DX,AL
The registers of interest for identifying the SIO on the dc7100 are Device ID The registers of interest for identifying the SIO on the dc7100 are Device ID
(0x20) and Device Rev (0x21). (0x20) and Device Rev (0x21).
The Device ID will read 0x6F (for SCH5307-NS, 0x81) The Device ID will read 0x6F (0x81 for SCH5307-NS, and 0x85 for SCH5317)
The Device Rev currently reads 0x01 The Device Rev currently reads 0x01
Obtaining the HWM Base Address. Obtaining the HWM Base Address.
......
...@@ -172,11 +172,10 @@ pwm[1-*] Pulse width modulation fan control. ...@@ -172,11 +172,10 @@ pwm[1-*] Pulse width modulation fan control.
255 is max or 100%. 255 is max or 100%.
pwm[1-*]_enable pwm[1-*]_enable
Switch PWM on and off. Fan speed control method:
Not always present even if pwmN is. 0: no fan speed control (i.e. fan at full speed)
0: turn off 1: manual fan speed control enabled (using pwm[1-*])
1: turn on in manual mode 2+: automatic fan speed control enabled
2+: turn on in automatic mode
Check individual chip documentation files for automatic mode Check individual chip documentation files for automatic mode
details. details.
RW RW
...@@ -343,9 +342,9 @@ to notify open diodes, unconnected fans etc. where the hardware ...@@ -343,9 +342,9 @@ to notify open diodes, unconnected fans etc. where the hardware
supports it. When this boolean has value 1, the measurement for that supports it. When this boolean has value 1, the measurement for that
channel should not be trusted. channel should not be trusted.
in[0-*]_input_fault in[0-*]_fault
fan[1-*]_input_fault fan[1-*]_fault
temp[1-*]_input_fault temp[1-*]_fault
Input fault condition Input fault condition
0: no fault occured 0: no fault occured
1: fault condition 1: fault condition
......
...@@ -22,9 +22,9 @@ This driver implements support for the Winbond W83627EHF, W83627EHG, and ...@@ -22,9 +22,9 @@ This driver implements support for the Winbond W83627EHF, W83627EHG, and
W83627DHG super I/O chips. We will refer to them collectively as Winbond chips. W83627DHG super I/O chips. We will refer to them collectively as Winbond chips.
The chips implement three temperature sensors, five fan rotation The chips implement three temperature sensors, five fan rotation
speed sensors, ten analog voltage sensors (only nine for the 627DHG), alarms speed sensors, ten analog voltage sensors (only nine for the 627DHG), one
with beep warnings (control unimplemented), and some automatic fan regulation VID (6 pins), alarms with beep warnings (control unimplemented), and
strategies (plus manual fan control mode). some automatic fan regulation strategies (plus manual fan control mode).
Temperatures are measured in degrees Celsius and measurement resolution is 1 Temperatures are measured in degrees Celsius and measurement resolution is 1
degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when
......
...@@ -607,6 +607,12 @@ W: http://sourceforge.net/projects/acpi4asus ...@@ -607,6 +607,12 @@ W: http://sourceforge.net/projects/acpi4asus
W: http://xf.iksaif.net/acpi4asus W: http://xf.iksaif.net/acpi4asus
S: Maintained S: Maintained
ASUS ASB100 HARDWARE MONITOR DRIVER
P: Mark M. Hoffman
M: mhoffman@lightlink.com
L: lm-sensors@lm-sensors.org
S: Maintained
ASUS LAPTOP EXTRAS DRIVER ASUS LAPTOP EXTRAS DRIVER
P: Corentin Chary P: Corentin Chary
M: corentincj@iksaif.net M: corentincj@iksaif.net
...@@ -1273,6 +1279,12 @@ M: shannon.nelson@intel.com ...@@ -1273,6 +1279,12 @@ M: shannon.nelson@intel.com
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
DME1737 HARDWARE MONITOR DRIVER
P: Juerg Haefliger
M: juergh@gmail.com
L: lm-sensors@lm-sensors.org
S: Maintained
DOCBOOK FOR DOCUMENTATION DOCBOOK FOR DOCUMENTATION
P: Randy Dunlap P: Randy Dunlap
M: rdunlap@xenotime.net M: rdunlap@xenotime.net
...@@ -1623,11 +1635,11 @@ W: http://gigaset307x.sourceforge.net/ ...@@ -1623,11 +1635,11 @@ W: http://gigaset307x.sourceforge.net/
S: Maintained S: Maintained
HARDWARE MONITORING HARDWARE MONITORING
P: Jean Delvare P: Mark M. Hoffman
M: khali@linux-fr.org M: mhoffman@lightlink.com
L: lm-sensors@lm-sensors.org L: lm-sensors@lm-sensors.org
W: http://www.lm-sensors.org/ W: http://www.lm-sensors.org/
T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-hwmon/ T: git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git
S: Maintained S: Maintained
HARDWARE RANDOM NUMBER GENERATOR CORE HARDWARE RANDOM NUMBER GENERATOR CORE
...@@ -1763,6 +1775,12 @@ P: William Irwin ...@@ -1763,6 +1775,12 @@ P: William Irwin
M: wli@holomorphy.com M: wli@holomorphy.com
S: Maintained S: Maintained
I2C/SMBUS STUB DRIVER
P: Mark M. Hoffman
M: mhoffman@lightlink.com
L: lm-sensors@lm-sensors.org
S: Maintained
I2C SUBSYSTEM I2C SUBSYSTEM
P: Jean Delvare P: Jean Delvare
M: khali@linux-fr.org M: khali@linux-fr.org
...@@ -3292,6 +3310,12 @@ W: http://www.brownhat.org/sis900.html ...@@ -3292,6 +3310,12 @@ W: http://www.brownhat.org/sis900.html
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Maintained S: Maintained
SIS 96X I2C/SMBUS DRIVER
P: Mark M. Hoffman
M: mhoffman@lightlink.com
L: lm-sensors@lm-sensors.org
S: Maintained
SIS FRAMEBUFFER DRIVER SIS FRAMEBUFFER DRIVER
P: Thomas Winischhofer P: Thomas Winischhofer
M: thomas@winischhofer.net M: thomas@winischhofer.net
...@@ -3309,6 +3333,12 @@ P: Nicolas Pitre ...@@ -3309,6 +3333,12 @@ P: Nicolas Pitre
M: nico@cam.org M: nico@cam.org
S: Maintained S: Maintained
SMSC47B397 HARDWARE MONITOR DRIVER
P: Mark M. Hoffman
M: mhoffman@lightlink.com
L: lm-sensors@lm-sensors.org
S: Maintained
SOFTMAC LAYER (IEEE 802.11) SOFTMAC LAYER (IEEE 802.11)
P: Johannes Berg P: Johannes Berg
M: johannes@sipsolutions.net M: johannes@sipsolutions.net
......
...@@ -708,7 +708,6 @@ CONFIG_I2C_ALGOPCF=m ...@@ -708,7 +708,6 @@ CONFIG_I2C_ALGOPCF=m
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_ELEKTOR=m CONFIG_I2C_ELEKTOR=m
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
......
...@@ -536,7 +536,6 @@ CONFIG_I2C_ALGOBIT=y ...@@ -536,7 +536,6 @@ CONFIG_I2C_ALGOBIT=y
# I2C Hardware Bus support # I2C Hardware Bus support
# #
# CONFIG_I2C_ELEKTOR is not set # CONFIG_I2C_ELEKTOR is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
...@@ -748,7 +748,6 @@ CONFIG_I2C=m ...@@ -748,7 +748,6 @@ CONFIG_I2C=m
# CONFIG_I2C_ELEKTOR is not set # CONFIG_I2C_ELEKTOR is not set
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -698,7 +698,6 @@ CONFIG_I2C_ALGOBIT=y ...@@ -698,7 +698,6 @@ CONFIG_I2C_ALGOBIT=y
# I2C Hardware Bus support # I2C Hardware Bus support
# #
# CONFIG_I2C_ELEKTOR is not set # CONFIG_I2C_ELEKTOR is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
...@@ -735,7 +735,6 @@ CONFIG_I2C_CHARDEV=m ...@@ -735,7 +735,6 @@ CONFIG_I2C_CHARDEV=m
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=m CONFIG_I2C_AT91=m
CONFIG_I2C_ISA=m
# CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
......
...@@ -558,7 +558,6 @@ CONFIG_I2C_ALGOBIT=y ...@@ -558,7 +558,6 @@ CONFIG_I2C_ALGOBIT=y
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
......
...@@ -826,7 +826,6 @@ CONFIG_I2C_ALGOBIT=m ...@@ -826,7 +826,6 @@ CONFIG_I2C_ALGOBIT=m
# I2C Hardware Bus support # I2C Hardware Bus support
# #
# CONFIG_I2C_ELEKTOR is not set # CONFIG_I2C_ELEKTOR is not set
CONFIG_I2C_ISA=m
# CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -699,7 +699,6 @@ CONFIG_I2C_ALGOPCF=m ...@@ -699,7 +699,6 @@ CONFIG_I2C_ALGOPCF=m
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_ELEKTOR=m CONFIG_I2C_ELEKTOR=m
CONFIG_I2C_ISA=m
# CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -531,7 +531,6 @@ CONFIG_I2C_CHARDEV=m ...@@ -531,7 +531,6 @@ CONFIG_I2C_CHARDEV=m
# CONFIG_I2C_AMD8111 is not set # CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
......
...@@ -452,7 +452,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -452,7 +452,6 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_AMD8111 is not set # CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_ISA is not set
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -413,7 +413,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -413,7 +413,6 @@ CONFIG_I2C_CHARDEV=y
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
# CONFIG_I2C_ISA is not set
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
...@@ -518,7 +518,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -518,7 +518,6 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_ISA is not set
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -489,7 +489,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -489,7 +489,6 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_ISA is not set
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -710,7 +710,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -710,7 +710,6 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_MPC is not set # CONFIG_I2C_MPC is not set
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
......
...@@ -661,7 +661,6 @@ CONFIG_I2C_ALGOBIT=m ...@@ -661,7 +661,6 @@ CONFIG_I2C_ALGOBIT=m
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_MPC is not set # CONFIG_I2C_MPC is not set
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT is not set
......
...@@ -461,7 +461,6 @@ CONFIG_I2C_CHARDEV=y ...@@ -461,7 +461,6 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_I801 is not set # CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set # CONFIG_I2C_I810 is not set
# CONFIG_I2C_IBM_IIC is not set # CONFIG_I2C_IBM_IIC is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PIIX4 is not set
......
...@@ -29,17 +29,34 @@ config HWMON_VID ...@@ -29,17 +29,34 @@ config HWMON_VID
default n default n
config SENSORS_ABITUGURU config SENSORS_ABITUGURU
tristate "Abit uGuru" tristate "Abit uGuru (rev 1 & 2)"
depends on EXPERIMENTAL depends on EXPERIMENTAL
help help
If you say yes here you get support for the Abit uGuru chips If you say yes here you get support for the sensor part of the first
sensor part. The voltage and frequency control parts of the Abit and second revision of the Abit uGuru chip. The voltage and frequency
uGuru are not supported. The Abit uGuru chip can be found on Abit control parts of the Abit uGuru are not supported. The Abit uGuru
uGuru featuring motherboards (most modern Abit motherboards). chip can be found on Abit uGuru featuring motherboards (most modern
Abit motherboards from before end 2005). For more info and a list
of which motherboards have which revision see
Documentation/hwmon/abituguru
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called abituguru. will be called abituguru.
config SENSORS_ABITUGURU3
tristate "Abit uGuru (rev 3)"
depends on HWMON && EXPERIMENTAL
help
If you say yes here you get support for the sensor part of the
third revision of the Abit uGuru chip. Only reading the sensors
and their settings is supported. The third revision of the Abit
uGuru chip can be found on recent Abit motherboards (since end
2005). For more info and a list of which motherboards have which
revision see Documentation/hwmon/abituguru3
This driver can also be built as a module. If so, the module
will be called abituguru3.
config SENSORS_AD7418 config SENSORS_AD7418
tristate "Analog Devices AD7416, AD7417 and AD7418" tristate "Analog Devices AD7416, AD7417 and AD7418"
depends on I2C && EXPERIMENTAL depends on I2C && EXPERIMENTAL
...@@ -250,12 +267,10 @@ config SENSORS_CORETEMP ...@@ -250,12 +267,10 @@ config SENSORS_CORETEMP
config SENSORS_IT87 config SENSORS_IT87
tristate "ITE IT87xx and compatibles" tristate "ITE IT87xx and compatibles"
depends on I2C
select I2C_ISA
select HWMON_VID select HWMON_VID
help help
If you say yes here you get support for ITE IT8705F, IT8712F, If you say yes here you get support for ITE IT8705F, IT8712F,
IT8716F and IT8718F sensor chips, and the SiS960 clone. IT8716F, IT8718F and IT8726F sensor chips, and the SiS960 clone.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called it87. will be called it87.
...@@ -365,8 +380,8 @@ config SENSORS_LM90 ...@@ -365,8 +380,8 @@ config SENSORS_LM90
depends on I2C depends on I2C
help help
If you say yes here you get support for National Semiconductor LM90, If you say yes here you get support for National Semiconductor LM90,
LM86, LM89 and LM99, Analog Devices ADM1032 and Maxim MAX6657 and LM86, LM89 and LM99, Analog Devices ADM1032 and Maxim MAX6657,
MAX6658 sensor chips. MAX6658, MAX6659, MAX6680 and MAX6681 sensor chips.
The Analog Devices ADT7461 sensor chip is also supported, but only The Analog Devices ADT7461 sensor chip is also supported, but only
if found in ADM1032 compatibility mode. if found in ADM1032 compatibility mode.
...@@ -384,6 +399,17 @@ config SENSORS_LM92 ...@@ -384,6 +399,17 @@ config SENSORS_LM92
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called lm92. will be called lm92.
config SENSORS_LM93
tristate "National Semiconductor LM93 and compatibles"
depends on HWMON && I2C
select HWMON_VID
help
If you say yes here you get support for National Semiconductor LM93
sensor chips.
This driver can also be built as a module. If so, the module
will be called lm93.
config SENSORS_MAX1619 config SENSORS_MAX1619
tristate "Maxim MAX1619 sensor chip" tristate "Maxim MAX1619 sensor chip"
depends on I2C depends on I2C
...@@ -405,8 +431,6 @@ config SENSORS_MAX6650 ...@@ -405,8 +431,6 @@ config SENSORS_MAX6650
config SENSORS_PC87360 config SENSORS_PC87360
tristate "National Semiconductor PC87360 family" tristate "National Semiconductor PC87360 family"
depends on I2C && EXPERIMENTAL
select I2C_ISA
select HWMON_VID select HWMON_VID
help help
If you say yes here you get access to the hardware monitoring If you say yes here you get access to the hardware monitoring
...@@ -433,8 +457,7 @@ config SENSORS_PC87427 ...@@ -433,8 +457,7 @@ config SENSORS_PC87427
config SENSORS_SIS5595 config SENSORS_SIS5595
tristate "Silicon Integrated Systems Corp. SiS5595" tristate "Silicon Integrated Systems Corp. SiS5595"
depends on I2C && PCI && EXPERIMENTAL depends on PCI
select I2C_ISA
help help
If you say yes here you get support for the integrated sensors in If you say yes here you get support for the integrated sensors in
SiS5595 South Bridges. SiS5595 South Bridges.
...@@ -442,6 +465,18 @@ config SENSORS_SIS5595 ...@@ -442,6 +465,18 @@ config SENSORS_SIS5595
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called sis5595. will be called sis5595.
config SENSORS_DME1737
tristate "SMSC DME1737 and compatibles"
depends on I2C && EXPERIMENTAL
select HWMON_VID
help
If you say yes here you get support for the hardware monitoring
and fan control features of the SMSC DME1737 (and compatibles
like the Asus A8000) Super-I/O chip.
This driver can also be built as a module. If so, the module
will be called dme1737.
config SENSORS_SMSC47M1 config SENSORS_SMSC47M1
tristate "SMSC LPC47M10x and compatibles" tristate "SMSC LPC47M10x and compatibles"
help help
...@@ -487,8 +522,7 @@ config SENSORS_SMSC47B397 ...@@ -487,8 +522,7 @@ config SENSORS_SMSC47B397
config SENSORS_VIA686A config SENSORS_VIA686A
tristate "VIA686A" tristate "VIA686A"
depends on I2C && PCI depends on PCI
select I2C_ISA
help help
If you say yes here you get support for the integrated sensors in If you say yes here you get support for the integrated sensors in
Via 686A/B South Bridges. Via 686A/B South Bridges.
...@@ -509,9 +543,8 @@ config SENSORS_VT1211 ...@@ -509,9 +543,8 @@ config SENSORS_VT1211
config SENSORS_VT8231 config SENSORS_VT8231
tristate "VIA VT8231" tristate "VIA VT8231"
depends on I2C && PCI && EXPERIMENTAL depends on PCI
select HWMON_VID select HWMON_VID
select I2C_ISA
help help
If you say yes here then you get support for the integrated sensors If you say yes here then you get support for the integrated sensors
in the VIA VT8231 device. in the VIA VT8231 device.
...@@ -584,17 +617,16 @@ config SENSORS_W83627HF ...@@ -584,17 +617,16 @@ config SENSORS_W83627HF
will be called w83627hf. will be called w83627hf.
config SENSORS_W83627EHF config SENSORS_W83627EHF
tristate "Winbond W83627EHF" tristate "Winbond W83627EHF/DHG"
depends on I2C && EXPERIMENTAL select HWMON_VID
select I2C_ISA
help help
If you say yes here you get preliminary support for the hardware If you say yes here you get support for the hardware
monitoring functionality of the Winbond W83627EHF Super-I/O chip. monitoring functionality of the Winbond W83627EHF Super-I/O chip.
Only fan and temperature inputs are supported at the moment, while
the chip does much more than that.
This driver also supports the W83627EHG, which is the lead-free This driver also supports the W83627EHG, which is the lead-free
version of the W83627EHF. version of the W83627EHF, and the W83627DHG, which is a similar
chip suited for specific Intel processors that use PECI such as
the Core 2 Duo.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called w83627ehf. will be called w83627ehf.
......
...@@ -14,6 +14,7 @@ obj-$(CONFIG_SENSORS_W83781D) += w83781d.o ...@@ -14,6 +14,7 @@ obj-$(CONFIG_SENSORS_W83781D) += w83781d.o
obj-$(CONFIG_SENSORS_W83791D) += w83791d.o obj-$(CONFIG_SENSORS_W83791D) += w83791d.o
obj-$(CONFIG_SENSORS_ABITUGURU) += abituguru.o obj-$(CONFIG_SENSORS_ABITUGURU) += abituguru.o
obj-$(CONFIG_SENSORS_ABITUGURU3)+= abituguru3.o
obj-$(CONFIG_SENSORS_AD7418) += ad7418.o obj-$(CONFIG_SENSORS_AD7418) += ad7418.o
obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o
obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o
...@@ -25,6 +26,7 @@ obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o ...@@ -25,6 +26,7 @@ obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o
obj-$(CONFIG_SENSORS_AMS) += ams/ obj-$(CONFIG_SENSORS_AMS) += ams/
obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o
obj-$(CONFIG_SENSORS_DME1737) += dme1737.o
obj-$(CONFIG_SENSORS_DS1621) += ds1621.o obj-$(CONFIG_SENSORS_DS1621) += ds1621.o
obj-$(CONFIG_SENSORS_F71805F) += f71805f.o obj-$(CONFIG_SENSORS_F71805F) += f71805f.o
obj-$(CONFIG_SENSORS_FSCHER) += fscher.o obj-$(CONFIG_SENSORS_FSCHER) += fscher.o
...@@ -45,6 +47,7 @@ obj-$(CONFIG_SENSORS_LM85) += lm85.o ...@@ -45,6 +47,7 @@ obj-$(CONFIG_SENSORS_LM85) += lm85.o
obj-$(CONFIG_SENSORS_LM87) += lm87.o obj-$(CONFIG_SENSORS_LM87) += lm87.o
obj-$(CONFIG_SENSORS_LM90) += lm90.o obj-$(CONFIG_SENSORS_LM90) += lm90.o
obj-$(CONFIG_SENSORS_LM92) += lm92.o obj-$(CONFIG_SENSORS_LM92) += lm92.o
obj-$(CONFIG_SENSORS_LM93) += lm93.o
obj-$(CONFIG_SENSORS_MAX1619) += max1619.o obj-$(CONFIG_SENSORS_MAX1619) += max1619.o
obj-$(CONFIG_SENSORS_MAX6650) += max6650.o obj-$(CONFIG_SENSORS_MAX6650) += max6650.o
obj-$(CONFIG_SENSORS_PC87360) += pc87360.o obj-$(CONFIG_SENSORS_PC87360) += pc87360.o
......
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* /*
This driver supports the sensor part of the custom Abit uGuru chip found This driver supports the sensor part of the first and second revision of
on Abit uGuru motherboards. Note: because of lack of specs the CPU / RAM / the custom Abit uGuru chip found on Abit uGuru motherboards. Note: because
etc voltage & frequency control is not supported! of lack of specs the CPU/RAM voltage & frequency control is not supported!
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
#include <linux/dmi.h>
#include <asm/io.h> #include <asm/io.h>
/* Banks */ /* Banks */
...@@ -418,7 +419,7 @@ static int __devinit ...@@ -418,7 +419,7 @@ static int __devinit
abituguru_detect_bank1_sensor_type(struct abituguru_data *data, abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
u8 sensor_addr) u8 sensor_addr)
{ {
u8 val, buf[3]; u8 val, test_flag, buf[3];
int i, ret = -ENODEV; /* error is the most common used retval :| */ int i, ret = -ENODEV; /* error is the most common used retval :| */
/* If overriden by the user return the user selected type */ /* If overriden by the user return the user selected type */
...@@ -436,7 +437,7 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data, ...@@ -436,7 +437,7 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
return -ENODEV; return -ENODEV;
/* Test val is sane / usable for sensor type detection. */ /* Test val is sane / usable for sensor type detection. */
if ((val < 10u) || (val > 240u)) { if ((val < 10u) || (val > 250u)) {
printk(KERN_WARNING ABIT_UGURU_NAME printk(KERN_WARNING ABIT_UGURU_NAME
": bank1-sensor: %d reading (%d) too close to limits, " ": bank1-sensor: %d reading (%d) too close to limits, "
"unable to determine sensor type, skipping sensor\n", "unable to determine sensor type, skipping sensor\n",
...@@ -449,10 +450,20 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data, ...@@ -449,10 +450,20 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr); ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
/* Volt sensor test, enable volt low alarm, set min value ridicously /* Volt sensor test, enable volt low alarm, set min value ridicously
high. If its a volt sensor this should always give us an alarm. */ high, or vica versa if the reading is very high. If its a volt
buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE; sensor this should always give us an alarm. */
buf[1] = 245; if (val <= 240u) {
buf[2] = 250; buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
buf[1] = 245;
buf[2] = 250;
test_flag = ABIT_UGURU_VOLT_LOW_ALARM_FLAG;
} else {
buf[0] = ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE;
buf[1] = 5;
buf[2] = 10;
test_flag = ABIT_UGURU_VOLT_HIGH_ALARM_FLAG;
}
if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr, if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
buf, 3) != 3) buf, 3) != 3)
goto abituguru_detect_bank1_sensor_type_exit; goto abituguru_detect_bank1_sensor_type_exit;
...@@ -469,13 +480,13 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data, ...@@ -469,13 +480,13 @@ abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
sensor_addr, buf, 3, sensor_addr, buf, 3,
ABIT_UGURU_MAX_RETRIES) != 3) ABIT_UGURU_MAX_RETRIES) != 3)
goto abituguru_detect_bank1_sensor_type_exit; goto abituguru_detect_bank1_sensor_type_exit;
if (buf[0] & ABIT_UGURU_VOLT_LOW_ALARM_FLAG) { if (buf[0] & test_flag) {
ABIT_UGURU_DEBUG(2, " found volt sensor\n"); ABIT_UGURU_DEBUG(2, " found volt sensor\n");
ret = ABIT_UGURU_IN_SENSOR; ret = ABIT_UGURU_IN_SENSOR;
goto abituguru_detect_bank1_sensor_type_exit; goto abituguru_detect_bank1_sensor_type_exit;
} else } else
ABIT_UGURU_DEBUG(2, " alarm raised during volt " ABIT_UGURU_DEBUG(2, " alarm raised during volt "
"sensor test, but volt low flag not set\n"); "sensor test, but volt range flag not set\n");
} else } else
ABIT_UGURU_DEBUG(2, " alarm not raised during volt sensor " ABIT_UGURU_DEBUG(2, " alarm not raised during volt sensor "
"test\n"); "test\n");
...@@ -1287,6 +1298,7 @@ abituguru_probe_error: ...@@ -1287,6 +1298,7 @@ abituguru_probe_error:
for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++) for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
device_remove_file(&pdev->dev, device_remove_file(&pdev->dev,
&abituguru_sysfs_attr[i].dev_attr); &abituguru_sysfs_attr[i].dev_attr);
platform_set_drvdata(pdev, NULL);
kfree(data); kfree(data);
return res; return res;
} }
...@@ -1296,13 +1308,13 @@ static int __devexit abituguru_remove(struct platform_device *pdev) ...@@ -1296,13 +1308,13 @@ static int __devexit abituguru_remove(struct platform_device *pdev)
int i; int i;
struct abituguru_data *data = platform_get_drvdata(pdev); struct abituguru_data *data = platform_get_drvdata(pdev);
platform_set_drvdata(pdev, NULL);
hwmon_device_unregister(data->class_dev); hwmon_device_unregister(data->class_dev);
for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++) for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++)
device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr); device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++) for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
device_remove_file(&pdev->dev, device_remove_file(&pdev->dev,
&abituguru_sysfs_attr[i].dev_attr); &abituguru_sysfs_attr[i].dev_attr);
platform_set_drvdata(pdev, NULL);
kfree(data); kfree(data);
return 0; return 0;
...@@ -1436,6 +1448,15 @@ static int __init abituguru_init(void) ...@@ -1436,6 +1448,15 @@ static int __init abituguru_init(void)
int address, err; int address, err;
struct resource res = { .flags = IORESOURCE_IO }; struct resource res = { .flags = IORESOURCE_IO };
#ifdef CONFIG_DMI
char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
/* safety check, refuse to load on non Abit motherboards */
if (!force && (!board_vendor ||
strcmp(board_vendor, "http://www.abit.com.tw/")))
return -ENODEV;
#endif
address = abituguru_detect(); address = abituguru_detect();
if (address < 0) if (address < 0)
return address; return address;
......
This diff is collapsed.
...@@ -318,7 +318,7 @@ exit: ...@@ -318,7 +318,7 @@ exit:
} }
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
void coretemp_device_remove(unsigned int cpu) static void coretemp_device_remove(unsigned int cpu)
{ {
struct pdev_entry *p, *n; struct pdev_entry *p, *n;
mutex_lock(&pdev_list_mutex); mutex_lock(&pdev_list_mutex);
......
This diff is collapsed.
This diff is collapsed.
...@@ -127,6 +127,13 @@ superio_exit(int base) ...@@ -127,6 +127,13 @@ superio_exit(int base)
#define F71805F_REG_TEMP_HIGH(nr) (0x54 + 2 * (nr)) #define F71805F_REG_TEMP_HIGH(nr) (0x54 + 2 * (nr))
#define F71805F_REG_TEMP_HYST(nr) (0x55 + 2 * (nr)) #define F71805F_REG_TEMP_HYST(nr) (0x55 + 2 * (nr))
#define F71805F_REG_TEMP_MODE 0x01 #define F71805F_REG_TEMP_MODE 0x01
/* pwm/fan pwmnr from 0 to 2, auto point apnr from 0 to 2 */
/* map Fintek numbers to our numbers as follows: 9->0, 5->1, 1->2 */
#define F71805F_REG_PWM_AUTO_POINT_TEMP(pwmnr, apnr) \
(0xA0 + 0x10 * (pwmnr) + (2 - (apnr)))
#define F71805F_REG_PWM_AUTO_POINT_FAN(pwmnr, apnr) \
(0xA4 + 0x10 * (pwmnr) + \
2 * (2 - (apnr)))
#define F71805F_REG_START 0x00 #define F71805F_REG_START 0x00
/* status nr from 0 to 2 */ /* status nr from 0 to 2 */
...@@ -144,6 +151,11 @@ superio_exit(int base) ...@@ -144,6 +151,11 @@ superio_exit(int base)
* Data structures and manipulation thereof * Data structures and manipulation thereof
*/ */
struct f71805f_auto_point {
u8 temp[3];
u16 fan[3];
};
struct f71805f_data { struct f71805f_data {
unsigned short addr; unsigned short addr;
const char *name; const char *name;
...@@ -170,6 +182,7 @@ struct f71805f_data { ...@@ -170,6 +182,7 @@ struct f71805f_data {
u8 temp_hyst[3]; u8 temp_hyst[3];
u8 temp_mode; u8 temp_mode;
unsigned long alarms; unsigned long alarms;
struct f71805f_auto_point auto_points[3];
}; };
struct f71805f_sio_data { struct f71805f_sio_data {
...@@ -312,7 +325,7 @@ static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val) ...@@ -312,7 +325,7 @@ static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val)
static struct f71805f_data *f71805f_update_device(struct device *dev) static struct f71805f_data *f71805f_update_device(struct device *dev)
{ {
struct f71805f_data *data = dev_get_drvdata(dev); struct f71805f_data *data = dev_get_drvdata(dev);
int nr; int nr, apnr;
mutex_lock(&data->update_lock); mutex_lock(&data->update_lock);
...@@ -342,6 +355,18 @@ static struct f71805f_data *f71805f_update_device(struct device *dev) ...@@ -342,6 +355,18 @@ static struct f71805f_data *f71805f_update_device(struct device *dev)
F71805F_REG_TEMP_HYST(nr)); F71805F_REG_TEMP_HYST(nr));
} }
data->temp_mode = f71805f_read8(data, F71805F_REG_TEMP_MODE); data->temp_mode = f71805f_read8(data, F71805F_REG_TEMP_MODE);
for (nr = 0; nr < 3; nr++) {
for (apnr = 0; apnr < 3; apnr++) {
data->auto_points[nr].temp[apnr] =
f71805f_read8(data,
F71805F_REG_PWM_AUTO_POINT_TEMP(nr,
apnr));
data->auto_points[nr].fan[apnr] =
f71805f_read16(data,
F71805F_REG_PWM_AUTO_POINT_FAN(nr,
apnr));
}
}
data->last_limits = jiffies; data->last_limits = jiffies;
} }
...@@ -705,6 +730,70 @@ static ssize_t set_pwm_freq(struct device *dev, struct device_attribute ...@@ -705,6 +730,70 @@ static ssize_t set_pwm_freq(struct device *dev, struct device_attribute
return count; return count;
} }
static ssize_t show_pwm_auto_point_temp(struct device *dev,
struct device_attribute *devattr,
char* buf)
{
struct f71805f_data *data = dev_get_drvdata(dev);
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int pwmnr = attr->nr;
int apnr = attr->index;
return sprintf(buf, "%ld\n",
temp_from_reg(data->auto_points[pwmnr].temp[apnr]));
}
static ssize_t set_pwm_auto_point_temp(struct device *dev,
struct device_attribute *devattr,
const char* buf, size_t count)
{
struct f71805f_data *data = dev_get_drvdata(dev);
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int pwmnr = attr->nr;
int apnr = attr->index;
unsigned long val = simple_strtol(buf, NULL, 10);
mutex_lock(&data->update_lock);
data->auto_points[pwmnr].temp[apnr] = temp_to_reg(val);
f71805f_write8(data, F71805F_REG_PWM_AUTO_POINT_TEMP(pwmnr, apnr),
data->auto_points[pwmnr].temp[apnr]);
mutex_unlock(&data->update_lock);
return count;
}
static ssize_t show_pwm_auto_point_fan(struct device *dev,
struct device_attribute *devattr,
char* buf)
{
struct f71805f_data *data = dev_get_drvdata(dev);
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int pwmnr = attr->nr;
int apnr = attr->index;
return sprintf(buf, "%ld\n",
fan_from_reg(data->auto_points[pwmnr].fan[apnr]));
}
static ssize_t set_pwm_auto_point_fan(struct device *dev,
struct device_attribute *devattr,
const char* buf, size_t count)
{
struct f71805f_data *data = dev_get_drvdata(dev);
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
int pwmnr = attr->nr;
int apnr = attr->index;
unsigned long val = simple_strtoul(buf, NULL, 10);
mutex_lock(&data->update_lock);
data->auto_points[pwmnr].fan[apnr] = fan_to_reg(val);
f71805f_write16(data, F71805F_REG_PWM_AUTO_POINT_FAN(pwmnr, apnr),
data->auto_points[pwmnr].fan[apnr]);
mutex_unlock(&data->update_lock);
return count;
}
static ssize_t show_temp(struct device *dev, struct device_attribute *devattr, static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
char *buf) char *buf)
{ {
...@@ -932,6 +1021,63 @@ static SENSOR_DEVICE_ATTR(pwm3_freq, S_IRUGO | S_IWUSR, ...@@ -932,6 +1021,63 @@ static SENSOR_DEVICE_ATTR(pwm3_freq, S_IRUGO | S_IWUSR,
show_pwm_freq, set_pwm_freq, 2); show_pwm_freq, set_pwm_freq, 2);
static SENSOR_DEVICE_ATTR(pwm3_mode, S_IRUGO, show_pwm_mode, NULL, 2); static SENSOR_DEVICE_ATTR(pwm3_mode, S_IRUGO, show_pwm_mode, NULL, 2);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
0, 0);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
0, 0);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
0, 1);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
0, 1);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point3_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
0, 2);
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point3_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
0, 2);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
1, 0);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
1, 0);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
1, 1);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
1, 1);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point3_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
1, 2);
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point3_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
1, 2);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
2, 0);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
2, 0);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
2, 1);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
2, 1);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point3_temp, S_IRUGO | S_IWUSR,
show_pwm_auto_point_temp, set_pwm_auto_point_temp,
2, 2);
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point3_fan, S_IRUGO | S_IWUSR,
show_pwm_auto_point_fan, set_pwm_auto_point_fan,
2, 2);
static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
...@@ -1014,6 +1160,25 @@ static struct attribute *f71805f_attributes[] = { ...@@ -1014,6 +1160,25 @@ static struct attribute *f71805f_attributes[] = {
&sensor_dev_attr_temp3_max_hyst.dev_attr.attr, &sensor_dev_attr_temp3_max_hyst.dev_attr.attr,
&sensor_dev_attr_temp3_type.dev_attr.attr, &sensor_dev_attr_temp3_type.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point1_fan.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point2_fan.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,
&sensor_dev_attr_pwm1_auto_point3_fan.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point1_fan.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point2_fan.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
&sensor_dev_attr_pwm2_auto_point3_fan.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point1_fan.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point2_fan.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr,
&sensor_dev_attr_pwm3_auto_point3_fan.dev_attr.attr,
&sensor_dev_attr_in0_alarm.dev_attr.attr, &sensor_dev_attr_in0_alarm.dev_attr.attr,
&sensor_dev_attr_in1_alarm.dev_attr.attr, &sensor_dev_attr_in1_alarm.dev_attr.attr,
&sensor_dev_attr_in2_alarm.dev_attr.attr, &sensor_dev_attr_in2_alarm.dev_attr.attr,
...@@ -1242,12 +1407,12 @@ static int __devexit f71805f_remove(struct platform_device *pdev) ...@@ -1242,12 +1407,12 @@ static int __devexit f71805f_remove(struct platform_device *pdev)
struct resource *res; struct resource *res;
int i; int i;
platform_set_drvdata(pdev, NULL);
hwmon_device_unregister(data->class_dev); hwmon_device_unregister(data->class_dev);
sysfs_remove_group(&pdev->dev.kobj, &f71805f_group); sysfs_remove_group(&pdev->dev.kobj, &f71805f_group);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]); sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]);
sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq);
platform_set_drvdata(pdev, NULL);
kfree(data); kfree(data);
res = platform_get_resource(pdev, IORESOURCE_IO, 0); res = platform_get_resource(pdev, IORESOURCE_IO, 0);
...@@ -1290,15 +1455,12 @@ static int __init f71805f_device_add(unsigned short address, ...@@ -1290,15 +1455,12 @@ static int __init f71805f_device_add(unsigned short address,
goto exit_device_put; goto exit_device_put;
} }
pdev->dev.platform_data = kmalloc(sizeof(struct f71805f_sio_data), err = platform_device_add_data(pdev, sio_data,
GFP_KERNEL); sizeof(struct f71805f_sio_data));
if (!pdev->dev.platform_data) { if (err) {
err = -ENOMEM;
printk(KERN_ERR DRVNAME ": Platform data allocation failed\n"); printk(KERN_ERR DRVNAME ": Platform data allocation failed\n");
goto exit_device_put; goto exit_device_put;
} }
memcpy(pdev->dev.platform_data, sio_data,
sizeof(struct f71805f_sio_data));
err = platform_device_add(pdev); err = platform_device_add(pdev);
if (err) { if (err) {
......
This diff is collapsed.
...@@ -364,7 +364,7 @@ static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst, ...@@ -364,7 +364,7 @@ static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst,
/* Individual alarm files */ /* Individual alarm files */
static SENSOR_DEVICE_ATTR(fan1_min_alarm, S_IRUGO, show_alarm, NULL, 0); static SENSOR_DEVICE_ATTR(fan1_min_alarm, S_IRUGO, show_alarm, NULL, 0);
static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1); static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
static SENSOR_DEVICE_ATTR(temp2_input_fault, S_IRUGO, show_alarm, NULL, 2); static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3); static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4); static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
...@@ -383,7 +383,7 @@ static struct attribute *lm63_attributes[] = { ...@@ -383,7 +383,7 @@ static struct attribute *lm63_attributes[] = {
&dev_attr_temp2_crit_hyst.attr, &dev_attr_temp2_crit_hyst.attr,
&sensor_dev_attr_temp2_crit_alarm.dev_attr.attr, &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
&sensor_dev_attr_temp2_input_fault.dev_attr.attr, &sensor_dev_attr_temp2_fault.dev_attr.attr,
&sensor_dev_attr_temp2_min_alarm.dev_attr.attr, &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
&sensor_dev_attr_temp2_max_alarm.dev_attr.attr, &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
&sensor_dev_attr_temp1_max_alarm.dev_attr.attr, &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment