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

menuconfig X86_PLATFORM_DEVICES
	bool "X86 Platform Specific Device Drivers"
	default y
	depends on X86
	help
	  Say Y here to get to see options for device drivers for various
	  x86 platforms, including vendor-specific laptop extension drivers.
	  This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if X86_PLATFORM_DEVICES

config ACPI_WMI
	tristate "WMI"
	depends on ACPI
	help
	  This driver adds support for the ACPI-WMI (Windows Management
	  Instrumentation) mapper device (PNP0C14) found on some systems.

	  ACPI-WMI is a proprietary extension to ACPI to expose parts of the
	  ACPI firmware to userspace - this is done through various vendor
	  defined methods and data blocks in a PNP0C14 device, which are then
	  made available for userspace to call.

	  The implementation of this in Linux currently only exposes this to
	  other kernel space drivers.

	  This driver is a required dependency to build the firmware specific
	  drivers needed on many machines, including Acer and HP laptops.

	  It is safe to enable this driver even if your DSDT doesn't define
	  any ACPI-WMI devices.

config WMI_BMOF
	tristate "WMI embedded Binary MOF driver"
	depends on ACPI_WMI
	default ACPI_WMI
	help
	  Say Y here if you want to be able to read a firmware-embedded
	  WMI Binary MOF data. Using this requires userspace tools and may be
	  rather tedious.

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

config HUAWEI_WMI
	tristate "Huawei WMI laptop extras driver"
	depends on ACPI_BATTERY
	depends on ACPI_WMI
	depends on INPUT
	select INPUT_SPARSEKMAP
	select LEDS_CLASS
	select LEDS_TRIGGERS
	select LEDS_TRIGGER_AUDIO
	select NEW_LEDS
	help
	  This driver provides support for Huawei WMI hotkeys, battery charge
	  control, fn-lock, mic-mute LED, and other extra features.

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

config UV_SYSFS
	tristate "Sysfs structure for UV systems"
	depends on X86_UV
	depends on SYSFS
	help
	  This driver supports a sysfs tree describing information about
	  UV systems at /sys/firmware/sgi_uv/.

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

config INTEL_WMI_SBL_FW_UPDATE
	tristate "Intel WMI Slim Bootloader firmware update signaling driver"
	depends on ACPI_WMI
	help
	  Say Y here if you want to be able to use the WMI interface to signal
	  Slim Bootloader to trigger update on next reboot.

	  To compile this driver as a module, choose M here: the module will
	  be called intel-wmi-sbl-fw-update.

config INTEL_WMI_THUNDERBOLT
	tristate "Intel WMI thunderbolt force power driver"
	depends on ACPI_WMI
	help
	  Say Y here if you want to be able to use the WMI interface on select
	  systems to force the power control of Intel Thunderbolt controllers.
	  This is useful for updating the firmware when devices are not plugged
	  into the controller.

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

config MXM_WMI
       tristate "WMI support for MXM Laptop Graphics"
       depends on ACPI_WMI
	help
          MXM is a standard for laptop graphics cards, the WMI interface
	  is required for switchable nvidia graphics machines

config PEAQ_WMI
	tristate "PEAQ 2-in-1 WMI hotkey driver"
	depends on ACPI_WMI
	depends on INPUT
	help
	 Say Y here if you want to support WMI-based hotkeys on PEAQ 2-in-1s.

config XIAOMI_WMI
	tristate "Xiaomi WMI key driver"
	depends on ACPI_WMI
	depends on INPUT
	help
	  Say Y here if you want to support WMI-based keys on Xiaomi notebooks.

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

config GIGABYTE_WMI
	tristate "Gigabyte WMI temperature driver"
	depends on ACPI_WMI
	depends on HWMON
	help
	  Say Y here if you want to support WMI-based temperature reporting on
	  Gigabyte mainboards.

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

config ACERHDF
	tristate "Acer Aspire One temperature and fan driver"
	depends on ACPI && THERMAL
	select THERMAL_GOV_BANG_BANG
	help
	  This is a driver for Acer Aspire One netbooks. It allows to access
	  the temperature sensor and to control the fan.

	  After loading this driver the BIOS is still in control of the fan.
	  To let the kernel handle the fan, do:
	  echo -n enabled > /sys/class/thermal/thermal_zoneN/mode
	  where N=0,1,2... depending on the number of thermal nodes and the
	  detection order of your particular system.  The "type" parameter
	  in the same node directory will tell you if it is "acerhdf".

	  For more information about this driver see
	  <https://piie.net/files/acerhdf_README.txt>

	  If you have an Acer Aspire One netbook, say Y or M
	  here.

config ACER_WIRELESS
        tristate "Acer Wireless Radio Control Driver"
        depends on ACPI
        depends on INPUT
	help
          The Acer Wireless Radio Control handles the airplane mode hotkey
          present on new Acer laptops.

          Say Y or M here if you have an Acer notebook with an airplane mode
          hotkey.

          If you choose to compile this driver as a module the module will be
          called acer-wireless.

