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

if THERMAL

config THERMAL_HWMON
	bool
	depends on HWMON=y || HWMON=THERMAL
	default y

choice
	prompt "Default Thermal governor"
	default THERMAL_DEFAULT_GOV_STEP_WISE
	help
	  This option sets which thermal governor shall be loaded at
	  startup. If in doubt, select 'step_wise'.

config THERMAL_DEFAULT_GOV_STEP_WISE
	bool "step_wise"
	select THERMAL_GOV_STEP_WISE
	help
	  Use the step_wise governor as default. This throttles the
	  devices one step at a time.

config THERMAL_DEFAULT_GOV_FAIR_SHARE
	bool "fair_share"
	select THERMAL_GOV_FAIR_SHARE
	help
	  Use the fair_share governor as default. This throttles the
	  devices based on their 'contribution' to a zone. The
	  contribution should be provided through platform data.

config THERMAL_DEFAULT_GOV_USER_SPACE
	bool "user_space"
	select THERMAL_GOV_USER_SPACE
	help
	  Select this if you want to let the user space manage the
	  lpatform thermals.

endchoice

config THERMAL_GOV_FAIR_SHARE
	bool "Fair-share thermal governor"
	help
	  Enable this to manage platform thermals using fair-share governor.

config THERMAL_GOV_STEP_WISE
	bool "Step_wise thermal governor"
	help
	  Enable this to manage platform thermals using a simple linear

config THERMAL_GOV_USER_SPACE
	bool "User_space thermal governor"
	help
	  Enable this to let the user space manage the platform thermals.

config CPU_THERMAL
	tristate "generic cpu cooling support"
	depends on CPU_FREQ
	select CPU_FREQ_TABLE
	help
	  This implements the generic cpu cooling mechanism through frequency
	  reduction, cpu hotplug and any other ways of reducing temperature. An
	  ACPI version of this already exists(drivers/acpi/processor_thermal.c).
	  This will be useful for platforms using the generic thermal interface
	  and not the ACPI interface.
	  If you want this support, you should say Y here.

config THERMAL_EMULATION
	bool "Thermal emulation mode support"
	help
	  Enable this option to make a emul_temp sysfs node in thermal zone
	  directory to support temperature emulation. With emulation sysfs node,
	  user can manually input temperature and test the different trip
	  threshold behaviour for simulation purpose.

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_TSENS8974
	tristate "Qualcomm 8974 TSENS Temperature driver"
	depends on THERMAL
	help
	  This enables the thermal sysfs driver for the TSENS device. It shows
	  up in Sysfs as a thermal zone with multiple trip points. Also able
	  to set threshold temperature for both warm and cool and update
	  thermal userspace client when a threshold is reached. Warm/Cool
	  temperature thresholds can be set independently for each sensor.

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 || THERMAL_TSENS8974
	depends on CPU_FREQ_MSM
	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.

config SPEAR_THERMAL
	bool "SPEAr thermal sensor driver"
	depends on PLAT_SPEAR
	depends on OF
	help
	  Enable this to plug the SPEAr thermal sensor driver into the Linux
	  thermal framework

config RCAR_THERMAL
	tristate "Renesas R-Car thermal driver"
	depends on ARCH_SHMOBILE
	help
	  Enable this to plug the R-Car thermal sensor driver into the Linux
	  thermal framework

config KIRKWOOD_THERMAL
	tristate "Temperature sensor on Marvell Kirkwood SoCs"
	depends on ARCH_KIRKWOOD
	depends on OF
	help
	  Support for the Kirkwood thermal sensor driver into the Linux thermal
	  framework. Only kirkwood 88F6282 and 88F6283 have this sensor.

config EXYNOS_THERMAL
	tristate "Temperature sensor on Samsung EXYNOS"
	depends on (ARCH_EXYNOS4 || ARCH_EXYNOS5)
	depends on CPU_THERMAL
	help
	  If you say yes here you get support for TMU (Thermal Management
	  Unit) on SAMSUNG EXYNOS series of SoC.

config EXYNOS_THERMAL_EMUL
	bool "EXYNOS TMU emulation mode support"
	depends on EXYNOS_THERMAL
	help
	  Exynos 4412 and 4414 and 5 series has emulation mode on TMU.
	  Enable this option will be make sysfs node in exynos thermal platform
	  device directory to support emulation mode. With emulation mode sysfs
	  node, you can manually input temperature to TMU for simulation purpose.

config DOVE_THERMAL
	tristate "Temperature sensor on Marvell Dove SoCs"
	depends on ARCH_DOVE
	depends on OF
	help
	  Support for the Dove thermal sensor driver in the Linux thermal
	  framework.

config DB8500_THERMAL
	bool "DB8500 thermal management"
	depends on ARCH_U8500
	default y
	help
	  Adds DB8500 thermal management implementation according to the thermal
	  management framework. A thermal zone with several trip points will be
	  created. Cooling devices can be bound to the trip points to cool this
	  thermal zone if trip points reached.

config DB8500_CPUFREQ_COOLING
	tristate "DB8500 cpufreq cooling"
	depends on ARCH_U8500
	depends on CPU_THERMAL
	default y
	help
	  Adds DB8500 cpufreq cooling devices, and these cooling devices can be
	  bound to thermal zone trip points. When a trip point reached, the
	  bound cpufreq cooling device turns active to set CPU frequency low to
	  cool down the CPU.

config INTEL_POWERCLAMP
	tristate "Intel PowerClamp idle injection driver"
	depends on THERMAL
	depends on X86
	depends on CPU_SUP_INTEL
	help
	  Enable this to enable Intel PowerClamp idle injection driver. This
	  enforce idle time which results in more package C-state residency. The
	  user interface is exposed via generic thermal framework.

config THERMAL_QPNP
	tristate "Qualcomm Plug-and-Play PMIC Temperature Alarm"
	depends on THERMAL
	depends on OF
	depends on SPMI
	depends on OF_SPMI
	help
	  This enables a thermal Sysfs driver for Qualcomm plug-and-play (QPNP)
	  PMIC devices. It shows up in Sysfs as a thermal zone with multiple
	  trip points. The temperature reported by the thermal zone reflects the
	  real time die temperature if an ADC is present or an estimate of the
	  temperature based upon the over temperature stage value if no ADC is
	  available. If allowed via compile time configuration; enabling the
	  thermal zone device via the mode file results in shifting PMIC over
	  temperature shutdown control from hardware to software.

config THERMAL_QPNP_ADC_TM
	tristate "Qualcomm 8974 Thermal Monitor ADC Driver"
	depends on THERMAL && SPMI
	help
	  This enables the thermal Sysfs driver for the ADC thermal monitoring
	  device. It shows up in Sysfs as a thermal zone with multiple 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.
endif
