config MTD_NAND_ECC
	tristate

config MTD_NAND_ECC_SMC
	bool "NAND ECC Smart Media byte order"
	depends on MTD_NAND_ECC
	default n
	help
	  Software ECC according to the Smart Media Specification.
	  The original Linux implementation had byte 0 and 1 swapped.


menuconfig MTD_NAND
	tristate "NAND Device Support"
	depends on MTD
	select MTD_NAND_IDS
	select MTD_NAND_ECC
	help
	  This enables support for accessing all type of NAND flash
	  devices. For further information see
	  <http://www.linux-mtd.infradead.org/doc/nand.html>.

if MTD_NAND

config MTD_NAND_BCH
	tristate
	select BCH
	depends on MTD_NAND_ECC_BCH
	default MTD_NAND

config MTD_NAND_ECC_BCH
	bool "Support software BCH ECC"
	default n
	help
	  This enables support for software BCH error correction. Binary BCH
	  codes are more powerful and cpu intensive than traditional Hamming
	  ECC codes. They are used with NAND devices requiring more than 1 bit
	  of error correction.

config MTD_SM_COMMON
	tristate
	default n

config MTD_NAND_MUSEUM_IDS
	bool "Enable chip ids for obsolete ancient NAND devices"
	default n
	help
	  Enable this option only when your board has first generation
	  NAND chips (page size 256 byte, erase size 4-8KiB). The IDs
	  of these chips were reused by later, larger chips.

config MTD_NAND_DENALI
        tristate "Support Denali NAND controller"
        help
	  Enable support for the Denali NAND controller.  This should be
	  combined with either the PCI or platform drivers to provide device
	  registration.

config MTD_NAND_DENALI_PCI
        tristate "Support Denali NAND controller on Intel Moorestown"
	depends on PCI && MTD_NAND_DENALI
        help
          Enable the driver for NAND flash on Intel Moorestown, using the
          Denali NAND controller core.

config MTD_NAND_DENALI_DT
	tristate "Support Denali NAND controller as a DT device"
	depends on HAVE_CLK && MTD_NAND_DENALI
	help
	  Enable the driver for NAND flash on platforms using a Denali NAND
	  controller as a DT device.

config MTD_NAND_DENALI_SCRATCH_REG_ADDR
        hex "Denali NAND size scratch register address"
        default "0xFF108018"
        depends on MTD_NAND_DENALI_PCI
        help
          Some platforms place the NAND chip size in a scratch register
          because (some versions of) the driver aren't able to automatically
          determine the size of certain chips. Set the address of the
          scratch register here to enable this feature. On Intel Moorestown
          boards, the scratch register is at 0xFF108018.

config MTD_NAND_H1900
	tristate "iPAQ H1900 flash"
	depends on ARCH_PXA && BROKEN
	help
	  This enables the driver for the iPAQ h1900 flash.

config MTD_NAND_GPIO
	tristate "GPIO NAND Flash driver"
	depends on GENERIC_GPIO && ARM
	help
	  This enables a GPIO based NAND flash driver.

config MTD_NAND_AMS_DELTA
	tristate "NAND Flash device on Amstrad E3"
	depends on MACH_AMS_DELTA
	default y
	help
	  Support for NAND flash on Amstrad E3 (Delta).

config MTD_NAND_OMAP2
	tristate "NAND Flash device on OMAP2, OMAP3 and OMAP4"
	depends on ARCH_OMAP2PLUS
	help
          Support for NAND flash on Texas Instruments OMAP2, OMAP3 and OMAP4
	  platforms.

config MTD_NAND_OMAP_BCH
	depends on MTD_NAND && MTD_NAND_OMAP2 && ARCH_OMAP3
	bool "Enable support for hardware BCH error correction"
	default n
	select BCH
	select BCH_CONST_PARAMS
	help
	 Support for hardware BCH error correction.

choice
	prompt "BCH error correction capability"
	depends on MTD_NAND_OMAP_BCH

config MTD_NAND_OMAP_BCH8
	bool "8 bits / 512 bytes (recommended)"
	help
	 Support correcting up to 8 bitflips per 512-byte block.
	 This will use 13 bytes of spare area per 512 bytes of page data.
	 This is the recommended mode, as 4-bit mode does not work
	 on some OMAP3 revisions, due to a hardware bug.

