# SPDX-License-Identifier: GPL-2.0-only
#
# 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.rst> 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

config HWMON_DEBUG_CHIP
	bool "Hardware Monitoring Chip debugging messages"
	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) || COMPILE_TEST && HAS_IOPORT
	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.rst

	  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) || COMPILE_TEST && HAS_IOPORT
	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.rst

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

config SENSORS_SMPRO
	tristate "Ampere's Altra SMpro hardware monitoring driver"
	depends on MFD_SMPRO
	help
	  If you say yes here you get support for the thermal, voltage,
	  current and power sensors of Ampere's Altra processor family SoC
	  with SMpro co-processor.

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_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_ADM1177
	tristate "Analog Devices ADM1177 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for Analog Devices ADM1177
	  sensor chips.

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

config SENSORS_ADM9240
	tristate "Analog Devices ADM9240 and compatibles"
	depends on I2C
	select HWMON_VID
	select REGMAP_I2C
	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
	select REGMAP
	help
	  This module contains common code shared by the ADT7310/ADT7320 and
	  ADT7410/ADT7420 temperature monitoring chip drivers.

	  If built 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
	select REGMAP_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 built as a module. If so, the module
	  will be called adt7475.

config SENSORS_AHT10
	tristate "Aosong AHT10, AHT20"
	depends on I2C
	select CRC8
	help
	  If you say yes here, you get support for the Aosong AHT10 and AHT20
	  temperature and humidity sensors

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

config SENSORS_AQUACOMPUTER_D5NEXT
	tristate "Aquacomputer D5 Next, Octo, Quadro, Farbwerk, Farbwerk 360, High Flow Next"
	depends on USB_HID
	select CRC16
	help
	  If you say yes here you get support for sensors and fans of
	  the Aquacomputer D5 Next watercooling pump, Octo and Quadro fan
	  controllers, Farbwerk and Farbwerk 360 RGB controllers, High Flow
	  Next sensor, where available.

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

config SENSORS_AS370
	tristate "Synaptics AS370 SoC hardware monitoring driver"
	help
	  If you say yes here you get support for the PVT sensors of
	  the Synaptics AS370 SoC

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


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_ASUS_ROG_RYUJIN
	tristate "ASUS ROG RYUJIN II 360 hardware monitoring driver"
	depends on HID
	help
	  If you say yes here you get support for the fans and sensors of
	  the ASUS ROG RYUJIN II 360 AIO CPU liquid cooler.

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

config SENSORS_AXI_FAN_CONTROL
	tristate "Analog Devices FAN Control HDL Core driver"
	help
	  If you say yes here you get support for the Analog Devices
	  AXI HDL FAN monitoring core.

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

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 && AMD_NB
	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 && CPU_SUP_AMD
	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
	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_ARM_SCMI
	tristate "ARM SCMI Sensors"
	depends on ARM_SCMI_PROTOCOL
	depends on THERMAL || !THERMAL_OF
	help
	  This driver provides support for temperature, voltage, current
	  and power sensors available on SCMI based platforms. The actual
	  number and type of sensors exported depend on the platform.

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

config SENSORS_ARM_SCPI
	tristate "ARM SCPI Sensors"
	depends on ARM_SCPI_PROTOCOL
	depends on THERMAL || !THERMAL_OF
	help
	  This driver provides support for temperature, voltage, current
	  and power sensors available on ARM Ltd's SCP based platforms. The
	  actual number and type of sensors exported depend on the platform.

config SENSORS_ASB100
	tristate "Asus ASB100 Bach"
	depends on (X86 || COMPILE_TEST) && 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_ASPEED
	tristate "ASPEED AST2400/AST2500 PWM and Fan tach driver"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on THERMAL || THERMAL=n
	select REGMAP
	help
	  This driver provides support for ASPEED AST2400/AST2500 PWM
	  and Fan Tacho controllers.

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

