#
# SATA/PATA driver configuration
#

config HAVE_PATA_PLATFORM
	bool
	help
	  This is an internal configuration node for any machine that
	  uses pata-platform driver to enable the relevant driver in the
	  configuration structure without having to submit endless patches
	  to update the PATA_PLATFORM entry.

menuconfig ATA
	tristate "Serial ATA and Parallel ATA drivers (libata)"
	depends on HAS_IOMEM
	depends on BLOCK
	depends on !(M32R || M68K || S390) || BROKEN
	select SCSI
	select GLOB
	---help---
	  If you want to use an ATA hard disk, ATA tape drive, ATA CD-ROM or
	  any other ATA device under Linux, say Y and make sure that you know
	  the name of your ATA host adapter (the card inside your computer
	  that "speaks" the ATA protocol, also called ATA controller),
	  because you will be asked for it.

	  NOTE: ATA enables basic SCSI support; *however*,
	  'SCSI disk support', 'SCSI tape support', or
	  'SCSI CDROM support' may also be needed,
	  depending on your hardware configuration.

if ATA

config ATA_NONSTANDARD
       bool
       default n

config ATA_VERBOSE_ERROR
	bool "Verbose ATA error reporting"
	default y
	help
	  This option adds parsing of ATA command descriptions and error bits
	  in libata kernel output, making it easier to interpret.
	  This option will enlarge the kernel by approx. 6KB. Disable it only
	  if kernel size is more important than ease of debugging.

	  If unsure, say Y.

config ATA_ACPI
	bool "ATA ACPI Support"
	depends on ACPI
	default y
	help
	  This option adds support for ATA-related ACPI objects.
	  These ACPI objects add the ability to retrieve taskfiles
	  from the ACPI BIOS and write them to the disk controller.
	  These objects may be related to performance, security,
	  power management, or other areas.
	  You can disable this at kernel boot time by using the
	  option libata.noacpi=1

config SATA_ZPODD
	bool "SATA Zero Power Optical Disc Drive (ZPODD) support"
	depends on ATA_ACPI && PM
	default n
	help
	  This option adds support for SATA Zero Power Optical Disc
	  Drive (ZPODD). It requires both the ODD and the platform
	  support, and if enabled, will automatically power on/off the
	  ODD when certain condition is satisfied. This does not impact
	  end user's experience of the ODD, only power is saved when
	  the ODD is not in use (i.e. no disc inside).

	  If unsure, say N.

config SATA_PMP
	bool "SATA Port Multiplier support"
	default y
	help
	  This option adds support for SATA Port Multipliers
	  (the SATA version of an ethernet hub, or SAS expander).

comment "Controllers with non-SFF native interface"

config SATA_AHCI
	tristate "AHCI SATA support"
	depends on PCI
	help
	  This option enables support for AHCI Serial ATA.

	  If unsure, say N.

config SATA_AHCI_PLATFORM
	tristate "Platform AHCI SATA support"
	help
	  This option enables support for Platform AHCI Serial ATA
	  controllers.

	  If unsure, say N.

config AHCI_BRCMSTB
	tristate "Broadcom STB AHCI SATA support"
	depends on ARCH_BRCMSTB
	help
	  This option enables support for the AHCI SATA3 controller found on
	  STB SoC's.

	  If unsure, say N.

config AHCI_DA850
	tristate "DaVinci DA850 AHCI SATA support"
	depends on ARCH_DAVINCI_DA850
	help
	  This option enables support for the DaVinci DA850 SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_ST
	tristate "ST AHCI SATA support"
	depends on ARCH_STI
	help
	  This option enables support for ST AHCI SATA controller.

	  If unsure, say N.

config AHCI_IMX
	tristate "Freescale i.MX AHCI SATA support"
	depends on MFD_SYSCON && (ARCH_MXC || COMPILE_TEST)
	help
	  This option enables support for the Freescale i.MX SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_CEVA
	tristate "CEVA AHCI SATA support"
	depends on OF
	help
	  This option enables support for the CEVA AHCI SATA.
	  It can be found on the Xilinx Zynq UltraScale+ MPSoC.

	  If unsure, say N.

