#
# YAFFS file system configurations
#

config YAFFS_FS
	tristate "YAFFS2 file system support"
	default n
	depends on MTD
	select YAFFS_YAFFS1
	select YAFFS_YAFFS2
	help
	  YAFFS2, or Yet Another Flash Filing System, is a filing system
	  optimised for NAND Flash chips.

	  To compile the YAFFS2 file system support as a module, choose M here:
	  the module will be called yaffs2.

	  If unsure, say N.

	  Further information on YAFFS2 is available at
	  <http://www.aleph1.co.uk/yaffs/>.

config YAFFS_YAFFS1
	bool "512 byte / page devices"
	depends on YAFFS_FS
	default y
	help
	  Enable YAFFS1 support -- yaffs for 512 byte / page devices

	  If unsure, say Y.

config YAFFS_DOES_ECC
	bool "Lets Yaffs do its own ECC"
	depends on YAFFS_FS && YAFFS_YAFFS1
	default n
	help
	  This enables Yaffs to use its own ECC functions instead of using
	  the ones from the generic MTD-NAND driver.

	  If unsure, say N.

config YAFFS_ECC_WRONG_ORDER
	bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"
	depends on YAFFS_FS && YAFFS_DOES_ECC
	default n
	help
	  This makes yaffs_ecc.c use the same ecc byte order as
	  Steven Hill's nand_ecc.c. If not set, then you get the
	  same ecc byte order as SmartMedia.

	  If unsure, say N.

config YAFFS_YAFFS2
	bool "2048 byte (or larger) / page devices"
	depends on YAFFS_FS
	default y
	help
	  Enable YAFFS2 support -- yaffs for >= 2048 byte / page larger devices

	  If unsure, say Y.

config YAFFS_AUTO_YAFFS2
	bool "Autoselect yaffs2 format"
	depends on YAFFS_YAFFS2
	default y
	help
	  Without this, you need to explicitely use yaffs2 as the file
	  system type. With this, you can say "yaffs" and yaffs or yaffs2
          will be used depending on the device page size.

	  If unsure, say Y.

config YAFFS_DISABLE_LAZY_LOAD
	bool "Disable lazy loading"
	depends on YAFFS_YAFFS2
	default n
	help
	  "Lazy loading" defers loading file details until they are
	  required. This saves mount time, but makes the first look-up
	  a bit longer.

	  Lazy loading will only happen if enabled by this option being 'n'
	  and if the appropriate tags are available, else yaffs2 will
	  automatically fall back to immediate loading and do the right
	  thing.

	  Lazy laoding will be required by checkpointing.

	  Setting this to 'y' will disable lazy loading.

	  If unsure, say N.

config YAFFS_DISABLE_WIDE_TNODES
	bool "Turn off wide tnodes"
	depends on YAFFS_FS
	default n
	help
	  Wide tnodes are only used for large NAND arrays (>=32MB for
	  512-byte page devices and >=128MB for 2k page devices). They use 
	  slightly more RAM but are faster since they eliminate chunk group
	  searching.

	  Setting this to 'y' will force tnode width to 16 bits and make
	  large arrays slower.

	  If unsure, say N.

config YAFFS_ALWAYS_CHECK_CHUNK_ERASED
	bool "Force chunk erase check"
	depends on YAFFS_FS
	default n
	help
          Normally YAFFS only checks chunks before writing until an erased
	  chunk is found. This helps to detect any partially written chunks
	  that might have happened due to power loss.

	  Enabling this forces on the test that chunks are erased in flash
	  before writing to them. This takes more time but is potentially a 
	  bit more secure.
 
	  Suggest setting Y during development and ironing out driver issues
	  etc. Suggest setting to N if you want faster writing.                  

	  If unsure, say Y.

config YAFFS_SHORT_NAMES_IN_RAM
	bool "Cache short names in RAM"
	depends on YAFFS_FS
	default y
	help
	  If this config is set, then short names are stored with the
	  yaffs_Object.  This costs an extra 16 bytes of RAM per object,
	  but makes look-ups faster.

	  If unsure, say Y.

config YAFFS_ERASE_MOUNT_OPTION
	bool "Erase device if erase is passed as the mount option"
	depends on YAFFS_FS
	default n
	help
	  If this config is set, then passing erase as the mount option
	  will erase the MTD device before mounting the filesystem.

	  If unsure, say N.