config ACER_WMI
	tristate "Acer WMI Laptop Extras"
	depends on ACPI
	select LEDS_CLASS
	select NEW_LEDS
	depends on BACKLIGHT_CLASS_DEVICE
	depends on SERIO_I8042
	depends on INPUT
	depends on RFKILL || RFKILL = n
	depends on ACPI_WMI
	select INPUT_SPARSEKMAP
	# Acer WMI depends on ACPI_VIDEO when ACPI is enabled
        select ACPI_VIDEO if ACPI
	help
	  This is a driver for newer Acer (and Wistron) laptops. It adds
	  wireless radio and bluetooth control, and on some laptops,
	  exposes the mail LED and LCD backlight.

	  If you have an ACPI-WMI compatible Acer/ Wistron laptop, say Y or M
	  here.

config AMD_PMC
	tristate "AMD SoC PMC driver"
	depends on ACPI && PCI
	help
	  The driver provides support for AMD Power Management Controller
	  primarily responsible for S2Idle transactions that are driven from
	  a platform firmware running on SMU. This driver also provides a debug
	  mechanism to investigate the S2Idle transactions and failures.

	  Say Y or M here if you have a notebook powered by AMD RYZEN CPU/APU.

	  If you choose to compile this driver as a module the module will be
	  called amd-pmc.

config ADV_SWBUTTON
	tristate "Advantech ACPI Software Button Driver"
	depends on ACPI && INPUT
	help
	  Say Y here to enable support for Advantech software defined
	  button feature. More information can be found at
	  <http://www.advantech.com.tw/products/>

	  To compile this driver as a module, choose M here. The module will
	  be called adv_swbutton.

config APPLE_GMUX
	tristate "Apple Gmux Driver"
	depends on ACPI && PCI
	depends on PNP
	depends on BACKLIGHT_CLASS_DEVICE
	depends on BACKLIGHT_APPLE=n || BACKLIGHT_APPLE
	depends on ACPI_VIDEO=n || ACPI_VIDEO
	help
	  This driver provides support for the gmux device found on many
	  Apple laptops, which controls the display mux for the hybrid
	  graphics as well as the backlight. Currently only backlight
	  control is supported by the driver.

config ASUS_LAPTOP
	tristate "Asus Laptop Extras"
	depends on ACPI
	select LEDS_CLASS
	select NEW_LEDS
	depends on BACKLIGHT_CLASS_DEVICE
	depends on INPUT
	depends on RFKILL || RFKILL = n
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	select INPUT_SPARSEKMAP
	help
	  This is a driver for Asus laptops, Lenovo SL and the Pegatron
	  Lucid tablet. It may also support some MEDION, JVC or VICTOR
	  laptops. It makes all the extra buttons generate standard
	  ACPI events and input events, and on the Lucid the built-in
	  accelerometer appears as an input device.  It also adds
	  support for video output switching, LCD backlight control,
	  Bluetooth and Wlan control, and most importantly, allows you
	  to blink those fancy LEDs.

	  For more information see <http://acpi4asus.sf.net>.

	  If you have an ACPI-compatible ASUS laptop, say Y or M here.

config ASUS_WIRELESS
	tristate "Asus Wireless Radio Control Driver"
	depends on ACPI
	depends on INPUT
	select NEW_LEDS
	select LEDS_CLASS
	help
	  The Asus Wireless Radio Control handles the airplane mode hotkey
	  present on some Asus laptops.

	  Say Y or M here if you have an ASUS notebook with an airplane mode
	  hotkey.

	  If you choose to compile this driver as a module the module will be
	  called asus-wireless.

config ASUS_WMI
	tristate "ASUS WMI Driver"
	depends on ACPI_WMI
	depends on ACPI_BATTERY
	depends on INPUT
	depends on HWMON
	depends on BACKLIGHT_CLASS_DEVICE
	depends on RFKILL || RFKILL = n
	depends on HOTPLUG_PCI
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	select INPUT_SPARSEKMAP
	select LEDS_CLASS
	select NEW_LEDS
	help
	  Say Y here if you have a WMI aware Asus laptop (like Eee PCs or new
	  Asus Notebooks).

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

config ASUS_NB_WMI
	tristate "Asus Notebook WMI Driver"
	depends on ASUS_WMI
	depends on SERIO_I8042 || SERIO_I8042 = n
	help
	  This is a driver for newer Asus notebooks. It adds extra features
	  like wireless radio and bluetooth control, leds, hotkeys, backlight...

	  For more information, see
	  <file:Documentation/ABI/testing/sysfs-platform-asus-wmi>

	  If you have an ACPI-WMI compatible Asus Notebook, say Y or M
	  here.

config EEEPC_LAPTOP
	tristate "Eee PC Hotkey Driver"
	depends on ACPI
	depends on INPUT
	depends on RFKILL || RFKILL = n
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on HOTPLUG_PCI
	depends on BACKLIGHT_CLASS_DEVICE
	select HWMON
	select LEDS_CLASS
	select NEW_LEDS
	select INPUT_SPARSEKMAP
	help
	  This driver supports the Fn-Fx keys on Eee PC laptops.

	  It  also gives access to some extra laptop functionalities like
	  Bluetooth, backlight and allows powering on/off some other
	  devices.

	  If you have an Eee PC laptop, say Y or M here. If this driver
	  doesn't work on your Eee PC, try eeepc-wmi instead.

