Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

boards/cxd56xx/spresense: add fs automount driver for SD Card #7584

Merged
merged 1 commit into from Jan 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions arch/arm/src/cxd56xx/Kconfig
Expand Up @@ -1201,6 +1201,8 @@ menuconfig CXD56_SDIO
default n
select ARCH_HAVE_SDIO
select SDIO_BLOCKSETUP
select MMCSD
select MMCSD_SDIO
depends on SCHED_WORKQUEUE

if CXD56_SDIO
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/src/cxd56xx/cxd56_sdhci.c
Expand Up @@ -3277,7 +3277,7 @@ struct sdio_dev_s *cxd56_sdhci_finalize(int slotno)

/* SD clock disable */

cxd56_sdio_clock(&(priv->dev), CLOCK_SDIO_DISABLED);
cxd56_sdio_clock(&priv->dev, CLOCK_SDIO_DISABLED);

/* Power OFF for SDIO */

Expand Down
31 changes: 30 additions & 1 deletion boards/arm/cxd56xx/spresense/Kconfig
Expand Up @@ -466,7 +466,7 @@ config SPRESENSE_EXTENSION
present, then the SPresense will need to run at a higher power mode,
selected by this option.

if SPRESENSE_EXTENSION
if SPRESENSE_EXTENSION
config SDCARD_TXS02612
bool "SD Card TXS02612 port expander with voltage level translation"
default y
Expand Down Expand Up @@ -780,4 +780,33 @@ config CXD56_CAMERA_LATE_INITIALIZE
The camera drivers can be initialized on an application code after system booted up
by enabling this configuration switch.

config CXD56_SDCARD_AUTOMOUNT
bool "SDCARD automounter"
default n
depends on FS_AUTOMOUNTER && CXD56_SDIO

if CXD56_SDCARD_AUTOMOUNT

config CXD56_SDCARD_AUTOMOUNT_FSTYPE
string "SDCARD file system type"
default "vfat"

config CXD56_SDCARD_AUTOMOUNT_BLKDEV
string "SDCARD block device"
default "/dev/mmcsd0"

config CXD56_SDCARD_AUTOMOUNT_MOUNTPOINT
string "SDCARD mount point"
default "/mnt/sd0"

config CXD56_SDCARD_AUTOMOUNT_DDELAY
int "SDCARD debounce delay (milliseconds)"
default 1000

config CXD56_SDCARD_AUTOMOUNT_UDELAY
int "SDCARD unmount retry delay (milliseconds)"
default 2000

endif # CXD56_SDCARD_AUTOMOUNT

endif
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/audio/defconfig
Expand Up @@ -43,8 +43,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/camera/defconfig
Expand Up @@ -43,8 +43,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/example_camera/defconfig
Expand Up @@ -50,8 +50,6 @@ CONFIG_LCD=y
CONFIG_LCD_ILI9340=y
CONFIG_LCD_ILI9340_IFACE0=y
CONFIG_LCD_ILI9340_IFACE0_RLANDSCAPE=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/example_lcd/defconfig
Expand Up @@ -58,8 +58,6 @@ CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_LCD=y
CONFIG_LCD_ILI9340=y
CONFIG_LCD_ILI9340_IFACE0=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/fmsynth/defconfig
Expand Up @@ -49,8 +49,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/lcd/defconfig
Expand Up @@ -49,8 +49,6 @@ CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_LCD=y
CONFIG_LCD_ILI9340=y
CONFIG_LCD_ILI9340_IFACE0=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/lte/defconfig
Expand Up @@ -44,8 +44,6 @@ CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MBEDTLS_APPS=y
CONFIG_MBEDTLS_VERSION="2.28.0"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MODEM=y
CONFIG_MODEM_ALT1250=y
CONFIG_MTD_BYTE_WRITE=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/mpy/defconfig
Expand Up @@ -53,8 +53,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
61 changes: 61 additions & 0 deletions boards/arm/cxd56xx/spresense/configs/nsh_automount/defconfig
@@ -0,0 +1,61 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_CXD56_I2C0_SCUSEQ is not set
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="spresense"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_SPRESENSE=y
CONFIG_ARCH_CHIP="cxd56xx"
CONFIG_ARCH_CHIP_CXD56XX=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARMV7M_USEBASEPRI=y
CONFIG_BOARD_LOOPSPERMSEC=5434
CONFIG_BOOT_RUNFROMISRAM=y
CONFIG_BUILTIN=y
CONFIG_CXD56_BINARY=y
CONFIG_CXD56_I2C0=y
CONFIG_CXD56_I2C=y
CONFIG_CXD56_SDCARD_AUTOMOUNT=y
CONFIG_CXD56_SDIO=y
CONFIG_CXD56_SPI4=y
CONFIG_CXD56_SPI5=y
CONFIG_CXD56_SPI=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_FAT_LCNAMES=y
CONFIG_FAT_LFN=y
CONFIG_FS_AUTOMOUNTER=y
CONFIG_FS_AUTOMOUNTER_DRIVER=y
CONFIG_FS_FAT=y
CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_REGISTER=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=1572864
CONFIG_RAM_START=0x0d000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SPI=y
CONFIG_SPRESENSE_EXTENSION=y
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSTEM_CLE=y
CONFIG_SYSTEM_NSH=y
CONFIG_UART1_SERIAL_CONSOLE=y
CONFIG_WQUEUE_NOTIFIER=y
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/rndis/defconfig
Expand Up @@ -68,8 +68,6 @@ CONFIG_LIBC_EXECFUNCS=y
CONFIG_MEMCPY_VIK=y
CONFIG_MEMSET_64BIT=y
CONFIG_MEMSET_OPTSPEED=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/rndis_smp/defconfig
Expand Up @@ -70,8 +70,6 @@ CONFIG_LIBC_EXECFUNCS=y
CONFIG_MEMCPY_VIK=y
CONFIG_MEMSET_64BIT=y
CONFIG_MEMSET_OPTSPEED=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/usbmsc/defconfig
Expand Up @@ -47,8 +47,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/usbnsh/defconfig
Expand Up @@ -40,8 +40,6 @@ CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="spresense_main"
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
CONFIG_MTD_SMART=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/wifi/defconfig
Expand Up @@ -82,8 +82,6 @@ CONFIG_LIBC_EXECFUNCS=y
CONFIG_MEMCPY_VIK=y
CONFIG_MEMSET_64BIT=y
CONFIG_MEMSET_OPTSPEED=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
2 changes: 0 additions & 2 deletions boards/arm/cxd56xx/spresense/configs/wifi_smp/defconfig
Expand Up @@ -85,8 +85,6 @@ CONFIG_LIBC_EXECFUNCS=y
CONFIG_MEMCPY_VIK=y
CONFIG_MEMSET_64BIT=y
CONFIG_MEMSET_OPTSPEED=y
CONFIG_MMCSD=y
CONFIG_MMCSD_SDIO=y
CONFIG_MQ_MAXMSGSIZE=64
CONFIG_MTD_BYTE_WRITE=y
CONFIG_MTD_PARTITION=y
Expand Down
1 change: 1 addition & 0 deletions boards/arm/cxd56xx/spresense/include/board.h
Expand Up @@ -41,6 +41,7 @@
#include "cxd56_i2cdev.h"
#include "cxd56_spidev.h"
#include "cxd56_sdcard.h"
#include "cxd56_automount.h"
#include "cxd56_wdt.h"
#include "cxd56_gpioif.h"

