#
# Hardware monitoring chip drivers configuration
#

menuconfig HWMON
	tristate "Hardware Monitoring support"
	depends on HAS_IOMEM
	default y
	help
	  Hardware monitoring devices let you monitor the hardware health
	  of a system. Most modern motherboards include such a device. It
	  can include temperature sensors, voltage sensors, fan speed
	  sensors and various additional features such as the ability to
	  control the speed of the fans.  If you want this support you
	  should say Y here and also to the specific driver(s) for your
	  sensors chip(s) below.

	  To find out which specific driver(s) you need, use the
	  sensors-detect script from the lm_sensors package.  Read
	  <file:Documentation/hwmon/userspace-tools> for details.

	  This support can also be built as a module.  If so, the module
	  will be called hwmon.

if HWMON

config HWMON_VID
	tristate
	default n

config SENSORS_ABITUGURU
	tristate "Abit uGuru (rev 1 & 2)"
	depends on X86 && EXPERIMENTAL
	help
	  If you say yes here you get support for the sensor part of the first
	  and second revision of the Abit uGuru chip. The voltage and frequency
	  control parts of the Abit uGuru are not supported. The Abit uGuru
	  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
	  will be called abituguru.

config SENSORS_ABITUGURU3
	tristate "Abit uGuru (rev 3)"
	depends on X86 && 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
	tristate "Analog Devices AD7416, AD7417 and AD7418"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  AD7416, AD7417 and AD7418 temperature monitoring chips.

	  This driver can also be built as a module. If so, the module
	  will be called ad7418.

config SENSORS_ADM1021
	tristate "Analog Devices ADM1021 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for Analog Devices ADM1021
	  and ADM1023 sensor chips and clones: Maxim MAX1617 and MAX1617A,
	  Genesys Logic GL523SM, National Semiconductor LM84, TI THMC10,
	  and the XEON processor built-in sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called adm1021.

config SENSORS_ADM1025
	tristate "Analog Devices ADM1025 and compatibles"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for Analog Devices ADM1025
	  and Philips NE1619 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called adm1025.

config SENSORS_ADM1026
	tristate "Analog Devices ADM1026 and compatibles"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for Analog Devices ADM1026
	  sensor chip.

	  This driver can also be built as a module.  If so, the module
	  will be called adm1026.

config SENSORS_ADM1029
	tristate "Analog Devices ADM1029"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Analog Devices ADM1029
	  sensor chip.
	  Very rare chip, please let us know you use it.

	  This driver can also be built as a module.  If so, the module
	  will be called adm1029.

config SENSORS_ADM1031
	tristate "Analog Devices ADM1031 and compatibles"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Analog Devices ADM1031
	  and ADM1030 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called adm1031.

config SENSORS_ADM9240
	tristate "Analog Devices ADM9240 and compatibles"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for Analog Devices ADM9240,
	  Dallas DS1780, National Semiconductor LM81 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called adm9240.

config SENSORS_ADT7470
	tristate "Analog Devices ADT7470"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  ADT7470 temperature monitoring chips.

	  This driver can also be built as a module. If so, the module
	  will be called adt7470.

config SENSORS_K8TEMP
	tristate "AMD Athlon64/FX or Opteron temperature sensor"
	depends on X86 && PCI && EXPERIMENTAL
	help
	  If you say yes here you get support for the temperature
	  sensor(s) inside your CPU. Supported is whole AMD K8
	  microarchitecture. Please note that you will need at least
	  lm-sensors 2.10.1 for proper userspace support.

	  This driver can also be built as a module.  If so, the module
	  will be called k8temp.

config SENSORS_AMS
	tristate "Apple Motion Sensor driver"
	depends on PPC_PMAC && !PPC64 && INPUT && ((ADB_PMU && I2C = y) || (ADB_PMU && !I2C) || I2C) && EXPERIMENTAL
	select INPUT_POLLDEV
	help
	  Support for the motion sensor included in PowerBooks. Includes
	  implementations for PMU and I2C.

	  This driver can also be built as a module. If so, the module
	  will be called ams.