config SENSORS_ASPEED_G6
	tristate "ASPEED g6 PWM and Fan tach driver"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on PWM
	help
	  This driver provides support for ASPEED G6 PWM and Fan Tach
	  controllers.

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

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_BT1_PVT
	tristate "Baikal-T1 Process, Voltage, Temperature sensor driver"
	depends on MIPS_BAIKAL_T1 || COMPILE_TEST
	select POLYNOMIAL
	help
	  If you say yes here you get support for Baikal-T1 PVT sensor
	  embedded into the SoC.

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

config SENSORS_BT1_PVT_ALARMS
	bool "Enable Baikal-T1 PVT sensor alarms"
	depends on SENSORS_BT1_PVT
	help
	  Baikal-T1 PVT IP-block provides threshold registers for each
	  supported sensor. But the corresponding interrupts might be
	  generated by the thresholds comparator only in synchronization with
	  a data conversion. Additionally there is only one sensor data can
	  be converted at a time. All of these makes the interface impossible
	  to be used for the hwmon alarms implementation without periodic
	  switch between the PVT sensors. By default the data conversion is
	  performed on demand from the user-space. If this config is enabled
	  the data conversion will be periodically performed and the data will be
	  saved in the internal driver cache.

config SENSORS_CHIPCAP2
	tristate "Amphenol ChipCap 2 relative humidity and temperature sensor"
	depends on I2C
	help
	  Say yes here to build support for the Amphenol ChipCap 2
	  relative humidity and temperature sensor.

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

config SENSORS_CORSAIR_CPRO
	tristate "Corsair Commander Pro controller"
	depends on HID
	help
	  If you say yes here you get support for the Corsair Commander Pro
	  controller.

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

config SENSORS_CORSAIR_PSU
	tristate "Corsair PSU HID controller"
	depends on HID
	help
	  If you say yes here you get support for Corsair PSUs with a HID
	  interface.
	  Currently this driver supports the (RM/HX)550i, (RM/HX)650i,
	  (RM/HX)750i, (RM/HX)850i, (RM/HX)1000i and HX1200i power supplies
	  by Corsair.

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

config SENSORS_CROS_EC
	tristate "ChromeOS Embedded Controller sensors"
	depends on MFD_CROS_EC_DEV
	default MFD_CROS_EC_DEV
	help
	  If you say yes here you get support for ChromeOS Embedded Controller
	  sensors.

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

config SENSORS_DRIVETEMP
	tristate "Hard disk drives with temperature sensors"
	depends on SCSI && ATA
	help
	  If you say yes you get support for the temperature sensor on
	  hard disk drives.

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

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_DELL_SMM
	tristate "Dell laptop SMM BIOS hwmon driver"
	depends on ACPI_WMI
	depends on X86
	imply THERMAL
	help
	  This hwmon driver adds support for reporting temperature of different
	  sensors and controls the fans on Dell laptops via System Management
	  Mode provided by Dell BIOS.

	  When option I8K is also enabled this driver provides legacy /proc/i8k
	  userspace interface for i8kutils package.

config I8K
	bool "Legacy /proc/i8k interface of Dell laptop SMM BIOS hwmon driver"
	depends on SENSORS_DELL_SMM
	depends on PROC_FS
	help
	  This option enables the legacy /proc/i8k userspace interface of the
	  dell-smm-hwmon driver. The character file /proc/i8k exposes the BIOS
	  version, temperatures and allows control of fan speeds of some Dell
	  laptops. Sometimes it also reports power and hotkey status.

	  This interface is required to run programs from the i8kutils package.

	  Say Y if you intend to run userspace programs that use this interface.
	  Say N otherwise.

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_SPARX5
	tristate "Sparx5 SoC temperature sensor"
	depends on ARCH_SPARX5 || COMPILE_TEST
	help
	  If you say yes here you get support for temperature monitoring
	  with the Microchip Sparx5 SoC.

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

