#
# 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_STATISTICS
	bool "Thermal state transition statistics"
	help
	  Export thermal state transition statistics information through sysfs.

	  If in doubt, say N.

config THERMAL_EMERGENCY_POWEROFF_DELAY_MS
	int "Emergency poweroff delay in milli-seconds"
	depends on THERMAL
	default 0
	help
	  Thermal subsystem will issue a graceful shutdown when
	  critical temperatures are reached using orderly_poweroff(). In
	  case of failure of an orderly_poweroff(), the thermal emergency
	  poweroff kicks in after a delay has elapsed and shuts down the system.
	  This config is number of milliseconds to delay before emergency
	  poweroff kicks in. Similarly to the critical trip point,
	  the delay should be carefully profiled so as to give adequate
	  time for orderly_poweroff() to finish on regular execution.
	  If set to 0 emergency poweroff will not be supported.

	  In doubt, leave as 0.

config THERMAL_HWMON
	bool
	prompt "Expose thermal sensors as hwmon device"
	depends on HWMON=y || HWMON=THERMAL
	default y
	help
	  In case a sensor is registered with the thermal
	  framework, this option will also register it
	  as a hwmon. The sensor will then have the common
	  hwmon sysfs interface.

	  Say 'Y' here if you want all thermal sensors to
	  have hwmon sysfs interface too.

config THERMAL_OF
	bool
	prompt "APIs to parse thermal data out of device tree"
	depends on OF
	default y
	help
	  This options provides helpers to add the support to
	  read and parse thermal data definitions out of the
	  device tree blob.

	  Say 'Y' here if you need to build thermal infrastructure
	  based on device tree.

config THERMAL_WRITABLE_TRIPS
	bool "Enable writable trip points"
	help
	  This option allows the system integrator to choose whether
	  trip temperatures can be changed from userspace. The
	  writable trips need to be specified when setting up the
	  thermal zone but the choice here takes precedence.

	  Say 'Y' here if you would like to allow userspace tools to
	  change trip temperatures.

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
	  platform thermals.

config THERMAL_DEFAULT_GOV_POWER_ALLOCATOR
	bool "power_allocator"
	select THERMAL_GOV_POWER_ALLOCATOR
	help
	  Select this if you want to control temperature based on
	  system and device power allocation. This governor can only
	  operate on cooling devices that implement the power API.

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

config THERMAL_GOV_BANG_BANG
	bool "Bang Bang thermal governor"
	default n
	help
	  Enable this to manage platform thermals using bang bang governor.

	  Say 'Y' here if you want to use two point temperature regulation
	  used for fans without throttling.  Some fan drivers depend on this
	  governor to be enabled (e.g. acerhdf).

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

config THERMAL_GOV_POWER_ALLOCATOR
	bool "Power allocator thermal governor"
	help
	  Enable this to manage platform thermals by dynamically
	  allocating and limiting power to devices.

config CPU_THERMAL
	bool "generic cpu cooling support"
	depends on CPU_FREQ
	depends on THERMAL_OF
	select PM_OPP
	help
	  This implements the generic cpu cooling mechanism through frequency
	  reduction. 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 CLOCK_THERMAL
	bool "Generic clock cooling support"
	depends on COMMON_CLK
	depends on PM_OPP
	help
	  This entry implements the generic clock cooling mechanism through
	  frequency clipping. Typically used to cool off co-processors. The
	  device that is configured to use this cooling mechanism will be
	  controlled to reduce clock frequency whenever temperature is high.

config DEVFREQ_THERMAL
	bool "Generic device cooling support"
	depends on PM_DEVFREQ
	depends on PM_OPP
	help
	  This implements the generic devfreq cooling mechanism through
	  frequency reduction for devices using devfreq.

	  This will throttle the device by limiting the maximum allowed DVFS
	  frequency corresponding to the cooling level.

	  In order to use the power extensions of the cooling device,
	  devfreq should use the simple_ondemand governor.

	  If you want this support, you should say Y here.

config GPU_THERMAL
	bool "generic gpu cooling support"
	depends on THERMAL_OF
	help
	  This implements the generic gpu cooling mechanism through frequency
	  reduction.

	  If you want this support, you should say Y here.

config ISP_THERMAL
	bool "generic isp cooling support"
	depends on THERMAL_OF
	help
	  This implements the generic isp cooling mechanism through fps
	  reduction.

	  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.

	  WARNING: Be careful while enabling this option on production systems,
	  because userland can easily disable the thermal policy by simply
	  flooding this sysfs node with low temperature values.

config HISI_THERMAL
	tristate "Hisilicon thermal driver"
	depends on ARCH_HISI || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	default y
	help
	  Enable this to plug hisilicon's thermal sensor driver into the Linux
	  thermal framework. cpufreq is used as the cooling device to throttle
	  CPUs when the passive trip is crossed.

