#
# Hardware monitoring chip drivers configuration
#

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

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

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

if HWMON

config HWMON_VID
	tristate
	default n

config SENSORS_ABITUGURU
	tristate "Abit uGuru (rev 1 & 2)"
	depends on X86 && EXPERIMENTAL
	help
	  If you say yes here you get support for the sensor part of the first
	  and second revision of the Abit uGuru chip. The voltage and frequency
	  control parts of the Abit uGuru are not supported. The Abit uGuru
	  chip can be found on Abit uGuru featuring motherboards (most modern
	  Abit motherboards from before end 2005). For more info and a list
	  of which motherboards have which revision see
	  Documentation/hwmon/abituguru

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

config SENSORS_ABITUGURU3
	tristate "Abit uGuru (rev 3)"
	depends on X86 && EXPERIMENTAL
	help
	  If you say yes here you get support for the sensor part of the
	  third revision of the Abit uGuru chip. Only reading the sensors
	  and their settings is supported. The third revision of the Abit
	  uGuru chip can be found on recent Abit motherboards (since end
	  2005). For more info and a list of which motherboards have which
	  revision see Documentation/hwmon/abituguru3

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

config SENSORS_AD7418
	tristate "Analog Devices AD7416, AD7417 and AD7418"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Analog Devices
	  AD7416, AD7417 and AD7418 temperature monitoring chips.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

config SENSORS_LM87
	tristate "National Semiconductor LM87 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 and Maxim MAX6657,
	  MAX6658, MAX6659, MAX6680 and MAX6681 sensor chips.

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

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

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

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

config SENSORS_LM93
	tristate "National Semiconductor LM93 and compatibles"
	depends on I2C
	select HWMON_VID
	help
	  If you say yes here you get support for National Semiconductor LM93
	  sensor chips.

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

config SENSORS_MAX1619
	tristate "Maxim MAX1619 sensor chip"
	depends on I2C
	help
	  If you say yes here you get support for MAX1619 sensor chip.

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

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

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

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

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

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

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

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

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

config SENSORS_DME1737
	tristate "SMSC DME1737, SCH311x and compatibles"
	depends on I2C && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the hardware monitoring
	  and fan control features of the SMSC DME1737 (and compatibles
	  like the Asus A8000) and SCH311x Super-I/O chips.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

config SENSORS_W83781D
	tristate "Winbond W83781D, W83782D, W83783S, 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 && EXPERIMENTAL
	select HWMON_VID
	help
	  If you say yes here you get support for the Winbond W83791D chip.

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

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

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

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

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

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

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

config SENSORS_W83L786NG
	tristate "Winbond W83L786NG, W83L786NR"
	depends on I2C && EXPERIMENTAL
	help
	  If you say yes here you get support for the Winbond W83L786NG
	  and W83L786NR sensor chips.

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

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

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

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

	  This driver also supports the W83627EHG, which is the lead-free
	  version of the W83627EHF, and the W83627DHG, which is a similar
	  chip suited for specific Intel processors that use PECI such as
	  the Core 2 Duo.

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

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

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

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

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

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

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

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

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

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

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

endif # HWMON
