# drivers/mtd/maps/Kconfig

menu "Self-contained MTD device drivers"
	depends on MTD!=n

config MTD_PMC551
	tristate "Ramix PMC551 PCI Mezzanine RAM card support"
	depends on PCI
	---help---
	  This provides a MTD device driver for the Ramix PMC551 RAM PCI card
	  from Ramix Inc. <http://www.ramix.com/products/memory/pmc551.html>.
	  These devices come in memory configurations from 32M - 1G.  If you
	  have one, you probably want to enable this.

	  If this driver is compiled as a module you get the ability to select
	  the size of the aperture window pointing into the devices memory.
	  What this means is that if you have a 1G card, normally the kernel
	  will use a 1G memory map as its view of the device.  As a module,
	  you can select a 1M window into the memory and the driver will
	  "slide" the window around the PMC551's memory.  This was
	  particularly useful on the 2.2 kernels on PPC architectures as there
	  was limited kernel space to deal with.

config MTD_PMC551_BUGFIX
	bool "PMC551 256M DRAM Bugfix"
	depends on MTD_PMC551
	help
	  Some of Ramix's PMC551 boards with 256M configurations have invalid
	  column and row mux values.  This option will fix them, but will
	  break other memory configurations.  If unsure say N.

config MTD_PMC551_DEBUG
	bool "PMC551 Debugging"
	depends on MTD_PMC551
	help
	  This option makes the PMC551 more verbose during its operation and
	  is only really useful if you are developing on this driver or
	  suspect a possible hardware or driver bug.  If unsure say N.

config MTD_MS02NV
	tristate "DEC MS02-NV NVRAM module support"
	depends on MACH_DECSTATION
	help
	  This is an MTD driver for the DEC's MS02-NV (54-20948-01) battery
	  backed-up NVRAM module.  The module was originally meant as an NFS
	  accelerator.  Say Y here if you have a DECstation 5000/2x0 or a
	  DECsystem 5900 equipped with such a module.

	  If you want to compile this driver as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.txt>.
	  The module will be called ms02-nv.

config MTD_DATAFLASH
	tristate "Support for AT45xxx DataFlash"
	depends on SPI_MASTER && EXPERIMENTAL
	help
	  This enables access to AT45xxx DataFlash chips, using SPI.
	  Sometimes DataFlash chips are packaged inside MMC-format
	  cards; at this writing, the MMC stack won't handle those.

config MTD_DATAFLASH_WRITE_VERIFY
	bool "Verify DataFlash page writes"
	depends on MTD_DATAFLASH
	help
	  This adds an extra check when data is written to the flash.
	  It may help if you are verifying chip setup (timings etc) on
	  your board.  There is a rare possibility that even though the
	  device thinks the write was successful, a bit could have been
	  flipped accidentally due to device wear or something else.

config MTD_DATAFLASH_OTP
	bool "DataFlash OTP support (Security Register)"
	depends on MTD_DATAFLASH
	select HAVE_MTD_OTP
	help
	  Newer DataFlash chips (revisions C and D) support 128 bytes of
	  one-time-programmable (OTP) data.  The first half may be written
	  (once) with up to 64 bytes of data, such as a serial number or
	  other key product data.  The second half is programmed with a
	  unique-to-each-chip bit pattern at the factory.

config MTD_M25P80
	tristate "Support most SPI Flash chips (AT26DF, M25P, W25X, ...)"
	depends on SPI_MASTER && EXPERIMENTAL
	help
	  This enables access to most modern SPI flash chips, used for
	  program and data storage.   Series supported include Atmel AT26DF,
	  Spansion S25SL, SST 25VF, ST M25P, and Winbond W25X.  Other chips
	  are supported as well.  See the driver source for the current list,
	  or to add other chips.

	  Note that the original DataFlash chips (AT45 series, not AT26DF),
	  need an entirely different driver.

	  Set up your spi devices with the right board-specific platform data,
	  if you want to specify device partitioning or to use a device which
	  doesn't support the JEDEC ID instruction.

config M25PXX_USE_FAST_READ
	bool "Use FAST_READ OPCode allowing SPI CLK <= 50MHz"
	depends on MTD_M25P80
	default y
	help
	  This option enables FAST_READ access supported by ST M25Pxx.

config MTD_SST25L
	tristate "Support SST25L (non JEDEC) SPI Flash chips"
	depends on SPI_MASTER
	help
	  This enables access to the non JEDEC SST25L SPI flash chips, used
	  for program and data storage.

	  Set up your spi devices with the right board-specific platform data,
	  if you want to specify device partitioning.

config MTD_SLRAM
	tristate "Uncached system RAM"
	help
	  If your CPU cannot cache all of the physical memory in your machine,
	  you can still use it for storage or swap by using this driver to
	  present it to the system as a Memory Technology Device.

config MTD_PHRAM
	tristate "Physical system RAM"
	help
	  This is a re-implementation of the slram driver above.

	  Use this driver to access physical memory that the kernel proper
	  doesn't have access to, memory beyond the mem=xxx limit, nvram,
	  memory on the video card, etc...