config SENSORS_F71805F
	tristate "Fintek F71805F/FG, F71806F/FG and F71872F/FG"
	depends on HAS_IOPORT
	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 HAS_IOPORT
	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_GSC
	tristate "Gateworks System Controller ADC"
	depends on MFD_GATEWORKS_GSC
	help
	  Support for the Gateworks System Controller A/D converters.

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

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 || COMPILE_TEST) && 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_FTSTEUTATES
	tristate "Fujitsu Technology Solutions sensor chip Teutates"
	depends on I2C && WATCHDOG
	select WATCHDOG_CORE
	help
	  If you say yes here you get support for the Fujitsu Technology
	  Solutions (FTS) sensor chip "Teutates" including support for
	  the integrated watchdog.

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

config SENSORS_GIGABYTE_WATERFORCE
	tristate "Gigabyte Waterforce X240/X280/X360 AIO CPU coolers"
	depends on USB_HID
	help
	  If you say yes here you get support for hardware monitoring for the
	  Gigabyte Waterforce X240/X280/X360 all-in-one CPU liquid coolers.

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

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 OF_GPIO
	depends on GPIOLIB || COMPILE_TEST
	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_GXP_FAN_CTRL
	tristate "HPE GXP fan controller"
	depends on ARCH_HPE_GXP || COMPILE_TEST
	help
	  If you say yes here you get support for GXP fan control functionality.

	  The GXP controls fan function via the CPLD through the use of PWM
	  registers. This driver reports status and pwm setting of the fans.

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_HS3001
	tristate "Renesas HS3001 humidity and temperature sensors"
	depends on I2C
	help
	  If you say yes here you get support for the Renesas HS3001,
	  to HS3004 humidity and temperature sensors.

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

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.rst for details.

config SENSORS_IT87
	tristate "ITE IT87xx and compatibles"
	depends on HAS_IOPORT
	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, IT8732F, IT8758E,
	  IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E,
	  IT8603E, IT8620E, IT8623E, and IT8628E 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_JC42
	tristate "JEDEC JC42.4 compliant memory module temperature sensors"
	depends on I2C
	select REGMAP_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,
	  MCP9808, 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_POWERZ
	tristate "ChargerLAB POWER-Z USB-C tester"
	depends on USB
	help
	  If you say yes here you get support for ChargerLAB POWER-Z series of
	  USB-C charging testers.

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

config SENSORS_POWR1220
	tristate "Lattice POWR1220 Power Monitoring"
	depends on I2C
	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_LAN966X
	tristate "Microchip LAN966x Hardware Monitoring"
	depends on SOC_LAN966 || COMPILE_TEST
	select REGMAP
	select POLYNOMIAL
	help
	  If you say yes here you get support for temperature monitoring
	  on the Microchip LAN966x SoC.

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

config SENSORS_LENOVO_EC
        tristate "Sensor reader for Lenovo ThinkStations"
        depends on X86
        help
          If you say yes here you get support for LENOVO
          EC Sensor data on newer ThinkStation systems

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

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_LOCHNAGAR
	tristate "Lochnagar Hardware Monitor"
	depends on MFD_LOCHNAGAR
	help
	  If you say yes here you get support for Lochnagar 2 temperature,
	  voltage and current sensors abilities.

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

config SENSORS_LTC2945
	tristate "Linear Technology LTC2945"
	depends on I2C
	select REGMAP_I2C
	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_LTC2947
	tristate

config SENSORS_LTC2947_I2C
	tristate "Analog Devices LTC2947 High Precision Power and Energy Monitor over I2C"
	depends on I2C
	select REGMAP_I2C
	select SENSORS_LTC2947
	help
	  If you say yes here you get support for Linear Technology LTC2947
	  I2C High Precision Power and Energy Monitor

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

config SENSORS_LTC2947_SPI
	tristate "Analog Devices LTC2947 High Precision Power and Energy Monitor over SPI"
	depends on SPI_MASTER
	select REGMAP_SPI
	select SENSORS_LTC2947
	help
	  If you say yes here you get support for Linear Technology LTC2947
	  SPI High Precision Power and Energy Monitor

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