config AHCI_MVEBU
	tristate "Marvell EBU AHCI SATA support"
	depends on ARCH_MVEBU
	help
	  This option enables support for the Marvebu EBU SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_SUNXI
	tristate "Allwinner sunxi AHCI SATA support"
	depends on ARCH_SUNXI
	help
	  This option enables support for the Allwinner sunxi SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_TEGRA
	tristate "NVIDIA Tegra124 AHCI SATA support"
	depends on ARCH_TEGRA
	help
	  This option enables support for the NVIDIA Tegra124 SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_XGENE
	tristate "APM X-Gene 6.0Gbps AHCI SATA host controller support"
	depends on PHY_XGENE
	help
	 This option enables support for APM X-Gene SoC SATA host controller.

config SATA_FSL
	tristate "Freescale 3.0Gbps SATA support"
	depends on FSL_SOC
	help
	  This option enables support for Freescale 3.0Gbps SATA controller.
	  It can be found on MPC837x and MPC8315.

	  If unsure, say N.

config SATA_INIC162X
	tristate "Initio 162x SATA support (Very Experimental)"
	depends on PCI
	help
	  This option enables support for Initio 162x Serial ATA.

config SATA_ACARD_AHCI
	tristate "ACard AHCI variant (ATP 8620)"
	depends on PCI
	help
	  This option enables support for Acard.

	  If unsure, say N.

config SATA_SIL24
	tristate "Silicon Image 3124/3132 SATA support"
	depends on PCI
	help
	  This option enables support for Silicon Image 3124/3132 Serial ATA.

	  If unsure, say N.

config ATA_SFF
	bool "ATA SFF support (for legacy IDE and PATA)"
	default y
	help
	  This option adds support for ATA controllers with SFF
	  compliant or similar programming interface.

	  SFF is the legacy IDE interface that has been around since
	  the dawn of time.  Almost all PATA controllers have an
	  SFF interface.  Many SATA controllers have an SFF interface
	  when configured into a legacy compatibility mode.

	  For users with exclusively modern controllers like AHCI,
	  Silicon Image 3124, or Marvell 6440, you may choose to
	  disable this unneeded SFF support.

	  If unsure, say Y.

if ATA_SFF

comment "SFF controllers with custom DMA interface"

config PDC_ADMA
	tristate "Pacific Digital ADMA support"
	depends on PCI
	help
	  This option enables support for Pacific Digital ADMA controllers

	  If unsure, say N.

config PATA_OCTEON_CF
	tristate "OCTEON Boot Bus Compact Flash support"
	depends on CAVIUM_OCTEON_SOC
	help
	  This option enables a polled compact flash driver for use with
	  compact flash cards attached to the OCTEON boot bus.

	  If unsure, say N.

config SATA_QSTOR
	tristate "Pacific Digital SATA QStor support"
	depends on PCI
	help
	  This option enables support for Pacific Digital Serial ATA QStor.

	  If unsure, say N.

config SATA_SX4
	tristate "Promise SATA SX4 support (Experimental)"
	depends on PCI
	help
	  This option enables support for Promise Serial ATA SX4.

	  If unsure, say N.

config ATA_BMDMA
	bool "ATA BMDMA support"
	default y
	help
	  This option adds support for SFF ATA controllers with BMDMA
	  capability.  BMDMA stands for bus-master DMA and is the
	  de facto DMA interface for SFF controllers.

	  If unsure, say Y.

if ATA_BMDMA

comment "SATA SFF controllers with BMDMA"

config ATA_PIIX
	tristate "Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support"
	depends on PCI
	help
	  This option enables support for ICH5/6/7/8 Serial ATA
	  and support for PATA on the Intel ESB/ICH/PIIX3/PIIX4 series
	  host controllers.

	  If unsure, say N.

config SATA_DWC
	tristate "DesignWare Cores SATA support"
	depends on 460EX
	select DW_DMAC
	help
	  This option enables support for the on-chip SATA controller of the
	  AppliedMicro processor 460EX.

	  If unsure, say N.

config SATA_DWC_DEBUG
	bool "Debugging driver version"
	depends on SATA_DWC
	help
	  This option enables debugging output in the driver.

config SATA_DWC_VDEBUG
	bool "Verbose debug output"
	depends on SATA_DWC_DEBUG
	help
	  This option enables the taskfile dumping and NCQ debugging.

config SATA_HIGHBANK
	tristate "Calxeda Highbank SATA support"
	depends on ARCH_HIGHBANK || COMPILE_TEST
	help
	  This option enables support for the Calxeda Highbank SoC's
	  onboard SATA.

	  If unsure, say N.