config EEEPC_WMI
	tristate "Eee PC WMI Driver"
	depends on ASUS_WMI
	help
	  This is a driver for newer Eee PC laptops. It adds extra features
	  like wireless radio and bluetooth control, leds, hotkeys, backlight...

	  For more information, see
	  <file:Documentation/ABI/testing/sysfs-platform-asus-wmi>

	  If you have an ACPI-WMI compatible Eee PC laptop (>= 1000), say Y or M
	  here.

source "drivers/platform/x86/dell/Kconfig"

config AMILO_RFKILL
	tristate "Fujitsu-Siemens Amilo rfkill support"
	depends on RFKILL
	depends on SERIO_I8042
	help
	  This is a driver for enabling wifi on some Fujitsu-Siemens Amilo
	  laptops.

config FUJITSU_LAPTOP
	tristate "Fujitsu Laptop Extras"
	depends on ACPI
	depends on INPUT
	depends on BACKLIGHT_CLASS_DEVICE
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	select INPUT_SPARSEKMAP
	select NEW_LEDS
	select LEDS_CLASS
	help
	  This is a driver for laptops built by Fujitsu:

	    * P2xxx/P5xxx/S6xxx/S7xxx series Lifebooks
	    * Possibly other Fujitsu laptop models
	    * Tested with S6410 and S7020

	  It adds support for LCD brightness control and some hotkeys.

	  If you have a Fujitsu laptop, say Y or M here.

config FUJITSU_TABLET
       tristate "Fujitsu Tablet Extras"
       depends on ACPI
       depends on INPUT
	help
         This is a driver for tablets built by Fujitsu:

           * Lifebook P1510/P1610/P1620/Txxxx
           * Stylistic ST5xxx
           * Possibly other Fujitsu tablet models

         It adds support for the panel buttons, docking station detection,
         tablet/notebook mode detection for convertible and
         orientation detection for docked slates.

         If you have a Fujitsu convertible or slate, say Y or M here.

config GPD_POCKET_FAN
	tristate "GPD Pocket Fan Controller support"
	depends on ACPI
	depends on THERMAL
	help
	  Driver for the GPD Pocket vendor specific FAN02501 ACPI device
	  which controls the fan speed on the GPD Pocket.

	  Without this driver the fan on the Pocket will stay off independent
	  of the CPU temperature. Say Y or M if the kernel may be used on a
	  GPD pocket.

config HP_ACCEL
	tristate "HP laptop accelerometer"
	depends on INPUT && ACPI
	depends on SERIO_I8042
	select SENSORS_LIS3LV02D
	select NEW_LEDS
	select LEDS_CLASS
	help
	  This driver provides support for the "Mobile Data Protection System 3D"
	  or "3D DriveGuard" feature of HP laptops. On such systems the driver
	  should load automatically (via ACPI alias).

	  Support for a led indicating disk protection will be provided as
	  hp::hddprotect. For more information on the feature, refer to
	  Documentation/misc-devices/lis3lv02d.rst.

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

config WIRELESS_HOTKEY
	tristate "Wireless hotkey button"
	depends on ACPI
	depends on INPUT
	help
	 This driver provides supports for the wireless buttons found on some AMD,
	 HP, & Xioami laptops.
	 On such systems the driver should load automatically (via ACPI alias).

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

config HP_WMI
	tristate "HP WMI extras"
	depends on ACPI_WMI
	depends on INPUT
	depends on RFKILL || RFKILL = n
	select INPUT_SPARSEKMAP
	select ACPI_PLATFORM_PROFILE
	help
	 Say Y here if you want to support WMI-based hotkeys on HP laptops and
	 to read data from WMI such as docking or ambient light sensor state.

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

config TC1100_WMI
	tristate "HP Compaq TC1100 Tablet WMI Extras"
	depends on !X86_64
	depends on ACPI
	depends on ACPI_WMI
	help
	  This is a driver for the WMI extensions (wireless and bluetooth power
	  control) of the HP Compaq TC1100 tablet.

config IBM_RTL
	tristate "Device driver to enable PRTL support"
	depends on PCI
	help
	 Enable support for IBM Premium Real Time Mode (PRTM).
	 This module will allow you the enter and exit PRTM in the BIOS via
	 sysfs on platforms that support this feature.  System in PRTM will
	 not receive CPU-generated SMIs for recoverable errors.  Use of this
	 feature without proper support may void your hardware warranty.

	 If the proper BIOS support is found the driver will load and create
	 /sys/devices/system/ibm_rtl/.  The "state" variable will indicate
	 whether or not the BIOS is in PRTM.
	 state = 0 (BIOS SMIs on)
	 state = 1 (BIOS SMIs off)