config SENSORS_AMS_PMU
	bool "PMU variant"
	depends on SENSORS_AMS && ADB_PMU
	default y
	help
	  PMU variant of motion sensor, found in late 2005 PowerBooks.

config SENSORS_AMS_I2C
	bool "I2C variant"
	depends on SENSORS_AMS && I2C
	default y
	help
	  I2C variant of motion sensor, found in early 2005 PowerBooks and
	  iBooks.

config SENSORS_ASB100
	tristate "Asus ASB100 Bach"
	depends on X86 && I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the ASB100 Bach sensor
	  chip found on some Asus mainboards.

	  This driver can also be built as a module.  If so, the module
	  will be called asb100.

config SENSORS_ATXP1
	tristate "Attansic ATXP1 VID controller"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the Attansic ATXP1 VID
	  controller.

	  If your board have such a chip, you are able to control your CPU
	  core and other voltages.

	  This driver can also be built as a module.  If so, the module
	  will be called atxp1.

config SENSORS_DS1621
	tristate "Dallas Semiconductor DS1621 and DS1625"
	depends on I2C
	help
	  If you say yes here you get support for Dallas Semiconductor
	  DS1621 and DS1625 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called ds1621.

config SENSORS_F71805F
	tristate "Fintek F71805F/FG, F71806F/FG and F71872F/FG"
	depends on EXPERIMENTAL
	help
	  If you say yes here you get support for hardware monitoring
	  features of the Fintek F71805F/FG, F71806F/FG and F71872F/FG
	  Super-I/O chips.

	  This driver can also be built as a module.  If so, the module
	  will be called f71805f.

config SENSORS_F71882FG
	tristate "Fintek F71882FG and F71883FG"
	depends on EXPERIMENTAL
	help
	  If you say yes here you get support for hardware monitoring
	  features of the Fintek F71882FG and F71883FG Super-I/O chips.

	  This driver can also be built as a module.  If so, the module
	  will be called f71882fg.

config SENSORS_F75375S
	tristate "Fintek F75375S/SP and F75373";
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for hardware monitoring
	  features of the Fintek F75375S/SP and F75373

	  This driver can also be built as a module.  If so, the module
	  will be called f75375s.

config SENSORS_FSCHER
	tristate "FSC Hermes"
	depends on X86 && I2C
	help
	  If you say yes here you get support for Fujitsu Siemens
	  Computers Hermes sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called fscher.

config SENSORS_FSCPOS
	tristate "FSC Poseidon"
	depends on X86 && I2C
	help
	  If you say yes here you get support for Fujitsu Siemens
	  Computers Poseidon sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called fscpos.

config SENSORS_FSCHMD
	tristate "FSC Poseidon, Scylla, Hermes, Heimdall and Heracles"
	depends on X86 && I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for various Fujitsu Siemens
	  Computers sensor chips.

	  This is a new merged driver for FSC sensor chips which is intended
	  as a replacment for the fscpos, fscscy and fscher drivers and adds
	  support for several other FCS sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called fschmd.

config SENSORS_GL518SM
	tristate "Genesys Logic GL518SM"
	depends on I2C
	help
	  If you say yes here you get support for Genesys Logic GL518SM
	  sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called gl518sm.

config SENSORS_GL520SM
	tristate "Genesys Logic GL520SM"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for Genesys Logic GL520SM
	  sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called gl520sm.

config SENSORS_CORETEMP
	tristate "Intel Core (2) Duo/Solo temperature sensor"
	depends on X86 && EXPERIMENTAL
	help
	  If you say yes here you get support for the temperature
	  sensor inside your CPU. Supported all are all known variants
	  of Intel Core family.

