# SPDX-License-Identifier: GPL-2.0-only

menuconfig RC_CORE
	tristate "Remote Controller support"
	depends on INPUT
	help
	  Enable support for Remote Controllers on Linux. This is
	  needed in order to support several video capture adapters,
	  standalone IR receivers/transmitters, and RF receivers.

	  Enable this option if you have a video capture board even
	  if you don't need IR, as otherwise, you may not be able to
	  compile the driver for your adapter.

	  Say Y when you have a TV or an IR device.

if RC_CORE

config BPF_LIRC_MODE2
	bool "Support for eBPF programs attached to lirc devices"
	depends on BPF_SYSCALL
	depends on RC_CORE=y
	depends on LIRC
	help
	   Allow attaching eBPF programs to a lirc device using the bpf(2)
	   syscall command BPF_PROG_ATTACH. This is supported for raw IR
	   receivers.

	   These eBPF programs can be used to decode IR into scancodes, for
	   IR protocols not supported by the kernel decoders.

config LIRC
	bool "LIRC user interface"
	help
	   Enable this option to enable the Linux Infrared Remote
	   Control user interface (e.g. /dev/lirc*). This interface
	   passes raw IR to and from userspace, which is needed for
	   IR transmitting (aka "blasting") and for the lirc daemon.

source "drivers/media/rc/keymaps/Kconfig"

menuconfig RC_DECODERS
	bool "Remote controller decoders"

if RC_DECODERS

config IR_IMON_DECODER
	tristate "Enable IR raw decoder for the iMON protocol"
	help
	   Enable this option if you have iMON PAD or Antec Veris infrared
	   remote control and you would like to use it with a raw IR
	   receiver, or if you wish to use an encoder to transmit this IR.

config IR_JVC_DECODER
	tristate "Enable IR raw decoder for the JVC protocol"
	select BITREVERSE

	help
	   Enable this option if you have an infrared remote control which
	   uses the JVC protocol, and you need software decoding support.

config IR_MCE_KBD_DECODER
	tristate "Enable IR raw decoder for the MCE keyboard/mouse protocol"
	select BITREVERSE

	help
	   Enable this option if you have a Microsoft Remote Keyboard for
	   Windows Media Center Edition, which you would like to use with
	   a raw IR receiver in your system.

config IR_NEC_DECODER
	tristate "Enable IR raw decoder for the NEC protocol"
	select BITREVERSE

	help
	   Enable this option if you have IR with NEC protocol, and
	   if the IR is decoded in software

config IR_RC5_DECODER
	tristate "Enable IR raw decoder for the RC-5 protocol"
	select BITREVERSE

	help
	   Enable this option if you have IR with RC-5 protocol, and
	   if the IR is decoded in software

config IR_RC6_DECODER
	tristate "Enable IR raw decoder for the RC6 protocol"
	select BITREVERSE

	help
	   Enable this option if you have an infrared remote control which
	   uses the RC6 protocol, and you need software decoding support.

config IR_RCMM_DECODER
	tristate "Enable IR raw decoder for the RC-MM protocol"
	help
	   Enable this option when you have IR with RC-MM protocol, and
	   you need the software decoder. The driver supports 12,
	   24 and 32 bits RC-MM variants. You can enable or disable the
	   different modes using the following RC protocol keywords:
	   'rc-mm-12', 'rc-mm-24' and 'rc-mm-32'.

	   To compile this driver as a module, choose M here: the module
	   will be called ir-rcmm-decoder.

config IR_SANYO_DECODER
	tristate "Enable IR raw decoder for the Sanyo protocol"
	select BITREVERSE

	help
	   Enable this option if you have an infrared remote control which
	   uses the Sanyo protocol (Sanyo, Aiwa, Chinon remotes),
	   and you need software decoding support.

config IR_SHARP_DECODER
	tristate "Enable IR raw decoder for the Sharp protocol"
	select BITREVERSE

	help
	   Enable this option if you have an infrared remote control which
	   uses the Sharp protocol (Sharp, Denon), and you need software
	   decoding support.

config IR_SONY_DECODER
	tristate "Enable IR raw decoder for the Sony protocol"
	select BITREVERSE

	help
	   Enable this option if you have an infrared remote control which
	   uses the Sony protocol, and you need software decoding support.

config IR_XMP_DECODER
	tristate "Enable IR raw decoder for the XMP protocol"
	select BITREVERSE

	help
	   Enable this option if you have IR with XMP protocol, and
	   if the IR is decoded in software

endif #RC_DECODERS

menuconfig RC_DEVICES
	bool "Remote Controller devices"

if RC_DEVICES

