#
# 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 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.

comment "Native drivers"

config SENSORS_ABITUGURU
	tristate "Abit uGuru (rev 1 & 2)"
	depends on X86 && DMI && 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 && DMI && 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_AD7314
	tristate "Analog Devices AD7314 and compatibles"
	depends on SPI && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  AD7314, ADT7301 and ADT7302 temperature sensors.

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

config SENSORS_AD7414
	tristate "Analog Devices AD7414"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  AD7414 temperature monitoring chip.

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

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_ADCXX
	tristate "National Semiconductor ADCxxxSxxx"
	depends on SPI_MASTER && EXPERIMENTAL
	help
	  If you say yes here you get support for the National Semiconductor
	  ADC<bb><c>S<sss> chip family, where
	  * bb  is the resolution in number of bits (8, 10, 12)
	  * c   is the number of channels (1, 2, 4, 8)
	  * sss is the maximum conversion speed (021 for 200 kSPS, 051 for 500
	    kSPS and 101 for 1 MSPS)

	  Examples : ADC081S101, ADC124S501, ...

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

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 and TI THMC10.

	  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
	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
	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
	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
	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_ADT7411
	tristate "Analog Devices ADT7411"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  ADT7411 voltage and temperature monitoring chip.

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

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

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

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_ADT7475
	tristate "Analog Devices ADT7473, ADT7475, ADT7476 and ADT7490"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for the Analog Devices
	  ADT7473, ADT7475, ADT7476 and ADT7490 hardware monitoring
	  chips.

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

config SENSORS_ASC7621
	tristate "Andigilog aSC7621"
	depends on I2C
	help
	  If you say yes here you get support for the aSC7621
	  family of SMBus sensors chip found on most Intel X38, X48, X58,
	  945, 965 and 975 desktop boards.  Currently supported chips:
	  aSC7621
	  aSC7621a

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

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_K10TEMP
	tristate "AMD Family 10h+ temperature sensor"
	depends on X86 && PCI
	help
	  If you say yes here you get support for the temperature
	  sensor(s) inside your CPU. Supported are later revisions of
	  the AMD Family 10h and all revisions of the AMD Family 11h,
	  12h (Llano), 14h (Brazos) and 15h (Bulldozer) microarchitectures.

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

config SENSORS_FAM15H_POWER
	tristate "AMD Family 15h processor power"
	depends on X86 && PCI
	help
	  If you say yes here you get support for processor power
	  information of your AMD family 15h CPU.

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

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_DS620
	tristate "Dallas Semiconductor DS620"
	depends on I2C
	help
	  If you say yes here you get support for Dallas Semiconductor
	  DS620 sensor chip.

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

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_EXYNOS4_TMU
	tristate "Temperature sensor on Samsung EXYNOS4"
	depends on EXYNOS4_DEV_TMU
	help
	  If you say yes here you get support for TMU (Thermal Managment
	  Unit) on SAMSUNG EXYNOS4 series of SoC.

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

config SENSORS_I5K_AMB
	tristate "FB-DIMM AMB temperature sensor on Intel 5000 series chipsets"
	depends on PCI && EXPERIMENTAL
	help
	  If you say yes here you get support for FB-DIMM AMB temperature
	  monitoring chips on systems with the Intel 5000 series chipset.

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

config SENSORS_F71805F
	tristate "Fintek F71805F/FG, F71806F/FG and F71872F/FG"
	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 compatibles"
	help
	  If you say yes here you get support for hardware monitoring
	  features of many Fintek Super-I/O (LPC) chips. The currently
	  supported chips are:
	    F71808E/A
	    F71858FG
	    F71862FG
	    F71863FG
	    F71869F/E/A
	    F71882FG
	    F71883FG
	    F71889FG/ED/A
	    F8000
	    F81801U
	    F81865F

	  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
	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_FSCHMD
	tristate "Fujitsu Siemens Computers sensor chips"
	depends on X86 && I2C
	help
	  If you say yes here you get support for the following Fujitsu
	  Siemens Computers (FSC) sensor chips: Poseidon, Scylla, Hermes,
	  Heimdall, Heracles, Hades and Syleus including support for the
	  integrated watchdog.

	  This is a merged driver for FSC sensor chips replacing the fscpos,
	  fscscy and fscher drivers and adding support for several other FSC
	  sensor chips.

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