config IDEAPAD_LAPTOP
	tristate "Lenovo IdeaPad Laptop Extras"
	depends on ACPI
	depends on RFKILL && INPUT
	depends on SERIO_I8042
	depends on BACKLIGHT_CLASS_DEVICE
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on ACPI_WMI || ACPI_WMI = n
	select ACPI_PLATFORM_PROFILE
	select INPUT_SPARSEKMAP
	select NEW_LEDS
	select LEDS_CLASS
	help
	  This is a driver for Lenovo IdeaPad netbooks contains drivers for
	  rfkill switch, hotkey, fan control and backlight control.

config SENSORS_HDAPS
	tristate "Thinkpad Hard Drive Active Protection System (hdaps)"
	depends on INPUT
	help
	  This driver provides support for the IBM Hard Drive Active Protection
	  System (hdaps), which provides an accelerometer and other misc. data.
	  ThinkPads starting with the R50, T41, and X40 are supported.  The
	  accelerometer data is readable via sysfs.

	  This driver also provides an absolute input class device, allowing
	  the laptop to act as a pinball machine-esque joystick.

	  If your ThinkPad is not recognized by the driver, please update to latest
	  BIOS. This is especially the case for some R52 ThinkPads.

	  Say Y here if you have an applicable laptop and want to experience
	  the awesome power of hdaps.

config THINKPAD_ACPI
	tristate "ThinkPad ACPI Laptop Extras"
	depends on ACPI
	depends on ACPI_BATTERY
	depends on INPUT
	depends on RFKILL || RFKILL = n
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on BACKLIGHT_CLASS_DEVICE
	select ACPI_PLATFORM_PROFILE
	select HWMON
	select NVRAM
	select NEW_LEDS
	select LEDS_CLASS
	select LEDS_TRIGGERS
	select LEDS_TRIGGER_AUDIO
	help
	  This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
	  support for Fn-Fx key combinations, Bluetooth control, video
	  output switching, ThinkLight control, UltraBay eject and more.
	  For more information about this driver see
	  <file:Documentation/admin-guide/laptops/thinkpad-acpi.rst> and
	  <http://ibm-acpi.sf.net/> .

	  This driver was formerly known as ibm-acpi.

	  Extra functionality will be available if the rfkill (CONFIG_RFKILL)
	  and/or ALSA (CONFIG_SND) subsystems are available in the kernel.
	  Note that if you want ThinkPad-ACPI to be built-in instead of
	  modular, ALSA and rfkill will also have to be built-in.

	  If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.

config THINKPAD_ACPI_ALSA_SUPPORT
	bool "Console audio control ALSA interface"
	depends on THINKPAD_ACPI
	depends on SND
	depends on SND = y || THINKPAD_ACPI = SND
	default y
	help
	  Enables monitoring of the built-in console audio output control
	  (headphone and speakers), which is operated by the mute and (in
	  some ThinkPad models) volume hotkeys.

	  If this option is enabled, ThinkPad-ACPI will export an ALSA card
	  with a single read-only mixer control, which should be used for
	  on-screen-display feedback purposes by the Desktop Environment.

	  Optionally, the driver will also allow software control (the
	  ALSA mixer will be made read-write).  Please refer to the driver
	  documentation for details.

	  All IBM models have both volume and mute control.  Newer Lenovo
	  models only have mute control (the volume hotkeys are just normal
	  keys and volume control is done through the main HDA mixer).

config THINKPAD_ACPI_DEBUGFACILITIES
	bool "Maintainer debug facilities"
	depends on THINKPAD_ACPI
	help
	  Enables extra stuff in the thinkpad-acpi which is completely useless
	  for normal use.  Read the driver source to find out what it does.

	  Say N here, unless you were told by a kernel maintainer to do
	  otherwise.

config THINKPAD_ACPI_DEBUG
	bool "Verbose debug mode"
	depends on THINKPAD_ACPI
	help
	  Enables extra debugging information, at the expense of a slightly
	  increase in driver size.

	  If you are not sure, say N here.

config THINKPAD_ACPI_UNSAFE_LEDS
	bool "Allow control of important LEDs (unsafe)"
	depends on THINKPAD_ACPI
	help
	  Overriding LED state on ThinkPads can mask important
	  firmware alerts (like critical battery condition), or misled
	  the user into damaging the hardware (undocking or ejecting
	  the bay while buses are still active), etc.

	  LED control on the ThinkPad is write-only (with very few
	  exceptions on very ancient models), which makes it
	  impossible to know beforehand if important information will
	  be lost when one changes LED state.

	  Users that know what they are doing can enable this option
	  and the driver will allow control of every LED, including
	  the ones on the dock stations.

	  Never enable this option on a distribution kernel.

	  Say N here, unless you are building a kernel for your own
	  use, and need to control the important firmware LEDs.

