# 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 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 RPMB
	tristate "RPMB partition interface"
	help
	  Unified RPMB unit interface for RPMB capable devices such as eMMC and
	  UFS. Provides interface for in-kernel security controllers to access
	  RPMB unit.

	  If unsure, select N.

config TI_FPC202
	tristate "TI FPC202 Dual Port Controller"
	depends on I2C
	depends on GPIOLIB
	depends on LEDS_CLASS
	select I2C_ATR
	help
	  If you say yes here you get support for the Texas Instruments FPC202
	  Dual Port Controller.

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

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 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 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 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 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 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"
	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.

config MCHP_LAN966X_PCI
	tristate "Microchip LAN966x PCIe Support"
	depends on PCI
	depends on OF_OVERLAY
	select IRQ_DOMAIN
	help
	  This enables the support for the LAN966x PCIe device.

	  This is used to drive the LAN966x PCIe device from the host system
	  to which it is connected. The driver uses a device tree overlay to
	  load other drivers to support for LAN966x internal components.

	  Even if this driver does not depend on those other drivers, in order
	  to have a fully functional board, the following drivers are needed:
	    - fixed-clock (COMMON_CLK)
	    - lan966x-oic (LAN966X_OIC)
	    - lan966x-cpu-syscon (MFD_SYSCON)
	    - lan966x-switch-reset (RESET_MCHP_SPARX5)
	    - lan966x-pinctrl (PINCTRL_OCELOT)
	    - lan966x-serdes (PHY_LAN966X_SERDES)
	    - lan966x-miim (MDIO_MSCC_MIIM)
	    - lan966x-switch (LAN966X_SWITCH)

source "drivers/misc/c2port/Kconfig"
source "drivers/misc/eeprom/Kconfig"
source "drivers/misc/cb710/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/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"
source "drivers/misc/amd-sbi/Kconfig"
source "drivers/misc/rp1/Kconfig"
source "drivers/misc/issei/Kconfig"
endmenu