config MTD_NAND_OMAP_BCH4
	bool "4 bits / 512 bytes"
	help
	 Support correcting up to 4 bitflips per 512-byte block.
	 This will use 7 bytes of spare area per 512 bytes of page data.
	 Note that this mode does not work on some OMAP3 revisions, due to a
	 hardware bug. Please check your OMAP datasheet before selecting this
	 mode.

endchoice

if MTD_NAND_OMAP_BCH
config BCH_CONST_M
	default 13
config BCH_CONST_T
	default 4 if MTD_NAND_OMAP_BCH4
	default 8 if MTD_NAND_OMAP_BCH8
endif

config MTD_NAND_IDS
	tristate

config MTD_NAND_RICOH
	tristate "Ricoh xD card reader"
	default n
	depends on PCI
	select MTD_SM_COMMON
	help
	  Enable support for Ricoh R5C852 xD card reader
	  You also need to enable ether
	  NAND SSFDC (SmartMedia) read only translation layer' or new
	  expermental, readwrite
	  'SmartMedia/xD new translation layer'

config MTD_NAND_AU1550
	tristate "Au1550/1200 NAND support"
	depends on MIPS_ALCHEMY
	help
	  This enables the driver for the NAND flash controller on the
	  AMD/Alchemy 1550 SOC.

config MTD_NAND_BF5XX
	tristate "Blackfin on-chip NAND Flash Controller driver"
	depends on BF54x || BF52x
	help
	  This enables the Blackfin on-chip NAND flash controller

	  No board specific support is done by this driver, each board
	  must advertise a platform_device for the driver to attach.

	  This driver can also be built as a module. If so, the module
	  will be called bf5xx-nand.

config MTD_NAND_BF5XX_HWECC
	bool "BF5XX NAND Hardware ECC"
	default y
	depends on MTD_NAND_BF5XX
	help
	  Enable the use of the BF5XX's internal ECC generator when
	  using NAND.

config MTD_NAND_BF5XX_BOOTROM_ECC
	bool "Use Blackfin BootROM ECC Layout"
	default n
	depends on MTD_NAND_BF5XX_HWECC
	help
	  If you wish to modify NAND pages and allow the Blackfin on-chip
	  BootROM to boot from them, say Y here.  This is only necessary
	  if you are booting U-Boot out of NAND and you wish to update
	  U-Boot from Linux' userspace.  Otherwise, you should say N here.

	  If unsure, say N.

config MTD_NAND_RTC_FROM4
	tristate "Renesas Flash ROM 4-slot interface board (FROM_BOARD4)"
	depends on SH_SOLUTION_ENGINE
	select REED_SOLOMON
	select REED_SOLOMON_DEC8
	select BITREVERSE
	help
	  This enables the driver for the Renesas Technology AG-AND
	  flash interface board (FROM_BOARD4)

config MTD_NAND_PPCHAMELEONEVB
	tristate "NAND Flash device on PPChameleonEVB board"
	depends on PPCHAMELEONEVB && BROKEN
	help
	  This enables the NAND flash driver on the PPChameleon EVB Board.

config MTD_NAND_S3C2410
	tristate "NAND Flash support for Samsung S3C SoCs"
	depends on ARCH_S3C24XX || ARCH_S3C64XX
	help
	  This enables the NAND flash controller on the S3C24xx and S3C64xx
	  SoCs

	  No board specific support is done by this driver, each board
	  must advertise a platform_device for the driver to attach.

config MTD_NAND_S3C2410_DEBUG
	bool "Samsung S3C NAND driver debug"
	depends on MTD_NAND_S3C2410
	help
	  Enable debugging of the S3C NAND driver

config MTD_NAND_S3C2410_HWECC
	bool "Samsung S3C NAND Hardware ECC"
	depends on MTD_NAND_S3C2410
	help
	  Enable the use of the controller's internal ECC generator when
	  using NAND. Early versions of the chips have had problems with
	  incorrect ECC generation, and if using these, the default of
	  software ECC is preferable.

config MTD_NAND_NDFC
	tristate "NDFC NanD Flash Controller"
	depends on 4xx
	select MTD_NAND_ECC_SMC
	help
	 NDFC Nand Flash Controllers are integrated in IBM/AMCC's 4xx SoCs