config SENSORS_G760A
	tristate "GMT G760A"
	depends on I2C
	help
	  If you say yes here you get support for Global Mixed-mode
	  Technology Inc G760A fan speed PWM controller chips.

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

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_GPIO_FAN
	tristate "GPIO fan"
	depends on GENERIC_GPIO
	help
	  If you say yes here you get support for fans connected to GPIO lines.

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

config SENSORS_CORETEMP
	tristate "Intel Core/Core2/Atom temperature sensor"
	depends on X86 && PCI && EXPERIMENTAL
	help
	  If you say yes here you get support for the temperature
	  sensor inside your CPU. Most of the family 6 CPUs
	  are supported. Check Documentation/hwmon/coretemp for details.

config SENSORS_IBMAEM
	tristate "IBM Active Energy Manager temperature/power sensors and control"
	select IPMI_SI
	depends on IPMI_HANDLER
	help
	  If you say yes here you get support for the temperature and
	  power sensors and capping hardware in various IBM System X
	  servers that support Active Energy Manager.  This includes
	  the x3350, x3550, x3650, x3655, x3755, x3850 M2, x3950 M2,
	  and certain HC10/HS2x/LS2x/QS2x blades.

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

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 x3350, x3550, x3650,
	  x3655, and x3755; the x3800, x3850, and x3950 models that have
	  PCI Express; and some of the HS2x, LS2x, and QS2x 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, IT8720F, IT8721F, IT8726F and IT8758E 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_JZ4740
	tristate "Ingenic JZ4740 SoC ADC driver"
	depends on MACH_JZ4740 && MFD_JZ4740_ADC
	help
	  If you say yes here you get support for reading adc values from the ADCIN
	  pin on Ingenic JZ4740 SoC based boards.

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

config SENSORS_JC42
	tristate "JEDEC JC42.4 compliant memory module temperature sensors"
	depends on I2C
	help
	  If you say yes here, you get support for JEDEC JC42.4 compliant
	  temperature sensors, which are used on many DDR3 memory modules for
	  mobile devices and servers.  Support will include, but not be limited
	  to, ADT7408, CAT34TS02, CAT6095, MAX6604, MCP9805, MCP98242, MCP98243,
	  MCP9843, SE97, SE98, STTS424(E), TSE2002B3, and TS3000B3.

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

config SENSORS_LINEAGE
	tristate "Lineage Compact Power Line Power Entry Module"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Lineage Compact Power Line
	  series of DC/DC and AC/DC converters such as CP1800, CP2000AC,
	  CP2000DC, CP2725, and others.

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

config SENSORS_LM63
	tristate "National Semiconductor LM63 and LM64"
	depends on I2C
	help
	  If you say yes here you get support for the National
	  Semiconductor LM63 and LM64 remote diode digital temperature
	  sensors 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 / Texas Instruments TMP121"
	depends on SPI_MASTER
	help
	  If you say yes here you get support for the National Semiconductor
	  LM70 and Texas Instruments TMP121/TMP123 digital temperature
	  sensor chips.

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

config SENSORS_LM73
	tristate "National Semiconductor LM73"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor LM73
	  sensor chips.
	  This driver can also be built as a module.  If so, the module
	  will be called lm73.