config THINKPAD_ACPI_VIDEO
	bool "Video output control support"
	depends on THINKPAD_ACPI
	default y
	help
	  Allows the thinkpad_acpi driver to provide an interface to control
	  the various video output ports.

	  This feature often won't work well, depending on ThinkPad model,
	  display state, video output devices in use, whether there is a X
	  server running, phase of the moon, and the current mood of
	  Schroedinger's cat.  If you can use X.org's RandR to control
	  your ThinkPad's video output ports instead of this feature,
	  don't think twice: do it and say N here to save memory and avoid
	  bad interactions with X.org.

	  NOTE: access to this feature is limited to processes with the
	  CAP_SYS_ADMIN capability, to avoid local DoS issues in platforms
	  where it interacts badly with X.org.

	  If you are not sure, say Y here but do try to check if you could
	  be using X.org RandR instead.

config THINKPAD_ACPI_HOTKEY_POLL
	bool "Support NVRAM polling for hot keys"
	depends on THINKPAD_ACPI
	default y
	help
	  Some thinkpad models benefit from NVRAM polling to detect a few of
	  the hot key press events.  If you know your ThinkPad model does not
	  need to do NVRAM polling to support any of the hot keys you use,
	  unselecting this option will save about 1kB of memory.

	  ThinkPads T40 and newer, R52 and newer, and X31 and newer are
	  unlikely to need NVRAM polling in their latest BIOS versions.

	  NVRAM polling can detect at most the following keys: ThinkPad/Access
	  IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute,
	  Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12).

	  If you are not sure, say Y here.  The driver enables polling only if
	  it is strictly necessary to do so.

config THINKPAD_LMI
	tristate "Lenovo WMI-based systems management driver"
	depends on ACPI_WMI
	select FW_ATTR_CLASS
	help
	  This driver allows changing BIOS settings on Lenovo machines whose
	  BIOS support the WMI interface.

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

source "drivers/platform/x86/intel/Kconfig"

config INTEL_ATOMISP2_LED
	tristate "Intel AtomISP2 camera LED driver"
	depends on GPIOLIB && LEDS_GPIO
	help
	  Many Bay Trail and Cherry Trail devices come with a camera attached
	  to Intel's Image Signal Processor. Linux currently does not have a
	  driver for these, so they do not work as a camera. Some of these
	  camera's have a LED which is controlled through a GPIO.

	  Some of these devices have a firmware issue where the LED gets turned
	  on at boot. This driver will turn the LED off at boot and also allows
	  controlling the LED (repurposing it) through the sysfs LED interface.

	  Which GPIO is attached to the LED is usually not described in the
	  ACPI tables, so this driver contains per-system info about the GPIO
	  inside the driver, this means that this driver only works on systems
	  the driver knows about.

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

config INTEL_ATOMISP2_PM
	tristate "Intel AtomISP2 dummy / power-management driver"
	depends on PCI && IOSF_MBI && PM
	depends on !INTEL_ATOMISP
	help
	  Power-management driver for Intel's Image Signal Processor found on
	  Bay Trail and Cherry Trail devices. This dummy driver's sole purpose
	  is to turn the ISP off (put it in D3) to save power and to allow
	  entering of S0ix modes.

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

config INTEL_HID_EVENT
	tristate "INTEL HID Event"
	depends on ACPI
	depends on INPUT
	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_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_MENLOW
	tristate "Thermal Management driver for Intel menlow platform"
	depends on ACPI_THERMAL
	select THERMAL
	help
	  ACPI thermal management enhancement driver on
	  Intel Menlow platform.

	  If unsure, say N.

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_VBTN
	tristate "INTEL VIRTUAL BUTTON"
	depends on ACPI
	depends on INPUT
	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 MSI_LAPTOP
	tristate "MSI Laptop Extras"
	depends on ACPI
	depends on BACKLIGHT_CLASS_DEVICE
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on RFKILL
	depends on INPUT && SERIO_I8042
	select INPUT_SPARSEKMAP
	help
	  This is a driver for laptops built by MSI (MICRO-STAR
	  INTERNATIONAL):

	  MSI MegaBook S270 (MS-1013)
	  Cytron/TCM/Medion/Tchibo MD96100/SAM2000

	  It adds support for Bluetooth, WLAN and LCD brightness control.

	  More information about this driver is available at
	  <http://0pointer.de/lennart/tchibo.html>.

	  If you have an MSI S270 laptop, say Y or M here.

config MSI_WMI
	tristate "MSI WMI extras"
	depends on ACPI_WMI
	depends on INPUT
	depends on BACKLIGHT_CLASS_DEVICE
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	select INPUT_SPARSEKMAP
	help
	 Say Y here if you want to support WMI-based hotkeys on MSI laptops.

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

config XO15_EBOOK
	tristate "OLPC XO-1.5 ebook switch"
	depends on OLPC || COMPILE_TEST
	depends on ACPI && INPUT
	help
	  Support for the ebook switch on the OLPC XO-1.5 laptop.

	  This switch is triggered as the screen is rotated and folded down to
	  convert the device into ebook form.