config SENSORS_LTC2990
	tristate "Linear Technology LTC2990"
	depends on I2C
	help
	  If you say yes here you get support for Linear Technology LTC2990
	  I2C System Monitor. The LTC2990 supports a combination of voltage,
	  current and temperature monitoring.

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

config SENSORS_LTC2991
	tristate "Analog Devices LTC2991"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Analog Devices LTC2991
	  Octal I2C Voltage, Current, and Temperature Monitor. The LTC2991
	  supports a combination of voltage, current and temperature monitoring.

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

config SENSORS_LTC2992
	tristate "Linear Technology LTC2992"
	depends on I2C
	depends on GPIOLIB
	help
	  If you say yes here you get support for Linear Technology LTC2992
	  I2C System Monitor. The LTC2992 measures current, voltage, and
	  power of two supplies.

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

config SENSORS_LTC4151
	tristate "Linear Technology LTC4151"
	depends on I2C
	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
	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
	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
	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
	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
	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_LTC4282
	tristate "Analog Devices LTC4282"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Analog Devices LTC4282
	  High Current Hot Swap Controller I2C interface.

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

config SENSORS_LTQ_CPUTEMP
	bool "Lantiq cpu temperature sensor driver"
	depends on SOC_XWAY
	help
	  If you say yes here you get support for the temperature
	  sensor inside your CPU.

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_MAX127
	tristate "Maxim MAX127 12-bit 8-channel Data Acquisition System"
	depends on I2C
	help
	  Say y here to support Maxim's MAX127 DAS chips.

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

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
	select REGMAP_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_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_MAX31722
	tristate "MAX31722 temperature sensor"
	depends on SPI
	help
	  Support for the Maxim Integrated MAX31722/MAX31723 digital
	  thermometers/thermostats operating over an SPI interface.

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

config SENSORS_MAX31730
	tristate "MAX31730 temperature sensor"
	depends on I2C
	help
	  Support for the Maxim Integrated MAX31730 3-Channel Remote
	  Temperature Sensor.

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

config SENSORS_MAX31760
	tristate "MAX31760 fan speed controller"
	depends on I2C
	select REGMAP_I2C
	help
	  Support for the Analog Devices MAX31760 Precision Fan-Speed
	  Controller. MAX31760 integrates temperature sensing along with
	  precision PWM fan control.

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

config MAX31827
	tristate "MAX31827 low-power temperature switch and similar devices"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for MAX31827, MAX31828 and
	  MAX31829 low-power temperature switches and sensors connected with I2C.

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

config SENSORS_MAX6620
	tristate "Maxim MAX6620 fan controller"
	depends on I2C
	help
	  If you say yes here you get support for the MAX6620
	  fan controller.

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

config SENSORS_MAX6621
	tristate "Maxim MAX6621 sensor chip"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for MAX6621 sensor chip.
	  MAX6621 is a PECI-to-I2C translator provides an efficient,
	  low-cost solution for PECI-to-SMBus/I2C protocol conversion.
	  It allows reading the temperature from the PECI-compliant
	  host directly from up to four PECI-enabled CPUs.

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

config SENSORS_MAX6639
	tristate "Maxim MAX6639 sensor chip"
	depends on I2C
	select REGMAP_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_MAX6650
	tristate "Maxim MAX6650 sensor chip"
	depends on I2C
	depends on THERMAL || THERMAL=n
	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_MAX31790
	tristate "Maxim MAX31790 sensor chip"
	depends on I2C
	help
	  If you say yes here you get support for 6-Channel PWM-Output
	  Fan RPM Controller.

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

