#
# PMBus chip drivers configuration
#

menuconfig PMBUS
	tristate "PMBus support"
	depends on I2C
	default n
	help
	  Say yes here if you want to enable PMBus support.

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

if PMBUS

config SENSORS_PMBUS
	tristate "Generic PMBus devices"
	default y
	help
	  If you say yes here you get hardware monitoring support for generic
	  PMBus devices, including but not limited to ADP4000, BMR453, BMR454,
	  MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, TPS40400, TPS544B20,
	  TPS544B25, TPS544C20, TPS544C25, and UDT020.

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

config SENSORS_ADM1275
	tristate "Analog Devices ADM1275 and compatibles"
	default n
	help
	  If you say yes here you get hardware monitoring support for Analog
	  Devices ADM1075, ADM1275, ADM1276, ADM1278, ADM1293, and ADM1294
	  Hot-Swap Controller and Digital Power Monitors.

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

config SENSORS_IBM_CFFPS
	tristate "IBM Common Form Factor Power Supply"
	help
	  If you say yes here you get hardware monitoring support for the IBM
	  Common Form Factor power supply.

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

config SENSORS_IR35221
	tristate "Infineon IR35221"
	default n
	help
	  If you say yes here you get hardware monitoring support for the
	  Infineon IR35221 controller.

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

config SENSORS_LM25066
	tristate "National Semiconductor LM25066 and compatibles"
	default n
	help
	  If you say yes here you get hardware monitoring support for National
	  Semiconductor LM25056, LM25066, LM5064, and LM5066.

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

config SENSORS_LTC2978
	tristate "Linear Technologies LTC2978 and compatibles"
	default n
	help
	  If you say yes here you get hardware monitoring support for Linear
	  Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880,
	  LTC3883, LTC3886, LTC3887, LTCM2987, LTM4675, and LTM4676.

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

config SENSORS_LTC2978_REGULATOR
	bool "Regulator support for LTC2978 and compatibles"
	depends on SENSORS_LTC2978 && REGULATOR
	help
	  If you say yes here you get regulator support for Linear
	  Technology LTC2974, LTC2977, LTC2978, LTC3880, LTC3883, and LTM4676.

config SENSORS_LTC3815
	tristate "Linear Technologies LTC3815"
	default n
	help
	  If you say yes here you get hardware monitoring support for Linear
	  Technology LTC3815.

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

config SENSORS_MAX16064
	tristate "Maxim MAX16064"
	default n
	help
	  If you say yes here you get hardware monitoring support for Maxim
	  MAX16064.

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

config SENSORS_MAX20751
	tristate "Maxim MAX20751"
	default n
	help
	  If you say yes here you get hardware monitoring support for Maxim
	  MAX20751.

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

config SENSORS_MAX34440
	tristate "Maxim MAX34440 and compatibles"
	default n
	help
	  If you say yes here you get hardware monitoring support for Maxim
	  MAX34440, MAX34441, MAX34446, MAX34460, and MAX34461.

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

config SENSORS_MAX8688
	tristate "Maxim MAX8688"
	default n
	help
	  If you say yes here you get hardware monitoring support for Maxim
	  MAX8688.

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

config SENSORS_TPS40422
	tristate "TI TPS40422"
	default n
	help
	  If you say yes here you get hardware monitoring support for TI
	  TPS40422.

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

config SENSORS_TPS53679
	tristate "TI TPS53679"
	help
	  If you say yes here you get hardware monitoring support for TI
	  TPS53679.

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

config SENSORS_UCD9000
	tristate "TI UCD90120, UCD90124, UCD90160, UCD9090, UCD90910"
	default n
	help
	  If you say yes here you get hardware monitoring support for TI
	  UCD90120, UCD90124, UCD90160, UCD9090, UCD90910, Sequencer and System
	  Health Controllers.

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

config SENSORS_UCD9200
	tristate "TI UCD9220, UCD9222, UCD9224, UCD9240, UCD9244, UCD9246, UCD9248"
	default n
	help
	  If you say yes here you get hardware monitoring support for TI
	  UCD9220, UCD9222, UCD9224, UCD9240, UCD9244, UCD9246, and UCD9248
	  Digital PWM System Controllers.

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

config SENSORS_ZL6100
	tristate "Intersil ZL6100 and compatibles"
	default n
	help
	  If you say yes here you get hardware monitoring support for Intersil
	  ZL2004, ZL2005, ZL2006, ZL2008, ZL2105, ZL2106, ZL6100, ZL6105,
	  ZL9101M, and ZL9117M Digital DC/DC Controllers, as well as for
	  Ericsson BMR450, BMR451, BMR462, BMR463, and BMR464.

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

endif # PMBUS