config SATA_MV
	tristate "Marvell SATA support"
	depends on PCI || ARCH_DOVE || ARCH_MV78XX0 || \
		   ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST
	select GENERIC_PHY
	help
	  This option enables support for the Marvell Serial ATA family.
	  Currently supports 88SX[56]0[48][01] PCI(-X) chips,
	  as well as the newer [67]042 PCI-X/PCIe and SOC devices.

	  If unsure, say N.

config SATA_NV
	tristate "NVIDIA SATA support"
	depends on PCI
	help
	  This option enables support for NVIDIA Serial ATA.

	  If unsure, say N.

config SATA_PROMISE
	tristate "Promise SATA TX2/TX4 support"
	depends on PCI
	help
	  This option enables support for Promise Serial ATA TX2/TX4.

	  If unsure, say N.

config SATA_RCAR
	tristate "Renesas R-Car SATA support"
	depends on ARCH_SHMOBILE || COMPILE_TEST
	help
	  This option enables support for Renesas R-Car Serial ATA.

	  If unsure, say N.

config SATA_SIL
	tristate "Silicon Image SATA support"
	depends on PCI
	help
	  This option enables support for Silicon Image Serial ATA.

	  If unsure, say N.

config SATA_SIS
	tristate "SiS 964/965/966/180 SATA support"
	depends on PCI
	select PATA_SIS
	help
	  This option enables support for SiS Serial ATA on
	  SiS 964/965/966/180 and Parallel ATA on SiS 180.
	  The PATA support for SiS 180 requires additionally to
	  enable the PATA_SIS driver in the config.
	  If unsure, say N.

config SATA_SVW
	tristate "ServerWorks Frodo / Apple K2 SATA support"
	depends on PCI
	help
	  This option enables support for Broadcom/Serverworks/Apple K2
	  SATA support.

	  If unsure, say N.

config SATA_ULI
	tristate "ULi Electronics SATA support"
	depends on PCI
	help
	  This option enables support for ULi Electronics SATA.

	  If unsure, say N.

config SATA_VIA
	tristate "VIA SATA support"
	depends on PCI
	help
	  This option enables support for VIA Serial ATA.

	  If unsure, say N.

config SATA_VITESSE
	tristate "VITESSE VSC-7174 / INTEL 31244 SATA support"
	depends on PCI
	help
	  This option enables support for Vitesse VSC7174 and Intel 31244 Serial ATA.

	  If unsure, say N.

comment "PATA SFF controllers with BMDMA"

config PATA_ALI
	tristate "ALi PATA support"
	depends on PCI
	help
	  This option enables support for the ALi ATA interfaces
	  found on the many ALi chipsets.

	  If unsure, say N.

config PATA_AMD
	tristate "AMD/NVidia PATA support"
	depends on PCI
	help
	  This option enables support for the AMD and NVidia PATA
	  interfaces found on the chipsets for Athlon/Athlon64.

	  If unsure, say N.

config PATA_ARASAN_CF
	tristate "ARASAN CompactFlash PATA Controller Support"
	depends on ARCH_SPEAR13XX || COMPILE_TEST
	depends on DMADEVICES
	select DMA_ENGINE
	help
	  Say Y here to support the ARASAN CompactFlash PATA controller

config PATA_ARTOP
	tristate "ARTOP 6210/6260 PATA support"
	depends on PCI
	help
	  This option enables support for ARTOP PATA controllers.

	  If unsure, say N.

config PATA_ATIIXP
	tristate "ATI PATA support"
	depends on PCI
	help
	  This option enables support for the ATI ATA interfaces
	  found on the many ATI chipsets.

	  If unsure, say N.

config PATA_ATP867X
	tristate "ARTOP/Acard ATP867X PATA support"
	depends on PCI
	help
	  This option enables support for ARTOP/Acard ATP867X PATA
	  controllers.

	  If unsure, say N.

config PATA_BF54X
	tristate "Blackfin 54x ATAPI support"
	depends on BF542 || BF548 || BF549
	help
	  This option enables support for the built-in ATAPI controller on
	  Blackfin 54x family chips.

	  If unsure, say N.

config PATA_CMD64X
	tristate "CMD64x PATA support"
	depends on PCI
	help
	  This option enables support for the CMD64x series chips
	  except for the CMD640.

	  If unsure, say N.

