#
# PARIDE configuration
#
# PARIDE doesn't need PARPORT, but if PARPORT is configured as a module,
# PARIDE must also be a module.  The bogus CONFIG_PARIDE_PARPORT option
# controls the choices given to the user ...
# PARIDE only supports PC style parports. Tough for USB or other parports...
config PARIDE_PARPORT
	tristate
	depends on PARIDE!=n
	default m if PARPORT_PC=m
	default y if PARPORT_PC!=m

comment "Parallel IDE high-level drivers"
	depends on PARIDE

config PARIDE_PD
	tristate "Parallel port IDE disks"
	depends on PARIDE
	help
	  This option enables the high-level driver for IDE-type disk devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port IDE driver, otherwise you should answer M to build
	  it as a loadable module. The module will be called pd. You
	  must also have at least one parallel port protocol driver in your
	  system. Among the devices supported by this driver are the SyQuest
	  EZ-135, EZ-230 and SparQ drives, the Avatar Shark and the backpack
	  hard drives from MicroSolutions.

config PARIDE_PCD
	tristate "Parallel port ATAPI CD-ROMs"
	depends on PARIDE
	---help---
	  This option enables the high-level driver for ATAPI CD-ROM devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI CD-ROM driver, otherwise you should answer M to
	  build it as a loadable module. The module will be called pcd. You
	  must also have at least one parallel port protocol driver in your
	  system. Among the devices supported by this driver are the
	  MicroSolutions backpack CD-ROM drives and the Freecom Power CD. If
	  you have such a CD-ROM drive, you should also say Y or M to "ISO
	  9660 CD-ROM file system support" below, because that's the file
	  system used on CD-ROMs.

config PARIDE_PF
	tristate "Parallel port ATAPI disks"
	depends on PARIDE
	help
	  This option enables the high-level driver for ATAPI disk devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI disk driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called pf.
	  You must also have at least one parallel port protocol driver in
	  your system. Among the devices supported by this driver are the
	  MicroSolutions backpack PD/CD drive and the Imation Superdisk
	  LS-120 drive.

config PARIDE_PT
	tristate "Parallel port ATAPI tapes"
	depends on PARIDE
	help
	  This option enables the high-level driver for ATAPI tape devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI disk driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called pt.
	  You must also have at least one parallel port protocol driver in
	  your system. Among the devices supported by this driver is the
	  parallel port version of the HP 5GB drive.

config PARIDE_PG
	tristate "Parallel port generic ATAPI devices"
	depends on PARIDE
	---help---
	  This option enables a special high-level driver for generic ATAPI
	  devices connected through a parallel port. The driver allows user
	  programs, such as cdrtools, to send ATAPI commands directly to a
	  device.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the parallel port generic ATAPI driver,
	  otherwise you should answer M to build it as a loadable module. The
	  module will be called pg.

	  You must also have at least one parallel port protocol driver in
	  your system.

	  This driver implements an API loosely related to the generic SCSI
	  driver. See <file:include/linux/pg.h>. for details.

	  You can obtain the most recent version of cdrtools from
	  <ftp://ftp.berlios.de/pub/cdrecord/>. Versions 1.6.1a3 and
	  later fully support this driver.

comment "Parallel IDE protocol modules"
	depends on PARIDE

config PARIDE_ATEN
	tristate "ATEN EH-100 protocol"
	depends on PARIDE
	help
	  This option enables support for the ATEN EH-100 parallel port IDE
	  protocol. This protocol is used in some inexpensive low performance
	  parallel port kits made in Hong Kong. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called aten. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_BPCK
	tristate "MicroSolutions backpack (Series 5) protocol"
	depends on PARIDE
	---help---
	  This option enables support for the Micro Solutions BACKPACK
	  parallel port Series 5 IDE protocol.  (Most BACKPACK drives made
	  before 1999 were Series 5) Series 5 drives will NOT always have the
	  Series noted on the bottom of the drive. Series 6 drivers will.

	  In other words, if your BACKPACK drive doesn't say "Series 6" on the
	  bottom, enable this option.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the protocol driver, otherwise you should
	  answer M to build it as a loadable module.  The module will be
	  called bpck.  You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_BPCK6
	tristate "MicroSolutions backpack (Series 6) protocol"
	depends on PARIDE && !64BIT
	---help---
	  This option enables support for the Micro Solutions BACKPACK
	  parallel port Series 6 IDE protocol.  (Most BACKPACK drives made
	  after 1999 were Series 6) Series 6 drives will have the Series noted
	  on the bottom of the drive.  Series 5 drivers don't always have it
	  noted.

	  In other words, if your BACKPACK drive says "Series 6" on the
	  bottom, enable this option.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the protocol driver, otherwise you should
	  answer M to build it as a loadable module.  The module will be
	  called bpck6.  You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_COMM
	tristate "DataStor Commuter protocol"
	depends on PARIDE
	help
	  This option enables support for the Commuter parallel port IDE
	  protocol from DataStor. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called comm. You must also have
	  a high-level driver for the type of device that you want to support.

