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

config INT340X_THERMAL
	tristate "ACPI INT340X thermal drivers"
	depends on X86 && ACPI && PCI
	select THERMAL_GOV_USER_SPACE
	select ACPI_THERMAL_REL
	select ACPI_FAN
	select INTEL_SOC_DTS_IOSF_CORE
	help
	  Newer laptops and tablets that use ACPI may have thermal sensors and
	  other devices with thermal control capabilities outside the core
	  CPU/SOC, for thermal safety reasons.
	  They are exposed for the OS to use via the INT3400 ACPI device object
	  as the master, and INT3401~INT340B ACPI device objects as the slaves.
	  Enable this to expose the temperature information and cooling ability
	  from these objects to userspace via the normal thermal framework.
	  This means that a wide range of applications and GUI widgets can show
	  the information to the user or use this information for making
	  decisions. For example, the Intel Thermal Daemon can use this
	  information to allow the user to select his laptop to run without
	  turning on the fans.

config ACPI_THERMAL_REL
	tristate
	depends on ACPI

if INT340X_THERMAL

config INT3406_THERMAL
	tristate "ACPI INT3406 display thermal driver"
	depends on ACPI_VIDEO
	help
	  The display thermal device represents the LED/LCD display panel
	  that may or may not include touch support. The main function of
	  the display thermal device is to allow control of the display
	  brightness in order to address a thermal condition or to reduce
	  power consumed by display device.

config PROC_THERMAL_MMIO_RAPL
	bool
	depends on 64BIT
	depends on POWERCAP
	select INTEL_RAPL_CORE
	default y
endif