config SENSORS_MC34VR500
	tristate "NXP MC34VR500 hardware monitoring driver"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the temperature and input
	  voltage sensors of the NXP MC34VR500.

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_MLXREG_FAN
	tristate "Mellanox FAN driver"
	depends on MELLANOX_PLATFORM
	imply THERMAL
	select REGMAP
	help
	  This option enables support for the FAN control on the Mellanox
	  Ethernet and InfiniBand switches. The driver can be activated by the
	  platform device add call. Say Y to enable these. To compile this
	  driver as a module, choose 'M' here: the module will be called
	  mlxreg-fan.

config SENSORS_TC654
	tristate "Microchip TC654/TC655 and compatibles"
	depends on I2C
	help
	  If you say yes here you get support for TC654 and TC655.
	  The TC654 and TC655 are PWM mode fan speed controllers with
	  FanSense technology for use with brushless DC fans.

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

config SENSORS_TPS23861
	tristate "Texas Instruments TPS23861 PoE PSE"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Texas Instruments
	  TPS23861 802.3at PoE PSE chips.

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

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_MR75203
	tristate "Moortec Semiconductor MR75203 PVT Controller"
	select REGMAP_MMIO
	help
	  If you say yes here you get support for Moortec MR75203
	  PVT controller.

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

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, TMP122/TMP124,
	  TMP125 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
	select REGMAP_I2C
	help
	  If you say yes here you get support for one common type of
	  temperature sensor chip, with models including:

		- Analog Devices ADT75
		- Atmel (now Microchip) AT30TS74
		- 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
		- ST Microelectronics STLM75
		- 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
	select REGMAP
	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 LM84,
	  LM90, LM86, LM89 and LM99, Analog Devices ADM1020, ADM2021, ADM1021A,
	  ADM1023, ADM1032, ADT7461, ADT7461A, ADT7481, ADT7482, and ADT7483A,
	  Maxim MAX1617, MAX6642, MAX6646, MAX6647, MAX6648, MAX6649, MAX6654,
	  MAX6657, MAX6658, MAX6659, MAX6680, MAX6681, MAX6692, MAX6695,
	  MAX6696,
	  ON Semiconductor NCT1008, NCT210, NCT72, NCT214, NCT218,
	  Winbond/Nuvoton W83L771W/G/AWG/ASG,
	  Philips NE1618, SA56004, GMT G781, Texas Instruments TMP451 and TMP461
	  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
	select REGMAP_I2C
	help
	  If you say yes here you get support for National Semiconductor LM92
	  and LM76 as well as Maxim MAX6633/6634/6635 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
	select REGMAP_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
	select REGMAP_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 HAS_IOPORT
	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 HAS_IOPORT
	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"
	depends on 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, NCP15WL333,
	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 and
	  B57891S0103 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 HAS_IOPORT
	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_CORE
	tristate
	select REGMAP
	help
	  This module contains common code shared by the platform and
	  i2c versions of the nct6775 driver; it is not useful on its
	  own.

	  If built as a module, the module will be called
	  nct6775-core.

config SENSORS_NCT6775
	tristate "Platform driver for Nuvoton NCT6775F and compatibles"
	depends on HAS_IOPORT
	depends on !PPC
	depends on ACPI || ACPI=n
	select HWMON_VID
	select SENSORS_NCT6775_CORE
	help
	  If you say yes here you get support for the hardware monitoring
	  functionality of the Nuvoton NCT6106D, NCT6775F, NCT6776F, NCT6779D,
	  NCT6791D, NCT6792D, NCT6793D, NCT6795D, NCT6796D, 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_NCT6775_I2C
	tristate "I2C driver for Nuvoton NCT6775F and compatibles"
	depends on I2C
	select REGMAP_I2C
	select SENSORS_NCT6775_CORE
	help
	  If you say yes here you get support for the hardware monitoring
	  functionality of the Nuvoton NCT6106D, NCT6775F, NCT6776F, NCT6779D,
	  NCT6791D, NCT6792D, NCT6793D, NCT6795D, NCT6796D, and compatible
	  Super-I/O chips via their I2C interface.

	  If you're not building a kernel for a BMC, this is probably
	  not the driver you want (see CONFIG_SENSORS_NCT6775).

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

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 && WATCHDOG
	select WATCHDOG_CORE
	help
	  If you say yes here you get support for the Nuvoton NCT7904
	  hardware monitoring chip, including manual fan speed control
	  and support for the integrated watchdog.

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