config IMX_THERMAL
	tristate "Temperature sensor driver for Freescale i.MX SoCs"
	depends on (ARCH_MXC && CPU_THERMAL) || COMPILE_TEST
	depends on MFD_SYSCON
	depends on OF
	help
	  Support for Temperature Monitor (TEMPMON) found on Freescale i.MX SoCs.
	  It supports one critical trip point and one passive trip point.  The
	  cpufreq is used as the cooling device to throttle CPUs when the
	  passive trip is crossed.

config MAX77620_THERMAL
	tristate "Temperature sensor driver for Maxim MAX77620 PMIC"
	depends on MFD_MAX77620
	depends on OF
	help
	  Support for die junction temperature warning alarm for Maxim
	  Semiconductor PMIC MAX77620 device. Device generates two alarm
	  interrupts when PMIC die temperature cross the threshold of
	  120 degC and 140 degC.

config QORIQ_THERMAL
	tristate "QorIQ Thermal Monitoring Unit"
	depends on THERMAL_OF
	depends on HAS_IOMEM
	help
	  Support for Thermal Monitoring Unit (TMU) found on QorIQ platforms.
	  It supports one critical trip point and one passive trip point. The
	  cpufreq is used as the cooling device to throttle CPUs when the
	  passive trip is crossed.

config SPEAR_THERMAL
	tristate "SPEAr thermal sensor driver"
	depends on PLAT_SPEAR || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this to plug the SPEAr thermal sensor driver into the Linux
	  thermal framework.

config ROCKCHIP_THERMAL
	tristate "Rockchip thermal driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on RESET_CONTROLLER
	depends on HAS_IOMEM
	help
	  Rockchip thermal driver provides support for Temperature sensor
	  ADC (TS-ADC) found on Rockchip SoCs. It supports one critical
	  trip point. Cpufreq is used as the cooling device and will throttle
	  CPUs when the Temperature crosses the passive trip point.

config RCAR_THERMAL
	tristate "Renesas R-Car thermal driver"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Enable this to plug the R-Car thermal sensor driver into the Linux
	  thermal framework.

config RCAR_GEN3_THERMAL
	tristate "Renesas R-Car Gen3 thermal driver"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this to plug the R-Car Gen3 thermal sensor driver into the Linux
	  thermal framework.

config KIRKWOOD_THERMAL
	tristate "Temperature sensor on Marvell Kirkwood SoCs"
	depends on MACH_KIRKWOOD || COMPILE_TEST
	depends on HAS_IOMEM
	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 DOVE_THERMAL
	tristate "Temperature sensor on Marvell Dove SoCs"
	depends on ARCH_DOVE || MACH_DOVE || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Support for the Dove thermal sensor driver in the Linux thermal
	  framework.

config DB8500_THERMAL
	tristate "DB8500 thermal management"
	depends on MFD_DB8500_PRCMU
	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 ARMADA_THERMAL
	tristate "Armada 370/XP thermal management"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this option if you want to have support for thermal management
	  controller present in Armada 370 and Armada XP SoC.

config DA9062_THERMAL
	tristate "DA9062/DA9061 Dialog Semiconductor thermal driver"
	depends on MFD_DA9062 || COMPILE_TEST
	depends on OF
	help
	  Enable this for the Dialog Semiconductor thermal sensor driver.
	  This will report PMIC junction over-temperature for one thermal trip
	  zone.
	  Compatible with the DA9062 and DA9061 PMICs.

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 X86_PKG_TEMP_THERMAL
	tristate "X86 package temperature thermal driver"
	depends on X86_THERMAL_VECTOR
	select THERMAL_GOV_USER_SPACE
	select THERMAL_WRITABLE_TRIPS
	default m
	help
	  Enable this to register CPU digital sensor for package temperature as
	  thermal zone. Each package will have its own thermal zone. There are
	  two trip points which can be set by user to get notifications via thermal
	  notification methods.

config INTEL_SOC_DTS_IOSF_CORE
	tristate
	depends on X86 && PCI
	select IOSF_MBI
	help
	  This is becoming a common feature for Intel SoCs to expose the additional
	  digital temperature sensors (DTSs) using side band interface (IOSF). This
	  implements the common set of helper functions to register, get temperature
	  and get/set thresholds on DTSs.

config INTEL_SOC_DTS_THERMAL
	tristate "Intel SoCs DTS thermal driver"
	depends on X86 && PCI
	select INTEL_SOC_DTS_IOSF_CORE
	select THERMAL_WRITABLE_TRIPS
	help
	  Enable this to register Intel SoCs (e.g. Bay Trail) platform digital
	  temperature sensor (DTS). These SoCs have two additional DTSs in
	  addition to DTSs on CPU cores. Each DTS will be registered as a
	  thermal zone. There are two trip points. One of the trip point can
	  be set by user mode programs to get notifications via Linux thermal
	  notification methods.The other trip is a critical trip point, which
	  was set by the driver based on the TJ MAX temperature.

