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

source "drivers/platform/x86/intel/atomisp2/Kconfig"
source "drivers/platform/x86/intel/ifs/Kconfig"
source "drivers/platform/x86/intel/int1092/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"
source "drivers/platform/x86/intel/uncore-frequency/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_BYTCRC_PWRSRC
	tristate "Intel Bay Trail Crystal Cove power source driver"
	depends on INTEL_SOC_PMIC
	help
	  This option adds a power source driver for Crystal Cove PMICs
	  on Intel Bay Trail devices.

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

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_CHTWC_INT33FE
	tristate "Intel Cherry Trail Whiskey Cove ACPI INT33FE Driver"
	depends on X86 && ACPI && I2C && REGULATOR
	depends on CHARGER_BQ24190=y || (CHARGER_BQ24190=m && m)
	depends on USB_ROLES_INTEL_XHCI=y || (USB_ROLES_INTEL_XHCI=m && m)
	depends on TYPEC_MUX_PI3USB30532=y || (TYPEC_MUX_PI3USB30532=m && m)
	help
	  This driver add support for the Intel Cherry Trail Whiskey Cove
	  INT33FE ACPI device found on the GPD win and the GPD pocket.

	  The INT33FE ACPI device on these mini laptops contains I2cSerialBusV2
	  resources for a MAX17042 Fuel Gauge, FUSB302 USB Type-C Controller
	  and PI3USB30532 USB switch.
	  This driver instantiates i2c-clients for these, so that standard
	  i2c drivers for these chips can bind to the them.

	  If you enable this driver it is advised to also select
	  CONFIG_TYPEC_FUSB302=m, CONFIG_TYPEC_MUX_PI3USB30532=m and
	  CONFIG_BATTERY_MAX17042=m.

config INTEL_ISHTP_ECLITE
	tristate "Intel ISHTP eclite controller Driver"
	depends on INTEL_ISH_HID
	depends on ACPI
	help
	  This driver is for accessing the PSE (Programmable Service Engine) -
	  an Embedded Controller like IP - using ISHTP (Integrated Sensor Hub
	  Transport Protocol) to get battery, thermal and UCSI (USB Type-C
	  Connector System Software Interface) related data from the platform.
	  Users who don't want to use discrete Embedded Controller on Intel's
	  Elkhartlake platform can leverage this integrated solution of
	  ECLite which is part of PSE subsystem.

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

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_SDSI
	tristate "Intel On Demand (Software Defined Silicon) Driver"
	depends on INTEL_VSEC
	depends on X86_64
	help
	  This driver enables access to the Intel On Demand (formerly Software
	  Defined Silicon) interface used to provision silicon features with an
	  authentication certificate and capability license.

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

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_TPMI
	tristate "Intel Topology Aware Register and PM Capsule Interface (TPMI)"
	depends on INTEL_VSEC
	depends on X86_64
	help
	  The Intel Topology Aware Register and PM Capsule Interface (TPMI),
	  provides enumerable MMIO interface for power management features.
	  This driver creates devices, so that other PM feature driver can
	  be loaded for PM specific feature operation.

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

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_VSEC
	tristate "Intel Vendor Specific Extended Capabilities Driver"
	depends on PCI
	select AUXILIARY_BUS
	help
	  Adds support for feature drivers exposed using Intel PCIe VSEC and
	  DVSEC.

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