# SPDX-License-Identifier: GPL-2.0-only
#
# Misc strange devices
#

menu "Misc devices"

config SENSORS_LIS3LV02D
	tristate
	depends on INPUT

config AD525X_DPOT
	tristate "Analog Devices Digital Potentiometers"
	depends on (I2C || SPI) && SYSFS
	help
	  If you say yes here, you get support for the Analog Devices
	  AD5258, AD5259, AD5251, AD5252, AD5253, AD5254, AD5255
	  AD5160, AD5161, AD5162, AD5165, AD5200, AD5201, AD5203,
	  AD5204, AD5206, AD5207, AD5231, AD5232, AD5233, AD5235,
	  AD5260, AD5262, AD5263, AD5290, AD5291, AD5292, AD5293,
	  AD7376, AD8400, AD8402, AD8403, ADN2850, AD5241, AD5242,
	  AD5243, AD5245, AD5246, AD5247, AD5248, AD5280, AD5282,
	  ADN2860, AD5273, AD5171, AD5170, AD5172, AD5173, AD5270,
	  AD5271, AD5272, AD5274
	  digital potentiometer chips.

	  See Documentation/misc-devices/ad525x_dpot.rst for the
	  userspace interface.

	  This driver can also be built as a module.  If so, the module
	  will be called ad525x_dpot.

config AD525X_DPOT_I2C
	tristate "support I2C bus connection"
	depends on AD525X_DPOT && I2C
	help
	  Say Y here if you have a digital potentiometers hooked to an I2C bus.

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