config INTEL_QUARK_DTS_THERMAL
	tristate "Intel Quark DTS thermal driver"
	depends on X86_INTEL_QUARK
	help
	  Enable this to register Intel Quark SoC (e.g. X1000) platform digital
	  temperature sensor (DTS). For X1000 SoC, it has one on-die DTS.
	  The DTS will be registered as a thermal zone. There are two trip points:
	  hot & critical. The critical trip point default value is set by
	  underlying BIOS/Firmware.

menu "ACPI INT340X thermal drivers"
source drivers/thermal/int340x_thermal/Kconfig
endmenu

config INTEL_BXT_PMIC_THERMAL
	tristate "Intel Broxton PMIC thermal driver"
	depends on X86 && INTEL_SOC_PMIC_BXTWC && REGMAP
	help
	  Select this driver for Intel Broxton PMIC with ADC channels monitoring
	  system temperature measurements and alerts.
	  This driver is used for monitoring the ADC channels of PMIC and handles
	  the alert trip point interrupts and notifies the thermal framework with
	  the trip point and temperature details of the zone.

config INTEL_PCH_THERMAL
	tristate "Intel PCH Thermal Reporting Driver"
	depends on X86 && PCI
	help
	  Enable this to support thermal reporting on certain intel PCHs.
	  Thermal reporting device will provide temperature reading,
	  programmable trip points and other information.

config MTK_THERMAL
	tristate "Temperature sensor driver for mediatek SoCs"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on HAS_IOMEM
	depends on NVMEM || NVMEM=n
	depends on RESET_CONTROLLER
	default y
	help
	  Enable this option if you want to have support for thermal management
	  controller present in Mediatek SoCs

menu "Broadcom thermal drivers"
depends on ARCH_BCM || ARCH_BCM2835 || COMPILE_TEST
source "drivers/thermal/broadcom/Kconfig"
endmenu

menu "Texas Instruments thermal drivers"
depends on ARCH_HAS_BANDGAP || COMPILE_TEST
depends on HAS_IOMEM
source "drivers/thermal/ti-soc-thermal/Kconfig"
endmenu

menu "Samsung thermal drivers"
depends on ARCH_EXYNOS || COMPILE_TEST
source "drivers/thermal/samsung/Kconfig"
endmenu

menu "STMicroelectronics thermal drivers"
depends on ARCH_STI && OF
source "drivers/thermal/st/Kconfig"
endmenu

config TANGO_THERMAL
	tristate "Tango thermal management"
	depends on ARCH_TANGO || COMPILE_TEST
	help
	  Enable the Tango thermal driver, which supports the primitive
	  temperature sensor embedded in Tango chips since the SMP8758.
	  This sensor only generates a 1-bit signal to indicate whether
	  the die temperature exceeds a programmable threshold.

source "drivers/thermal/tegra/Kconfig"

config QCOM_SPMI_TEMP_ALARM
	tristate "Qualcomm SPMI PMIC Temperature Alarm"
	depends on OF && SPMI && IIO
	select REGMAP_SPMI
	help
	  This enables a thermal sysfs driver for Qualcomm plug-and-play (QPNP)
	  PMIC devices. It shows up in sysfs as a thermal sensor with multiple
	  trip points. The temperature reported by the thermal sensor reflects the
	  real time die temperature if an ADC is present or an estimate of the
	  temperature based upon the over temperature stage value.

config GENERIC_ADC_THERMAL
	tristate "Generic ADC based thermal sensor"
	depends on IIO
	help
	  This enabled a thermal sysfs driver for the temperature sensor
	  which is connected to the General Purpose ADC. The ADC channel
	  is read via IIO framework and the channel information is provided
	  to this driver. This driver reports the temperature by reading ADC
	  channel and converts it to temperature based on lookup table.

menu "Qualcomm thermal drivers"
depends on (ARCH_QCOM && OF) || COMPILE_TEST
source "drivers/thermal/qcom/Kconfig"
endmenu

config ZX2967_THERMAL
	tristate "Thermal sensors on zx2967 SoC"
	depends on ARCH_ZX || COMPILE_TEST
	help
	  Enable the zx2967 thermal sensors driver, which supports
	  the primitive temperature sensor embedded in zx2967 SoCs.
	  This sensor generates the real time die temperature.

config UNIPHIER_THERMAL
	tristate "Socionext UniPhier thermal driver"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on THERMAL_OF && MFD_SYSCON
	help
	  Enable this to plug in UniPhier on-chip PVT thermal driver into the
	  thermal framework. The driver supports CPU thermal zone temperature
	  reporting and a couple of trip points.
endif