config SENSORS_LM75
	tristate "National Semiconductor LM75 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for one common type of
	  temperature sensor chip, with models including:

		- Analog Devices ADT75
		- Dallas Semiconductor DS75 and DS1775
		- Maxim MAX6625 and MAX6626
		- Microchip MCP980x
		- National Semiconductor LM75, LM75A
		- NXP's LM75A
		- ST Microelectronics STDS75
		- TelCom (now Microchip) TCN75
		- Texas Instruments TMP100, TMP101, TMP105, TMP75, TMP175,
		  TMP275

	  This driver supports driver model based binding through board
	  specific I2C device tables.

	  It also supports the "legacy" style of driver binding.  To use
	  that with some chips which don't replicate LM75 quirks exactly,
	  you may need the "force" module parameter.

	  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
	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
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM85
	  sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
	  EMC6D101, EMC6D102, and EMC6D103.

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

config SENSORS_LM87
	tristate "National Semiconductor LM87 and compatibles"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM87
	  and Analog Devices ADM1024 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, ADT7461, and ADT7461A,
	  Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659,
	  MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008,
	  Winbond/Nuvoton W83L771W/G/AWG/ASG and Philips SA56004 sensor chips.

	  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,
	  LM94, and compatible sensor chips.

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

config SENSORS_LTC4151
	tristate "Linear Technology LTC4151"
	depends on I2C
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4151
	  High Voltage I2C Current and Voltage Monitor interface.

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

config SENSORS_LTC4215
	tristate "Linear Technology LTC4215"
	depends on I2C && EXPERIMENTAL
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4215
	  Hot Swap Controller I2C interface.

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

config SENSORS_LTC4245
	tristate "Linear Technology LTC4245"
	depends on I2C && EXPERIMENTAL
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4245
	  Multiple Supply Hot Swap Controller I2C interface.

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

config SENSORS_LTC4261
	tristate "Linear Technology LTC4261"
	depends on I2C && EXPERIMENTAL
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4261
	  Negative Voltage Hot Swap Controller I2C interface.

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

config SENSORS_LM95241
	tristate "National Semiconductor LM95241 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for LM95231 and LM95241 sensor
	  chips.

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

config SENSORS_LM95245
	tristate "National Semiconductor LM95245 sensor chip"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for LM95245 sensor chip.

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

config SENSORS_MAX1111
	tristate "Maxim MAX1111 Multichannel, Serial 8-bit ADC chip"
	depends on SPI_MASTER
	help
	  Say y here to support Maxim's MAX1111 ADC chips.

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

config SENSORS_MAX16065
	tristate "Maxim MAX16065 System Manager and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for hardware monitoring
	  capabilities of the following Maxim System Manager chips.
	    MAX16065
	    MAX16066
	    MAX16067
	    MAX16068
	    MAX16070
	    MAX16071

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

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_MAX1668
	tristate "Maxim MAX1668 and compatibles"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for MAX1668, MAX1989 and
	  MAX1805 chips.

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

config SENSORS_MAX6639
	tristate "Maxim MAX6639 sensor chip"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the MAX6639
	  sensor chips.

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

config SENSORS_MAX6642
	tristate "Maxim MAX6642 sensor chip"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for MAX6642 sensor chip.
	  MAX6642 is a SMBus-Compatible Remote/Local Temperature Sensor
	  with Overtemperature Alarm from Maxim.

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

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_NTC_THERMISTOR
	tristate "NTC thermistor support"
	depends on EXPERIMENTAL
	help
	  This driver supports NTC thermistors sensor reading and its
	  interpretation. The driver can also monitor the temperature and
	  send notifications about the temperature.

	  Currently, this driver supports
	  NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, and NCP15WL333.

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

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"
	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. Fan speed monitoring and control are supported, as
	  well as temperature monitoring. Voltages aren't supported yet.

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

config SENSORS_PCF8591
	tristate "Philips PCF8591 ADC/DAC"
	depends on I2C
	default n
	help
	  If you say yes here you get support for Philips PCF8591 4-channel
	  ADC, 1-channel DAC chips.

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

	  These devices are hard to detect and rarely found on mainstream
	  hardware.  If unsure, say N.

source drivers/hwmon/pmbus/Kconfig