config SENSORS_IBMPEX
	tristate "IBM PowerExecutive temperature/power sensors"
	select IPMI_SI
	depends on IPMI_HANDLER
	help
	  If you say yes here you get support for the temperature and
	  power sensors in various IBM System X servers that support
	  PowerExecutive.  So far this includes the x3550, x3650, x3655,
	  x3755, and certain HS20 blades.

	  This driver can also be built as a module.  If so, the module
	  will be called ibmpex.

config SENSORS_IT87
	tristate "ITE IT87xx and compatibles"
	select HWMON_VID
	help
	  If you say yes here you get support for ITE IT8705F, IT8712F,
	  IT8716F, IT8718F and IT8726F sensor chips, and the SiS960 clone.

	  This driver can also be built as a module.  If so, the module
	  will be called it87.

config SENSORS_LM63
	tristate "National Semiconductor LM63"
	depends on I2C
	help
	  If you say yes here you get support for the National Semiconductor
	  LM63 remote diode digital temperature sensor with integrated fan
	  control.  Such chips are found on the Tyan S4882 (Thunder K8QS Pro)
	  motherboard, among others.

	  This driver can also be built as a module.  If so, the module
	  will be called lm63.

config SENSORS_LM70
	tristate "National Semiconductor LM70"
	depends on SPI_MASTER && EXPERIMENTAL
	help
	  If you say yes here you get support for the National Semiconductor
	  LM70 digital temperature sensor chip.

	  This driver can also be built as a module.  If so, the module
	  will be called lm70.

config SENSORS_LM75
	tristate "National Semiconductor LM75 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor LM75
	  sensor chips and clones: Dallas Semiconductor DS75 and DS1775 (in
	  9-bit precision mode), and TelCom (now Microchip) TCN75.

	  The DS75 and DS1775 in 10- to 12-bit precision modes will require
	  a force module parameter. The driver will not handle the extra
	  precision anyhow.

	  This driver can also be built as a module.  If so, the module
	  will be called lm75.

config SENSORS_LM77
	tristate "National Semiconductor LM77"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor LM77
	  sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called lm77.

config SENSORS_LM78
	tristate "National Semiconductor LM78 and compatibles"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM78,
	  LM78-J and LM79.

	  This driver can also be built as a module.  If so, the module
	  will be called lm78.

config SENSORS_LM80
	tristate "National Semiconductor LM80"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for National Semiconductor
	  LM80 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called lm80.

config SENSORS_LM83
	tristate "National Semiconductor LM83 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor
	  LM82 and LM83 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called lm83.

config SENSORS_LM85
	tristate "National Semiconductor LM85 and compatibles"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM85
	  sensor chips and clones: ADT7463, EMC6D100, EMC6D102 and ADM1027.

	  This driver can also be built as a module.  If so, the module
	  will be called lm85.

config SENSORS_LM87
	tristate "National Semiconductor LM87"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM87
	  sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called lm87.

config SENSORS_LM90
	tristate "National Semiconductor LM90 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor LM90,
	  LM86, LM89 and LM99, Analog Devices ADM1032 and Maxim MAX6657,
	  MAX6658, MAX6659, MAX6680 and MAX6681 sensor chips.

	  The Analog Devices ADT7461 sensor chip is also supported, but only
	  if found in ADM1032 compatibility mode.

	  This driver can also be built as a module.  If so, the module
	  will be called lm90.

config SENSORS_LM92
	tristate "National Semiconductor LM92 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor LM92
	  and Maxim MAX6635 sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called lm92.

config SENSORS_LM93
	tristate "National Semiconductor LM93 and compatibles"
	depends on 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
	tristate "Maxim MAX1619 sensor chip"
	depends on I2C
	help
	  If you say yes here you get support for MAX1619 sensor chip.

	  This driver can also be built as a module.  If so, the module
	  will be called max1619.

config SENSORS_MAX6650
	tristate "Maxim MAX6650 sensor chip"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the MAX6650 / MAX6651
	  sensor chips.

	  This driver can also be built as a module.  If so, the module
	  will be called max6650.