config PATA_CS5520
	tristate "CS5510/5520 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This option enables support for the Cyrix 5510/5520
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5530
	tristate "CS5530 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This option enables support for the Cyrix/NatSemi/AMD CS5530
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5535
	tristate "CS5535 PATA support (Experimental)"
	depends on PCI && X86_32
	help
	  This option enables support for the NatSemi/AMD CS5535
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_CS5536
	tristate "CS5536 PATA support"
	depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
	help
	  This option enables support for the AMD CS5536
	  companion chip used with the Geode LX processor family.

	  If unsure, say N.

config PATA_CYPRESS
	tristate "Cypress CY82C693 PATA support (Very Experimental)"
	depends on PCI
	help
	  This option enables support for the Cypress/Contaq CY82C693
	  chipset found in some Alpha systems

	  If unsure, say N.

config PATA_EFAR
	tristate "EFAR SLC90E66 support"
	depends on PCI
	help
	  This option enables support for the EFAR SLC90E66
	  IDE controller found on some older machines.

	  If unsure, say N.

config PATA_EP93XX
	tristate "Cirrus Logic EP93xx PATA support"
	depends on ARCH_EP93XX
	help
	  This option enables support for the PATA controller in
	  the Cirrus Logic EP9312 and EP9315 ARM CPU.

	  If unsure, say N.

config PATA_HPT366
	tristate "HPT 366/368 PATA support"
	depends on PCI
	help
	  This option enables support for the HPT 366 and 368
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT37X
	tristate "HPT 370/370A/371/372/374/302 PATA support"
	depends on PCI
	help
	  This option enables support for the majority of the later HPT
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT3X2N
	tristate "HPT 371N/372N/302N PATA support"
	depends on PCI
	help
	  This option enables support for the N variant HPT PATA
	  controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT3X3
	tristate "HPT 343/363 PATA support"
	depends on PCI
	help
	  This option enables support for the HPT 343/363
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_HPT3X3_DMA
	bool "HPT 343/363 DMA support"
	depends on PATA_HPT3X3
	help
	  This option enables DMA support for the HPT343/363
	  controllers. Enable with care as there are still some
	  problems with DMA on this chipset.

config PATA_ICSIDE
	tristate "Acorn ICS PATA support"
	depends on ARM && ARCH_ACORN
	help
	  On Acorn systems, say Y here if you wish to use the ICS PATA
	  interface card.  This is not required for ICS partition support.
	  If you are unsure, say N to this.

config PATA_IMX
	tristate "PATA support for Freescale iMX"
	depends on ARCH_MXC
	help
	  This option enables support for the PATA host available on Freescale
          iMX SoCs.

	  If unsure, say N.

config PATA_IT8213
	tristate "IT8213 PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the ITE 821 PATA
          controllers via the new ATA layer.

	  If unsure, say N.

config PATA_IT821X
	tristate "IT8211/2 PATA support"
	depends on PCI
	help
	  This option enables support for the ITE 8211 and 8212
	  PATA controllers via the new ATA layer, including RAID
	  mode.

	  If unsure, say N.

config PATA_JMICRON
	tristate "JMicron PATA support"
	depends on PCI
	help
	  Enable support for the JMicron IDE controller, via the new
	  ATA layer.

	  If unsure, say N.

config PATA_MACIO
	tristate "Apple PowerMac/PowerBook internal 'MacIO' IDE"
	depends on PPC_PMAC
	help
	  Most IDE capable PowerMacs have IDE busses driven by a variant
          of this controller which is part of the Apple chipset used on
          most PowerMac models. Some models have multiple busses using
          different chipsets, though generally, MacIO is one of them.

config PATA_MARVELL
	tristate "Marvell PATA support via legacy mode"
	depends on PCI
	help
	  This option enables limited support for the Marvell 88SE61xx ATA
	  controllers. If you wish to use only the SATA ports then select
	  the AHCI driver alone. If you wish to the use the PATA port or
	  both SATA and PATA include this driver.

	  If unsure, say N.

config PATA_MPC52xx
	tristate "Freescale MPC52xx SoC internal IDE"
	depends on PPC_MPC52xx && PPC_BESTCOMM
	select PPC_BESTCOMM_ATA
	help
	  This option enables support for integrated IDE controller
	  of the Freescale MPC52xx SoC.

	  If unsure, say N.

config PATA_NETCELL
	tristate "NETCELL Revolution RAID support"
	depends on PCI
	help
	  This option enables support for the Netcell Revolution RAID
	  PATA controller.

	  If unsure, say N.

