# SPDX-License-Identifier: GPL-2.0-only
#
# Generic thermal drivers configuration
#

menuconfig THERMAL
	bool "Thermal drivers"
	help
	  Thermal drivers offer a generic mechanism for
	  thermal management. Usually it's made up of one or more thermal
	  zones and cooling devices.
	  Each thermal zone contains its own temperature, trip points,
	  and cooling devices.
	  All platforms with ACPI or Open Firmware thermal support can use
	  this driver.
	  If you want this support, you should say Y 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"
	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"
	depends on 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"
	depends on ENERGY_MODEL
	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 THERMAL_OF
	help
	  Enable the CPU cooling features. If the system has no active
	  cooling device available, this option allows to use the CPU
	  as a cooling device.

if CPU_THERMAL

config CPU_FREQ_THERMAL
	bool "CPU frequency cooling device"
	depends on CPU_FREQ
	default y
	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.

config CPU_IDLE_THERMAL
	bool "CPU idle cooling device"
	depends on IDLE_INJECT
	help
	  This implements the CPU cooling mechanism through
	  idle injection. This will throttle the CPU by injecting
	  idle cycle.
endif

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 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 THERMAL_MMIO
	tristate "Generic Thermal MMIO driver"
	depends on OF || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This option enables the generic thermal MMIO driver that will use
	  memory-mapped reads to get the temperature.  Any HW/System that
	  allows temperature reading by a single memory-mapped reading, be it
	  register or shared memory, is a potential candidate to work with this
	  driver.

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 || COMPILE_TEST
	depends on NVMEM || !NVMEM
	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 IMX_SC_THERMAL
	tristate "Temperature sensor driver for NXP i.MX SoCs with System Controller"
	depends on IMX_SCU
	depends on OF
	help
	  Support for Temperature Monitor (TEMPMON) found on NXP i.MX SoCs with
	  system controller inside, Linux kernel has to communicate with system
	  controller via MU (message unit) IPC to get temperature from thermal
	  sensor. It supports one critical trip point and one
	  passive trip point for each thermal sensor.

config IMX8MM_THERMAL
	tristate "Temperature sensor driver for Freescale i.MX8MM SoC"
	depends on ARCH_MXC || COMPILE_TEST
	depends on OF
	help
	  Support for Thermal Monitoring Unit (TMU) found on Freescale i.MX8MM SoC.
	  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 K3_THERMAL
	tristate "Texas Instruments K3 thermal support"
	depends on ARCH_K3 || COMPILE_TEST
	help
	  If you say yes here you get thermal support for the Texas Instruments
	  K3 SoC family. The current chip supported is:
	  - AM654

	  This includes temperature reading functionality.

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 && HAS_IOMEM
	depends on PPC_E500MC || SOC_LS1021A || ARCH_LAYERSCAPE || (ARCH_MXC && ARM64) || COMPILE_TEST
	select REGMAP_MMIO
	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 SUN8I_THERMAL
	tristate "Allwinner sun8i thermal driver"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HAS_IOMEM
	depends on NVMEM
	depends on OF
	depends on RESET_CONTROLLER
	help
	  Support for the sun8i thermal sensor driver into the Linux thermal
	  framework.

	  To compile this driver as a module, choose M here: the
	  module will be called sun8i-thermal.

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 && OF
	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 "Marvell EBU Armada SoCs 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 Marvell EBU Armada SoCs (370,375,XP,38x,7K,8K).

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

config AMLOGIC_THERMAL
	tristate "Amlogic Thermal Support"
	default ARCH_MESON
	depends on OF && ARCH_MESON
	help
	  If you say yes here you get support for Amlogic Thermal
	  for G12 SoC Family.

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

menu "Intel thermal drivers"
depends on X86 || X86_INTEL_QUARK || COMPILE_TEST
source "drivers/thermal/intel/Kconfig"
endmenu

menu "Broadcom thermal drivers"
depends on ARCH_BCM || ARCH_BRCMSTB || ARCH_BCM2835 || ARCH_BCM_IPROC || \
		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 || ARCH_STM32) && 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 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.

config SPRD_THERMAL
	tristate "Temperature sensor on Spreadtrum SoCs"
	depends on ARCH_SPRD || COMPILE_TEST
	help
	  Support for the Spreadtrum thermal sensor driver in the Linux thermal
	  framework.
endif