config IR_ENE
	tristate "ENE eHome Receiver/Transceiver (pnp id: ENE0100/ENE02xxx)"
	depends on PNP || COMPILE_TEST
	help
	   Say Y here to enable support for integrated infrared receiver
	   /transceiver made by ENE.

	   You can see if you have it by looking at lspnp output.
	   Output should include ENE0100 ENE0200 or something similar.

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

config IR_FINTEK
	tristate "Fintek Consumer Infrared Transceiver"
	depends on PNP || COMPILE_TEST
	help
	   Say Y here to enable support for integrated infrared receiver
	   /transceiver made by Fintek. This chip is found on assorted
	   Jetway motherboards (and of course, possibly others).

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

config IR_GPIO_CIR
	tristate "GPIO IR remote control"
	depends on (OF && GPIOLIB) || COMPILE_TEST
	help
	   Say Y if you want to use GPIO based IR Receiver.

	   To compile this driver as a module, choose M here: the module will
	   be called gpio-ir-recv.

config IR_GPIO_TX
	tristate "GPIO IR Bit Banging Transmitter"
	depends on LIRC
	depends on (OF && GPIOLIB) || COMPILE_TEST
	help
	   Say Y if you want to a GPIO based IR transmitter. This is a
	   bit banging driver.

	   To compile this driver as a module, choose M here: the module will
	   be called gpio-ir-tx.

config IR_HIX5HD2
	tristate "Hisilicon hix5hd2 IR remote control"
	depends on (OF && HAS_IOMEM) || COMPILE_TEST
	help
	   Say Y here if you want to use hisilicon hix5hd2 remote control.
	   To compile this driver as a module, choose M here: the module will be
	   called ir-hix5hd2.

	   If you're not sure, select N here

config IR_IGORPLUGUSB
	tristate "IgorPlug-USB IR Receiver"
	depends on USB
	help
	   Say Y here if you want to use the IgorPlug-USB IR Receiver by
	   Igor Cesko. This device is included on the Fit-PC2.

	   Note that this device can only record bursts of 36 IR pulses and
	   spaces, which is not enough for the NEC, Sanyo and RC-6 protocol.

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

config IR_IGUANA
	tristate "IguanaWorks USB IR Transceiver"
	depends on USB
	help
	   Say Y here if you want to use the IguanaWorks USB IR Transceiver.
	   Both infrared receive and send are supported. If you want to
	   change the ID or the pin config, use the user space driver from
	   IguanaWorks.

	   Only firmware 0x0205 and later is supported.

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

config IR_IMON
	tristate "SoundGraph iMON Receiver and Display"
	depends on USB
	help
	   Say Y here if you want to use a SoundGraph iMON (aka Antec Veris)
	   IR Receiver and/or LCD/VFD/VGA display.

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

config IR_IMON_RAW
	tristate "SoundGraph iMON Receiver (early raw IR models)"
	depends on USB
	help
	   Say Y here if you want to use a SoundGraph iMON IR Receiver,
	   early raw models.

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

config IR_ITE_CIR
	tristate "ITE Tech Inc. IT8712/IT8512 Consumer Infrared Transceiver"
	depends on PNP || COMPILE_TEST
	help
	   Say Y here to enable support for integrated infrared receivers
	   /transceivers made by ITE Tech Inc. These are found in
	   several ASUS devices, like the ASUS Digimatrix or the ASUS
	   EEEBox 1501U.

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

config IR_MCEUSB
	tristate "Windows Media Center Ed. eHome Infrared Transceiver"
	depends on USB
	help
	   Say Y here if you want to use a Windows Media Center Edition
	   eHome Infrared Transceiver.

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

config IR_MESON
	tristate "Amlogic Meson IR remote receiver"
	depends on ARCH_MESON || COMPILE_TEST
	help
	   Say Y if you want to use the IR remote receiver available
	   on Amlogic Meson SoCs.

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

config IR_MESON_TX
	tristate "Amlogic Meson IR TX"
	depends on ARCH_MESON || COMPILE_TEST
	help
	   Say Y if you want to use the IR transmitter available on
	   Amlogic Meson SoCs.

	   To compile this driver as a module, choose M here: the
	   module will be called meson-ir-tx.

config IR_MTK
	tristate "Mediatek IR remote receiver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	   Say Y if you want to use the IR remote receiver available
	   on Mediatek SoCs.

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

config IR_NUVOTON
	tristate "Nuvoton w836x7hg Consumer Infrared Transceiver"
	depends on PNP || COMPILE_TEST
	help
	   Say Y here to enable support for integrated infrared receiver
	   /transceiver made by Nuvoton (formerly Winbond). This chip is
	   found in the ASRock ION 330HT, as well as assorted Intel
	   DP55-series motherboards (and of course, possibly others).

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