config SENSORS_PC87360
	tristate "National Semiconductor PC87360 family"
	select HWMON_VID
	help
	  If you say yes here you get access to the hardware monitoring
	  functions of the National Semiconductor PC8736x Super-I/O chips.
	  The PC87360, PC87363 and PC87364 only have fan monitoring and
	  control.  The PC87365 and PC87366 additionally have voltage and
	  temperature monitoring.

	  This driver can also be built as a module.  If so, the module
	  will be called pc87360.

config SENSORS_PC87427
	tristate "National Semiconductor PC87427"
	depends on EXPERIMENTAL
	help
	  If you say yes here you get access to the hardware monitoring
	  functions of the National Semiconductor PC87427 Super-I/O chip.
	  The chip has two distinct logical devices, one for fan speed
	  monitoring and control, and one for voltage and temperature
	  monitoring. Only fan speed monitoring is supported right now.

	  This driver can also be built as a module.  If so, the module
	  will be called pc87427.

config SENSORS_SIS5595
	tristate "Silicon Integrated Systems Corp. SiS5595"
	depends on PCI
	help
	  If you say yes here you get support for the integrated sensors in
	  SiS5595 South Bridges.

	  This driver can also be built as a module.  If so, the module
	  will be called sis5595.

config SENSORS_DME1737
	tristate "SMSC DME1737, SCH311x 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) and SCH311x Super-I/O chips.

	  This driver can also be built as a module.  If so, the module
	  will be called dme1737.

config SENSORS_SMSC47M1
	tristate "SMSC LPC47M10x and compatibles"
	help
	  If you say yes here you get support for the integrated fan
	  monitoring and control capabilities of the SMSC LPC47B27x,
	  LPC47M10x, LPC47M112, LPC47M13x, LPC47M14x, LPC47M15x,
	  LPC47M192, LPC47M292 and LPC47M997 chips.

	  The temperature and voltage sensor features of the LPC47M15x,
	  LPC47M192, LPC47M292 and LPC47M997 are supported by another
	  driver, select also "SMSC LPC47M192 and compatibles" below for
	  those.

	  This driver can also be built as a module.  If so, the module
	  will be called smsc47m1.

config SENSORS_SMSC47M192
	tristate "SMSC LPC47M192 and compatibles"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the temperature and
	  voltage sensors of the SMSC LPC47M192, LPC47M15x, LPC47M292
	  and LPC47M997 chips.

	  The fan monitoring and control capabilities of these chips
	  are supported by another driver, select
	  "SMSC LPC47M10x and compatibles" above. You need both drivers
	  if you want fan control and voltage/temperature sensor support.

	  This driver can also be built as a module.  If so, the module
	  will be called smsc47m192.

config SENSORS_SMSC47B397
	tristate "SMSC LPC47B397-NC"
	depends on EXPERIMENTAL
	help
	  If you say yes here you get support for the SMSC LPC47B397-NC
	  sensor chip.

	  This driver can also be built as a module.  If so, the module
	  will be called smsc47b397.

config SENSORS_THMC50
	tristate "Texas Instruments THMC50 / Analog Devices ADM1022"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Texas Instruments THMC50
	  sensor chips and clones: the Analog Devices ADM1022.

	  This driver can also be built as a module.  If so, the module
	  will be called thmc50.

config SENSORS_VIA686A
	tristate "VIA686A"
	depends on PCI
	help
	  If you say yes here you get support for the integrated sensors in
	  Via 686A/B South Bridges.

	  This driver can also be built as a module.  If so, the module
	  will be called via686a.

config SENSORS_VT1211
	tristate "VIA VT1211"
	depends on EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here then you get support for hardware monitoring
	  features of the VIA VT1211 Super-I/O chip.

	  This driver can also be built as a module.  If so, the module
	  will be called vt1211.

config SENSORS_VT8231
	tristate "VIA VT8231"
	depends on PCI
	select HWMON_VID
	help
	  If you say yes here then you get support for the integrated sensors
	  in the VIA VT8231 device.

	  This driver can also be built as a module.  If so, the module
	  will be called vt8231.