config PATA_NINJA32
	tristate "Ninja32/Delkin Cardbus ATA support"
	depends on PCI
	help
	  This option enables support for the Ninja32, Delkin and
	  possibly other brands of Cardbus ATA adapter

	  If unsure, say N.

config PATA_NS87415
	tristate "Nat Semi NS87415 PATA support"
	depends on PCI
	help
	  This option enables support for the National Semiconductor
	  NS87415 PCI-IDE controller.

	  If unsure, say N.

config PATA_OLDPIIX
	tristate "Intel PATA old PIIX support"
	depends on PCI
	help
	  This option enables support for early PIIX PATA support.

	  If unsure, say N.

config PATA_OPTIDMA
	tristate "OPTI FireStar PATA support (Very Experimental)"
	depends on PCI
	help
	  This option enables DMA/PIO support for the later OPTi
	  controllers found on some old motherboards and in some
	  laptops.

	  If unsure, say N.

config PATA_PDC2027X
	tristate "Promise PATA 2027x support"
	depends on PCI
	help
	  This option enables support for Promise PATA pdc20268 to pdc20277 host adapters.

	  If unsure, say N.

config PATA_PDC_OLD
	tristate "Older Promise PATA controller support"
	depends on PCI
	help
	  This option enables support for the Promise 20246, 20262, 20263,
	  20265 and 20267 adapters.

	  If unsure, say N.

config PATA_RADISYS
	tristate "RADISYS 82600 PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the RADISYS 82600
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_RDC
	tristate "RDC PATA support"
	depends on PCI
	help
	  This option enables basic support for the later RDC PATA controllers
	  controllers via the new ATA layer. For the RDC 1010, you need to
	  enable the IT821X driver instead.

	  If unsure, say N.

config PATA_SC1200
	tristate "SC1200 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This option enables support for the NatSemi/AMD SC1200 SoC
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_SCH
	tristate "Intel SCH PATA support"
	depends on PCI
	help
	  This option enables support for Intel SCH PATA on the Intel
	  SCH (US15W, US15L, UL11L) series host controllers.

	  If unsure, say N.

config PATA_SERVERWORKS
	tristate "SERVERWORKS OSB4/CSB5/CSB6/HT1000 PATA support"
	depends on PCI
	help
	  This option enables support for the Serverworks OSB4/CSB5/CSB6 and
	  HT1000 PATA controllers, via the new ATA layer.

	  If unsure, say N.

config PATA_SIL680
	tristate "CMD / Silicon Image 680 PATA support"
	depends on PCI
	help
	  This option enables support for CMD / Silicon Image 680 PATA.

	  If unsure, say N.

config PATA_SIS
	tristate "SiS PATA support"
	depends on PCI
	help
	  This option enables support for SiS PATA controllers

	  If unsure, say N.

config PATA_TOSHIBA
	tristate "Toshiba Piccolo support (Experimental)"
	depends on PCI
	help
	  Support for the Toshiba Piccolo controllers. Currently only the
	  primary channel is supported by this driver.

	  If unsure, say N.

config PATA_TRIFLEX
	tristate "Compaq Triflex PATA support"
	depends on PCI
	help
	  Enable support for the Compaq 'Triflex' IDE controller as found
	  on many Compaq Pentium-Pro systems, via the new ATA layer.

	  If unsure, say N.

config PATA_VIA
	tristate "VIA PATA support"
	depends on PCI
	help
	  This option enables support for the VIA PATA interfaces
	  found on the many VIA chipsets.

	  If unsure, say N.

config PATA_PXA
	tristate "PXA DMA-capable PATA support"
	depends on ARCH_PXA
	help
	  This option enables support for harddrive attached to PXA CPU's bus.

	  NOTE: This driver utilizes PXA DMA controller, in case your hardware
	        is not capable of doing MWDMA, use pata_platform instead.

	  If unsure, say N.

config PATA_WINBOND
	tristate "Winbond SL82C105 PATA support"
	depends on PCI
	help
	  This option enables support for SL82C105 PATA devices found in the
	  Netwinder and some other systems

	  If unsure, say N.

endif # ATA_BMDMA

comment "PIO-only SFF controllers"

config PATA_AT32
	tristate "Atmel AVR32 PATA support (Experimental)"
	depends on AVR32 && PLATFORM_AT32AP
	help
	  This option enables support for the IDE devices on the
	  Atmel AT32AP platform.

	  If unsure, say N.