config SENSORS_SHT15
	tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
	depends on GENERIC_GPIO
	help
	  If you say yes here you get support for the Sensiron SHT10, SHT11,
	  SHT15, SHT71, SHT75 humidity and temperature sensors.

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

config SENSORS_SHT21
	tristate "Sensiron humidity and temperature sensors. SHT21 and compat."
	depends on I2C
	help
	  If you say yes here you get support for the Sensiron SHT21, SHT25
	  humidity and temperature sensors.

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

config SENSORS_S3C
	tristate "Samsung built-in ADC"
	depends on S3C_ADC
	help
	  If you say yes here you get support for the on-board ADCs of
	  the Samsung S3C24XX, S3C64XX and other series of SoC

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

config SENSORS_S3C_RAW
	bool "Include raw channel attributes in sysfs"
	depends on SENSORS_S3C
	help
	  Say Y here if you want to include raw copies of all the ADC
	  channels in sysfs.

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_SMM665
	tristate "Summit Microelectronics SMM665"
	depends on I2C && EXPERIMENTAL
	default n
	help
	  If you say yes here you get support for the hardware monitoring
	  features of the Summit Microelectronics SMM665/SMM665B Six-Channel
	  Active DC Output Controller / Monitor.

	  Other supported chips are SMM465, SMM665C, SMM764, and SMM766.
	  Support for those chips is untested.

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

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, SCH311x, SCH5027, and
	  Asus A8000 Super-I/O chips.

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

config SENSORS_EMC1403
	tristate "SMSC EMC1403/23 thermal sensor"
	depends on I2C
	help
	  If you say yes here you get support for the SMSC EMC1403/23
	  temperature monitoring chip.

	  Threshold values can be configured using sysfs.
	  Data from the different diodes are accessible via sysfs.

config SENSORS_EMC2103
	tristate "SMSC EMC2103"
	depends on I2C
	help
	  If you say yes here you get support for the temperature
	  and fan sensors of the SMSC EMC2103 chips.

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

config SENSORS_EMC6W201
	tristate "SMSC EMC6W201"
	depends on I2C
	help
	  If you say yes here you get support for the SMSC EMC6W201
	  hardware monitoring chip.

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

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
	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_SCH56XX_COMMON
	tristate
	default n

config SENSORS_SCH5627
	tristate "SMSC SCH5627"
	select SENSORS_SCH56XX_COMMON
	help
	  If you say yes here you get support for the hardware monitoring
	  features of the SMSC SCH5627 Super-I/O chip.

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

config SENSORS_SCH5636
	tristate "SMSC SCH5636"
	select SENSORS_SCH56XX_COMMON
	help
	  SMSC SCH5636 Super I/O chips include an embedded microcontroller for
	  hardware monitoring solutions, allowing motherboard manufacturers to
	  create their own custom hwmon solution based upon the SCH5636.

	  Currently this driver only supports the Fujitsu Theseus SCH5636 based
	  hwmon solution. Say yes here if you want support for the Fujitsu
	  Theseus' hardware monitoring features.

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

config SENSORS_ADS1015
	tristate "Texas Instruments ADS1015"
	depends on I2C
	help
	  If you say yes here you get support for Texas Instruments ADS1015
	  12-bit 4-input ADC device.

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

config SENSORS_ADS7828
	tristate "Texas Instruments ADS7828"
	depends on I2C
	help
	  If you say yes here you get support for Texas Instruments ADS7828
	  12-bit 8-channel ADC device.

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

config SENSORS_ADS7871
	tristate "Texas Instruments ADS7871 A/D converter"
	depends on SPI
	help
	  If you say yes here you get support for TI ADS7871 & ADS7870

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

config SENSORS_AMC6821
	tristate "Texas Instruments AMC6821"
	depends on I2C  && EXPERIMENTAL
	help
	  If you say yes here you get support for the Texas Instruments
	  AMC6821 hardware monitoring chips.

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

