# SPDX-License-Identifier: GPL-2.0-only
config TI_SOC_THERMAL
	tristate "Texas Instruments SoCs temperature sensor driver"
	help
	  If you say yes here you get support for the Texas Instruments
	  OMAP4460+ on die bandgap temperature sensor support. The register
	  set is part of system control module.

	  This includes alert interrupts generation and also the TSHUT
	  support.

config TI_THERMAL
	bool "Texas Instruments SoCs thermal framework support"
	depends on TI_SOC_THERMAL
	help
	  If you say yes here you want to get support for generic thermal
	  framework for the Texas Instruments on die bandgap temperature sensor.

	  This includes trip points definitions, extrapolation rules and
	  CPU cooling device bindings.

config OMAP3_THERMAL
	bool "Texas Instruments OMAP3 thermal support"
	depends on TI_SOC_THERMAL
	depends on ARCH_OMAP3 || COMPILE_TEST
	help
	  If you say yes here you get thermal support for the Texas Instruments
	  OMAP3 SoC family. The current chips supported are:
	   - OMAP3430

	  OMAP3 chips normally don't need thermal management, and sensors in
	  this generation are not accurate, nor they are very close to
	  the important hotspots.

	  Say 'N' here.

config OMAP4_THERMAL
	bool "Texas Instruments OMAP4 thermal support"
	depends on TI_SOC_THERMAL
	depends on ARCH_OMAP4 || COMPILE_TEST
	help
	  If you say yes here you get thermal support for the Texas Instruments
	  OMAP4 SoC family. The current chip supported are:
	   - OMAP4430
	   - OMAP4460
	   - OMAP4470

	  This includes alert interrupts generation and also the TSHUT
	  support.

config OMAP5_THERMAL
	bool "Texas Instruments OMAP5 thermal support"
	depends on TI_SOC_THERMAL
	depends on SOC_OMAP5 || COMPILE_TEST
	help
	  If you say yes here you get thermal support for the Texas Instruments
	  OMAP5 SoC family. The current chip supported are:
	   - OMAP5430

	  This includes alert interrupts generation and also the TSHUT
	  support.

config DRA752_THERMAL
	bool "Texas Instruments DRA752 thermal support"
	depends on TI_SOC_THERMAL
	depends on SOC_DRA7XX || COMPILE_TEST
	help
	  If you say yes here you get thermal support for the Texas Instruments
	  DRA752 SoC family. The current chip supported are:
	   - DRA752

	  This includes alert interrupts generation and also the TSHUT
	  support.