Expand Down
119 changes: 119 additions & 0 deletions boards/arm/cxd56xx/spresense/include/cxd56_automount.h
@@ -0,0 +1,119 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_automount.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/

#ifndef __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_AUTOMOUNT_H
#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_AUTOMOUNT_H

/****************************************************************************
* Pre-processor Definitions
****************************************************************************/

#ifndef CONFIG_CXD56_SDCARD_AUTOMOUNT_FSTYPE
# define CONFIG_CXD56_SDCARD_AUTOMOUNT_FSTYPE "vfat"
#endif

#ifndef CONFIG_CXD56_SDCARD_AUTOMOUNT_BLKDEV
# define CONFIG_CXD56_SDCARD_AUTOMOUNT_BLKDEV "/dev/mmcds0"
#endif

#ifndef CONFIG_CXD56_SDCARD_AUTOMOUNT_MOUNTPOINT
# define CONFIG_CXD56_SDCARD_AUTOMOUNT_MOUNTPOINT "/mnt/sd0"
#endif

#ifndef CONFIG_CXD56_SDCARD_AUTOMOUNT_DDELAY
# define CONFIG_CXD56_SDCARD_AUTOMOUNT_DDELAY 1000
#endif

#ifndef CONFIG_CXD56_SDCARD_AUTOMOUNT_UDELAY
# define CONFIG_CXD56_SDCARD_AUTOMOUNT_UDELAY 2000
#endif

/****************************************************************************
* Public Types
****************************************************************************/

/****************************************************************************
* Public Data
****************************************************************************/

#ifndef __ASSEMBLY__

#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif

/****************************************************************************
* Public Functions Definitions
****************************************************************************/

/****************************************************************************
* Name: board_automount_initialize
*
* Description:
* Configure auto-mounters for each enable and so configured SDCARD
*
* Input Parameters:
* None
*
* Returned Value:
* None
*
****************************************************************************/

void board_automount_initialize(void);

/****************************************************************************
* Name: board_automount_event
*
* Description:
* The HSMCI card detection logic has detected an insertion or removal
* event. It has already scheduled the MMC/SD block driver operations.
* Now we need to schedule the auto-mount event which will occur with a
* substantial delay to make sure that everything has settle down.
*
* Input Parameters:
* slotno - Identifies the HSMCI0 slot: HSMCI0 or HSMCI1_SLOTNO.
* There is a terminology problem here: Each HSMCI supports two slots,
* slot A and slot B. Only slot A is used. So this is not a really a
* slot, but an HSCMI peripheral number.
* inserted - True if the card is inserted in the slot. False otherwise.
*
* Returned Value:
* None
*
* Assumptions:
* Interrupts are disabled.
*
****************************************************************************/

void board_automount_event(int slotno, bool inserted);

#undef EXTERN
#if defined(__cplusplus)
}
#endif

#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_AUTOMOUNT_H */
14 changes: 14 additions & 0 deletions boards/arm/cxd56xx/spresense/include/cxd56_sdcard.h
Expand Up @@ -131,6 +131,20 @@ void board_sdcard_set_high_voltage(void);

void board_sdcard_set_low_voltage(void);

/****************************************************************************
* Name: board_sdcard_inserted
*
* Description:
* Check if a card is inserted into the selected SD Card slot
*
****************************************************************************/

#ifdef CONFIG_MMCSD_HAVE_CARDDETECT
bool board_sdcard_inserted(int slotno);
#else
# define board_sdcard_inserted(slotno) true
#endif

/****************************************************************************
* Name: board_sdcard_set_state_cb
*
Expand Down