#
# 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_AB8500
	tristate "AB8500 thermal monitoring"
	depends on AB8500_GPADC && AB8500_BM
	default n
	help
	  If you say yes here you get support for the thermal sensor part
	  of the AB8500 chip. The driver includes thermal management for
	  AB8500 die and two GPADC channels. The GPADC channel are preferably
	  used to access sensors outside the AB8500 chip.

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

config SENSORS_ABITUGURU
	tristate "Abit uGuru (rev 1 & 2)"
	depends on X86 && DMI
	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
	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
	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
	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
	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 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_ADT7X10
	tristate
	help
	  This module contains common code shared by the ADT7310/ADT7320 and
	  ADT7410/ADT7420 temperature monitoring chip drivers.

	  If build as a module, the module will be called adt7x10.

config SENSORS_ADT7310
	tristate "Analog Devices ADT7310/ADT7320"
	depends on SPI_MASTER
	select SENSORS_ADT7X10
	help
	  If you say yes here you get support for the Analog Devices
	  ADT7310 and ADT7320 temperature monitoring chips.

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

config SENSORS_ADT7410
	tristate "Analog Devices ADT7410/ADT7420"
	depends on I2C
	select SENSORS_ADT7X10
	help
	  If you say yes here you get support for the Analog Devices
	  ADT7410 and ADT7420 temperature monitoring chips.

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

config SENSORS_ADT7411
	tristate "Analog Devices ADT7411"
	depends on I2C
	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
	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
	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
	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), 15h (Bulldozer/Trinity/Kaveri/Carrizo)
	  and 16h (Kabini/Mullins) 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_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_ASB100
	tristate "Asus ASB100 Bach"
	depends on X86 && I2C
	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
	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 compatibles"
	depends on I2C
	help
	  If you say yes here you get support for Dallas Semiconductor/Maxim
	  Integrated DS1621 sensor chips and compatible models including:

	  - Dallas Semiconductor DS1625
	  - Maxim Integrated DS1631
	  - Maxim Integrated DS1721
	  - Maxim Integrated DS1731

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

config SENSORS_DA9052_ADC
	tristate "Dialog DA9052/DA9053 ADC"
	depends on PMIC_DA9052
	help
	  Say y here to support the ADC found on Dialog Semiconductor
	  DA9052-BC and DA9053-AA/Bx PMICs.

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

config SENSORS_DA9055
	tristate "Dialog Semiconductor DA9055 ADC"
	depends on MFD_DA9055
	help
	  If you say yes here you get support for ADC on the Dialog
	  Semiconductor DA9055 PMIC.

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

config SENSORS_I5K_AMB
	tristate "FB-DIMM AMB temperature sensor on Intel 5000 series chipsets"
	depends on PCI
	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"
	depends on !PPC
	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"
	depends on !PPC
	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, F75373 and F75387"
	depends on I2C
	help
	  If you say yes here you get support for hardware monitoring
	  features of the Fintek F75375S/SP, F75373 and F75387

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

config SENSORS_MC13783_ADC
        tristate "Freescale MC13783/MC13892 ADC"
        depends on MFD_MC13XXX
        help
          Support for the A/D converter on MC13783 and MC13892 PMIC.

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_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_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_G762
	tristate "GMT G762 and G763"
	depends on I2C
	help
	  If you say yes here you get support for Global Mixed-mode
	  Technology Inc G762 and G763 fan speed PWM controller chips.

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

config SENSORS_GPIO_FAN
	tristate "GPIO fan"
	depends on GPIOLIB
	depends on THERMAL || THERMAL=n
	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_HIH6130
	tristate "Honeywell Humidicon HIH-6130 humidity/temperature sensor"
	depends on I2C
	help
	  If you say yes here you get support for Honeywell Humidicon
	  HIH-6130 and HIH-6131 Humidicon humidity sensors.

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

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_IBMPOWERNV
	tristate "IBM POWERNV platform sensors"
	depends on PPC_POWERNV
	default y
	help
	  If you say yes here you get support for the temperature/fan/power
	  sensors on your PowerNV platform.

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

