#
# Generic thermal sysfs drivers configuration
#

menuconfig THERMAL
	tristate "Generic Thermal sysfs driver"
	help
	  Generic Thermal Sysfs driver offers a generic mechanism for
	  thermal management. Usually it's made up of one or more thermal
	  zone and cooling device.
	  Each thermal zone contains its own temperature, trip points,
	  cooling devices.
	  All platforms with ACPI thermal support can use this driver.
	  If you want this support, you should say Y or M here.

config THERMAL_HWMON
	bool "Hardware monitoring support"
	depends on THERMAL
	depends on HWMON=y || HWMON=THERMAL
	help
	  The generic thermal sysfs driver's hardware monitoring support
	  requires a 2.10.7/3.0.2 or later lm-sensors userspace.

	  Say Y if your user-space is new enough.

config THERMAL_PM8901
	tristate "Qualcomm PM8901 Temperature Alarm"
	depends on PMIC8901
	depends on THERMAL
	default n
	help
	  This enables a thermal Sysfs driver for the PMIC 8901 device. It
	  shows up in Sysfs as a thermal zone with multiple trip points.
	  Enabling the thermal zone device via the mode file results in
	  shifting over temperature shutdown control of the PMIC from hardware
	  to software.

config THERMAL_PM8058
	tristate "Qualcomm PM8058 Temperature Alarm"
	depends on PMIC8058
	depends on THERMAL
	depends on SENSORS_MSM_ADC
	default n
	help
	  This enables a thermal Sysfs driver for the PMIC 8058 device. It
	  shows up in Sysfs as a thermal zone with multiple trip points.
	  Enabling the thermal zone device via the mode file results in
	  shifting over temperature shutdown control of the PMIC from hardware
	  to software.

config THERMAL_MSM_POPMEM
	tristate "Qualcomm MSM POP memory temperature sensor"
	depends on THERMAL
	default n
	help
	  This enables a thermal sysfs driver for MSM POP memory. It shows up in
	  sysfs as a thermal zone with one trip point. Due to hardware
	  limitations, the temperatures are reported as "Low Temperature" (20 C)
	  "Normal Temperature" (50 C) and "Out of Spec High Temperature" (85 C).
	  This driver is designed to be used in conjunction with a user space
	  application to make all policy decisions.

config THERMAL_TSENS
	tristate "Qualcomm Tsens Temperature Alarm"
	depends on THERMAL
	default n
	help
	  This enables the thermal sysfs driver for the Tsens device. It shows
	  up in Sysfs as a thermal zone with mutiple trip points. Disabling the
	  thermal zone device via the mode file results in disabling the sensor.
	  Also able to set threshold temperature for both hot and cold and update
	  when a threshold is reached.

config THERMAL_TSENS8960
	tristate "Qualcomm 8960 Tsens Temperature Alarm"
	depends on THERMAL
	help
	  This enables the thermal sysfs driver for the Tsens device. It shows
	  up in Sysfs as a thermal zone with mutiple trip points. Disabling the
	  thermal zone device via the mode file results in disabling the sensor.
	  Also able to set threshold temperature for both hot and cold and update
	  when a threshold is reached.

config THERMAL_PM8XXX
	tristate "Qualcomm PMIC PM8xxx Temperature Alarm"
	depends on THERMAL
	depends on MFD_PM8XXX
	help
	  This enables a thermal Sysfs driver for the PMIC PM8xxx devices. It
	  shows up in Sysfs as a thermal zone with multiple trip points.
	  Enabling the thermal zone device via the mode file results in
	  shifting over temperature shutdown control of the PMIC from hardware
	  to software.
