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

config INT340X_THERMAL
	tristate "ACPI INT340X thermal drivers"
	depends on X86_64 && ACPI && PCI
	select THERMAL_GOV_USER_SPACE
	select ACPI_THERMAL_REL
	select ACPI_FAN
	select INTEL_SOC_DTS_IOSF_CORE
	select PROC_THERMAL_MMIO_RAPL if POWERCAP
	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
	tristate
	select INTEL_RAPL_CORE
endif