config SENSORS_IIO_HWMON
	tristate "Hwmon driver that uses channels specified via iio maps"
	depends on IIO
	help
	  This is a platform driver that in combination with a suitable
	  map allows IIO devices to provide basic hwmon functionality
	  for those channels specified in the map.  This map can be provided
	  either via platform data or the device tree bindings.

config SENSORS_I5500
	tristate "Intel 5500/5520/X58 temperature sensor"
	depends on X86 && PCI
	help
	  If you say yes here you get support for the temperature
	  sensor inside the Intel 5500, 5520 and X58 chipsets.

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

config SENSORS_CORETEMP
	tristate "Intel Core/Core2/Atom temperature sensor"
	depends on X86
	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_IT87
	tristate "ITE IT87xx and compatibles"
	depends on !PPC
	select HWMON_VID
	help
	  If you say yes here you get support for ITE IT8705F, IT8712F,
	  IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E,
	  IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E,
	  IT8603E, IT8620E, and IT8623E sensor chips, and the SiS950 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, AT30TS00, CAT34TS02, CAT6095, MAX6604, MCP9804, MCP9805,
	  MCP98242, MCP98243, MCP98244, MCP9843, SE97, SE98, STTS424(E),
	  STTS2002, STTS3000, TSE2002, TSE2004, TS3000, and TS3001.

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

config SENSORS_POWR1220
	tristate "Lattice POWR1220 Power Monitoring"
	depends on I2C
	default n
	help
	  If you say yes here you get access to the hardware monitoring
	  functions of the Lattice POWR1220 isp Power Supply Monitoring,
	  Sequencing and Margining Controller.

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

config SENSORS_LINEAGE
	tristate "Lineage Compact Power Line Power Entry Module"
	depends on I2C
	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_LTC2945
	tristate "Linear Technology LTC2945"
	depends on I2C
	select REGMAP_I2C
	default n
	help
	  If you say yes here you get support for Linear Technology LTC2945
	  I2C System Monitor.

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

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
	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_LTC4222
	tristate "Linear Technology LTC4222"
	depends on I2C
	select REGMAP_I2C
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4222
	  Dual Hot Swap Controller I2C interface.

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

config SENSORS_LTC4245
	tristate "Linear Technology LTC4245"
	depends on I2C
	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_LTC4260
	tristate "Linear Technology LTC4260"
	depends on I2C
	select REGMAP_I2C
	default n
	help
	  If you say yes here you get support for Linear Technology LTC4260
	  Positive Voltage Hot Swap Controller I2C interface.

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

config SENSORS_LTC4261
	tristate "Linear Technology LTC4261"
	depends on I2C
	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_MAX1111
	tristate "Maxim MAX1111 Serial 8-bit ADC chip and compatibles"
	depends on SPI_MASTER
	help
	  Say y here to support Maxim's MAX1110, MAX1111, MAX1112, and MAX1113
	  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
	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_MAX17135
	tristate "Maxim MAX17135 EPD temperature sensor"
	depends on I2C
	help
	  If you say yes here you get support for MAX17135 PMIC sensor.

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

config SENSORS_MAX197
	tristate "Maxim MAX197 and compatibles"
	help
	  Support for the Maxim MAX197 A/D converter.
	  Support will include, but not be limited to, MAX197, and MAX199.

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

config SENSORS_MAX6639
	tristate "Maxim MAX6639 sensor chip"
	depends on I2C
	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
	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
	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_MAX6697
	tristate "Maxim MAX6697 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for MAX6581, MAX6602, MAX6622,
	  MAX6636, MAX6689, MAX6693, MAX6694, MAX6697, MAX6698, and MAX6699
	  temperature sensor chips.

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