config MTD_NAND_S3C2410_CLKSTOP
	bool "Samsung S3C NAND IDLE clock stop"
	depends on MTD_NAND_S3C2410
	default n
	help
	  Stop the clock to the NAND controller when there is no chip
	  selected to save power. This will mean there is a small delay
	  when the is NAND chip selected or released, but will save
	  approximately 5mA of power when there is nothing happening.

config MTD_NAND_DISKONCHIP
	tristate "DiskOnChip 2000, Millennium and Millennium Plus (NAND reimplementation)"
	depends on HAS_IOMEM
	select REED_SOLOMON
	select REED_SOLOMON_DEC16
	help
	  This is a reimplementation of M-Systems DiskOnChip 2000,
	  Millennium and Millennium Plus as a standard NAND device driver,
	  as opposed to the earlier self-contained MTD device drivers.
	  This should enable, among other things, proper JFFS2 operation on
	  these devices.

config MTD_NAND_DISKONCHIP_PROBE_ADVANCED
        bool "Advanced detection options for DiskOnChip"
        depends on MTD_NAND_DISKONCHIP
        help
          This option allows you to specify nonstandard address at which to
          probe for a DiskOnChip, or to change the detection options.  You
          are unlikely to need any of this unless you are using LinuxBIOS.
          Say 'N'.

config MTD_NAND_DISKONCHIP_PROBE_ADDRESS
        hex "Physical address of DiskOnChip" if MTD_NAND_DISKONCHIP_PROBE_ADVANCED
        depends on MTD_NAND_DISKONCHIP
        default "0"
        ---help---
        By default, the probe for DiskOnChip devices will look for a
        DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
        This option allows you to specify a single address at which to probe
        for the device, which is useful if you have other devices in that
        range which get upset when they are probed.

        (Note that on PowerPC, the normal probe will only check at
        0xE4000000.)

        Normally, you should leave this set to zero, to allow the probe at
        the normal addresses.

config MTD_NAND_DISKONCHIP_PROBE_HIGH
        bool "Probe high addresses"
        depends on MTD_NAND_DISKONCHIP_PROBE_ADVANCED
        help
          By default, the probe for DiskOnChip devices will look for a
          DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
          This option changes to make it probe between 0xFFFC8000 and
          0xFFFEE000.  Unless you are using LinuxBIOS, this is unlikely to be
          useful to you.  Say 'N'.

config MTD_NAND_DISKONCHIP_BBTWRITE
	bool "Allow BBT writes on DiskOnChip Millennium and 2000TSOP"
	depends on MTD_NAND_DISKONCHIP
	help
	  On DiskOnChip devices shipped with the INFTL filesystem (Millennium
	  and 2000 TSOP/Alon), Linux reserves some space at the end of the
	  device for the Bad Block Table (BBT).  If you have existing INFTL
	  data on your device (created by non-Linux tools such as M-Systems'
	  DOS drivers), your data might overlap the area Linux wants to use for
	  the BBT.  If this is a concern for you, leave this option disabled and
	  Linux will not write BBT data into this area.
	  The downside of leaving this option disabled is that if bad blocks
	  are detected by Linux, they will not be recorded in the BBT, which
	  could cause future problems.
	  Once you enable this option, new filesystems (INFTL or others, created
	  in Linux or other operating systems) will not use the reserved area.
	  The only reason not to enable this option is to prevent damage to
	  preexisting filesystems.
	  Even if you leave this disabled, you can enable BBT writes at module
	  load time (assuming you build diskonchip as a module) with the module
	  parameter "inftl_bbt_write=1".

config MTD_NAND_DOCG4
	tristate "Support for DiskOnChip G4"
	depends on HAS_IOMEM
	select BCH
	select BITREVERSE
	help
	  Support for diskonchip G4 nand flash, found in various smartphones and
	  PDAs, among them the Palm Treo680, HTC Prophet and Wizard, Toshiba
	  Portege G900, Asus P526, and O2 XDA Zinc.

	  With this driver you will be able to use UBI and create a ubifs on the
	  device, so you may wish to consider enabling UBI and UBIFS as well.

	  These devices ship with the Mys/Sandisk SAFTL formatting, for which
	  there is currently no mtd parser, so you may want to use command line
	  partitioning to segregate write-protected blocks. On the Treo680, the
	  first five erase blocks (256KiB each) are write-protected, followed
	  by the block containing the saftl partition table.  This is probably
	  typical.