config XO1_RFKILL
	tristate "OLPC XO-1 software RF kill switch"
	depends on OLPC || COMPILE_TEST
	depends on RFKILL
	help
	  Support for enabling/disabling the WLAN interface on the OLPC XO-1
	  laptop.

config PCENGINES_APU2
	tristate "PC Engines APUv2/3 front button and LEDs driver"
	depends on INPUT && INPUT_KEYBOARD && GPIOLIB
	depends on LEDS_CLASS
	select GPIO_AMD_FCH
	select KEYBOARD_GPIO_POLLED
	select LEDS_GPIO
	help
	  This driver provides support for the front button and LEDs on
	  PC Engines APUv2/APUv3 board.

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

config SAMSUNG_LAPTOP
	tristate "Samsung Laptop driver"
	depends on RFKILL || RFKILL = n
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on BACKLIGHT_CLASS_DEVICE
	select LEDS_CLASS
	select NEW_LEDS
	help
	  This module implements a driver for a wide range of different
	  Samsung laptops.  It offers control over the different
	  function keys, wireless LED, LCD backlight level.

	  It may also provide some sysfs files described in
	  <file:Documentation/ABI/testing/sysfs-driver-samsung-laptop>

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

config SAMSUNG_Q10
	tristate "Samsung Q10 Extras"
	depends on ACPI
	select BACKLIGHT_CLASS_DEVICE
	help
	  This driver provides support for backlight control on Samsung Q10
	  and related laptops, including Dell Latitude X200.

config ACPI_TOSHIBA
	tristate "Toshiba Laptop Extras"
	depends on ACPI
	depends on ACPI_WMI
	select LEDS_CLASS
	select NEW_LEDS
	depends on BACKLIGHT_CLASS_DEVICE
	depends on INPUT
	depends on SERIO_I8042 || SERIO_I8042 = n
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on RFKILL || RFKILL = n
	depends on IIO
	select INPUT_SPARSEKMAP
	help
	  This driver adds support for access to certain system settings
	  on "legacy free" Toshiba laptops.  These laptops can be recognized by
	  their lack of a BIOS setup menu and APM support.

	  On these machines, all system configuration is handled through the
	  ACPI.  This driver is required for access to controls not covered
	  by the general ACPI drivers, such as LCD brightness, video output,
	  etc.

	  This driver differs from the non-ACPI Toshiba laptop driver (located
	  under "Processor type and features") in several aspects.
	  Configuration is accessed by reading and writing text files in the
	  /proc tree instead of by program interface to /dev.  Furthermore, no
	  power management functions are exposed, as those are handled by the
	  general ACPI drivers.

	  More information about this driver is available at
	  <http://memebeam.org/toys/ToshibaAcpiDriver>.

	  If you have a legacy free Toshiba laptop (such as the Libretto L1
	  series), say Y.

config TOSHIBA_BT_RFKILL
	tristate "Toshiba Bluetooth RFKill switch support"
	depends on ACPI
	depends on RFKILL || RFKILL = n
	help
	  This driver adds support for Bluetooth events for the RFKill
	  switch on modern Toshiba laptops with full ACPI support and
	  an RFKill switch.

	  This driver handles RFKill events for the TOS6205 Bluetooth,
	  and re-enables it when the switch is set back to the 'on'
	  position.

	  If you have a modern Toshiba laptop with a Bluetooth and an
	  RFKill switch (such as the Portege R500), say Y.

config TOSHIBA_HAPS
	tristate "Toshiba HDD Active Protection Sensor"
	depends on ACPI
	help
	  This driver adds support for the built-in accelerometer
	  found on recent Toshiba laptops equipped with HID TOS620A
	  device.

	  This driver receives ACPI notify events 0x80 when the sensor
	  detects a sudden move or a harsh vibration, as well as an
	  ACPI notify event 0x81 whenever the movement or vibration has
	  been stabilized.

	  Also provides sysfs entries to get/set the desired protection
	  level and resetting the HDD protection interface.

	  If you have a recent Toshiba laptop with a built-in accelerometer
	  device, say Y.

config TOSHIBA_WMI
	tristate "Toshiba WMI Hotkeys Driver (EXPERIMENTAL)"
	depends on ACPI_WMI
	depends on INPUT
	select INPUT_SPARSEKMAP
	help
	  This driver adds hotkey monitoring support to some Toshiba models
	  that manage the hotkeys via WMI events.

	  WARNING: This driver is incomplete as it lacks a proper keymap and the
	  *notify function only prints the ACPI event type value. Be warned that
	  you will need to provide some information if you have a Toshiba model
	  with WMI event hotkeys and want to help with the development of this
	  driver.

	  If you have a WMI-based hotkeys Toshiba laptop, say Y or M here.

config ACPI_CMPC
	tristate "CMPC Laptop Extras"
	depends on ACPI && INPUT
	depends on RFKILL || RFKILL=n
	select BACKLIGHT_CLASS_DEVICE
	help
	  Support for Intel Classmate PC ACPI devices, including some
	  keys as input device, backlight device, tablet and accelerometer
	  devices.