config SENSORS_HTU21
	tristate "Measurement Specialties HTU21D humidity/temperature sensors"
	depends on I2C
	help
	  If you say yes here you get support for the Measurement Specialties
	  HTU21D humidity and temperature sensors.

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

config SENSORS_MCP3021
	tristate "Microchip MCP3021 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for MCP3021 and MCP3221.
	  The MCP3021 is a A/D converter (ADC) with 10-bit and the MCP3221
	  with 12-bit resolution.

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

config SENSORS_MENF21BMC_HWMON
	tristate "MEN 14F021P00 BMC Hardware Monitoring"
	depends on MFD_MENF21BMC
	help
	  Say Y here to include support for the MEN 14F021P00 BMC
	  hardware monitoring.

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

config SENSORS_ADCXX
	tristate "National Semiconductor ADCxxxSxxx"
	depends on SPI_MASTER
	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_LM63
	tristate "National Semiconductor LM63 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for the National
	  Semiconductor LM63, LM64, and LM96163 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 and compatibles"
	depends on SPI_MASTER
	help
	  If you say yes here you get support for the National Semiconductor
	  LM70, LM71, LM74 and Texas Instruments TMP121/TMP123 digital tempera-
	  ture 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
	depends on THERMAL || !THERMAL_OF
	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, DS1775 and DS7505
		- Global Mixed-mode Technology (GMT) G751
		- 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, TMP112, 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 and LM96080"
	depends on I2C
	help
	  If you say yes here you get support for National Semiconductor
	  LM80 and LM96080 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, Philips SA56004, and GMT G781
	  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_LM95234
	tristate "National Semiconductor LM95234 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for the LM95233 and LM95234
	  temperature sensor chips.

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

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 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for LM95235 and LM95245
	  temperature sensor chips.

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

config SENSORS_PC87360
	tristate "National Semiconductor PC87360 family"
	depends on !PPC
	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 !PPC
	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_NTC_THERMISTOR
	tristate "NTC thermistor support from Murata"
	depends on !OF || IIO=n || IIO
	depends on THERMAL || !THERMAL_OF
	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
	  from Murata and B57330V2103 from EPCOS.

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

config SENSORS_NCT6683
	tristate "Nuvoton NCT6683D"
	depends on !PPC
	help
	  If you say yes here you get support for the hardware monitoring
	  functionality of the Nuvoton NCT6683D eSIO chip.

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

config SENSORS_NCT6775
	tristate "Nuvoton NCT6775F and compatibles"
	depends on !PPC
	select HWMON_VID
	help
	  If you say yes here you get support for the hardware monitoring
	  functionality of the Nuvoton NCT6106D, NCT6775F, NCT6776F, NCT6779D,
	  NCT6791D, NCT6792D and compatible Super-I/O chips. This driver
	  replaces the w83627ehf driver for NCT6775F and NCT6776F.

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

config SENSORS_NCT7802
	tristate "Nuvoton NCT7802Y"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Nuvoton NCT7802Y
	  hardware monitoring chip.

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

config SENSORS_NCT7904
	tristate "Nuvoton NCT7904"
	depends on I2C
	help
	  If you say yes here you get support for the Nuvoton NCT7904
	  hardware monitoring chip, including manual fan speed control.

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

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_PWM_FAN
	tristate "PWM fan"
	depends on (PWM && OF) || COMPILE_TEST
	depends on THERMAL || THERMAL=n
	help
	  If you say yes here you get support for fans connected to PWM lines.
	  The driver uses the generic PWM interface, thus it will work on a
	  variety of SoCs.

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

