# SPDX-License-Identifier: GPL-2.0-only
#
# Intel x86 Platform Specific Drivers
#

source "drivers/platform/x86/intel/atomisp2/Kconfig"
source "drivers/platform/x86/intel/int1092/Kconfig"
source "drivers/platform/x86/intel/int33fe/Kconfig"
source "drivers/platform/x86/intel/int3472/Kconfig"
source "drivers/platform/x86/intel/pmc/Kconfig"
source "drivers/platform/x86/intel/pmt/Kconfig"
source "drivers/platform/x86/intel/speed_select_if/Kconfig"
source "drivers/platform/x86/intel/telemetry/Kconfig"
source "drivers/platform/x86/intel/wmi/Kconfig"

config INTEL_HID_EVENT
	tristate "Intel HID Event"
	depends on ACPI
	depends on INPUT
	depends on I2C
	select INPUT_SPARSEKMAP
	help
	  This driver provides support for the Intel HID Event hotkey interface.
	  Some laptops require this driver for hotkey support.

	  To compile this driver as a module, choose M here: the module will
	  be called intel_hid.

config INTEL_VBTN
	tristate "Intel Virtual Button"
	depends on ACPI
	depends on INPUT
	depends on I2C
	select INPUT_SPARSEKMAP
	help
	  This driver provides support for the Intel Virtual Button interface.
	  Some laptops require this driver for power button support.

	  To compile this driver as a module, choose M here: the module will
	  be called intel_vbtn.

config INTEL_INT0002_VGPIO
	tristate "Intel ACPI INT0002 Virtual GPIO driver"
	depends on GPIOLIB && ACPI && PM_SLEEP
	select GPIOLIB_IRQCHIP
	help
	  Some peripherals on Bay Trail and Cherry Trail platforms signal a
	  Power Management Event (PME) to the Power Management Controller (PMC)
	  to wakeup the system. When this happens software needs to explicitly
	  clear the PME bus 0 status bit in the GPE0a_STS register to avoid an
	  IRQ storm on IRQ 9.

	  This is modelled in ACPI through the INT0002 ACPI device, which is
	  called a "Virtual GPIO controller" in ACPI because it defines the
	  event handler to call when the PME triggers through _AEI and _L02
	  methods as would be done for a real GPIO interrupt in ACPI.

	  To compile this driver as a module, choose M here: the module will
	  be called intel_int0002_vgpio.

config INTEL_OAKTRAIL
	tristate "Intel Oaktrail Platform Extras"
	depends on ACPI
	depends on ACPI_VIDEO || ACPI_VIDEO=n
	depends on RFKILL && BACKLIGHT_CLASS_DEVICE && ACPI
	help
	  Intel Oaktrail platform need this driver to provide interfaces to
	  enable/disable the Camera, WiFi, BT etc. devices. If in doubt, say Y
	  here; it will only load on supported platforms.

config INTEL_BXTWC_PMIC_TMU
	tristate "Intel Broxton Whiskey Cove TMU Driver"
	depends on INTEL_SOC_PMIC_BXTWC
	depends on MFD_INTEL_PMC_BXT
	select REGMAP
	help
	  Select this driver to use Intel Broxton Whiskey Cove PMIC TMU feature.
	  This driver enables the alarm wakeup functionality in the TMU unit of
	  Whiskey Cove PMIC.

config INTEL_CHTDC_TI_PWRBTN
	tristate "Intel Cherry Trail Dollar Cove TI power button driver"
	depends on INTEL_SOC_PMIC_CHTDC_TI
	depends on INPUT
	help
	  This option adds a power button driver for Dollar Cove TI
	  PMIC on Intel Cherry Trail devices.

	  To compile this driver as a module, choose M here: the module
	  will be called intel_chtdc_ti_pwrbtn.

config INTEL_MRFLD_PWRBTN
	tristate "Intel Merrifield Basin Cove power button driver"
	depends on INTEL_SOC_PMIC_MRFLD
	depends on INPUT
	help
	  This option adds a power button driver for Basin Cove PMIC
	  on Intel Merrifield devices.

	  To compile this driver as a module, choose M here: the module
	  will be called intel_mrfld_pwrbtn.

config INTEL_PUNIT_IPC
	tristate "Intel P-Unit IPC Driver"
	help
	  This driver provides support for Intel P-Unit Mailbox IPC mechanism,
	  which is used to bridge the communications between kernel and P-Unit.

config INTEL_RST
	tristate "Intel Rapid Start Technology Driver"
	depends on ACPI
	help
	  This driver provides support for modifying parameters on systems
	  equipped with Intel's Rapid Start Technology. When put in an ACPI
	  sleep state, these devices will wake after either a configured
	  timeout or when the system battery reaches a critical state,
	  automatically copying memory contents to disk. On resume, the
	  firmware will copy the memory contents back to RAM and resume the OS
	  as usual.

config INTEL_SMARTCONNECT
	tristate "Intel Smart Connect disabling driver"
	depends on ACPI
	help
	  Intel Smart Connect is a technology intended to permit devices to
	  update state by resuming for a short period of time at regular
	  intervals. If a user enables this functionality under Windows and
	  then reboots into Linux, the system may remain configured to resume
	  on suspend. In the absence of any userspace to support it, the system
	  will then remain awake until something triggers another suspend.

	  This driver checks to determine whether the device has Intel Smart
	  Connect enabled, and if so disables it.

config INTEL_TURBO_MAX_3
	bool "Intel Turbo Boost Max Technology 3.0 enumeration driver"
	depends on X86_64 && SCHED_MC_PRIO
	help
	  This driver reads maximum performance ratio of each CPU and set up
	  the scheduler priority metrics. In this way scheduler can prefer
	  CPU with higher performance to schedule tasks.

	  This driver is only required when the system is not using Hardware
	  P-States (HWP). In HWP mode, priority can be read from ACPI tables.

config INTEL_UNCORE_FREQ_CONTROL
	tristate "Intel Uncore frequency control driver"
	depends on X86_64
	help
	  This driver allows control of Uncore frequency limits on
	  supported server platforms.

	  Uncore frequency controls RING/LLC (last-level cache) clocks.

	  To compile this driver as a module, choose M here: the module
	  will be called intel-uncore-frequency.