config PATA_AT91
	tristate "PATA support for AT91SAM9260"
	depends on ARM && SOC_AT91SAM9
	help
	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.

	  If unsure, say N.

config PATA_CMD640_PCI
	tristate "CMD640 PCI PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the CMD640 PCI IDE
	  interface chip. Only the primary channel is currently
	  supported.

	  If unsure, say N.

config PATA_ISAPNP
	tristate "ISA Plug and Play PATA support"
	depends on ISAPNP
	help
	  This option enables support for ISA plug & play ATA
	  controllers such as those found on old soundcards.

	  If unsure, say N.

config PATA_IXP4XX_CF
	tristate "IXP4XX Compact Flash support"
	depends on ARCH_IXP4XX
	help
	  This option enables support for a Compact Flash connected on
	  the ixp4xx expansion bus. This driver had been written for
	  Loft/Avila boards in mind but can work with others.

	  If unsure, say N.

config PATA_MPIIX
	tristate "Intel PATA MPIIX support"
	depends on PCI
	help
	  This option enables support for MPIIX PATA support.

	  If unsure, say N.

config PATA_NS87410
	tristate "Nat Semi NS87410 PATA support"
	depends on PCI
	help
	  This option enables support for the National Semiconductor
	  NS87410 PCI-IDE controller.

	  If unsure, say N.

config PATA_OPTI
	tristate "OPTI621/6215 PATA support (Very Experimental)"
	depends on PCI
	help
	  This option enables full PIO support for the early Opti ATA
	  controllers found on some old motherboards.

	  If unsure, say N.

config PATA_PALMLD
	tristate "Palm LifeDrive PATA support"
	depends on MACH_PALMLD
	help
	  This option enables support for Palm LifeDrive's internal ATA
	  port via the new ATA layer.

	  If unsure, say N.

config PATA_PCMCIA
	tristate "PCMCIA PATA support"
	depends on PCMCIA
	help
	  This option enables support for PCMCIA ATA interfaces, including
	  compact flash card adapters via the new ATA layer.

	  If unsure, say N.

config PATA_PLATFORM
	tristate "Generic platform device PATA support"
	depends on EXPERT || PPC || HAVE_PATA_PLATFORM
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems.

	  If unsure, say N.

config PATA_OF_PLATFORM
	tristate "OpenFirmware platform device PATA support"
	depends on PATA_PLATFORM && OF
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems with OpenFirmware
	  bindings.

	  If unsure, say N.

config PATA_QDI
	tristate "QDI VLB PATA support"
	depends on ISA
	select PATA_LEGACY
	help
	  Support for QDI 6500 and 6580 PATA controllers on VESA local bus.

config PATA_RB532
	tristate "RouterBoard 532 PATA CompactFlash support"
	depends on MIKROTIK_RB532
	help
	  This option enables support for the RouterBoard 532
	  PATA CompactFlash controller.

	  If unsure, say N.

config PATA_RZ1000
	tristate "PC Tech RZ1000 PATA support"
	depends on PCI
	help
	  This option enables basic support for the PC Tech RZ1000/1
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_SAMSUNG_CF
	tristate "Samsung SoC PATA support"
	depends on SAMSUNG_DEV_IDE
	help
	  This option enables basic support for Samsung's S3C/S5P board
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_WINBOND_VLB
	tristate "Winbond W83759A VLB PATA support (Experimental)"
	depends on ISA
	select PATA_LEGACY
	help
	  Support for the Winbond W83759A controller on Vesa Local Bus
	  systems.

comment "Generic fallback / legacy drivers"

config PATA_ACPI
	tristate "ACPI firmware driver for PATA"
	depends on ATA_ACPI && ATA_BMDMA
	help
	  This option enables an ACPI method driver which drives
	  motherboard PATA controller interfaces through the ACPI
	  firmware in the BIOS. This driver can sometimes handle
	  otherwise unsupported hardware.

config ATA_GENERIC
	tristate "Generic ATA support"
	depends on PCI && ATA_BMDMA
	help
	  This option enables support for generic BIOS configured
	  ATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_LEGACY
	tristate "Legacy ISA PATA support (Experimental)"
	depends on (ISA || PCI)
	help
	  This option enables support for ISA/VLB/PCI bus legacy PATA
	  ports and allows them to be accessed via the new ATA layer.

	  If unsure, say N.

endif # ATA_SFF
endif # ATA
