config RC_CORE
	tristate
	depends on m
	depends on MEDIA_RC_SUPPORT
	depends on INPUT
	default y

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

menuconfig RC_DECODERS
        bool "Remote controller decoders"
	depends on RC_CORE
	default y

if RC_DECODERS
config LIRC
	tristate "LIRC interface driver"
	depends on m
	depends on RC_CORE

	---help---
	   Enable this option to build the Linux Infrared Remote
	   Control (LIRC) core device interface driver. The LIRC
	   interface passes raw IR to and from userspace, where the
	   LIRC daemon handles protocol decoding for IR reception and
	   encoding for IR transmitting (aka "blasting").

config IR_LIRC_CODEC
	tristate "Enable IR to LIRC bridge"
	depends on m
	depends on RC_CORE
	depends on LIRC
	default y

	---help---
	   Enable this option to pass raw IR to and from userspace via
	   the LIRC interface.


config IR_NEC_DECODER
	tristate "Enable IR raw decoder for the NEC protocol"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

	---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"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

	---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"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

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

config IR_JVC_DECODER
	tristate "Enable IR raw decoder for the JVC protocol"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

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

config IR_SONY_DECODER
	tristate "Enable IR raw decoder for the Sony protocol"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

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

config IR_SANYO_DECODER
	tristate "Enable IR raw decoder for the Sanyo protocol"
	depends on m
	depends on RC_CORE
	default y

	---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"
	depends on m
	depends on RC_CORE
	default y

	---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_MCE_KBD_DECODER
	tristate "Enable IR raw decoder for the MCE keyboard/mouse protocol"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

	---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_XMP_DECODER
	tristate "Enable IR raw decoder for the XMP protocol"
	depends on m
	depends on RC_CORE
	depends on BITREVERSE
	default y

	---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"
	depends on RC_CORE

if RC_DEVICES

config RC_ATI_REMOTE
	tristate "ATI / X10 based USB RF remote controls"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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 IR_ENE
	tristate "ENE eHome Receiver/Transceiver (pnp id: ENE0100/ENE02xxx)"
	depends on m
	depends on PNP
	depends on RC_CORE
	---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_HIX5HD2
	depends on !KERNEL_3_7
	depends on CONFIG_MFD_SYSCON
	tristate "Hisilicon hix5hd2 IR remote control"
	depends on m
	depends on RC_CORE
	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_IMON
	tristate "SoundGraph iMON Receiver and Display"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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_MCEUSB
	tristate "Windows Media Center Ed. eHome Infrared Transceiver"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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_ITE_CIR
	tristate "ITE Tech Inc. IT8712/IT8512 Consumer Infrared Transceiver"
	depends on m
	depends on PNP
	depends on RC_CORE
	---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_FINTEK
	tristate "Fintek Consumer Infrared Transceiver"
	depends on m
	depends on PNP
	depends on RC_CORE
	---help---
	   Say Y here to enable support for integrated infrared receiver
	   /transciever 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_MESON
	tristate "Amlogic Meson IR remote receiver"
	depends on m
	depends on RC_CORE
	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_NUVOTON
	tristate "Nuvoton w836x7hg Consumer Infrared Transceiver"
	depends on m
	depends on PNP
	depends on RC_CORE
	---help---
	   Say Y here to enable support for integrated infrared receiver
	   /transciever 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_REDRAT3
	tristate "RedRat3 IR Transceiver"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	select BPAUTO_NEW_LEDS
	select BPAUTO_LEDS_CLASS
	depends on USB
	---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_STREAMZAP
	tristate "Streamzap PC Remote IR Receiver"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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_WINBOND_CIR
	tristate "Winbond IR remote control"
	depends on m
	depends on X86 && PNP
	depends on RC_CORE
	select BPAUTO_NEW_LEDS
	select BPAUTO_LEDS_CLASS
	depends on 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 IR_IGORPLUGUSB
	tristate "IgorPlug-USB IR Receiver"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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 m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	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_TTUSBIR
	tristate "TechnoTrend USB IR Receiver"
	depends on m
	depends on USB_ARCH_HAS_HCD
	depends on RC_CORE
	depends on USB
	select BPAUTO_NEW_LEDS
	select BPAUTO_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_RX51
	tristate "Nokia N900 IR transmitter diode"
	depends on m
	depends on OMAP_DM_TIMER && ARCH_OMAP2PLUS && LIRC && !ARCH_MULTIPLATFORM
	---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.

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

config RC_LOOPBACK
	tristate "Remote Control Loopback Driver"
	depends on m
	depends on RC_CORE
	---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 IR_GPIO_CIR
	tristate "GPIO IR remote control"
	depends on m
	depends on RC_CORE
	---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 RC_ST
	tristate "ST remote control receiver"
	depends on m
	depends on RC_CORE
	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 IR_SUNXI
	tristate "SUNXI IR remote control"
	depends on m
	depends on RC_CORE
	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.

endif #RC_DEVICES
