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

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

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

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

endif
