menu "Infrared-port device drivers"
	depends on IRDA!=n

comment "SIR device drivers"

config IRTTY_SIR
	tristate "IrTTY (uses Linux serial driver)"
	depends on IRDA
	help
	  Say Y here if you want to build support for the IrTTY line
	  discipline.  To compile it as a module, choose M here: the module
	  will be called irtty-sir. IrTTY makes it possible to use Linux's
	  own serial driver for all IrDA ports that are 16550 compatible.
	  Most IrDA chips are 16550 compatible so you should probably say Y
	  to this option.  Using IrTTY will however limit the speed of the
	  connection to 115200 bps (IrDA SIR mode).

	  If unsure, say Y.

comment "Dongle support"

config DONGLE
	bool "Serial dongle support"
	depends on IRTTY_SIR
	help
	  Say Y here if you have an infrared device that connects to your
	  computer's serial port. These devices are called dongles. Then say Y
	  or M to the driver for your particular dongle below.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about serial dongles.

config ESI_DONGLE
	tristate "ESI JetEye PC dongle"
	depends on IRTTY_SIR && DONGLE && IRDA
	help
	  Say Y here if you want to build support for the Extended Systems
	  JetEye PC dongle.  To compile it as a module, choose M here. The ESI
	  dongle attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for ESI
	  dongles you will have to start irattach like this:
	  "irattach -d esi".

config ACTISYS_DONGLE
	tristate "ACTiSYS IR-220L and IR220L+ dongle"
	depends on IRTTY_SIR && DONGLE && IRDA
	help
	  Say Y here if you want to build support for the ACTiSYS IR-220L and
	  IR220L+ dongles.  To compile it as a module, choose M here. The
	  ACTiSYS dongles attaches to the normal 9-pin serial port connector,
	  and can currently only be used by IrTTY.  To activate support for
	  ACTiSYS dongles you will have to start irattach like this:
	  "irattach -d actisys" or "irattach -d actisys+".

config TEKRAM_DONGLE
	tristate "Tekram IrMate 210B dongle"
	depends on IRTTY_SIR && DONGLE && IRDA
	help
	  Say Y here if you want to build support for the Tekram IrMate 210B
	  dongle.  To compile it as a module, choose M here. The Tekram dongle
	  attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for Tekram
	  dongles you will have to start irattach like this:
	  "irattach -d tekram".

config TOIM3232_DONGLE
	tristate "TOIM3232 IrDa dongle"
	depends on IRTTY_SIR && DONGLE && IRDA
	help
	  Say Y here if you want to build support for the Vishay/Temic
	  TOIM3232 and TOIM4232 based dongles.
	  To compile it as a module, choose M here.

config LITELINK_DONGLE
	tristate "Parallax LiteLink dongle"
	depends on IRTTY_SIR && DONGLE && IRDA
	help
	  Say Y here if you want to build support for the Parallax Litelink
	  dongle.  To compile it as a module, choose M here.  The Parallax
	  dongle attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for Parallax
	  dongles you will have to start irattach like this:
	  "irattach -d litelink".

config MA600_DONGLE
	tristate "Mobile Action MA600 dongle"
	depends on IRTTY_SIR && DONGLE && IRDA && EXPERIMENTAL
	help
	  Say Y here if you want to build support for the Mobile Action MA600
	  dongle.  To compile it as a module, choose M here. The MA600 dongle
	  attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  The driver should also support
	  the MA620 USB version of the dongle, if the integrated USB-to-RS232
	  converter is supported by usbserial. To activate support for
	  MA600 dongle you will have to start irattach like this:
	  "irattach -d ma600".

config GIRBIL_DONGLE
	tristate "Greenwich GIrBIL dongle"
	depends on IRTTY_SIR && DONGLE && IRDA && EXPERIMENTAL
	help
	  Say Y here if you want to build support for the Greenwich GIrBIL
	  dongle.  If you want to compile it as a module, choose M here.
	  The Greenwich dongle attaches to the normal 9-pin serial port
	  connector, and can currently only be used by IrTTY.  To activate
	  support for Greenwich dongles you will have to start irattach
	  like this: "irattach -d girbil".