config COMPAL_LAPTOP
	tristate "Compal (and others) Laptop Extras"
	depends on ACPI
	depends on BACKLIGHT_CLASS_DEVICE
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on RFKILL
	depends on HWMON
	depends on POWER_SUPPLY
	help
	  This is a driver for laptops built by Compal, and some models by
	  other brands (e.g. Dell, Toshiba).

	  It adds support for rfkill, Bluetooth, WLAN, LCD brightness, hwmon
	  and battery charging level control.

config LG_LAPTOP
	tristate "LG Laptop Extras"
	depends on ACPI
	depends on ACPI_WMI
	depends on INPUT
	select INPUT_SPARSEKMAP
	select NEW_LEDS
	select LEDS_CLASS
	help
	 This driver adds support for hotkeys as well as control of keyboard
	 backlight, battery maximum charge level and various other ACPI
	 features.

	 If you have an LG Gram laptop, say Y or M here.

config PANASONIC_LAPTOP
	tristate "Panasonic Laptop Extras"
	depends on INPUT && ACPI
	depends on BACKLIGHT_CLASS_DEVICE
	select INPUT_SPARSEKMAP
	help
	  This driver adds support for access to backlight control and hotkeys
	  on Panasonic Let's Note laptops.

	  If you have a Panasonic Let's note laptop (such as the R1(N variant),
	  R2, R3, R5, T2, W2 and Y2 series), say Y.

config SONY_LAPTOP
	tristate "Sony Laptop Extras"
	depends on ACPI
	depends on ACPI_VIDEO || ACPI_VIDEO = n
	depends on BACKLIGHT_CLASS_DEVICE
	depends on INPUT
	depends on RFKILL
	help
	  This mini-driver drives the SNC and SPIC devices present in the ACPI
	  BIOS of the Sony Vaio laptops.

	  It gives access to some extra laptop functionalities like Bluetooth,
	  screen brightness control, Fn keys and allows powering on/off some
	  devices.

	  Read <file:Documentation/admin-guide/laptops/sony-laptop.rst> for more information.

config SONYPI_COMPAT
	bool "Sonypi compatibility"
	depends on SONY_LAPTOP
	help
	  Build the sonypi driver compatibility code into the sony-laptop driver.

config SYSTEM76_ACPI
	tristate "System76 ACPI Driver"
	depends on ACPI
	select NEW_LEDS
	select LEDS_CLASS
	select LEDS_TRIGGERS
	help
	  This is a driver for System76 laptops running open firmware. It adds
	  support for Fn-Fx key combinations, keyboard backlight, and airplane mode
	  LEDs.

	  If you have a System76 laptop running open firmware, say Y or M here.

config TOPSTAR_LAPTOP
	tristate "Topstar Laptop Extras"
	depends on ACPI
	depends on INPUT
	select INPUT_SPARSEKMAP
	select LEDS_CLASS
	select NEW_LEDS
	help
	  This driver adds support for hotkeys found on Topstar laptops.

	  If you have a Topstar laptop, say Y or M here.

config I2C_MULTI_INSTANTIATE
	tristate "I2C multi instantiate pseudo device driver"
	depends on I2C && ACPI
	help
	  Some ACPI-based systems list multiple i2c-devices in a single ACPI
	  firmware-node. This driver will instantiate separate i2c-clients
	  for each device in the firmware-node.

	  To compile this driver as a module, choose M here: the module
	  will be called i2c-multi-instantiate.

config MLX_PLATFORM
	tristate "Mellanox Technologies platform support"
	depends on I2C && REGMAP
	help
	  This option enables system support for the Mellanox Technologies
	  platform. The Mellanox systems provide data center networking
	  solutions based on Virtual Protocol Interconnect (VPI) technology
	  enable seamless connectivity to 56/100Gb/s InfiniBand or 10/40/56GbE
	  connection.

	  If you have a Mellanox system, say Y or M here.

config TOUCHSCREEN_DMI
	bool "DMI based touchscreen configuration info"
	depends on ACPI && DMI && I2C=y && TOUCHSCREEN_SILEAD
	select EFI_EMBEDDED_FIRMWARE if EFI
	help
	  Certain ACPI based tablets with e.g. Silead or Chipone touchscreens
	  do not have enough data in ACPI tables for the touchscreen driver to
	  handle the touchscreen properly, as OEMs expect the data to be baked
	  into the tablet model specific version of the driver shipped with the
	  the OS-image for the device. This option supplies the missing info.
	  Enable this for x86 tablets with Silead or Chipone touchscreens.

config FW_ATTR_CLASS
	tristate

config INTEL_IMR
	bool "Intel Isolated Memory Region support"
	depends on X86_INTEL_QUARK && IOSF_MBI
	help
	  This option provides a means to manipulate Isolated Memory Regions.
	  IMRs are a set of registers that define read and write access masks
	  to prohibit certain system agents from accessing memory with 1 KiB
	  granularity.

	  IMRs make it possible to control read/write access to an address
	  by hardware agents inside the SoC. Read and write masks can be
	  defined for:
		- eSRAM flush
		- Dirty CPU snoop (write only)
		- RMU access
		- PCI Virtual Channel 0/Virtual Channel 1
		- SMM mode
		- Non SMM mode

	  Quark contains a set of eight IMR registers and makes use of those
	  registers during its bootup process.

	  If you are running on a Galileo/Quark say Y here.