config AD525X_DPOT_SPI
	tristate "support SPI bus connection"
	depends on AD525X_DPOT && SPI_MASTER
	help
	  Say Y here if you have a digital potentiometers hooked to an SPI bus.

	  If unsure, say N (but it's safe to say "Y").

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

config DUMMY_IRQ
	tristate "Dummy IRQ handler"
	help
	  This module accepts a single 'irq' parameter, which it should register for.
	  The sole purpose of this module is to help with debugging of systems on
	  which spurious IRQs would happen on disabled IRQ vector.

config IBM_ASM
	tristate "Device driver for IBM RSA service processor"
	depends on X86 && PCI && INPUT
	depends on SERIAL_8250 || SERIAL_8250=n
	help
	  This option enables device driver support for in-band access to the
	  IBM RSA (Condor) service processor in eServer xSeries systems.
	  The ibmasm device driver allows user space application to access
	  ASM (Advanced Systems Management) functions on the service
	  processor. The driver is meant to be used in conjunction with
	  a user space API.
	  The ibmasm driver also enables the OS to use the UART on the
	  service processor board as a regular serial port. To make use of
	  this feature serial driver support (CONFIG_SERIAL_8250) must be
	  enabled.

	  WARNING: This software may not be supported or function
	  correctly on your IBM server. Please consult the IBM ServerProven
	  website <https://www-03.ibm.com/systems/info/x86servers/serverproven/compat/us/>
	  for information on the specific driver level and support statement
	  for your IBM server.

config IBMVMC
	tristate "IBM Virtual Management Channel support"
	depends on PPC_PSERIES
	help
	  This is the IBM POWER Virtual Management Channel

	  This driver is to be used for the POWER Virtual
	  Management Channel virtual adapter on the PowerVM
	  platform. It provides both request/response and
	  async message support through the /dev/ibmvmc node.

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

config PHANTOM
	tristate "Sensable PHANToM (PCI)"
	depends on PCI
	help
	  Say Y here if you want to build a driver for Sensable PHANToM device.

	  This driver is only for PCI PHANToMs.

	  If you choose to build module, its name will be phantom. If unsure,
	  say N here.

config TIFM_CORE
	tristate "TI Flash Media interface support"
	depends on PCI
	help
	  If you want support for Texas Instruments(R) Flash Media adapters
	  you should select this option and then also choose an appropriate
	  host adapter, such as 'TI Flash Media PCI74xx/PCI76xx host adapter
	  support', if you have a TI PCI74xx compatible card reader, for
	  example.
	  You will also have to select some flash card format drivers. MMC/SD
	  cards are supported via 'MMC/SD Card support: TI Flash Media MMC/SD
	  Interface support (MMC_TIFM_SD)'.

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

config TIFM_7XX1
	tristate "TI Flash Media PCI74xx/PCI76xx host adapter support"
	depends on PCI && TIFM_CORE
	default TIFM_CORE
	help
	  This option enables support for Texas Instruments(R) PCI74xx and
	  PCI76xx families of Flash Media adapters, found in many laptops.
	  To make actual use of the device, you will have to select some
	  flash card format drivers, as outlined in the TIFM_CORE Help.

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

config ICS932S401
	tristate "Integrated Circuits ICS932S401"
	depends on I2C
	help
	  If you say yes here you get support for the Integrated Circuits
	  ICS932S401 clock control chips.

	  This driver can also be built as a module. If so, the module
	  will be called ics932s401.

config ATMEL_SSC
	tristate "Device driver for Atmel SSC peripheral"
	depends on HAS_IOMEM && (ARCH_AT91 || COMPILE_TEST)
	help
	  This option enables device driver support for Atmel Synchronized
	  Serial Communication peripheral (SSC).

	  The SSC peripheral supports a wide variety of serial frame based
	  communications, i.e. I2S, SPI, etc.

	  If unsure, say N.

config ENCLOSURE_SERVICES
	tristate "Enclosure Services"
	help
	  Provides support for intelligent enclosures (bays which
	  contain storage devices).  You also need either a host
	  driver (SCSI/ATA) which supports enclosures
	  or a SCSI enclosure device (SES) to use these services.

config SGI_XP
	tristate "Support communication between SGI SSIs"
	depends on NET
	depends on X86_UV && SMP
	depends on X86_64 || BROKEN
	select SGI_GRU if X86_64 && SMP
	help
	  An SGI machine can be divided into multiple Single System
	  Images which act independently of each other and have
	  hardware based memory protection from the others.  Enabling
	  this feature will allow for direct communication between SSIs
	  based on a network adapter and DMA messaging.

config SMPRO_ERRMON
	tristate "Ampere Computing SMPro error monitor driver"
	depends on MFD_SMPRO || COMPILE_TEST
	help
	  Say Y here to get support for the SMpro error monitor function
	  provided by Ampere Computing's Altra and Altra Max SoCs. Upon
	  loading, the driver creates sysfs files which can be use to gather
	  multiple HW error data reported via read and write system calls.

	  To compile this driver as a module, say M here. The driver will be
	  called smpro-errmon.

config SMPRO_MISC
	tristate "Ampere Computing SMPro miscellaneous driver"
	depends on MFD_SMPRO || COMPILE_TEST
	help
	  Say Y here to get support for the SMpro error miscellalenous function
	  provided by Ampere Computing's Altra and Altra Max SoCs.

	  To compile this driver as a module, say M here. The driver will be
	  called smpro-misc.

config CS5535_MFGPT
	tristate "CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT) support"
	depends on MFD_CS5535
	help
	  This driver provides access to MFGPT functionality for other
	  drivers that need timers.  MFGPTs are available in the CS5535 and
	  CS5536 companion chips that are found in AMD Geode and several
	  other platforms.  They have a better resolution and max interval
	  than the generic PIT, and are suitable for use as high-res timers.
	  You probably don't want to enable this manually; other drivers that
	  make use of it should enable it.

config CS5535_MFGPT_DEFAULT_IRQ
	int
	depends on CS5535_MFGPT
	default 7
	help
	  MFGPTs on the CS5535 require an interrupt.  The selected IRQ
	  can be overridden as a module option as well as by driver that
	  use the cs5535_mfgpt_ API; however, different architectures might
	  want to use a different IRQ by default.  This is here for
	  architectures to set as necessary.

config CS5535_CLOCK_EVENT_SRC
	tristate "CS5535/CS5536 high-res timer (MFGPT) events"
	depends on GENERIC_CLOCKEVENTS && CS5535_MFGPT
	help
	  This driver provides a clock event source based on the MFGPT
	  timer(s) in the CS5535 and CS5536 companion chips.
	  MFGPTs have a better resolution and max interval than the
	  generic PIT, and are suitable for use as high-res timers.

config GEHC_ACHC
	tristate "GEHC ACHC support"
	depends on SPI && SYSFS
	depends on SOC_IMX53 || COMPILE_TEST
	select FW_LOADER
	help
	  Support for GE ACHC microcontroller, that is part of the GE
	  PPD device.

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

config HI6421V600_IRQ
	tristate "HiSilicon Hi6421v600 IRQ and powerkey"
	depends on OF
	depends on SPMI
	depends on HAS_IOMEM
	select MFD_CORE
	select REGMAP_SPMI
	help
	  This driver provides IRQ handling for Hi6421v600, used on
	  some Kirin chipsets, like the one at Hikey 970.

config HP_ILO
	tristate "Channel interface driver for the HP iLO processor"
	depends on PCI
	help
	  The channel interface driver allows applications to communicate
	  with iLO management processors present on HP ProLiant servers.
	  Upon loading, the driver creates /dev/hpilo/dXccbN files, which
	  can be used to gather data from the management processor, via
	  read and write system calls.

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

config QCOM_COINCELL
	tristate "Qualcomm coincell charger support"
	depends on MFD_SPMI_PMIC || COMPILE_TEST
	help
	  This driver supports the coincell block found inside of
	  Qualcomm PMICs.  The coincell charger provides a means to
	  charge a coincell battery or backup capacitor which is used
	  to maintain PMIC register and RTC state in the absence of
	  external power.

config QCOM_FASTRPC
	tristate "Qualcomm FastRPC"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on RPMSG
	select DMA_SHARED_BUFFER
	select QCOM_SCM
	help
	  Provides a communication mechanism that allows for clients to
	  make remote method invocations across processor boundary to
	  applications DSP processor. Say M if you want to enable this
	  module.

config SGI_GRU
	tristate "SGI GRU driver"
	depends on X86_UV && SMP
	select MMU_NOTIFIER
	help
	  The GRU is a hardware resource located in the system chipset. The GRU
	  contains memory that can be mmapped into the user address space.
	  This memory is used to communicate with the GRU to perform functions
	  such as load/store, scatter/gather, bcopy, AMOs, etc.  The GRU is
	  directly accessed by user instructions using user virtual addresses.
	  GRU instructions (ex., bcopy) use user virtual addresses for operands.

	  If you are not running on a SGI UV system, say N.

config SGI_GRU_DEBUG
	bool  "SGI GRU driver debug"
	depends on SGI_GRU
	help
	  This option enables additional debugging code for the SGI GRU driver.
	  If you are unsure, say N.

config APDS9802ALS
	tristate "Medfield Avago APDS9802 ALS Sensor module"
	depends on I2C
	help
	  If you say yes here you get support for the ALS APDS9802 ambient
	  light sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called apds9802als.

config ISL29003
	tristate "Intersil ISL29003 ambient light sensor"
	depends on I2C && SYSFS
	help
	  If you say yes here you get support for the Intersil ISL29003
	  ambient light sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called isl29003.

config ISL29020
	tristate "Intersil ISL29020 ambient light sensor"
	depends on I2C
	help
	  If you say yes here you get support for the Intersil ISL29020
	  ambient light sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called isl29020.

config SENSORS_TSL2550
	tristate "Taos TSL2550 ambient light sensor"
	depends on I2C && SYSFS
	help
	  If you say yes here you get support for the Taos TSL2550
	  ambient light sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called tsl2550.

config SENSORS_BH1770
	 tristate "BH1770GLC / SFH7770 combined ALS - Proximity sensor"
	 depends on I2C
	help
	   Say Y here if you want to build a driver for BH1770GLC (ROHM) or
	   SFH7770 (Osram) combined ambient light and proximity sensor chip.

	   To compile this driver as a module, choose M here: the
	   module will be called bh1770glc. If unsure, say N here.

config SENSORS_APDS990X
	 tristate "APDS990X combined als and proximity sensors"
	 depends on I2C
	help
	   Say Y here if you want to build a driver for Avago APDS990x
	   combined ambient light and proximity sensor chip.

	   To compile this driver as a module, choose M here: the
	   module will be called apds990x. If unsure, say N here.

config HMC6352
	tristate "Honeywell HMC6352 compass"
	depends on I2C
	help
	  This driver provides support for the Honeywell HMC6352 compass,
	  providing configuration and heading data via sysfs.

config DS1682
	tristate "Dallas DS1682 Total Elapsed Time Recorder with Alarm"
	depends on I2C
	help
	  If you say yes here you get support for Dallas Semiconductor
	  DS1682 Total Elapsed Time Recorder.

	  This driver can also be built as a module.  If so, the module
	  will be called ds1682.

config VMWARE_BALLOON
	tristate "VMware Balloon Driver"
	depends on VMWARE_VMCI && X86 && HYPERVISOR_GUEST
	select MEMORY_BALLOON
	help
	  This is VMware physical memory management driver which acts
	  like a "balloon" that can be inflated to reclaim physical pages
	  by reserving them in the guest and invalidating them in the
	  monitor, freeing up the underlying machine pages so they can
	  be allocated to other guests. The balloon can also be deflated
	  to allow the guest to use more physical memory.

	  If unsure, say N.

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

config PCH_PHUB
	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB"
	select GENERIC_NET_UTILS
	depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
	help
	  This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of
	  Intel Topcliff which is an IOH(Input/Output Hub) for x86 embedded
	  processor. The Topcliff has MAC address and Option ROM data in SROM.
	  This driver can access MAC address and Option ROM data in SROM.

	  This driver also can be used for LAPIS Semiconductor's IOH,
	  ML7213/ML7223/ML7831.
	  ML7213 which is for IVI(In-Vehicle Infotainment) use.
	  ML7223 IOH is for MP(Media Phone) use.
	  ML7831 IOH is for general purpose use.
	  ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.

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

config LATTICE_ECP3_CONFIG
	tristate "Lattice ECP3 FPGA bitstream configuration via SPI"
	depends on SPI && SYSFS
	select FW_LOADER
	help
	  This option enables support for bitstream configuration (programming
	  or loading) of the Lattice ECP3 FPGA family via SPI.

	  If unsure, say N.

config SRAM
	bool "Generic on-chip SRAM driver"
	depends on HAS_IOMEM
	select GENERIC_ALLOCATOR
	select SRAM_EXEC if ARM
	help
	  This driver allows you to declare a memory region to be managed by
	  the genalloc API. It is supposed to be used for small on-chip SRAM
	  areas found on many SoCs.

config SRAM_EXEC
	bool

config DW_XDATA_PCIE
	depends on PCI
	tristate "Synopsys DesignWare xData PCIe driver"
	help
	  This driver allows controlling Synopsys DesignWare PCIe traffic
	  generator IP also known as xData, present in Synopsys DesignWare
	  PCIe Endpoint prototype.

	  If unsure, say N.

config PCI_ENDPOINT_TEST
	depends on PCI
	select CRC32
	tristate "PCI Endpoint Test driver"
	help
	   Enable this configuration option to enable the host side test driver
	   for PCI Endpoint.

config XILINX_SDFEC
	tristate "Xilinx SDFEC 16"
	depends on HAS_IOMEM
	help
	  This option enables support for the Xilinx SDFEC (Soft Decision
	  Forward Error Correction) driver. This enables a char driver
	  for the SDFEC.

	  You may select this driver if your design instantiates the
	  SDFEC(16nm) hardened block. To compile this as a module choose M.

	  If unsure, say N.

config MISC_RTSX
	tristate
	default MISC_RTSX_PCI || MISC_RTSX_USB

config UID_SYS_STATS
	bool "Per-UID statistics"
	depends on PROFILING && TASK_XACCT && TASK_IO_ACCOUNTING
	help
	  Per UID based cpu time statistics exported to /proc/uid_cputime
	  Per UID based io statistics exported to /proc/uid_io
	  Per UID based procstat control in /proc/uid_procstat

config HISI_HIKEY_USB
	tristate "USB GPIO Hub on HiSilicon Hikey 960/970 Platform"
	depends on (OF && GPIOLIB) || COMPILE_TEST
	depends on USB_ROLE_SWITCH
	help
	  If you say yes here this adds support for the on-board USB GPIO hub
	  found on HiKey 960/970 boards, which is necessary to support
	  switching between the dual-role USB-C port and the USB-A host ports
	  using only one USB controller.

config OPEN_DICE
	tristate "Open Profile for DICE driver"
	depends on OF_RESERVED_MEM
	depends on HAS_IOMEM
	help
	  This driver exposes a DICE reserved memory region to userspace via
	  a character device. The memory region contains Compound Device
	  Identifiers (CDIs) generated by firmware as an output of DICE
	  measured boot flow. Userspace can use CDIs for remote attestation
	  and sealing.

	  If unsure, say N.

config NTSYNC
	tristate "NT synchronization primitive emulation"
	depends on BROKEN
	help
	  This module provides kernel support for emulation of Windows NT
	  synchronization primitives. It is not a hardware driver.

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

	  If unsure, say N.

config VCPU_STALL_DETECTOR
	tristate "Guest vCPU stall detector"
	depends on OF && HAS_IOMEM
	help
	  When this driver is bound inside a KVM guest, it will
	  periodically "pet" an MMIO stall detector device from each vCPU
	  and allow the host to detect vCPU stalls.

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

	  If you do not intend to run this kernel as a guest, say N.

config TMR_MANAGER
	tristate "Select TMR Manager"
	depends on MICROBLAZE && MB_MANAGER
	help
	  This option enables the driver developed for TMR Manager.
	  The Triple Modular Redundancy(TMR) manager provides support for
	  fault detection.

	  Say N here unless you know what you are doing.

config TMR_INJECT
	tristate "Select TMR Inject"
	depends on TMR_MANAGER && FAULT_INJECTION_DEBUG_FS
	help
	  This option enables the driver developed for TMR Inject.
	  The Triple Modular Redundancy(TMR) Inject provides
	  fault injection.

	  Say N here unless you know what you are doing.

config TPS6594_ESM
	tristate "TI TPS6594 Error Signal Monitor support"
	depends on MFD_TPS6594
	default MFD_TPS6594
	help
	  Support ESM (Error Signal Monitor) on TPS6594 PMIC devices.
	  ESM is used typically to reboot the board in error condition.

	  This driver can also be built as a module.  If so, the module
	  will be called tps6594-esm.

config TPS6594_PFSM
	tristate "TI TPS6594 Pre-configurable Finite State Machine support"
	depends on MFD_TPS6594
	default MFD_TPS6594
	help
	  Support PFSM (Pre-configurable Finite State Machine) on TPS6594 PMIC devices.
	  These devices integrate a finite state machine engine, which manages the state
	  of the device during operating state transition.

	  This driver can also be built as a module.  If so, the module
	  will be called tps6594-pfsm.

config NSM
	tristate "Nitro (Enclaves) Security Module support"
	depends on VIRTIO
	select HW_RANDOM
	help
	  This driver provides support for the Nitro Security Module
	  in AWS EC2 Nitro based Enclaves. The driver exposes a /dev/nsm
	  device user space can use to communicate with the hypervisor.

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

config MARVELL_CN10K_DPI
	tristate "Octeon CN10K DPI driver"
	depends on PCI && PCI_IOV
	depends on ARCH_THUNDER || (COMPILE_TEST && 64BIT)
	help
	  Enables Octeon CN10K DMA packet interface (DPI) driver which
	  intializes DPI hardware's physical function (PF) device's
	  global configuration and its virtual function (VFs) resource
	  configuration to enable DMA transfers. DPI PF device does not
	  have any data movement functionality, it only serves VF's
	  resource configuration requests.

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

source "drivers/misc/c2port/Kconfig"
source "drivers/misc/eeprom/Kconfig"
source "drivers/misc/cb710/Kconfig"
source "drivers/misc/ti-st/Kconfig"
source "drivers/misc/lis3lv02d/Kconfig"
source "drivers/misc/altera-stapl/Kconfig"
source "drivers/misc/mei/Kconfig"
source "drivers/misc/vmw_vmci/Kconfig"
source "drivers/misc/genwqe/Kconfig"
source "drivers/misc/echo/Kconfig"
source "drivers/misc/cxl/Kconfig"
source "drivers/misc/ocxl/Kconfig"
source "drivers/misc/bcm-vk/Kconfig"
source "drivers/misc/cardreader/Kconfig"
source "drivers/misc/uacce/Kconfig"
source "drivers/misc/pvpanic/Kconfig"
source "drivers/misc/mchp_pci1xxxx/Kconfig"
source "drivers/misc/keba/Kconfig"
endmenu