config MCP2120_DONGLE
	tristate "Microchip MCP2120"
	depends on IRTTY_SIR && DONGLE && IRDA && EXPERIMENTAL
	help
	  Say Y here if you want to build support for the Microchip MCP2120
	  dongle.  If you want to compile it as a module, choose M here.
	  The MCP2120 dongle attaches to the normal 9-pin serial port
	  connector, and can currently only be used by IrTTY.  To activate
	  support for MCP2120 dongles you will have to start irattach
	  like this: "irattach -d mcp2120".

	  You must build this dongle yourself.  For more information see:
	  <http://www.eyetap.org/~tangf/irda_sir_linux.html>

config OLD_BELKIN_DONGLE
	tristate "Old Belkin dongle"
	depends on IRTTY_SIR && DONGLE && IRDA && EXPERIMENTAL
	help
	  Say Y here if you want to build support for the Adaptec Airport 1000
	  and 2000 dongles.  If you want to compile it as a module, choose
	  M here. Some information is contained in the comments
	  at the top of <file:drivers/net/irda/old_belkin.c>.

config ACT200L_DONGLE
	tristate "ACTiSYS IR-200L dongle"
	depends on IRTTY_SIR && DONGLE && IRDA && EXPERIMENTAL
	help
	  Say Y here if you want to build support for the ACTiSYS IR-200L
	  dongle. If you want to compile it as a module, choose M here.
	  The ACTiSYS IR-200L dongle attaches to the normal 9-pin serial
	  port connector, and can currently only be used by IrTTY.
	  To activate support for ACTiSYS IR-200L dongle you will have to
	  start irattach like this: "irattach -d act200l".

comment "Old SIR device drivers"

config IRPORT_SIR
	tristate "IrPORT (IrDA serial driver)"
	depends on IRDA && BROKEN_ON_SMP
	---help---
	  Say Y here if you want to build support for the IrPORT IrDA device
	  driver.  To compile it as a module, choose M here: the module will be
	  called irport. IrPORT can be used instead of IrTTY and sometimes
	  this can be better.  One example is if your IrDA port does not
	  have echo-canceling, which will work OK with IrPORT since this
	  driver is working in half-duplex mode only.  You don't need to use
	  irattach with IrPORT, but you just insert it the same way as FIR
	  drivers (insmod irport io=0x3e8 irq=11).  Notice that IrPORT is a
	  SIR device driver which means that speed is limited to 115200 bps.

	  If unsure, say Y.

comment "Old Serial dongle support"

config DONGLE_OLD
	bool "Old Serial dongle support"
	depends on IRPORT_SIR && BROKEN_ON_SMP
	help
	  Say Y here if you have an infrared device that connects to your
	  computer's serial port. These devices are called dongles. Then say Y
	  or M to the driver for your particular dongle below.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about serial dongles.

config ESI_DONGLE_OLD
	tristate "ESI JetEye PC dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Extended Systems
	  JetEye PC dongle.  To compile it as a module, choose M here.  The ESI
	  dongle attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for ESI
	  dongles you will have to start irattach like this:
	  "irattach -d esi".

config ACTISYS_DONGLE_OLD
	tristate "ACTiSYS IR-220L and IR220L+ dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the ACTiSYS IR-220L and
	  IR220L+ dongles.  To compile it as a module, choose M here.  The
	  ACTiSYS dongles attaches to the normal 9-pin serial port connector,
	  and can currently only be used by IrTTY.  To activate support for
	  ACTiSYS dongles you will have to start irattach like this:
	  "irattach -d actisys" or "irattach -d actisys+".

config TEKRAM_DONGLE_OLD
	tristate "Tekram IrMate 210B dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Tekram IrMate 210B
	  dongle.  To compile it as a module, choose M here.  The Tekram dongle
	  attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for Tekram
	  dongles you will have to start irattach like this:
	  "irattach -d tekram".

config GIRBIL_DONGLE_OLD
	tristate "Greenwich GIrBIL dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Greenwich GIrBIL
	  dongle.  To compile it as a module, choose M here.  The Greenwich
	  dongle attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for Greenwich
	  dongles you will have to insert "irattach -d girbil" in the
	  /etc/irda/drivers script.

config LITELINK_DONGLE_OLD
	tristate "Parallax LiteLink dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Parallax Litelink
	  dongle.  To compile it as a module, choose M here.  The Parallax
	  dongle attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for Parallax
	  dongles you will have to start irattach like this:
	  "irattach -d litelink".