config MTD_LART
	tristate "28F160xx flash driver for LART"
	depends on SA1100_LART
	help
	  This enables the flash driver for LART. Please note that you do
	  not need any mapping/chip driver for LART. This one does it all
	  for you, so go disable all of those if you enabled some of them (:

config MTD_MTDRAM
	tristate "Test driver using RAM"
	help
	  This enables a test MTD device driver which uses vmalloc() to
	  provide storage.  You probably want to say 'N' unless you're
	  testing stuff.

config MTDRAM_TOTAL_SIZE
	int "MTDRAM device size in KiB"
	depends on MTD_MTDRAM
	default "4096"
	help
	  This allows you to configure the total size of the MTD device
	  emulated by the MTDRAM driver.  If the MTDRAM driver is built
	  as a module, it is also possible to specify this as a parameter when
	  loading the module.

config MTDRAM_ERASE_SIZE
	int "MTDRAM erase block size in KiB"
	depends on MTD_MTDRAM
	default "128"
	help
	  This allows you to configure the size of the erase blocks in the
	  device emulated by the MTDRAM driver.  If the MTDRAM driver is built
	  as a module, it is also possible to specify this as a parameter when
	  loading the module.

#If not a module (I don't want to test it as a module)
config MTDRAM_ABS_POS
	hex "SRAM Hexadecimal Absolute position or 0"
	depends on MTD_MTDRAM=y
	default "0"
	help
	  If you have system RAM accessible by the CPU but not used by Linux
	  in normal operation, you can give the physical address at which the
	  available RAM starts, and the MTDRAM driver will use it instead of
	  allocating space from Linux's available memory. Otherwise, leave
	  this set to zero. Most people will want to leave this as zero.

config MTD_BLOCK2MTD
	tristate "MTD using block device"
	depends on BLOCK
	help
	  This driver allows a block device to appear as an MTD. It would
	  generally be used in the following cases:

	  Using Compact Flash as an MTD, these usually present themselves to
	  the system as an ATA drive.
	  Testing MTD users (eg JFFS2) on large media and media that might
	  be removed during a write (using the floppy drive).

comment "Disk-On-Chip Device Drivers"

config MTD_DOC2000
	tristate "M-Systems Disk-On-Chip 2000 and Millennium (DEPRECATED)"
	select MTD_DOCPROBE
	select MTD_NAND_IDS
	---help---
	  This provides an MTD device driver for the M-Systems DiskOnChip
	  2000 and Millennium devices.  Originally designed for the DiskOnChip
	  2000, it also now includes support for the DiskOnChip Millennium.
	  If you have problems with this driver and the DiskOnChip Millennium,
	  you may wish to try the alternative Millennium driver below. To use
	  the alternative driver, you will need to undefine DOC_SINGLE_DRIVER
	  in the <file:drivers/mtd/devices/docprobe.c> source code.

	  If you use this device, you probably also want to enable the NFTL
	  'NAND Flash Translation Layer' option below, which is used to
	  emulate a block device by using a kind of file system on the flash
	  chips.

	  NOTE: This driver is deprecated and will probably be removed soon.
	  Please try the new DiskOnChip driver under "NAND Flash Device
	  Drivers".

config MTD_DOC2001
	tristate "M-Systems Disk-On-Chip Millennium-only alternative driver (DEPRECATED)"
	select MTD_DOCPROBE
	select MTD_NAND_IDS
	---help---
	  This provides an alternative MTD device driver for the M-Systems
	  DiskOnChip Millennium devices.  Use this if you have problems with
	  the combined DiskOnChip 2000 and Millennium driver above.  To get
	  the DiskOnChip probe code to load and use this driver instead of
	  the other one, you will need to undefine DOC_SINGLE_DRIVER near
	  the beginning of <file:drivers/mtd/devices/docprobe.c>.

	  If you use this device, you probably also want to enable the NFTL
	  'NAND Flash Translation Layer' option below, which is used to
	  emulate a block device by using a kind of file system on the flash
	  chips.

	  NOTE: This driver is deprecated and will probably be removed soon.
	  Please try the new DiskOnChip driver under "NAND Flash Device
	  Drivers".

config MTD_DOC2001PLUS
	tristate "M-Systems Disk-On-Chip Millennium Plus"
	select MTD_DOCPROBE
	select MTD_NAND_IDS
	---help---
	  This provides an MTD device driver for the M-Systems DiskOnChip
	  Millennium Plus devices.

	  If you use this device, you probably also want to enable the INFTL
	  'Inverse NAND Flash Translation Layer' option below, which is used
	  to emulate a block device by using a kind of file system on the
	  flash chips.

	  NOTE: This driver will soon be replaced by the new DiskOnChip driver
	  under "NAND Flash Device Drivers" (currently that driver does not
	  support all Millennium Plus devices).

config MTD_DOCPROBE
	tristate
	select MTD_DOCECC

config MTD_DOCECC
	tristate

config MTD_DOCPROBE_ADVANCED
	bool "Advanced detection options for DiskOnChip"
	depends on MTD_DOCPROBE
	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_DOCPROBE_ADDRESS
	hex "Physical address of DiskOnChip" if MTD_DOCPROBE_ADVANCED
	depends on MTD_DOCPROBE
	default "0x0000" if MTD_DOCPROBE_ADVANCED
	default "0" if !MTD_DOCPROBE_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 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_DOCPROBE_HIGH
	bool "Probe high addresses"
	depends on MTD_DOCPROBE_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_DOCPROBE_55AA
	bool "Probe for 0x55 0xAA BIOS Extension Signature"
	depends on MTD_DOCPROBE_ADVANCED
	help
	  Check for the 0x55 0xAA signature of a DiskOnChip, and do not
	  continue with probing if it is absent.  The signature will always be
	  present for a DiskOnChip 2000 or a normal DiskOnChip Millennium.
	  Only if you have overwritten the first block of a DiskOnChip
	  Millennium will it be absent.  Enable this option if you are using
	  LinuxBIOS or if you need to recover a DiskOnChip Millennium on which
	  you have managed to wipe the first block.

endmenu