config SENSORS_NPCM7XX
	tristate "Nuvoton NPCM750 and compatible PWM and Fan controllers"
	imply THERMAL
	help
	  This driver provides support for Nuvoton NPCM750/730/715/705 PWM
          and Fan controllers.

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

config SENSORS_NSA320
	tristate "ZyXEL NSA320 and compatible fan speed and temperature sensors"
	depends on GPIOLIB && OF
	depends on MACH_KIRKWOOD || COMPILE_TEST
	help
	  If you say yes here you get support for hardware monitoring
	  for the ZyXEL NSA320 Media Server and other compatible devices
	  (probably the NSA325 and some NSA310 variants).

	  The sensor data is taken from a Holtek HT46R065 microcontroller
	  connected to GPIO lines.

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

config SENSORS_NZXT_KRAKEN2
	tristate "NZXT Kraken X42/X51/X62/X72 liquid coolers"
	depends on USB_HID
	help
	  If you say yes here you get support for hardware monitoring for the
	  NZXT Kraken X42/X52/X62/X72 all-in-one CPU liquid coolers.

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

config SENSORS_NZXT_KRAKEN3
	tristate "NZXT Kraken X53/X63/X73, Z53/Z63/Z73 coolers"
	depends on USB_HID
	help
	  If you say yes here you get support for hardware monitoring for the
	  NZXT Kraken X53/X63/X73, Z53/Z63/Z73 all-in-one CPU liquid coolers.

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

config SENSORS_NZXT_SMART2
	tristate "NZXT RGB & Fan Controller/Smart Device v2"
	depends on USB_HID
	help
	  If you say yes here you get support for hardware monitoring for the
	  NZXT RGB & Fan Controller/Smart Device v2.

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

source "drivers/hwmon/occ/Kconfig"

config SENSORS_OXP
	tristate "OneXPlayer EC fan control"
	depends on ACPI
	depends on X86
	help
		If you say yes here you get support for fan readings and control over
		OneXPlayer handheld devices. Only OneXPlayer mini AMD handheld variant
		boards are supported.

		Can also be built as a module. In that case it will be called oxp-sensors.

config SENSORS_PCF8591
	tristate "Philips PCF8591 ADC/DAC"
	depends on I2C
	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/peci/Kconfig"

source "drivers/hwmon/pmbus/Kconfig"

config SENSORS_PT5161L
	tristate "Astera Labs PT5161L PCIe retimer hardware monitoring"
	depends on I2C
	help
	  If you say yes here you get support for temperature monitoring
	  on the Astera Labs PT5161L PCIe retimer.

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

config SENSORS_PWM_FAN
	tristate "PWM fan"
	depends on PWM || 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_RASPBERRYPI_HWMON
	tristate "Raspberry Pi voltage monitor"
	depends on RASPBERRYPI_FIRMWARE || (COMPILE_TEST && !RASPBERRYPI_FIRMWARE)
	help
	  If you say yes here you get support for voltage sensor on the
	  Raspberry Pi.

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

config SENSORS_SL28CPLD
	tristate "Kontron sl28cpld hardware monitoring driver"
	depends on MFD_SL28CPLD || COMPILE_TEST
	help
	  If you say yes here you get support for the fan supervisor of the
	  sl28cpld board management controller.

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

config SENSORS_SBTSI
	tristate "Emulated SB-TSI temperature sensor"
	depends on I2C
	help
	  If you say yes here you get support for emulated temperature
	  sensors on AMD SoCs with SB-TSI interface connected to a BMC device.

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

config SENSORS_SBRMI
	tristate "Emulated SB-RMI sensor"
	depends on I2C
	help
	  If you say yes here you get support for emulated RMI
	  sensors on AMD SoCs with APML interface connected to a BMC device.

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