config IR_PWM_TX
	tristate "PWM IR transmitter"
	depends on LIRC
	depends on PWM
	depends on OF || COMPILE_TEST
	help
	   Say Y if you want to use a PWM based IR transmitter. This is
	   more power efficient than the bit banging gpio driver.

	   To compile this driver as a module, choose M here: the module will
	   be called pwm-ir-tx.

config IR_REDRAT3
	tristate "RedRat3 IR Transceiver"
	depends on USB
	select NEW_LEDS
	select LEDS_CLASS
	help
	   Say Y here if you want to use a RedRat3 Infrared Transceiver.

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

config IR_RX51
	tristate "Nokia N900 IR transmitter diode"
	depends on (OMAP_DM_TIMER && PWM_OMAP_DMTIMER && ARCH_OMAP2PLUS || COMPILE_TEST) && RC_CORE
	help
	   Say Y or M here if you want to enable support for the IR
	   transmitter diode built in the Nokia N900 (RX51) device.

	   The driver uses omap DM timers for generating the carrier
	   wave and pulses.

config IR_SERIAL
	tristate "Homebrew Serial Port Receiver"
	help
	   Say Y if you want to use Homebrew Serial Port Receivers and
	   Transceivers.

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

config IR_SERIAL_TRANSMITTER
	bool "Serial Port Transmitter"
	depends on IR_SERIAL
	help
	   Serial Port Transmitter support

config IR_SPI
	tristate "SPI connected IR LED"
	depends on SPI && LIRC
	depends on OF || COMPILE_TEST
	help
	  Say Y if you want to use an IR LED connected through SPI bus.

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

config IR_STREAMZAP
	tristate "Streamzap PC Remote IR Receiver"
	depends on USB
	help
	   Say Y here if you want to use a Streamzap PC Remote
	   Infrared Receiver.

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

config IR_SUNXI
	tristate "SUNXI IR remote control"
	depends on ARCH_SUNXI || COMPILE_TEST
	help
	   Say Y if you want to use sunXi internal IR Controller

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

config IR_TOY
	tristate "Infrared Toy and IR Droid"
	depends on USB
	help
	   Say Y here if you want to use the Infrared Toy or IR Droid, USB
	   versions.

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

config IR_TTUSBIR
	tristate "TechnoTrend USB IR Receiver"
	depends on USB
	select NEW_LEDS
	select LEDS_CLASS
	help
	   Say Y here if you want to use the TechnoTrend USB IR Receiver. The
	   driver can control the led.

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

config IR_WINBOND_CIR
	tristate "Winbond IR remote control"
	depends on (X86 && PNP) || COMPILE_TEST
	select NEW_LEDS
	select LEDS_CLASS
	select BITREVERSE
	help
	   Say Y here if you want to use the IR remote functionality found
	   in some Winbond SuperI/O chips. Currently only the WPCD376I
	   chip is supported (included in some Intel Media series
	   motherboards).

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

config RC_ATI_REMOTE
	tristate "ATI / X10 based USB RF remote controls"
	depends on USB
	help
	   Say Y here if you want to use an X10 based USB remote control.
	   These are RF remotes with USB receivers.

	   Such devices include the ATI remote that comes with many of ATI's
	   All-In-Wonder video cards, the X10 "Lola" remote, NVIDIA RF remote,
	   Medion RF remote, and SnapStream FireFly remote.

	   This driver provides mouse pointer, left and right mouse buttons,
	   and maps all the other remote buttons to keypress events.

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

config RC_LOOPBACK
	tristate "Remote Control Loopback Driver"
	help
	   Say Y here if you want support for the remote control loopback
	   driver which allows TX data to be sent back as RX data.
	   This is mostly useful for debugging purposes.

	   If you're not sure, select N here.

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

config RC_ST
	tristate "ST remote control receiver"
	depends on ARCH_STI || COMPILE_TEST
	help
	   Say Y here if you want support for ST remote control driver
	   which allows both IR and UHF RX.
	   The driver passes raw pulse and space information to the LIRC decoder.

	   If you're not sure, select N here.

config RC_XBOX_DVD
	tristate "Xbox DVD Movie Playback Kit"
	depends on USB
	help
	   Say Y here if you want to use the Xbox DVD Movie Playback Kit.
	   These are IR remotes with USB receivers for the Original Xbox (2001).

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

source "drivers/media/rc/img-ir/Kconfig"

endif #RC_DEVICES

endif #RC_CORE
