#
# ACPI Configuration
#

menuconfig ACPI
	bool "ACPI (Advanced Configuration and Power Interface) Support"
	depends on !IA64_HP_SIM
	depends on IA64 || X86 || ARM64
	depends on PCI
	select PNP
	default y if (IA64 || X86)
	help
	  Advanced Configuration and Power Interface (ACPI) support for 
	  Linux requires an ACPI-compliant platform (hardware/firmware),
	  and assumes the presence of OS-directed configuration and power
	  management (OSPM) software.  This option will enlarge your 
	  kernel by about 70K.

	  Linux ACPI provides a robust functional replacement for several 
	  legacy configuration and power management interfaces, including
	  the Plug-and-Play BIOS specification (PnP BIOS), the 
	  MultiProcessor Specification (MPS), and the Advanced Power 
	  Management (APM) specification.  If both ACPI and APM support 
	  are configured, ACPI is used.

	  The project home page for the Linux ACPI subsystem is here:
	  <https://01.org/linux-acpi>

	  Linux support for ACPI is based on Intel Corporation's ACPI
	  Component Architecture (ACPI CA).  For more information on the
	  ACPI CA, see:
	  <http://acpica.org/>

	  ACPI is an open industry specification originally co-developed by
	  Hewlett-Packard, Intel, Microsoft, Phoenix, and Toshiba. Currently,
	  it is developed by the ACPI Specification Working Group (ASWG) under
	  the UEFI Forum and any UEFI member can join the ASWG and contribute
	  to the ACPI specification.
	  The specification is available at:
	  <http://www.acpi.info>
	  <http://www.uefi.org/acpi/specs>

if ACPI

config ACPI_LEGACY_TABLES_LOOKUP
	bool

config ARCH_MIGHT_HAVE_ACPI_PDC
	bool

config ACPI_GENERIC_GSI
	bool

config ACPI_SYSTEM_POWER_STATES_SUPPORT
	bool

config ACPI_CCA_REQUIRED
	bool

config ACPI_DEBUGGER
	bool "AML debugger interface"
	select ACPI_DEBUG
	help
	  Enable in-kernel debugging of AML facilities: statistics,
	  internal object dump, single step control method execution.
	  This is still under development, currently enabling this only
	  results in the compilation of the ACPICA debugger files.

if ACPI_DEBUGGER

config ACPI_DEBUGGER_USER
	tristate "Userspace debugger accessiblity"
	depends on DEBUG_FS
	help
	  Export /sys/kernel/debug/acpi/acpidbg for userspace utilities
	  to access the debugger functionalities.

endif

config ACPI_SPCR_TABLE
	bool

config ACPI_SLEEP
	bool
	depends on SUSPEND || HIBERNATION
	depends on ACPI_SYSTEM_POWER_STATES_SUPPORT
	default y