config MCP2120_DONGLE_OLD
	tristate "Microchip MCP2120"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Microchip MCP2120
	  dongle.  To compile it as a module, choose M here.  The MCP2120 dongle
	  attaches to the normal 9-pin serial port connector, and can
	  currently only be used by IrTTY.  To activate support for MCP2120
	  dongles you will have to insert "irattach -d mcp2120" in the
	  /etc/irda/drivers script.

	  You must build this dongle yourself.  For more information see:
	  <http://www.eyetap.org/~tangf/irda_sir_linux.html>

config OLD_BELKIN_DONGLE_OLD
	tristate "Old Belkin dongle"
	depends on DONGLE_OLD && IRDA
	help
	  Say Y here if you want to build support for the Adaptec Airport 1000
	  and 2000 dongles.  To compile it as a module, choose M here: the module
	  will be called old_belkin.  Some information is contained in the
	  comments at the top of <file:drivers/net/irda/old_belkin.c>.

config ACT200L_DONGLE_OLD
	tristate "ACTiSYS IR-200L dongle (EXPERIMENTAL)"
	depends on DONGLE_OLD && EXPERIMENTAL && IRDA
	help
	  Say Y here if you want to build support for the ACTiSYS IR-200L
	  dongle.  To compile it as a module, choose M here.  The ACTiSYS
	  IR-200L dongle attaches to the normal 9-pin serial port connector,
	  and can currently only be used by IrTTY. To activate support for
	  ACTiSYS IR-200L dongles you will have to start irattach like this:
	  "irattach -d act200l".

config MA600_DONGLE_OLD
	tristate "Mobile Action MA600 dongle (EXPERIMENTAL)"
	depends on DONGLE_OLD && EXPERIMENTAL && IRDA
	---help---
	  Say Y here if you want to build support for the Mobile Action MA600
	  dongle.  To compile it as a module, choose M here. The MA600 dongle
	  attaches to the normal 9-pin serial port connector, and can
	  currently only be tested on IrCOMM.  To activate support for MA600
	  dongles you will have to insert "irattach -d ma600" in the
	  /etc/irda/drivers script.  Note: irutils 0.9.15 requires no
	  modification. irutils 0.9.9 needs modification. For more
	  information, download the following tar gzip file.

	  There is a pre-compiled module on
	  <http://engsvr.ust.hk/~eetwl95/ma600.html>

config EP7211_IR
	tristate "EP7211 I/R support"
	depends on DONGLE_OLD && ARCH_EP7211 && IRDA

comment "FIR device drivers"

config USB_IRDA
	tristate "IrDA USB dongles"
	depends on IRDA && USB
	select FW_LOADER
	---help---
	  Say Y here if you want to build support for the USB IrDA FIR Dongle
	  device driver.  To compile it as a module, choose M here: the module
	  will be called irda-usb.  IrDA-USB support the various IrDA USB
	  dongles available and most of their peculiarities.  Those dongles
	  plug in the USB port of your computer, are plug and play, and
	  support SIR and FIR (4Mbps) speeds.  On the other hand, those
	  dongles tend to be less efficient than a FIR chipset.

	  Please note that the driver is still experimental.  And of course,
	  you will need both USB and IrDA support in your kernel...

config SIGMATEL_FIR
	tristate "SigmaTel STIr4200 bridge (EXPERIMENTAL)"
	depends on IRDA && USB && EXPERIMENTAL
	select CRC32
	---help---
	  Say Y here if you want to build support for the SigmaTel STIr4200
	  USB IrDA FIR bridge device driver.  

	  USB bridge based on the SigmaTel STIr4200 don't conform to the
	  IrDA-USB device class specification, and therefore need their
	  own specific driver. Those dongles support SIR and FIR (4Mbps)
	  speeds. 

	  To compile it as a module, choose M here: the module will be called
	  stir4200.

config NSC_FIR
	tristate "NSC PC87108/PC87338"
	depends on IRDA && ISA_DMA_API
	help
	  Say Y here if you want to build support for the NSC PC87108 and
	  PC87338 IrDA chipsets.  This driver supports SIR,
	  MIR and FIR (4Mbps) speeds.

	  To compile it as a module, choose M here: the module will be called
	  nsc-ircc.

