#
# IrDA protocol configuration
#

menuconfig IRDA
	depends on NET
	tristate "IrDA (infrared) subsystem support"
	select CRC_CCITT
	---help---
	  Say Y here if you want to build support for the IrDA (TM) protocols.
	  The Infrared Data Associations (tm) specifies standards for wireless
	  infrared communication and is supported by most laptops and PDA's.

	  To use Linux support for the IrDA (tm) protocols, you will also need
	  some user-space utilities like irattach.  For more information, see
	  the file <file:Documentation/networking/irda.txt>.  You also want to
	  read the IR-HOWTO, available at
	  <http://www.tldp.org/docs.html#howto>.

	  If you want to exchange bits of data (vCal, vCard) with a PDA, you
	  will need to install some OBEX application, such as OpenObex :
	  <http://sourceforge.net/projects/openobex/>

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

comment "IrDA protocols"
	depends on IRDA

source "net/irda/irlan/Kconfig"

source "net/irda/irnet/Kconfig"

source "net/irda/ircomm/Kconfig"

config IRDA_ULTRA
	bool "Ultra (connectionless) protocol"
	depends on IRDA
	help
	  Say Y here to support the connectionless Ultra IRDA protocol.
	  Ultra allows to exchange data over IrDA with really simple devices
	  (watch, beacon) without the overhead of the IrDA protocol (no handshaking,
	  no management frames, simple fixed header).
	  Ultra is available as a special socket : socket(AF_IRDA, SOCK_DGRAM, 1);

comment "IrDA options"
	depends on IRDA

config IRDA_CACHE_LAST_LSAP
	bool "Cache last LSAP"
	depends on IRDA
	help
	  Say Y here if you want IrLMP to cache the last LSAP used.  This
	  makes sense since most frames will be sent/received on the same
	  connection.  Enabling this option will save a hash-lookup per frame.

	  If unsure, say Y.

config IRDA_FAST_RR
	bool "Fast RRs (low latency)"
	depends on IRDA
	---help---
	  Say Y here is you want IrLAP to send fast RR (Receive Ready) frames
	  when acting as a primary station.
	  Disabling this option will make latency over IrDA very bad. Enabling
	  this option will make the IrDA stack send more packet than strictly
	  necessary, thus reduce your battery life (but not that much).

	  Fast RR will make IrLAP send out a RR frame immediately when
	  receiving a frame if its own transmit queue is currently empty. This
	  will give a lot of speed improvement when receiving much data since
	  the secondary station will not have to wait the max. turn around
	  time (usually 500ms) before it is allowed to transmit the next time.
	  If the transmit queue of the secondary is also empty, the primary will
	  start backing-off before sending another RR frame, waiting longer
	  each time until the back-off reaches the max. turn around time.
	  This back-off increase in controlled via
	  /proc/sys/net/irda/fast_poll_increase

	  If unsure, say Y.

config IRDA_DEBUG
	bool "Debug information"
	depends on IRDA
	help
	  Say Y here if you want the IrDA subsystem to write debug information
	  to your syslog. You can change the debug level in
	  /proc/sys/net/irda/debug .
	  When this option is enabled, the IrDA also perform many extra internal
	  verifications which will usually prevent the kernel to crash in case of
	  bugs.

	  If unsure, say Y (since it makes it easier to find the bugs).

source "drivers/net/irda/Kconfig"