config ACPI_PROCFS_POWER
	bool "Deprecated power /proc/acpi directories"
	depends on X86 && PROC_FS
	help
	  For backwards compatibility, this option allows
          deprecated power /proc/acpi/ directories to exist, even when
          they have been replaced by functions in /sys.
          The deprecated directories (and their replacements) include:
	  /proc/acpi/battery/* (/sys/class/power_supply/*)
	  /proc/acpi/ac_adapter/* (sys/class/power_supply/*)
	  This option has no effect on /proc/acpi/ directories
	  and functions, which do not yet exist in /sys
	  This option, together with the proc directories, will be
	  deleted in the future.

	  Say N to delete power /proc/acpi/ directories that have moved to /sys/

config ACPI_REV_OVERRIDE_POSSIBLE
	bool "Allow supported ACPI revision to be overridden"
	depends on X86
	default y
	help
	  The platform firmware on some systems expects Linux to return "5" as
	  the supported ACPI revision which makes it expose system configuration
	  information in a special way.

	  For example, based on what ACPI exports as the supported revision,
	  Dell XPS 13 (2015) configures its audio device to either work in HDA
	  mode or in I2S mode, where the former is supposed to be used on Linux
	  until the latter is fully supported (in the kernel as well as in user
	  space).

	  This option enables a DMI-based quirk for the above Dell machine (so
	  that HDA audio is exposed by the platform firmware to the kernel) and
	  makes it possible to force the kernel to return "5" as the supported
	  ACPI revision via the "acpi_rev_override" command line switch.

config ACPI_EC_DEBUGFS
	tristate "EC read/write access through /sys/kernel/debug/ec"
	default n
	help
	  Say N to disable Embedded Controller /sys/kernel/debug interface

	  Be aware that using this interface can confuse your Embedded
	  Controller in a way that a normal reboot is not enough. You then
	  have to power off your system, and remove the laptop battery for
	  some seconds.
	  An Embedded Controller typically is available on laptops and reads
	  sensor values like battery state and temperature.
	  The kernel accesses the EC through ACPI parsed code provided by BIOS
	  tables. This option allows to access the EC directly without ACPI
	  code being involved.
	  Thus this option is a debug option that helps to write ACPI drivers
	  and can be used to identify ACPI code or EC firmware bugs.

config ACPI_AC
	tristate "AC Adapter"
	depends on X86
	select POWER_SUPPLY
	default y
	help
	  This driver supports the AC Adapter object, which indicates
	  whether a system is on AC or not.  If you have a system that can
	  switch between A/C and battery, say Y.

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

config ACPI_BATTERY
	tristate "Battery"
	depends on X86
	select POWER_SUPPLY
	default y
	help
	  This driver adds support for battery information through
	  /proc/acpi/battery. If you have a mobile system with a battery, 
	  say Y.

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

config ACPI_BUTTON
	tristate "Button"
	depends on INPUT
	default y
	help
	  This driver handles events on the power, sleep, and lid buttons.
	  A daemon reads events from input devices or via netlink and
	  performs user-defined actions such as shutting down the system.
	  This is necessary for software-controlled poweroff.

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

config ACPI_VIDEO
	tristate "Video"
	depends on X86 && BACKLIGHT_CLASS_DEVICE
	depends on INPUT
	select THERMAL
	help
	  This driver implements the ACPI Extensions For Display Adapters
	  for integrated graphics devices on motherboard, as specified in
	  ACPI 2.0 Specification, Appendix B.  This supports basic operations
	  such as defining the video POST device, retrieving EDID information,
	  and setting up a video output.

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

config ACPI_FAN
	tristate "Fan"
	depends on THERMAL
	default y
	help
	  This driver supports ACPI fan devices, allowing user-mode
	  applications to perform basic fan control (on, off, status).

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

config ACPI_DOCK
	bool "Dock"
	help
	  This driver supports ACPI-controlled docking stations and removable
	  drive bays such as the IBM Ultrabay and the Dell Module Bay.

config ACPI_CPU_FREQ_PSS
	bool
	select THERMAL

config ACPI_PROCESSOR_CSTATE
	def_bool y
	depends on IA64 || X86

config ACPI_PROCESSOR_IDLE
	bool
	select CPU_IDLE

config ACPI_MCFG
	bool

config ACPI_CPPC_LIB
	bool
	depends on ACPI_PROCESSOR
	select MAILBOX
	select PCC
	help
	  If this option is enabled, this file implements common functionality
	  to parse CPPC tables as described in the ACPI 5.1+ spec. The
	  routines implemented are meant to be used by other
	  drivers to control CPU performance using CPPC semantics.
	  If your platform does not support CPPC in firmware,
	  leave this option disabled.

config ACPI_PROCESSOR
	tristate "Processor"
	depends on X86 || IA64 || ARM64
	select ACPI_PROCESSOR_IDLE
	select ACPI_CPU_FREQ_PSS if X86 || IA64
	default y
	help
	  This driver adds support for the ACPI Processor package. It is required
	  by several flavors of cpufreq performance-state, thermal, throttling and
	  idle drivers.

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

config ACPI_IPMI
	tristate "IPMI"
	depends on IPMI_SI
	default n
	help
	  This driver enables the ACPI to access the BMC controller. And it
	  uses the IPMI request/response message to communicate with BMC
	  controller, which can be found on on the server.

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

config ACPI_HOTPLUG_CPU
	bool
	depends on ACPI_PROCESSOR && HOTPLUG_CPU
	select ACPI_CONTAINER
	default y

config ACPI_PROCESSOR_AGGREGATOR
	tristate "Processor Aggregator"
	depends on ACPI_PROCESSOR
	depends on X86
	help
	  ACPI 4.0 defines processor Aggregator, which enables OS to perform
	  specific processor configuration and control that applies to all
	  processors in the platform. Currently only logical processor idling
	  is defined, which is to reduce power consumption. This driver
	  supports the new device.

config ACPI_THERMAL
	tristate "Thermal Zone"
	depends on ACPI_PROCESSOR
	select THERMAL
	default y
	help
	  This driver supports ACPI thermal zones.  Most mobile and
	  some desktop systems support ACPI thermal zones.  It is HIGHLY
	  recommended that this option be enabled, as your processor(s)
	  may be damaged without it.

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

config ACPI_NUMA
	bool "NUMA support"
	depends on NUMA
	depends on (X86 || IA64 || ARM64)
	default y if IA64_GENERIC || IA64_SGI_SN2 || ARM64

config ACPI_CUSTOM_DSDT_FILE
	string "Custom DSDT Table file to include"
	default ""
	depends on !STANDALONE
	help
	  This option supports a custom DSDT by linking it into the kernel.
	  See Documentation/acpi/dsdt-override.txt

	  Enter the full path name to the file which includes the AmlCode
	  declaration.

	  If unsure, don't enter a file name.

config ACPI_CUSTOM_DSDT
	bool
	default ACPI_CUSTOM_DSDT_FILE != ""

config ARCH_HAS_ACPI_TABLE_UPGRADE
	def_bool n

config ACPI_TABLE_UPGRADE
	bool "Allow upgrading ACPI tables via initrd"
	depends on BLK_DEV_INITRD && ARCH_HAS_ACPI_TABLE_UPGRADE
	default y
	help
	  This option provides functionality to upgrade arbitrary ACPI tables
	  via initrd. No functional change if no ACPI tables are passed via
	  initrd, therefore it's safe to say Y.
	  See Documentation/acpi/initrd_table_override.txt for details

config ACPI_DEBUG
	bool "Debug Statements"
	default n
	help
	  The ACPI subsystem can produce debug output.  Saying Y enables this
	  output and increases the kernel size by around 50K.

	  Use the acpi.debug_layer and acpi.debug_level kernel command-line
	  parameters documented in Documentation/acpi/debug.txt and
	  Documentation/admin-guide/kernel-parameters.rst to control the type and
	  amount of debug output.

config ACPI_PCI_SLOT
	bool "PCI slot detection driver"
	depends on SYSFS
	default n
	help
	  This driver creates entries in /sys/bus/pci/slots/ for all PCI
	  slots in the system.  This can help correlate PCI bus addresses,
	  i.e., segment/bus/device/function tuples, with physical slots in
	  the system.  If you are unsure, say N.

config X86_PM_TIMER
	bool "Power Management Timer Support" if EXPERT
	depends on X86
	default y
	help
	  The Power Management Timer is available on all ACPI-capable,
	  in most cases even if ACPI is unusable or blacklisted.

	  This timing source is not affected by power management features
	  like aggressive processor idling, throttling, frequency and/or
	  voltage scaling, unlike the commonly used Time Stamp Counter
	  (TSC) timing source.

	  You should nearly always say Y here because many modern
	  systems require this timer. 

config ACPI_CONTAINER
	bool "Container and Module Devices"
	default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU)
	help
	  This driver supports ACPI Container and Module devices (IDs
	  ACPI0004, PNP0A05, and PNP0A06).

	  This helps support hotplug of nodes, CPUs, and memory.

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

config ACPI_HOTPLUG_MEMORY
	bool "Memory Hotplug"
	depends on MEMORY_HOTPLUG
	help
	  This driver supports ACPI memory hotplug.  The driver
	  fields notifications on ACPI memory devices (PNP0C80),
	  which represent memory ranges that may be onlined or
	  offlined during runtime.

	  If your hardware and firmware do not support adding or
	  removing memory devices at runtime, you need not enable
	  this driver.

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

config ACPI_HOTPLUG_IOAPIC
	bool
	depends on PCI
	depends on X86_IO_APIC
	default y

config ACPI_SBS
	tristate "Smart Battery System"
	depends on X86
	select POWER_SUPPLY
	help
	  This driver supports the Smart Battery System, another
	  type of access to battery information, found on some laptops.

	  To compile this driver as a module, choose M here:
	  the modules will be called sbs and sbshc.

config ACPI_HED
	tristate "Hardware Error Device"
	help
	  This driver supports the Hardware Error Device (PNP0C33),
	  which is used to report some hardware errors notified via
	  SCI, mainly the corrected errors.

config ACPI_CUSTOM_METHOD
	tristate "Allow ACPI methods to be inserted/replaced at run time"
	depends on DEBUG_FS
	default n
	help
	  This debug facility allows ACPI AML methods to be inserted and/or
	  replaced without rebooting the system. For details refer to:
	  Documentation/acpi/method-customizing.txt.

	  NOTE: This option is security sensitive, because it allows arbitrary
	  kernel memory to be written to by root (uid=0) users, allowing them
	  to bypass certain security measures (e.g. if root is not allowed to
	  load additional kernel modules after boot, this feature may be used
	  to override that restriction).

config ACPI_BGRT
	bool "Boottime Graphics Resource Table support"
	depends on EFI && X86
        help
	  This driver adds support for exposing the ACPI Boottime Graphics
	  Resource Table, which allows the operating system to obtain
	  data from the firmware boot splash. It will appear under
	  /sys/firmware/acpi/bgrt/ .

config ACPI_REDUCED_HARDWARE_ONLY
	bool "Hardware-reduced ACPI support only" if EXPERT
	def_bool n
	help
	  This config item changes the way the ACPI code is built.  When this
	  option is selected, the kernel will use a specialized version of
	  ACPICA that ONLY supports the ACPI "reduced hardware" mode.  The
	  resulting kernel will be smaller but it will also be restricted to
	  running in ACPI reduced hardware mode ONLY.

	  If you are unsure what to do, do not enable this option.

source "drivers/acpi/nfit/Kconfig"

source "drivers/acpi/apei/Kconfig"
source "drivers/acpi/dptf/Kconfig"

config ACPI_WATCHDOG
	bool

config ACPI_EXTLOG
	tristate "Extended Error Log support"
	depends on X86_MCE && X86_LOCAL_APIC
	select UEFI_CPER
	select RAS
	default n
	help
	  Certain usages such as Predictive Failure Analysis (PFA) require
	  more information about the error than what can be described in
	  processor machine check banks. Most server processors log
	  additional information about the error in processor uncore
	  registers. Since the addresses and layout of these registers vary
	  widely from one processor to another, system software cannot
	  readily make use of them. To complicate matters further, some of
	  the additional error information cannot be constructed without
	  detailed knowledge about platform topology.

	  Enhanced MCA Logging allows firmware to provide additional error
	  information to system software, synchronous with MCE or CMCI. This
	  driver adds support for that functionality with corresponding
	  tracepoint which carries that information to userspace.

menuconfig PMIC_OPREGION
	bool "PMIC (Power Management Integrated Circuit) operation region support"
	help
	  Select this option to enable support for ACPI operation
	  region of the PMIC chip. The operation region can be used
	  to control power rails and sensor reading/writing on the
	  PMIC chip.

if PMIC_OPREGION
config CRC_PMIC_OPREGION
	bool "ACPI operation region support for CrystalCove PMIC"
	depends on INTEL_SOC_PMIC
	help
	  This config adds ACPI operation region support for CrystalCove PMIC.

config XPOWER_PMIC_OPREGION
	bool "ACPI operation region support for XPower AXP288 PMIC"
	depends on AXP288_ADC = y
	help
	  This config adds ACPI operation region support for XPower AXP288 PMIC.

config BXT_WC_PMIC_OPREGION
	bool "ACPI operation region support for BXT WhiskeyCove PMIC"
	depends on INTEL_SOC_PMIC
	help
	  This config adds ACPI operation region support for BXT WhiskeyCove PMIC.

endif

config ACPI_CONFIGFS
	tristate "ACPI configfs support"
	select CONFIGFS_FS
	help
	  Select this option to enable support for ACPI configuration from
	  userspace. The configurable ACPI groups will be visible under
	  /config/acpi, assuming configfs is mounted under /config.

if ARM64
source "drivers/acpi/arm64/Kconfig"
endif

endif	# ACPI
