#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
# Parport configuration.
#

menu "Parallel port support"

config PARPORT
	tristate "Parallel port support"
	---help---
	  If you want to use devices connected to your machine's parallel port
	  (the connector at the computer with 25 holes), e.g. printer, ZIP
	  drive, PLIP link (Parallel Line Internet Protocol is mainly used to
	  create a mini network by connecting the parallel ports of two local
	  machines) etc., then you need to say Y here; please read
	  <file:Documentation/parport.txt> and
	  <file:drivers/parport/BUGS-parport>.

	  For extensive information about drivers for many devices attaching
	  to the parallel port see <http://www.torque.net/linux-pp.html> on
	  the WWW.

	  It is possible to share a single parallel port among several devices
	  and it is safe to compile all the corresponding drivers into the
	  kernel. To compile parallel port support as a module, choose M here:
	  the module will be called parport.
	  If you have more than one parallel port and want to specify which
	  port and IRQ to be used by this driver at module load time, take a
	  look at <file:Documentation/parport.txt>.

	  If unsure, say Y.

config PARPORT_PC
	tristate "PC-style hardware"
	depends on PARPORT && (!SPARC64 || PCI) && !SPARC32 && !M32R && !FRV
	---help---
	  You should say Y here if you have a PC-style parallel port. All
	  IBM PC compatible computers and some Alphas have PC-style
	  parallel ports.  PA-RISC owners should only say Y here if they
	  have a SuperIO parallel port.

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

	  If unsure, say Y.

config PARPORT_SERIAL
	tristate "Multi-IO cards (parallel and serial)"
	depends on SERIAL_8250_PCI && PARPORT_PC && PCI
	help
	  This adds support for multi-IO PCI cards that have parallel and
	  serial ports.  You should say Y or M here.  If you say M, the module
	  will be called parport_serial.

config PARPORT_PC_FIFO
	bool "Use FIFO/DMA if available (EXPERIMENTAL)"
	depends on PARPORT_PC && EXPERIMENTAL
	help
	  Many parallel port chipsets provide hardware that can speed up
	  printing. Say Y here if you want to take advantage of that.

	  As well as actually having a FIFO, or DMA capability, the kernel
	  will need to know which IRQ the parallel port has.  By default,
	  parallel port interrupts will not be used, and so neither will the
	  FIFO.  See <file:Documentation/parport.txt> to find out how to
	  specify which IRQ/DMA to use.

config PARPORT_PC_SUPERIO
	bool "SuperIO chipset support (EXPERIMENTAL)"
	depends on PARPORT_PC && EXPERIMENTAL
	help
	  Saying Y here enables some probes for Super-IO chipsets in order to
	  find out things like base addresses, IRQ lines and DMA channels.  It
	  is safe to say N.

config PARPORT_PC_PCMCIA
	tristate "Support for PCMCIA management for PC-style ports"
	depends on PCMCIA && PARPORT_PC
	help
	  Say Y here if you need PCMCIA support for your PC-style parallel
	  ports. If unsure, say N.

config PARPORT_NOT_PC
	bool

config PARPORT_IP32
	tristate "SGI IP32 builtin port (EXPERIMENTAL)"
	depends on SGI_IP32 && PARPORT && EXPERIMENTAL
	select PARPORT_NOT_PC
	help
	  Say Y here if you need support for the parallel port on
	  SGI O2 machines. This code is also available as a module (say M),
	  called parport_ip32.  If in doubt, saying N is the safe plan.

config PARPORT_AMIGA
	tristate "Amiga builtin port"
	depends on AMIGA && PARPORT
	select PARPORT_NOT_PC
	help
	  Say Y here if you need support for the parallel port hardware on
	  Amiga machines. This code is also available as a module (say M),
	  called parport_amiga. If in doubt, saying N is the safe plan.

config PARPORT_MFC3
	tristate "Multiface III parallel port"
	depends on ZORRO && PARPORT
	select PARPORT_NOT_PC
	help
	  Say Y here if you need parallel port support for the MFC3 card.
	  This code is also available as a module (say M), called
	  parport_mfc3. If in doubt, saying N is the safe plan.

config PARPORT_ATARI
	tristate "Atari hardware"
	depends on ATARI && PARPORT
	select PARPORT_NOT_PC
	help
	  Say Y here if you need support for the parallel port hardware on
	  Atari machines. This code is also available as a module (say M),
	  called parport_atari. If in doubt, saying N is the safe plan.

config PARPORT_GSC
	tristate
	default GSC
	depends on PARPORT
	select PARPORT_NOT_PC

config PARPORT_SUNBPP
	tristate "Sparc hardware (EXPERIMENTAL)"
	depends on SBUS && PARPORT && EXPERIMENTAL
	select PARPORT_NOT_PC
	help
	  This driver provides support for the bidirectional parallel port
	  found on many Sun machines. Note that many of the newer Ultras
	  actually have pc style hardware instead.

config PARPORT_AX88796
	tristate "AX88796 Parallel Port"
	depends on PARPORT
	select PARPORT_NOT_PC
	help
	  Say Y here if you need support for the parallel port hardware on
	  the AX88796 network controller chip. This code is also available
	  as a module (say M), called parport_ax88796.

	  The driver is not dependant on the AX88796 network driver, and
	  should not interfere with the networking functions of the chip.

config PARPORT_1284
	bool "IEEE 1284 transfer modes"
	depends on PARPORT
	help
	  If you have a printer that supports status readback or device ID, or
	  want to use a device that uses enhanced parallel port transfer modes
	  such as EPP and ECP, say Y here to enable advanced IEEE 1284
	  transfer modes. Also say Y if you want device ID information to
	  appear in /proc/sys/dev/parport/*/autoprobe*. It is safe to say N.

endmenu