config SENSORS_SHT15
	tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
	depends on GPIOLIB || COMPILE_TEST
	select BITREVERSE
	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_SHT3x
	tristate "Sensiron humidity and temperature sensors. SHT3x and compat."
	depends on I2C
	select CRC8
	help
	  If you say yes here you get support for the Sensiron SHT30 and SHT31
	  humidity and temperature sensors.

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

config SENSORS_SHT4x
	tristate "Sensiron humidity and temperature sensors. SHT4x and compat."
	depends on I2C
	select CRC8
	help
	  If you say yes here you get support for the Sensiron SHT40, SHT41 and
	  SHT45 humidity and temperature sensors.

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

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, SHTW1,
	  and SHTC3 humidity and temperature sensors.

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

config SENSORS_SIS5595
	tristate "Silicon Integrated Systems Corp. SiS5595"
	depends on PCI && HAS_IOPORT
	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_SY7636A
	tristate "Silergy SY7636A"
	depends on MFD_SY7636A
	help
	  If you say yes here you get support for the thermistor readout of
	  the Silergy SY7636A PMIC.

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

config SENSORS_DME1737
	tristate "SMSC DME1737, SCH311x and compatibles"
	depends on HAS_IOPORT
	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_EMC2305
	tristate "Microchip EMC2305 and compatible EMC2301/2/3"
	depends on I2C
	imply THERMAL
	help
	  If you say yes here you get support for the Microchip EMC2305
	  fan controller chips.
	  The Microchip EMC2305 is a fan controller for up to 5 fans.
	  Fan rotation speeds are reported in RPM.

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

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 HAS_IOPORT
	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 HAS_IOPORT
	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
	select REGMAP

config SENSORS_SCH5627
	tristate "SMSC SCH5627"
	depends on HAS_IOPORT
	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 HAS_IOPORT
	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_STTS751
	tristate "ST Microelectronics STTS751"
	depends on I2C
	help
	  If you say yes here you get support for STTS751
	  temperature sensor chips.

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

config SENSORS_SFCTEMP
	tristate "Starfive JH71x0 temperature sensor"
	depends on ARCH_STARFIVE || COMPILE_TEST
	help
	  If you say yes here you get support for temperature sensor
	  on the Starfive JH71x0 SoCs.

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

config SENSORS_SG2042_MCU
	tristate "Sophgo onboard MCU support"
	depends on I2C
	depends on ARCH_SOPHGO || COMPILE_TEST
	help
	  Support for onboard MCU of Sophgo SG2042 SoCs. This mcu provides
	  power control and some basic information.

	  This driver can be built as a module. If so, the module
	  will be called sg2042-mcu.

config SENSORS_SURFACE_FAN
	tristate "Surface Fan Driver"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	help
	  Driver that provides monitoring of the fan on Surface Pro devices that
	  have a fan, like the Surface Pro 9.

	  This makes the fan's current speed accessible through the hwmon
	  system. It does not provide control over the fan, the firmware is
	  responsible for that, this driver merely provides monitoring.

	  Select M or Y here, if you want to be able to read the fan's speed.

config SENSORS_SURFACE_TEMP
	tristate "Microsoft Surface Thermal Sensor Driver"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	help
	  Driver for monitoring thermal sensors connected via the Surface
	  Aggregator Module (embedded controller) on Microsoft Surface devices.

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

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_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
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Texas Instruments
	  AMC6821 hardware monitoring chips.

	  This driver can also be built 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
	select REGMAP_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_INA238
	tristate "Texas Instruments INA238"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the INA238 power monitor
	  chip. This driver supports voltage, current, power and temperature
	  measurements as well as alarm configuration.

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

config SENSORS_INA3221
	tristate "Texas Instruments INA3221 Triple Power Monitor"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for  the TI INA3221 Triple Power
	  Monitor.

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