config SENSORS_SHT15
	tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
	depends on GPIOLIB
	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_SHTC1
	tristate "Sensiron humidity and temperature sensors. SHTC1 and compat."
	depends on I2C
	help
	  If you say yes here you get support for the Sensiron SHTC1 and SHTW1
	  humidity and temperature sensors.

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

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_DME1737
	tristate "SMSC DME1737, SCH311x and compatibles"
	depends on I2C && !PPC
	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
	select REGMAP_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"
	depends on !PPC
	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 !PPC
	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"
	depends on !PPC && WATCHDOG
	select SENSORS_SCH56XX_COMMON
	select WATCHDOG_CORE
	help
	  If you say yes here you get support for the hardware monitoring
	  features of the SMSC SCH5627 Super-I/O chip including support for
	  the integrated watchdog.

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

config SENSORS_SCH5636
	tristate "SMSC SCH5636"
	depends on !PPC && WATCHDOG
	select SENSORS_SCH56XX_COMMON
	select WATCHDOG_CORE
	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 including support for the
	  integrated watchdog.

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

config SENSORS_SMM665
	tristate "Summit Microelectronics SMM665"
	depends on I2C
	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_ADC128D818
	tristate "Texas Instruments ADC128D818"
	depends on I2C
	help
	  If you say yes here you get support for the Texas Instruments
	  ADC128D818 System Monitor with Temperature Sensor chip.

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

config SENSORS_ADS1015
	tristate "Texas Instruments ADS1015"
	depends on I2C
	help
	  If you say yes here you get support for Texas Instruments
	  ADS1015/ADS1115 12/16-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 and compatibles"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Texas Instruments ADS7828 and
	  ADS7830 8-channel A/D converters. ADS7828 resolution is 12-bit, while
	  it is 8-bit on ADS7830.

	  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
	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_INA209
	tristate "TI / Burr Brown INA209"
	depends on I2C
	help
	  If you say yes here you get support for the TI / Burr Brown INA209
	  voltage / current / power monitor I2C interface.

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

config SENSORS_INA2XX
	tristate "Texas Instruments INA219 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for INA219, INA220, INA226,
	  INA230, and INA231 power monitor chips.

	  The INA2xx driver is configured for the default configuration of
	  the part as described in the datasheet.
	  Default value for Rshunt is 10 mOhms.
	  This driver can also be built as a module.  If so, the module
	  will be called ina2xx.

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
	depends on THERMAL || !THERMAL_OF
	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_TMP103
	tristate "Texas Instruments TMP103"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Texas Instruments TMP103
	  sensor chips.

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

config SENSORS_TMP401
	tristate "Texas Instruments TMP401 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for Texas Instruments TMP401,
	  TMP411, TMP431, TMP432 and TMP435 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
	help
	  If you say yes here you get support for Texas Instruments TMP421,
	  TMP422, TMP423, TMP441, and TMP442 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_VEXPRESS
	tristate "Versatile Express"
	depends on VEXPRESS_CONFIG
	help
	  This driver provides support for hardware sensors available on
	  the ARM Ltd's Versatile Express platform. It can provide wide
	  range of information like temperature, power, energy.

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"
	depends on !PPC
	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
	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
	help
	  If you say yes here you get support for the Winbond W83795G and
	  W83795ADG hardware monitoring chip, including manual fan speed
	  control.

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

config SENSORS_W83795_FANCTRL
	bool "Include automatic fan control support (DANGEROUS)"
	depends on SENSORS_W83795
	default n
	help
	  If you say yes here, support for automatic fan speed control
	  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
	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
	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"
	depends on !PPC
	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/UHG, W83667HG, NCT6775F, NCT6776F"
	depends on !PPC
	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. And also the W83627UHG, which is a stripped down
	  version of the W83627DHG (as far as hardware monitoring goes.)

	  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.

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

config SENSORS_MAG3110
	tristate "Freescale MAG3110 e-compass sensor"
	depends on I2C && SYSFS
	help
	  If you say yes here you get support for the Freescale MAG3110
	  e-compass sensor.
	  This driver can also be built as a module.  If so, the module
	  will be called mag3110.

config MXC_MMA8451
	tristate "MMA8451 device driver"
	depends on I2C
	default y

endif # HWMON