config INTEL_IPS
	tristate "Intel Intelligent Power Sharing"
	depends on ACPI && PCI
	help
	  Intel Calpella platforms support dynamic power sharing between the
	  CPU and GPU, maximizing performance in a given TDP.  This driver,
	  along with the CPU frequency and i915 drivers, provides that
	  functionality.  If in doubt, say Y here; it will only load on
	  supported platforms.

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.

source "drivers/platform/x86/intel_speed_select_if/Kconfig"

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.

config INTEL_BXTWC_PMIC_TMU
	tristate "Intel BXT Whiskey Cove TMU Driver"
	depends on REGMAP
	depends on MFD_INTEL_PMC_BXT
	depends on INTEL_SOC_PMIC_BXTWC
	help
	  Select this driver to use Intel BXT 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 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_PMC_CORE
	tristate "Intel PMC Core driver"
	depends on PCI
	depends on ACPI
	help
	  The Intel Platform Controller Hub for Intel Core SoCs provides access
	  to Power Management Controller registers via various interfaces. This
	  driver can utilize debugging capabilities and supported features as
	  exposed by the Power Management Controller. It also may perform some
	  tasks in the PMC in order to enable transition into the SLPS0 state.
	  It should be selected on all Intel platforms supported by the driver.

	  Supported features:
		- SLP_S0_RESIDENCY counter
		- PCH IP Power Gating status
		- LTR Ignore / LTR Show
		- MPHY/PLL gating status (Sunrisepoint PCH only)
		- SLPS0 Debug registers (Cannonlake/Icelake PCH)
		- Low Power Mode registers (Tigerlake and beyond)
		- PMC quirks as needed to enable SLPS0/S0ix

config INTEL_PMT_CLASS
	tristate
	help
	  The Intel Platform Monitoring Technology (PMT) class driver provides
	  the basic sysfs interface and file hierarchy used by PMT devices.

	  For more information, see:
	  <file:Documentation/ABI/testing/sysfs-class-intel_pmt>

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

config INTEL_PMT_TELEMETRY
	tristate "Intel Platform Monitoring Technology (PMT) Telemetry driver"
	depends on MFD_INTEL_PMT
	select INTEL_PMT_CLASS
	help
	  The Intel Platform Monitory Technology (PMT) Telemetry driver provides
	  access to hardware telemetry metrics on devices that support the
	  feature.

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

config INTEL_PMT_CRASHLOG
	tristate "Intel Platform Monitoring Technology (PMT) Crashlog driver"
	depends on MFD_INTEL_PMT
	select INTEL_PMT_CLASS
	help
	  The Intel Platform Monitoring Technology (PMT) crashlog driver provides
	  access to hardware crashlog capabilities on devices that support the
	  feature.

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

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_SCU_IPC
	bool

config INTEL_SCU
	bool
	select INTEL_SCU_IPC

config INTEL_SCU_PCI
	bool "Intel SCU PCI driver"
	depends on PCI
	select INTEL_SCU
	help
	  This driver is used to bridge the communications between kernel
	  and SCU on some embedded Intel x86 platforms. It also creates
	  devices that are connected to the SoC through the SCU.
	  Platforms supported:
	    Medfield
	    Clovertrail
	    Merrifield
	    Broxton
	    Apollo Lake

config INTEL_SCU_PLATFORM
	tristate "Intel SCU platform driver"
	depends on ACPI
	select INTEL_SCU
	help
	  This driver is used to bridge the communications between kernel
	  and SCU (sometimes called PMC as well). The driver currently
	  supports Intel Elkhart Lake and compatible platforms.

config INTEL_SCU_WDT
	bool
	default INTEL_SCU_PCI
	depends on INTEL_MID_WATCHDOG
	help
	  This is a specific platform code to instantiate watchdog device
	  on ACPI-based Intel MID platforms.

config INTEL_SCU_IPC_UTIL
	tristate "Intel SCU IPC utility driver"
	depends on INTEL_SCU
	help
	  The IPC Util driver provides an interface with the SCU enabling
	  low level access for debug work and updating the firmware. Say
	  N unless you will be doing this on an Intel MID platform.

config INTEL_TELEMETRY
	tristate "Intel SoC Telemetry Driver"
	depends on X86_64
	depends on MFD_INTEL_PMC_BXT
	depends on INTEL_PUNIT_IPC
	help
	  This driver provides interfaces to configure and use
	  telemetry for INTEL SoC from APL onwards. It is also
	  used to get various SoC events and parameters
	  directly via debugfs files. Various tools may use
	  this interface for SoC state monitoring.

endif # X86_PLATFORM_DEVICES

config PMC_ATOM
       def_bool y
       depends on PCI
       select COMMON_CLK
