Skip to content

Commit

Permalink
boards/cxd56xx/spresense: add fs automount driver for SD Card
Browse files Browse the repository at this point in the history
Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
  • Loading branch information
pkarashchenko authored and masayuki2009 committed Jan 10, 2023
1 parent 7824818 commit 5f92c62
Show file tree
Hide file tree
Showing 25 changed files with 624 additions and 92 deletions.
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

0 comments on commit 5f92c62

Please sign in to comment.