#
# 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_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.

config PARPORT_NOT_PC
	bool

endmenu