config SENSORS_THMC50
	tristate "Texas Instruments THMC50 / Analog Devices ADM1022"
	depends on I2C
	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_TMP102
	tristate "Texas Instruments TMP102"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Texas Instruments TMP102
	  sensor chips.

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

config SENSORS_TMP401
	tristate "Texas Instruments TMP401 and compatibles"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Texas Instruments TMP401 and
	  TMP411 temperature sensor chips.

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

config SENSORS_TMP421
	tristate "Texas Instruments TMP421 and compatible"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for Texas Instruments TMP421,
	  TMP422 and TMP423 temperature sensor chips.

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

config SENSORS_TWL4030_MADC
	tristate "Texas Instruments TWL4030 MADC Hwmon"
	depends on TWL4030_MADC
	help
	If you say yes here you get hwmon support for triton
	TWL4030-MADC.

	This driver can also be built as a module. If so it will be called
	twl4030-madc-hwmon.

config SENSORS_VIA_CPUTEMP
	tristate "VIA CPU temperature sensor"
	depends on X86
	select HWMON_VID
	help
	  If you say yes here you get support for the temperature
	  sensor inside your CPU. Supported are all known variants of
	  the VIA C7 and Nano.

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"
	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, 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 and W83783S, 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
	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
	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, including support for the integrated
	  watchdog.

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

config SENSORS_W83795
	tristate "Winbond/Nuvoton W83795G/ADG"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Winbond W83795G and
	  W83795ADG hardware monitoring chip.

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

config SENSORS_W83795_FANCTRL
	boolean "Include fan control support (DANGEROUS)"
	depends on SENSORS_W83795 && EXPERIMENTAL
	default n
	help
	  If you say yes here, support for the both manual and automatic
	  fan control features will be included in the driver.

	  This part of the code wasn't carefully reviewed and tested yet,
	  so enabling this option is strongly discouraged on production
	  servers. Only developers and testers should enable it for the
	  time being.

	  Please also note that this option will create sysfs attribute
	  files which may change in the future, so you shouldn't rely
	  on them being stable.

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_W83L786NG
	tristate "Winbond W83L786NG, W83L786NR"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Winbond W83L786NG
	  and W83L786NR sensor chips.

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

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/EHG/DHG, W83667HG, NCT6775F, NCT6776F"
	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 also supports Nuvoton W83667HG, W83667HG-B, NCT6775F
	  (also known as W83667HG-I), and NCT6776F.

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

config SENSORS_WM831X
	tristate "WM831x PMICs"
	depends on MFD_WM831X
	help
	  If you say yes here you get support for the hardware
	  monitoring functionality of the Wolfson Microelectronics
	  WM831x series of PMICs.

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

config SENSORS_WM8350
	tristate "Wolfson Microelectronics WM835x"
	depends on MFD_WM8350
	help
	  If you say yes here you get support for the hardware
	  monitoring features of the WM835x series of PMICs.

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

config SENSORS_ULTRA45
	tristate "Sun Ultra45 PIC16F747"
	depends on SPARC64
	help
	  This driver provides support for the Ultra45 workstation environmental
	  sensors.

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 SENSORS_MC13783_ADC
        tristate "Freescale MC13783 ADC"
        depends on MFD_MC13783
        help
          Support for the A/D converter on MC13783 PMIC.

if ACPI

comment "ACPI drivers"

config SENSORS_ACPI_POWER
	tristate "ACPI 4.0 power meter"
	help
	  This driver exposes ACPI 4.0 power meters as hardware monitoring
	  devices.  Say Y (or M) if you have a computer with ACPI 4.0 firmware
	  and a power meter.

	  To compile this driver as a module, choose M here:
	  the module will be called acpi_power_meter.

config SENSORS_ATK0110
	tristate "ASUS ATK0110"
	depends on X86 && EXPERIMENTAL
	help
	  If you say yes here you get support for the ACPI hardware
	  monitoring interface found in many ASUS motherboards. This
	  driver will provide readings of fans, voltages and temperatures
	  through the system firmware.

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

endif # ACPI

endif # HWMON
