# Copyright (c) 2019-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config USB_DEVICE_PID
	default USB_PID_MASS_SAMPLE

config APP_WIPE_STORAGE
	bool "Option to clear the flash area before mounting"
	help
	  Use this to force an existing file system to be created.

choice
	prompt "Storage and file system type used by the application"
	default APP_MSC_STORAGE_NONE
	help
	  Specify the type of storage and file system.

config APP_MSC_STORAGE_NONE
	bool "Use RAM disk as block device"
	imply DISK_DRIVER_RAM

config APP_MSC_STORAGE_RAM
	bool "Use RAM disk and FAT file system"
	imply DISK_DRIVER_RAM
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

config APP_MSC_STORAGE_FLASH_FATFS
	bool "Use FLASH disk and FAT file system"
	imply DISK_DRIVER_FLASH
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

config APP_MSC_STORAGE_FLASH_LITTLEFS
	bool "Use FLASH disk and LittleFS"
	imply DISK_DRIVER_FLASH
	imply FILE_SYSTEM
	imply FILE_SYSTEM_LITTLEFS

config APP_MSC_STORAGE_SDCARD
	bool "Use SDHC and FAT file system"
	imply DISK_DRIVER_SDMMC
	imply FILE_SYSTEM
	imply FAT_FILESYSTEM_ELM

endchoice

config DISK_RAM_VOLUME_SIZE
	default 32 if APP_MSC_STORAGE_NONE

config MASS_STORAGE_DISK_NAME
	default "NAND" if DISK_DRIVER_FLASH
	default "RAM" if DISK_DRIVER_RAM
	default "SD" if DISK_DRIVER_SDMMC

if DISK_DRIVER_FLASH

config FLASH_MAP
	default y

config FLASH_PAGE_LAYOUT
	default y

config DISK_FLASH_START
	default 0x0

config FLASH_LOG_LEVEL
	default 3

if NORDIC_QSPI_NOR

config NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE
	default 4096

config DISK_FLASH_DEV_NAME
	default "MX25R64" if "$(dt_nodelabel_enabled,mx25r64)"
	default "GD25Q16" if "$(dt_nodelabel_enabled,gd25q16)"

config DISK_VOLUME_SIZE
	default 0x20000

config DISK_FLASH_MAX_RW_SIZE
	default 4096

config DISK_FLASH_ERASE_ALIGNMENT
	default 0x1000

config DISK_ERASE_BLOCK_SIZE
	default 0x1000

endif # NORDIC_QSPI_NOR

endif # DISK_DRIVER_FLASH

source "Kconfig.zephyr"
