# SPDX-License-Identifier: GPL-2.0-only
config INTEL_POWERCLAMP
	tristate "Intel PowerClamp idle injection driver"
	depends on X86
	depends on CPU_SUP_INTEL
	depends on CPU_IDLE
	select POWERCAP
	select IDLE_INJECT
	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_THERMAL_VECTOR
	def_bool y
	depends on X86 && CPU_SUP_INTEL && X86_LOCAL_APIC

config INTEL_TCC
	bool
	depends on X86

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
	select INTEL_TCC
	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
	select INTEL_TCC
	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 && ACPI
	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/intel/int340x_thermal/Kconfig"
endmenu

config INTEL_BXT_PMIC_THERMAL
	tristate "Intel Broxton PMIC thermal driver"
	depends on X86 && INTEL_SOC_PMIC_BXTWC
	select 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
	select ACPI_THERMAL_LIB if ACPI
	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 INTEL_TCC_COOLING
	tristate "Intel TCC offset cooling Driver"
	depends on X86
	select INTEL_TCC
	help
	  Enable this to support system cooling by adjusting the effective TCC
	  activation temperature via the TCC Offset register, which is widely
	  supported on modern Intel platforms.
	  Note that, on different platforms, the behavior might be different
	  on how fast the setting takes effect, and how much the CPU frequency
	  is reduced.

config INTEL_HFI_THERMAL
	bool "Intel Hardware Feedback Interface"
	depends on NET
	depends on CPU_SUP_INTEL
	depends on X86_THERMAL_VECTOR
	select THERMAL_NETLINK
	help
	  Select this option to enable the Hardware Feedback Interface. If
	  selected, hardware provides guidance to the operating system on
	  the performance and energy efficiency capabilities of each CPU.
	  These capabilities may change as a result of changes in the operating
	  conditions of the system such power and thermal limits. If selected,
	  the kernel relays updates in CPUs' capabilities to userspace.