config SENSORS_SPD5118
	tristate "SPD5118 Compliant Temperature Sensors"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for SPD5118 (JEDEC JESD300)
	  compliant temperature sensors. Such sensors are found on DDR5 memory
	  modules.

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

config SENSORS_SPD5118_DETECT
	bool "Enable detect function"
	depends on SENSORS_SPD5118
	default (!DMI || !X86)
	help
	  If enabled, the driver auto-detects if a chip in the SPD address
	  range is compliant to the SPD51888 standard and auto-instantiates
	  if that is the case. If disabled, SPD5118 compliant devices have
	  to be instantiated by other means. On X86 systems with DMI support
	  this will typically be done from DMI DDR detection code in the
	  I2C SMBus subsystem. Devicetree based systems will instantiate
	  attached devices if the DIMMs are listed in the devicetree file.

	  Disabling the detect function will speed up boot time and reduce
	  the risk of mis-detecting SPD5118 compliant devices. However, it
	  may result in missed DIMMs under some circumstances.

	  If unsure, say Y.

config SENSORS_TC74
	tristate "Microchip TC74"
	depends on I2C
	help
	  If you say yes here you get support for Microchip TC74 single
	  input temperature sensor chips.

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

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

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

config SENSORS_TMP401
	tristate "Texas Instruments TMP401 and compatibles"
	depends on I2C
	select REGMAP
	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_TMP464
	tristate "Texas Instruments TMP464 and compatible"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Texas Instruments TMP464
	  and TMP468 temperature sensor chips.

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

config SENSORS_TMP513
	tristate "Texas Instruments TMP513 and compatibles"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for Texas Instruments TMP512,
	  and TMP513 temperature and power supply sensor chips.

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

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 && HAS_IOPORT
	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 HAS_IOPORT
	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 && HAS_IOPORT
	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_W83773G
	tristate "Nuvoton W83773G"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Nuvoton W83773G hardware
	  monitoring chip.

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

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"
	depends on SENSORS_W83795
	help
	  If you say yes here, support for automatic fan speed control
	  will be included in the driver.

	  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 HAS_IOPORT
	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"
	depends on HAS_IOPORT
	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 and W83667HG-B.

	  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_XGENE
	tristate "APM X-Gene SoC hardware monitoring driver"
	depends on XGENE_SLIMPRO_MBOX || PCC
	help
	  If you say yes here you get support for the temperature
	  and power sensors for APM X-Gene SoC.

config SENSORS_INTEL_M10_BMC_HWMON
	tristate "Intel MAX10 BMC Hardware Monitoring"
	depends on MFD_INTEL_M10_BMC_CORE
	help
	  This driver provides support for the hardware monitoring functionality
	  on Intel MAX10 BMC chip.

	  This BMC Chip is used on Intel FPGA PCIe Acceleration Cards (PAC). Its
	  sensors monitor various telemetry data of different components on the
	  card, e.g. board temperature, FPGA core temperature/voltage/current.

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.

config SENSORS_ASUS_WMI
	tristate "ASUS WMI X370/X470/B450/X399"
	depends on ACPI_WMI
	help
	  If you say yes here you get support for the ACPI hardware monitoring
	  interface found in X370/X470/B450/X399 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_wmi_sensors.

config SENSORS_ASUS_EC
	tristate "ASUS EC Sensors"
	depends on X86
	help
	  If you say yes here you get support for the ACPI embedded controller
	  hardware monitoring interface found in ASUS motherboards. The driver
	  currently supports B550/X570 boards, although other ASUS boards might
	  provide this monitoring interface as well.

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

config SENSORS_HP_WMI
	tristate "HP WMI Sensors"
	depends on ACPI_WMI
	help
	  If you say yes here you get support for the ACPI hardware monitoring
	  interface found in HP (and some HP Compaq) business-class computers.
	  Available sensors vary between systems. Temperature and fan speed
	  sensors are the most common.

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

endif # ACPI

endif # HWMON