config SENSORS_W83781D
	tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for the Winbond W8378x series
	  of sensor chips: the W83781D, W83782D, W83783S and W83627HF,
	  and the similar Asus AS99127F.

	  This driver can also be built as a module.  If so, the module
	  will be called w83781d.

config SENSORS_W83791D
	tristate "Winbond W83791D"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the Winbond W83791D chip.

	  This driver can also be built as a module.  If so, the module
	  will be called w83791d.

config SENSORS_W83792D
	tristate "Winbond W83792D"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Winbond W83792D chip.

	  This driver can also be built as a module.  If so, the module
	  will be called w83792d.

config SENSORS_W83793
	tristate "Winbond W83793"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the Winbond W83793
	  hardware monitoring chip.

	  This driver can also be built as a module.  If so, the module
	  will be called w83793.

config SENSORS_W83L785TS
	tristate "Winbond W83L785TS-S"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Winbond W83L785TS-S
	  sensor chip, which is used on the Asus A7N8X, among other
	  motherboards.

	  This driver can also be built as a module.  If so, the module
	  will be called w83l785ts.

config SENSORS_W83627HF
	tristate "Winbond W83627HF, W83627THF, W83637HF, W83687THF, W83697HF"
	select HWMON_VID
	help
	  If you say yes here you get support for the Winbond W836X7 series
	  of sensor chips: the W83627HF, W83627THF, W83637HF, W83687THF and
	  W83697HF.

	  This driver can also be built as a module.  If so, the module
	  will be called w83627hf.

config SENSORS_W83627EHF
	tristate "Winbond W83627EHF/DHG"
	select HWMON_VID
	help
	  If you say yes here you get support for the hardware
	  monitoring functionality of the Winbond W83627EHF Super-I/O chip.

	  This driver also supports the W83627EHG, which is the lead-free
	  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
	  will be called w83627ehf.

config SENSORS_HDAPS
	tristate "IBM Hard Drive Active Protection System (hdaps)"
	depends on INPUT && X86
	select INPUT_POLLDEV
	default n
	help
	  This driver provides support for the IBM Hard Drive Active Protection
	  System (hdaps), which provides an accelerometer and other misc. data.
	  ThinkPads starting with the R50, T41, and X40 are supported.  The
	  accelerometer data is readable via sysfs.

	  This driver also provides an absolute input class device, allowing
	  the laptop to act as a pinball machine-esque joystick.

	  If your ThinkPad is not recognized by the driver, please update to latest
	  BIOS. This is especially the case for some R52 ThinkPads.

	  Say Y here if you have an applicable laptop and want to experience
	  the awesome power of hdaps.

config SENSORS_APPLESMC
	tristate "Apple SMC (Motion sensor, light sensor, keyboard backlight)"
	depends on INPUT && X86
	select NEW_LEDS
	select LEDS_CLASS
	select INPUT_POLLDEV
	default n
	help
	  This driver provides support for the Apple System Management
	  Controller, which provides an accelerometer (Apple Sudden Motion
	  Sensor), light sensors, temperature sensors, keyboard backlight
	  control and fan control.

	  Only Intel-based Apple's computers are supported (MacBook Pro,
	  MacBook, MacMini).

	  Data from the different sensors, keyboard backlight control and fan
	  control are accessible via sysfs.

	  This driver also provides an absolute input class device, allowing
	  the laptop to act as a pinball machine-esque joystick.

	  Say Y here if you have an applicable laptop and want to experience
	  the awesome power of applesmc.

config HWMON_DEBUG_CHIP
	bool "Hardware Monitoring Chip debugging messages"
	default n
	help
	  Say Y here if you want the I2C chip drivers to produce a bunch of
	  debug messages to the system log.  Select this if you are having
	  a problem with I2C support and want to see more of what is going
	  on.

endif # HWMON
