# 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_NETLINK
	bool "Thermal netlink management"
	depends on NET
	help
	  The thermal framework has a netlink interface to do thermal
	  zones discovery, temperature readings and events such as
	  trip point crossed, cooling device update or governor
	  change. It is recommended to enable the feature.

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_ACPI
       depends on ACPI
       bool

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
	  The Userspace governor allows to get trip point crossed
	  notification from the kernel via uevents. It is recommended
	  to use the netlink interface instead which gives richer
	  information about the thermal framework events.

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.

config THERMAL_DEFAULT_GOV_BANG_BANG
	bool "bang_bang"
	depends on THERMAL_GOV_BANG_BANG
	help
	  Use the bang_bang governor as default. This throttles the
	  devices one step at the time, taking into account the trip
	  point hysteresis.

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 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
	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 and RZ/G2 thermal driver"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this to plug the R-Car Gen3 or RZ/G2 thermal sensor driver into
	  the Linux thermal framework.

config RZG2L_THERMAL
	tristate "Renesas RZ/G2L thermal driver"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on HAS_IOMEM
	depends on OF
	help
	  Enable this to plug the RZ/G2L 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.

menu "Mediatek thermal drivers"
depends on ARCH_MEDIATEK || COMPILE_TEST
source "drivers/thermal/mediatek/Kconfig"
endmenu

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

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

config KHADAS_MCU_FAN_THERMAL
	tristate "Khadas MCU controller FAN cooling support"
	depends on OF
	depends on MFD_KHADAS_MCU
	select MFD_CORE
	select REGMAP
	help
	  If you say yes here you get support for the FAN controlled
	  by the Microcontroller found on the Khadas VIM boards.

config LOONGSON2_THERMAL
	tristate "Loongson-2 SoC series thermal driver"
	depends on LOONGARCH || COMPILE_TEST
	depends on OF
	help
	  Support for Thermal driver found on Loongson-2 SoC series platforms.
	  The thermal driver realizes get_temp and set_trips function, which
	  are used to obtain the temperature of the current node and set the
	  temperature range to trigger the interrupt. When the input temperature
	  is higher than the high temperature threshold or lower than the low
	  temperature threshold, the interrupt will occur.

endif