config MTD_NAND_SHARPSL
	tristate "Support for NAND Flash on Sharp SL Series (C7xx + others)"
	depends on ARCH_PXA

config MTD_NAND_CAFE
	tristate "NAND support for OLPC CAFÉ chip"
	depends on PCI
	select REED_SOLOMON
	select REED_SOLOMON_DEC16
	help
	  Use NAND flash attached to the CAFÉ chip designed for the OLPC
	  laptop.

config MTD_NAND_CS553X
	tristate "NAND support for CS5535/CS5536 (AMD Geode companion chip)"
	depends on X86_32
	help
	  The CS553x companion chips for the AMD Geode processor
	  include NAND flash controllers with built-in hardware ECC
	  capabilities; enabling this option will allow you to use
	  these. The driver will check the MSRs to verify that the
	  controller is enabled for NAND, and currently requires that
	  the controller be in MMIO mode.

	  If you say "m", the module will be called cs553x_nand.

config MTD_NAND_ATMEL
	tristate "Support for NAND Flash / SmartMedia on AT91 and AVR32"
	depends on ARCH_AT91 || AVR32
	help
	  Enables support for NAND Flash / Smart Media Card interface
	  on Atmel AT91 and AVR32 processors.

config MTD_NAND_PXA3xx
	tristate "Support for NAND flash devices on PXA3xx"
	depends on PXA3xx || ARCH_MMP
	help
	  This enables the driver for the NAND flash device found on
	  PXA3xx processors

config MTD_NAND_SLC_LPC32XX
	tristate "NXP LPC32xx SLC Controller"
	depends on ARCH_LPC32XX
	help
	  Enables support for NXP's LPC32XX SLC (i.e. for Single Level Cell
	  chips) NAND controller. This is the default for the PHYTEC 3250
	  reference board which contains a NAND256R3A2CZA6 chip.

	  Please check the actual NAND chip connected and its support
	  by the SLC NAND controller.

config MTD_NAND_MLC_LPC32XX
	tristate "NXP LPC32xx MLC Controller"
	depends on ARCH_LPC32XX
	help
	  Uses the LPC32XX MLC (i.e. for Multi Level Cell chips) NAND
	  controller. This is the default for the WORK92105 controller
	  board.

	  Please check the actual NAND chip connected and its support
	  by the MLC NAND controller.

config MTD_NAND_CM_X270
	tristate "Support for NAND Flash on CM-X270 modules"
	depends on MACH_ARMCORE

config MTD_NAND_PASEMI
	tristate "NAND support for PA Semi PWRficient"
	depends on PPC_PASEMI
	help
	  Enables support for NAND Flash interface on PA Semi PWRficient
	  based boards

config MTD_NAND_TMIO
	tristate "NAND Flash device on Toshiba Mobile IO Controller"
	depends on MFD_TMIO
	help
	  Support for NAND flash connected to a Toshiba Mobile IO
	  Controller in some PDAs, including the Sharp SL6000x.

config MTD_NAND_NANDSIM
	tristate "Support for NAND Flash Simulator"
	help
	  The simulator may simulate various NAND flash chips for the
	  MTD nand layer.

config MTD_NAND_GPMI_NAND
        tristate "GPMI NAND Flash Controller driver"
        depends on MTD_NAND && MXS_DMA
        help
	 Enables NAND Flash support for IMX23, IMX28 or IMX6.
	 The GPMI controller is very powerful, with the help of BCH
	 module, it can do the hardware ECC. The GPMI supports several
	 NAND flashs at the same time. The GPMI may conflicts with other
	 block, such as SD card. So pay attention to it when you enable
	 the GPMI.

config MTD_NAND_BCM47XXNFLASH
	tristate "Support for NAND flash on BCM4706 BCMA bus"
	depends on BCMA_NFLASH
	help
	  BCMA bus can have various flash memories attached, they are
	  registered by bcma as platform devices. This enables driver for
	  NAND flash memories. For now only BCM4706 is supported.

