#
# 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 && PCI
	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_RUNTIME
	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_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_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
	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_SCC
	tristate "Toshiba's Cell Reference Set IDE support"
	depends on PCI && PPC_CELLEB
	help
	  This option enables support for the built-in IDE controller on
	  Toshiba Cell Reference Board.

	  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