config PARIDE_DSTR
	tristate "DataStor EP-2000 protocol"
	depends on PARIDE
	help
	  This option enables support for the EP-2000 parallel port IDE
	  protocol from DataStor. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called dstr. You must also have
	  a high-level driver for the type of device that you want to support.

config PARIDE_FIT2
	tristate "FIT TD-2000 protocol"
	depends on PARIDE
	help
	  This option enables support for the TD-2000 parallel port IDE
	  protocol from Fidelity International Technology. This is a simple
	  (low speed) adapter that is used in some portable hard drives. If
	  you chose to build PARIDE support into your kernel, you may answer Y
	  here to build in the protocol driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called ktti.
	  You must also have a high-level driver for the type of device that
	  you want to support.

config PARIDE_FIT3
	tristate "FIT TD-3000 protocol"
	depends on PARIDE
	help
	  This option enables support for the TD-3000 parallel port IDE
	  protocol from Fidelity International Technology. This protocol is
	  used in newer models of their portable disk, CD-ROM and PD/CD
	  devices. If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called fit3. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_EPAT
	tristate "Shuttle EPAT/EPEZ protocol"
	depends on PARIDE
	help
	  This option enables support for the EPAT parallel port IDE protocol.
	  EPAT is a parallel port IDE adapter manufactured by Shuttle
	  Technology and widely used in devices from major vendors such as
	  Hewlett-Packard, SyQuest, Imation and Avatar. If you chose to build
	  PARIDE support into your kernel, you may answer Y here to build in
	  the protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called epat. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_EPATC8
	bool "Support c7/c8 chips (EXPERIMENTAL)"
	depends on PARIDE_EPAT && EXPERIMENTAL
	help
	  This option enables support for the newer Shuttle EP1284 (aka c7 and
	  c8) chip. You need this if you are using any recent Imation SuperDisk
	  (LS-120) drive.

config PARIDE_EPIA
	tristate "Shuttle EPIA protocol"
	depends on PARIDE
	help
	  This option enables support for the (obsolete) EPIA parallel port
	  IDE protocol from Shuttle Technology. This adapter can still be
	  found in some no-name kits. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called epia. You must also have a
	  high-level driver for the type of device that you want to support.

config PARIDE_FRIQ
	tristate "Freecom IQ ASIC-2 protocol"
	depends on PARIDE
	help
	  This option enables support for version 2 of the Freecom IQ parallel
	  port IDE adapter.  This adapter is used by the Maxell Superdisk
	  drive.  If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called friq. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_FRPW
	tristate "FreeCom power protocol"
	depends on PARIDE
	help
	  This option enables support for the Freecom power parallel port IDE
	  protocol. If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called frpw. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_KBIC
	tristate "KingByte KBIC-951A/971A protocols"
	depends on PARIDE
	help
	  This option enables support for the KBIC-951A and KBIC-971A parallel
	  port IDE protocols from KingByte Information Corp. KingByte's
	  adapters appear in many no-name portable disk and CD-ROM products,
	  especially in Europe. If you chose to build PARIDE support into your
	  kernel, you may answer Y here to build in the protocol driver,
	  otherwise you should answer M to build it as a loadable module. The
	  module will be called kbic. You must also have a high-level driver
	  for the type of device that you want to support.

config PARIDE_KTTI
	tristate "KT PHd protocol"
	depends on PARIDE
	help
	  This option enables support for the "PHd" parallel port IDE protocol
	  from KT Technology. This is a simple (low speed) adapter that is
	  used in some 2.5" portable hard drives. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called ktti. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_ON20
	tristate "OnSpec 90c20 protocol"
	depends on PARIDE
	help
	  This option enables support for the (obsolete) 90c20 parallel port
	  IDE protocol from OnSpec (often marketed under the ValuStore brand
	  name). If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will
	  be called on20. You must also have a high-level driver for the
	  type of device that you want to support.

config PARIDE_ON26
	tristate "OnSpec 90c26 protocol"
	depends on PARIDE
	help
	  This option enables support for the 90c26 parallel port IDE protocol
	  from OnSpec Electronics (often marketed under the ValuStore brand
	  name). If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called on26. You must also have a high-level driver for the type
	  of device that you want to support.

#
