#
# 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_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.

config THERMAL_MONITOR
	bool "Monitor thermal state and limit CPU Frequency"
	depends on THERMAL_TSENS8960
	default n
	help
	  This enables thermal monitoring capability in the kernel in the
	  absence of a system wide thermal monitoring entity or until such an
	  entity starts running in the userspace. Monitors TSENS temperature
	  and limits the max frequency of the cores.