config MTD_NAND_PLATFORM
	tristate "Support for generic platform NAND driver"
	depends on HAS_IOMEM
	help
	  This implements a generic NAND driver for on-SOC platform
	  devices. You will need to provide platform-specific functions
	  via platform_data.

config MTD_ALAUDA
	tristate "MTD driver for Olympus MAUSB-10 and Fujifilm DPC-R1"
	depends on USB
	help
	  These two (and possibly other) Alauda-based cardreaders for
	  SmartMedia and xD allow raw flash access.

config MTD_NAND_ORION
	tristate "NAND Flash support for Marvell Orion SoC"
	depends on PLAT_ORION
	help
	  This enables the NAND flash controller on Orion machines.

	  No board specific support is done by this driver, each board
	  must advertise a platform_device for the driver to attach.

config MTD_NAND_FSL_ELBC
	tristate "NAND support for Freescale eLBC controllers"
	depends on PPC_OF
	select FSL_LBC
	help
	  Various Freescale chips, including the 8313, include a NAND Flash
	  Controller Module with built-in hardware ECC capabilities.
	  Enabling this option will enable you to use this to control
	  external NAND devices.

config MTD_NAND_FSL_IFC
	tristate "NAND support for Freescale IFC controller"
	depends on MTD_NAND && FSL_SOC
	select FSL_IFC
	help
	  Various Freescale chips e.g P1010, include a NAND Flash machine
	  with built-in hardware ECC capabilities.
	  Enabling this option will enable you to use this to control
	  external NAND devices.

config MTD_NAND_FSL_UPM
	tristate "Support for NAND on Freescale UPM"
	depends on PPC_83xx || PPC_85xx
	select FSL_LBC
	help
	  Enables support for NAND Flash chips wired onto Freescale PowerPC
	  processor localbus with User-Programmable Machine support.

config MTD_NAND_MPC5121_NFC
	tristate "MPC5121 built-in NAND Flash Controller support"
	depends on PPC_MPC512x
	help
	  This enables the driver for the NAND flash controller on the
	  MPC5121 SoC.

config MTD_NAND_MXC
	tristate "MXC NAND support"
	depends on ARCH_MXC
	help
	  This enables the driver for the NAND flash controller on the
	  MXC processors.

config MTD_NAND_SH_FLCTL
	tristate "Support for NAND on Renesas SuperH FLCTL"
	depends on SUPERH || ARCH_SHMOBILE
	help
	  Several Renesas SuperH CPU has FLCTL. This option enables support
	  for NAND Flash using FLCTL.

config MTD_NAND_DAVINCI
        tristate "Support NAND on DaVinci SoC"
        depends on ARCH_DAVINCI
        help
	  Enable the driver for NAND flash chips on Texas Instruments
	  DaVinci processors.

config MTD_NAND_TXX9NDFMC
	tristate "NAND Flash support for TXx9 SoC"
	depends on SOC_TX4938 || SOC_TX4939
	help
	  This enables the NAND flash controller on the TXx9 SoCs.

config MTD_NAND_SOCRATES
	tristate "Support for NAND on Socrates board"
	depends on SOCRATES
	help
	  Enables support for NAND Flash chips wired onto Socrates board.

config MTD_NAND_NUC900
	tristate "Support for NAND on Nuvoton NUC9xx/w90p910 evaluation boards."
	depends on ARCH_W90X900
	help
	  This enables the driver for the NAND Flash on evaluation board based
	  on w90p910 / NUC9xx.

config MTD_NAND_JZ4740
	tristate "Support for JZ4740 SoC NAND controller"
	depends on MACH_JZ4740
	help
		Enables support for NAND Flash on JZ4740 SoC based boards.

config MTD_NAND_FSMC
	tristate "Support for NAND on ST Micros FSMC"
	depends on PLAT_SPEAR || ARCH_NOMADIK || ARCH_U8500 || MACH_U300
	help
	  Enables support for NAND Flash chips on the ST Microelectronics
	  Flexible Static Memory Controller (FSMC)

config MTD_NAND_XWAY
	tristate "Support for NAND on Lantiq XWAY SoC"
	depends on LANTIQ && SOC_TYPE_XWAY
	select MTD_NAND_PLATFORM
	help
	  Enables support for NAND Flash chips on Lantiq XWAY SoCs. NAND is attached
	  to the External Bus Unit (EBU).

endif # MTD_NAND