config WINBOND_FIR
	tristate "Winbond W83977AF (IR)"
	depends on IRDA && ISA_DMA_API
	help
	  Say Y here if you want to build IrDA support for the Winbond
	  W83977AF super-io chipset.  This driver should be used for the IrDA
	  chipset in the Corel NetWinder.  The driver supports SIR, MIR and
	  FIR (4Mbps) speeds.

	  To compile it as a module, choose M here: the module will be called
	  w83977af_ir.

config TOSHIBA_FIR
	tristate "Toshiba Type-O IR Port"
	depends on IRDA && PCI && !64BIT
	help
	  Say Y here if you want to build support for the Toshiba Type-O IR
	  and Donau oboe chipsets. These chipsets are used by the Toshiba
	  Libretto 100/110CT, Tecra 8100, Portege 7020 and many more laptops.
	  To compile it as a module, choose M here: the module will be called
	  donauboe.

config AU1000_FIR
	tristate "Alchemy Au1000 SIR/FIR"
	depends on SOC_AU1000 && IRDA

config SMC_IRCC_FIR
	tristate "SMSC IrCC (EXPERIMENTAL)"
	depends on EXPERIMENTAL && IRDA && ISA_DMA_API
	help
	  Say Y here if you want to build support for the SMC Infrared
	  Communications Controller.  It is used in a wide variety of
	  laptops (Fujitsu, Sony, Compaq and some Toshiba).
	  To compile it as a module, choose M here: the module will be called
	  smsc-ircc2.o.

config ALI_FIR
	tristate "ALi M5123 FIR (EXPERIMENTAL)"
	depends on EXPERIMENTAL && IRDA && ISA_DMA_API
	help
	  Say Y here if you want to build support for the ALi M5123 FIR
	  Controller.  The ALi M5123 FIR Controller is embedded in ALi M1543C,
	  M1535, M1535D, M1535+, M1535D South Bridge.  This driver supports
	  SIR, MIR and FIR (4Mbps) speeds.

	  To compile it as a module, choose M here: the module will be called
	  ali-ircc.

config VLSI_FIR
	tristate "VLSI 82C147 SIR/MIR/FIR (EXPERIMENTAL)"
	depends on EXPERIMENTAL && IRDA && PCI
	help
	  Say Y here if you want to build support for the VLSI 82C147
	  PCI-IrDA Controller. This controller is used by the HP OmniBook 800
	  and 5500 notebooks. The driver provides support for SIR, MIR and
	  FIR (4Mbps) speeds.

	  To compile it as a module, choose M here: the module will be called
	  vlsi_ir.

config SA1100_FIR
	tristate "SA1100 Internal IR"
	depends on ARCH_SA1100 && IRDA

config VIA_FIR
	tristate "VIA VT8231/VT1211 SIR/MIR/FIR"
	depends on IRDA && ISA_DMA_API
	help
	  Say Y here if you want to build support for the VIA VT8231
	  and VIA VT1211 IrDA controllers, found on the motherboards using
	  those VIA chipsets. To use this controller, you will need
	  to plug a specific 5 pins FIR IrDA dongle in the specific
	  motherboard connector. The driver provides support for SIR, MIR
	  and FIR (4Mbps) speeds.

	  You will need to specify the 'dongle_id' module parameter to
	  indicate the FIR dongle attached to the controller.

	  To compile it as a module, choose M here: the module will be called
	  via-ircc.

config PXA_FICP
	tristate "Intel PXA2xx Internal FICP"
	depends on ARCH_PXA && IRDA
	help
	  Say Y or M here if you want to build support for the PXA2xx
	  built-in IRDA interface which can support both SIR and FIR.
	  This driver relies on platform specific helper routines so
	  available capabilities may vary from one PXA2xx target to
	  another.

config MCS_FIR
	tristate "MosChip MCS7780 IrDA-USB dongle"
	depends on IRDA && USB && EXPERIMENTAL
	help
	  Say Y or M here if you want to build support for the MosChip
	  MCS7780 IrDA-USB bridge device driver.

	  USB bridge based on the MosChip MCS7780 don't conform to the
	  IrDA-USB device class specification, and therefore need their
	  own specific driver. Those dongles support SIR and FIR (4Mbps)
	  speeds.

	  To compile it as a module, choose M here: the module will be called
	  mcs7780.

endmenu

