From c867d42018d50b8147875859af50f0cf539a6561 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 20 Dec 2017 10:52:05 -0600 Subject: [PATCH] arch/arm/src/lpc54xx: Add support for card detect and write protect to SDMMC driver. configs/lpcxpresso-lpc54628: Add logic to bring up SDMMC. --- arch/arm/src/lpc54xx/chip/lpc54_sdmmc.h | 1 - arch/arm/src/lpc54xx/lpc54_sdmmc.c | 260 ++++++++---------- arch/arm/src/lpc54xx/lpc54_sdmmc.h | 46 +--- configs/arduino-due/README.txt | 2 +- configs/fire-stm32v2/nsh/defconfig | 2 +- configs/freedom-k64f/README.txt | 2 +- configs/freedom-k66f/README.txt | 2 +- configs/hymini-stm32v/README.txt | 2 +- configs/hymini-stm32v/usbmsc/defconfig | 2 +- configs/lpcxpresso-lpc1768/nsh/defconfig | 2 +- .../lpcxpresso-lpc54628/src/lpc54_bringup.c | 34 +++ .../src/lpcxpresso-lpc54628.h | 16 ++ configs/mbed/nsh/defconfig | 2 +- configs/mcb1700/nsh/defconfig | 2 +- configs/olimex-lpc1766stk/nsh/defconfig | 2 +- configs/olimex-lpc1766stk/usbmsc/defconfig | 2 +- configs/olimex-lpc1766stk/zmodem/defconfig | 2 +- configs/olimex-stm32-p107/nsh/defconfig | 2 +- configs/olimex-stm32-p407/README.txt | 2 +- configs/olimexino-stm32/composite/defconfig | 2 +- configs/olimexino-stm32/nsh/defconfig | 2 +- configs/open1788/src/lpc17_bringup.c | 2 +- configs/photon/wlan/defconfig | 2 +- configs/pic32mx-starterkit/nsh2/defconfig | 2 +- configs/pic32mx7mmb/nsh/defconfig | 2 +- configs/sam3u-ek/README.txt | 2 +- configs/sam3u-ek/knsh/defconfig | 2 +- configs/sam4e-ek/README.txt | 2 +- configs/sam4l-xplained/README.txt | 2 +- .../src/sam4s-xplained-pro.h | 2 +- configs/sam4s-xplained-pro/src/sam_hsmci.c | 8 +- configs/sama5d3-xplained/README.txt | 2 +- configs/sama5d3x-ek/README.txt | 2 +- configs/sama5d4-ek/README.txt | 2 +- configs/samd20-xplained/README.txt | 4 +- configs/samd21-xplained/README.txt | 2 +- configs/same70-xplained/README.txt | 2 +- configs/saml21-xplained/README.txt | 2 +- configs/samv71-xult/README.txt | 2 +- configs/stm3210e-eval/composite/defconfig | 2 +- configs/stm3210e-eval/nsh/defconfig | 2 +- configs/stm3210e-eval/nsh2/defconfig | 2 +- configs/stm3210e-eval/usbmsc/defconfig | 2 +- configs/stm3220g-eval/nsh/defconfig | 2 +- configs/stm3220g-eval/nsh2/defconfig | 2 +- configs/stm3220g-eval/nxwm/defconfig | 2 +- configs/stm3240g-eval/nsh2/defconfig | 2 +- configs/ubw32/nsh/defconfig | 2 +- configs/viewtool-stm32f107/README.txt | 2 +- configs/zkit-arm-1769/nsh/defconfig | 2 +- configs/zkit-arm-1769/nxhello/defconfig | 2 +- drivers/mmcsd/Kconfig | 13 +- drivers/mmcsd/mmcsd_sdio.c | 8 +- 53 files changed, 231 insertions(+), 247 deletions(-) diff --git a/arch/arm/src/lpc54xx/chip/lpc54_sdmmc.h b/arch/arm/src/lpc54xx/chip/lpc54_sdmmc.h index 20a256ec8e6..77a1eb4fb55 100644 --- a/arch/arm/src/lpc54xx/chip/lpc54_sdmmc.h +++ b/arch/arm/src/lpc54xx/chip/lpc54_sdmmc.h @@ -214,7 +214,6 @@ #define SDMMC_INT_SDMMC (1 << 16) /* Bit 16: Mask SD/MMC interrupt */ /* Bits 17-31: Reserved */ #define SDMMC_INT_ALL (0x1ffff) -#define SDMMC_INT_RESET (0) /* Command register CMD */ diff --git a/arch/arm/src/lpc54xx/lpc54_sdmmc.c b/arch/arm/src/lpc54xx/lpc54_sdmmc.c index bb7823d83c8..a46e90458fc 100644 --- a/arch/arm/src/lpc54xx/lpc54_sdmmc.c +++ b/arch/arm/src/lpc54xx/lpc54_sdmmc.c @@ -150,6 +150,12 @@ SDMMC_INT_FRUN | SDMMC_INT_HLE | SDMMC_INT_SBE | \ SDMMC_INT_EBE) +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT +# define SDCARD_INT_CDET SDMMC_INT_CDET +#else +# define SDCARD_INT_CDET 0 +#endif + #define SDCARD_CMDDONE_STA (SDMMC_INT_CDONE) #define SDCARD_RESPDONE_STA (0) @@ -517,7 +523,7 @@ static void lpc54_takesem(struct lpc54_dev_s *priv) static inline void lpc54_setclock(uint32_t clkdiv) { - mcinfo("Entry!\n"); + mcinfo("clkdiv=%08lx\n", (unsigned long)clkdiv); /* Disable the clock before setting frequency */ @@ -559,7 +565,7 @@ static inline void lpc54_setclock(uint32_t clkdiv) static inline void lpc54_settype(uint32_t ctype) { - mcinfo("Entry!\n"); + mcinfo("cteype=%08lx\n", (unsigned long)ctype); lpc54_putreg(ctype, LPC54_SDMMC_CTYPE); } @@ -607,7 +613,7 @@ static int lpc54_ciu_sendcmd(uint32_t cmd, uint32_t arg) { volatile int32_t tmo = SDCARD_CMDTIMEOUT; - mcinfo("Entry!\n"); + mcinfo("cmd=%08lx arg=%08lx\n", (unsigned long)cmd, (unsigned long)arg); /* set command arg reg */ @@ -643,20 +649,23 @@ static void lpc54_configwaitints(struct lpc54_dev_s *priv, uint32_t waitmask, sdio_eventset_t wkupevent) { irqstate_t flags; + uint32_t regval; - mcinfo("Entry!\n"); + mcinfo("waitmask=%08lx waitevents=%08x wkupevent=%08x\n", + (unsigned long)waitmask, (unsigned)waitevents, (unsigned)wkupevent); /* Save all of the data and set the new interrupt mask in one, atomic * operation. */ - flags = enter_critical_section(); + flags = enter_critical_section(); priv->waitevents = waitevents; priv->wkupevent = wkupevent; priv->waitmask = waitmask; priv->xfrmask = waitmask; - lpc54_putreg(priv->xfrmask | priv->waitmask, LPC54_SDMMC_INTMASK); + regval = priv->xfrmask | priv->waitmask | SDCARD_INT_CDET; + lpc54_putreg(regval, LPC54_SDMMC_INTMASK); leave_critical_section(flags); } @@ -677,12 +686,17 @@ static void lpc54_configwaitints(struct lpc54_dev_s *priv, uint32_t waitmask, static void lpc54_configxfrints(struct lpc54_dev_s *priv, uint32_t xfrmask) { - mcinfo("Entry!\n"); + uint32_t regval; + + mcinfo("xfrmask=%08x\n", xfrmask); irqstate_t flags; flags = enter_critical_section(); + priv->xfrmask = xfrmask; - lpc54_putreg(priv->xfrmask | priv->waitmask, LPC54_SDMMC_INTMASK); + + regval = priv->xfrmask | priv->waitmask | SDCARD_INT_CDET; + lpc54_putreg(regval, LPC54_SDMMC_INTMASK); leave_critical_section(flags); } @@ -704,9 +718,10 @@ static void lpc54_configxfrints(struct lpc54_dev_s *priv, uint32_t xfrmask) #if 0 /* Not used */ static void lpc54_setpwrctrl(uint32_t pwrctrl) { - mcinfo("Entry!\n"); + mcinfo("pwrctrl=%08lx\n", (unsigned long)pwrctrl); } #endif + /**************************************************************************** * Name: lpc54_getpwrctrl * @@ -725,7 +740,7 @@ static void lpc54_setpwrctrl(uint32_t pwrctrl) static inline uint32_t lpc54_getpwrctrl(void) { - mcinfo("Entry!\n"); + mcinfo("Returning zero\n"); return 0; } @@ -747,7 +762,7 @@ static uint8_t lpc54_log2(uint16_t value) { uint8_t log2 = 0; - mcinfo("Entry!\n"); + mcinfo("value=%04x\n", value); /* 0000 0000 0000 0001 -> return 0, * 0000 0000 0000 001x -> return 1, @@ -791,7 +806,7 @@ static void lpc54_eventtimeout(int argc, uint32_t arg) { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)arg; - mcinfo("Entry!\n"); + mcinfo("argc=%d, arg=%08lx\n", argc, (unsigned long)arg); /* There is always race conditions with timer expirations. */ @@ -828,7 +843,7 @@ static void lpc54_eventtimeout(int argc, uint32_t arg) static void lpc54_endwait(struct lpc54_dev_s *priv, sdio_eventset_t wkupevent) { - mcinfo("Entry!\n"); + mcinfo("wkupevent=%08x\n", (unsigned)wkupevent); /* Cancel the watchdog timeout */ @@ -865,7 +880,7 @@ static void lpc54_endwait(struct lpc54_dev_s *priv, sdio_eventset_t wkupevent) static void lpc54_endtransfer(struct lpc54_dev_s *priv, sdio_eventset_t wkupevent) { - mcinfo("Entry!\n"); + mcinfo("wkupevent=%08x\n", (unsigned)wkupevent); /* Disable all transfer related interrupts */ @@ -918,9 +933,50 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg) while ((enabled = lpc54_getreg(LPC54_SDMMC_RINTSTS) & lpc54_getreg(LPC54_SDMMC_INTMASK)) != 0) { - /* Handle in progress, interrupt driven data transfers ****************/ - pending = enabled & priv->xfrmask; +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT + /* Handle in card detection events ************************************/ + if ((enabled & SDMMC_INT_CDET) != 0) + { + sdio_statset_t cdstatus; + + /* Update card status */ + + cdstatus = priv->cdstatus; + if ((getreg32(LPC54_SDMMC_CDETECT) & SDMMC_CDETECT_NOTPRESENT) == 0) + { + priv->cdstatus |= SDIO_STATUS_PRESENT; + +#ifdef CONFIG_MMCSD_HAVE_WRITEPROTECT + if ((getreg32(LPC54_SDMMC_WRTPRT) & SDMMC_WRTPRT_PROTECTED) != 0) + { + priv->cdstatus |= SDIO_STATUS_WRPROTECTED; + } + else +#endif + { + priv->cdstatus &= ~SDIO_STATUS_WRPROTECTED; + } + } + else + { + priv->cdstatus &= ~(SDIO_STATUS_PRESENT | SDIO_STATUS_WRPROTECTED); + } + + mcinfo("cdstatus OLD: %02x NEW: %02x\n", cdstatus, priv->cdstatus); + + /* Perform any requested callback if the status has changed */ + + if (cdstatus != priv->cdstatus) + { + lpc54_callback(priv); + } + } +#endif + + /* Handle in progress, interrupt driven data transfers ****************/ + + pending = enabled & priv->xfrmask; if (pending != 0) { /* Handle data end events */ @@ -986,7 +1042,7 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg) /* Handle wait events *************************************************/ - pending = enabled & priv->waitmask; + pending = enabled & priv->waitmask; if (pending != 0) { /* Is this a response completion event? */ @@ -999,7 +1055,8 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg) { /* Yes.. wake the thread up */ - lpc54_putreg(SDCARD_RESPDONE_ICR | SDCARD_CMDDONE_ICR, LPC54_SDMMC_RINTSTS); + lpc54_putreg(SDCARD_RESPDONE_ICR | SDCARD_CMDDONE_ICR, + LPC54_SDMMC_RINTSTS); lpc54_endwait(priv, SDIOWAIT_RESPONSEDONE); } } @@ -1020,6 +1077,7 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg) } } } + return OK; } @@ -1071,7 +1129,7 @@ static void lpc54_reset(FAR struct sdio_dev_s *dev) irqstate_t flags; uint32_t regval; - mcinfo("Entry!\n"); + mcinfo("Resetting...\n"); flags = enter_critical_section(); @@ -1102,7 +1160,8 @@ static void lpc54_reset(FAR struct sdio_dev_s *dev) /* DMA data transfer support */ - priv->widebus = true; /* Required for DMA support */ + priv->widebus = true; /* Required for DMA support */ + priv->cdstatus = 0; /* Card status is unknown */ regval = 0; @@ -1119,9 +1178,9 @@ static void lpc54_reset(FAR struct sdio_dev_s *dev) regval |= SDMMC_CTRL_INTENABLE; lpc54_putreg(regval, LPC54_SDMMC_CTRL); - /* Disable Interrupts */ + /* Disable Interrupts except for card detection. */ - lpc54_putreg(0, LPC54_SDMMC_INTMASK); + lpc54_putreg(SDCARD_INT_CDET, LPC54_SDMMC_INTMASK); /* Clear to Interrupts */ @@ -1195,7 +1254,7 @@ static sdio_statset_t lpc54_status(FAR struct sdio_dev_s *dev) { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - mcinfo("Entry!\n"); + mcinfo("cdstatus=%02x\n", priv->cdstatus); return priv->cdstatus; } @@ -1221,7 +1280,7 @@ static void lpc54_widebus(FAR struct sdio_dev_s *dev, bool wide) { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - mcinfo("Entry!\n"); + mcinfo("wide=%d\n", wide); priv->widebus = wide; } @@ -1326,7 +1385,7 @@ static int lpc54_attach(FAR struct sdio_dev_s *dev) int ret; uint32_t regval; - mcinfo("Entry!\n"); + mcinfo("Attaching..\n"); /* Attach the SD card interrupt handler */ @@ -1338,7 +1397,7 @@ static int lpc54_attach(FAR struct sdio_dev_s *dev) * interrupt flags */ - lpc54_putreg(SDMMC_INT_RESET, LPC54_SDMMC_INTMASK); + lpc54_putreg(0, LPC54_SDMMC_INTMASK); lpc54_putreg(SDMMC_INT_ALL , LPC54_SDMMC_RINTSTS); /* Enable Interrupts to happen when the INTMASK is activated */ @@ -1347,6 +1406,10 @@ static int lpc54_attach(FAR struct sdio_dev_s *dev) regval |= SDMMC_CTRL_INTENABLE; lpc54_putreg(regval, LPC54_SDMMC_CTRL); + /* Enable card detection interrupts */ + + lpc54_putreg(SDCARD_INT_CDET, LPC54_SDMMC_INTMASK); + /* Enable SD card interrupts at the NVIC. They can now be enabled at * the SD card controller as needed. */ @@ -1378,7 +1441,7 @@ static int lpc54_sendcmd(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t arg) uint32_t regval = 0; uint32_t cmdidx; - mcinfo("Entry!\n"); + mcinfo("cmd=%08x arg=%08x\n", cmd, arg); /* The CMD0 needs the SENDINIT CMD */ @@ -1431,7 +1494,8 @@ static int lpc54_sendcmd(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t arg) /* Write the SD card CMD */ - lpc54_putreg(SDCARD_RESPDONE_ICR | SDCARD_CMDDONE_ICR, LPC54_SDMMC_RINTSTS); + lpc54_putreg(SDCARD_RESPDONE_ICR | SDCARD_CMDDONE_ICR, + LPC54_SDMMC_RINTSTS); lpc54_ciu_sendcmd(regval, arg); return OK; @@ -1465,7 +1529,7 @@ static int lpc54_recvsetup(FAR struct sdio_dev_s *dev, FAR uint8_t *buffer, uint32_t blocksize; uint32_t bytecnt; - mcinfo("Entry!\n"); + mcinfo("nbytes=%ld\n", (long) nbytes); DEBUGASSERT(priv != NULL && buffer != NULL && nbytes > 0); DEBUGASSERT(((uint32_t)buffer & 3) == 0); @@ -1517,7 +1581,7 @@ static int lpc54_sendsetup(FAR struct sdio_dev_s *dev, FAR const uint8_t *buffer { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - mcinfo("Entry!\n"); + mcinfo("nbytes=%ld\n", (long)nbytes); DEBUGASSERT(priv != NULL && buffer != NULL && nbytes > 0); DEBUGASSERT(((uint32_t)buffer & 3) == 0); @@ -1552,10 +1616,10 @@ static int lpc54_sendsetup(FAR struct sdio_dev_s *dev, FAR const uint8_t *buffer static int lpc54_cancel(FAR struct sdio_dev_s *dev) { - mcinfo("Entry!\n"); - struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; + mcinfo("Cancelling..\n"); + /* Disable all transfer- and event- related interrupts */ lpc54_configxfrints(priv, 0); @@ -1608,11 +1672,11 @@ static int lpc54_cancel(FAR struct sdio_dev_s *dev) static int lpc54_waitresponse(FAR struct sdio_dev_s *dev, uint32_t cmd) { - mcinfo("Entry!\n"); - int32_t timeout; uint32_t events; + mcinfo("cmd=%08x\n", cmd); + switch (cmd & MMCSD_RESPONSE_MASK) { case MMCSD_NO_RESPONSE: @@ -1710,7 +1774,7 @@ static int lpc54_recvshortcrc(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t int ret = OK; - mcinfo("Entry! CMD = %08x\n", cmd); + mcinfo("cmd=%08x\n", cmd); /* R1 Command response (48-bit) * 47 0 Start bit @@ -1783,8 +1847,7 @@ static int lpc54_recvlong(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t rlo uint32_t regval; int ret = OK; - mcinfo("Entry!\n"); - + mcinfo("cmd=%08x\n", cmd); /* R2 CID, CSD register (136-bit) * 135 0 Start bit @@ -1840,7 +1903,7 @@ static int lpc54_recvshort(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t *r uint32_t regval; int ret = OK; - mcinfo("Entry!\n"); + mcinfo("cmd=%08x\n", cmd); /* R3 OCR (48-bit) * 47 0 Start bit @@ -1886,12 +1949,12 @@ static int lpc54_recvshort(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t *r /* MMC responses not supported */ -static int lpc54_recvnotimpl(FAR struct sdio_dev_s *dev, uint32_t cmd, uint32_t *rnotimpl) +static int lpc54_recvnotimpl(FAR struct sdio_dev_s *dev, uint32_t cmd, + uint32_t *rnotimpl) { - mcinfo("Entry!\n"); + mcinfo("cmd=%08x\n", cmd); lpc54_putreg(SDCARD_RESPDONE_ICR | SDCARD_CMDDONE_ICR, LPC54_SDMMC_RINTSTS); - return -ENOSYS; } @@ -1925,8 +1988,7 @@ static void lpc54_waitenable(FAR struct sdio_dev_s *dev, struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; uint32_t waitmask; - mcinfo("Entry!\n"); - + mcinfo("eventset=%08x\n", (unsigned int)eventset); DEBUGASSERT(priv != NULL); /* Disable event-related interrupts */ @@ -1987,7 +2049,7 @@ static sdio_eventset_t lpc54_eventwait(FAR struct sdio_dev_s *dev, irqstate_t flags; int ret; - mcinfo("Entry!\n"); + mcinfo("timeout=%lu\n", (unsigned long)timeout); /* There is a race condition here... the event may have completed before * we get here. In this case waitevents will be zero, but wkupevents will @@ -2090,8 +2152,6 @@ static void lpc54_callbackenable(FAR struct sdio_dev_s *dev, { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - mcinfo("Entry!\n"); - mcinfo("eventset: %02x\n", eventset); DEBUGASSERT(priv != NULL); @@ -2126,7 +2186,7 @@ static int lpc54_registercallback(FAR struct sdio_dev_s *dev, { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - mcinfo("Entry!\n"); + mcinfo("callback=%p arg=%p\n", callback, arg); /* Disable callbacks and register this callback and is argument */ @@ -2283,7 +2343,7 @@ static int lpc54_dmasendsetup(FAR struct sdio_dev_s *dev, uint32_t regval; int ret = OK; - mcinfo("Entry!\n"); + mcinfo("buflen=%lu\n", (unsigned long)buflen); DEBUGASSERT(priv != NULL && buffer != NULL && buflen > 0); DEBUGASSERT(((uint32_t)buffer & 3) == 0); @@ -2336,7 +2396,7 @@ static void lpc54_callback(void *arg) { struct lpc54_dev_s *priv = (struct lpc54_dev_s *)arg; - mcinfo("Entry!\n"); + mcinfo("arg=%p\n", arg); /* Is a callback registered? */ @@ -2406,10 +2466,10 @@ static void lpc54_callback(void *arg) ****************************************************************************/ /**************************************************************************** - * Name: sdio_initialize + * Name: lpc54_sdmmc_initialize * * Description: - * Initialize SD card for operation. + * Initialize the SD/MMC peripheral for normal operation. * * Input Parameters: * slotno - Not used. @@ -2419,12 +2479,12 @@ static void lpc54_callback(void *arg) * ****************************************************************************/ -FAR struct sdio_dev_s *sdio_initialize(int slotno) +FAR struct sdio_dev_s *lpc54_sdmmc_initialize(int slotno) { irqstate_t flags; uint32_t regval; - mcinfo("Entry!\n"); + mcinfo("slotno=%d\n", slotno); flags = enter_critical_section(); @@ -2475,11 +2535,15 @@ FAR struct sdio_dev_s *sdio_initialize(int slotno) lpc54_gpio_config(GPIO_SD_D2); lpc54_gpio_config(GPIO_SD_D3); #endif +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT lpc54_gpio_config(GPIO_SD_CARD_DET_N); +#endif lpc54_gpio_config(GPIO_SD_CLK); lpc54_gpio_config(GPIO_SD_CMD); lpc54_gpio_config(GPIO_SD_POW_EN); +#ifdef CONFIG_MMCSD_HAVE_WRITEPROTECT lpc54_gpio_config(GPIO_SD_WR_PRT); +#endif /* Reset the card and assure that it is in the initial, unconfigured * state. @@ -2494,94 +2558,4 @@ FAR struct sdio_dev_s *sdio_initialize(int slotno) return &g_scard_dev.dev; } -/**************************************************************************** - * Name: sdio_mediachange - * - * Description: - * Called by board-specific logic -- posssible from an interrupt handler -- - * in order to signal to the driver that a card has been inserted or - * removed from the slot - * - * Input Parameters: - * dev - An instance of the SD card driver device state structure. - * cardinslot - true is a card has been detected in the slot; false if a - * card has been removed from the slot. Only transitions - * (inserted->removed or removed->inserted should be reported) - * - * Returned Values: - * None - * - ****************************************************************************/ - -void sdio_mediachange(FAR struct sdio_dev_s *dev, bool cardinslot) -{ - struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - sdio_statset_t cdstatus; - irqstate_t flags; - - mcinfo("Entry!\n"); - - /* Update card status */ - - flags = enter_critical_section(); - cdstatus = priv->cdstatus; - if (cardinslot) - { - priv->cdstatus |= SDIO_STATUS_PRESENT; - } - else - { - priv->cdstatus &= ~SDIO_STATUS_PRESENT; - } - - mcinfo("cdstatus OLD: %02x NEW: %02x\n", cdstatus, priv->cdstatus); - - /* Perform any requested callback if the status has changed */ - - if (cdstatus != priv->cdstatus) - { - lpc54_callback(priv); - } - - leave_critical_section(flags); -} - -/**************************************************************************** - * Name: sdio_wrprotect - * - * Description: - * Called by board-specific logic to report if the card in the slot is - * mechanically write protected. - * - * Input Parameters: - * dev - An instance of the SD card driver device state structure. - * wrprotect - true is a card is writeprotected. - * - * Returned Values: - * None - * - ****************************************************************************/ - -void sdio_wrprotect(FAR struct sdio_dev_s *dev, bool wrprotect) -{ - struct lpc54_dev_s *priv = (struct lpc54_dev_s *)dev; - irqstate_t flags; - - mcinfo("Entry!\n"); - - /* Update card status */ - - flags = enter_critical_section(); - if (wrprotect) - { - priv->cdstatus |= SDIO_STATUS_WRPROTECTED; - } - else - { - priv->cdstatus &= ~SDIO_STATUS_WRPROTECTED; - } - - mcinfo("cdstatus: %02x\n", priv->cdstatus); - leave_critical_section(flags); -} #endif /* CONFIG_LPC54_SDMMC */ diff --git a/arch/arm/src/lpc54xx/lpc54_sdmmc.h b/arch/arm/src/lpc54xx/lpc54_sdmmc.h index d133eab2841..c4c6bdc14be 100644 --- a/arch/arm/src/lpc54xx/lpc54_sdmmc.h +++ b/arch/arm/src/lpc54xx/lpc54_sdmmc.h @@ -66,7 +66,7 @@ extern "C" * Name: lpc54_sdmmc_initialize * * Description: - * Initialize SDIO for operation. + * Initialize the SD/MMC peripheral for normal operation. * * Input Parameters: * slotno - Not used. @@ -79,49 +79,5 @@ extern "C" struct lpc54_sdmmc_dev_s; /* See include/nuttx/sdio.h */ FAR struct sdio_dev_s *lpc54_sdmmc_initialize(int slotno); -/**************************************************************************** - * Name: lpc54_sdmmc_mediachange - * - * Description: - * Called by board-specific logic -- posssible from an interrupt handler -- - * in order to signal to the driver that a card has been inserted or - * removed from the slot - * - * Input Parameters: - * dev - An instance of the SDIO driver device state structure. - * cardinslot - true is a card has been detected in the slot; false if a - * card has been removed from the slot. Only transitions - * (inserted->removed or removed->inserted should be reported) - * - * Returned Values: - * None - * - ****************************************************************************/ - -void lpc54_sdmmc_mediachange(FAR struct sdio_dev_s *dev, bool cardinslot); - -/**************************************************************************** - * Name: lpc54_sdmmc_wrprotect - * - * Description: - * Called by board-specific logic to report if the card in the slot is - * mechanically write protected. - * - * Input Parameters: - * dev - An instance of the SDIO driver device state structure. - * wrprotect - true is a card is writeprotected. - * - * Returned Values: - * None - * - ****************************************************************************/ - -void lpc54_sdmmc_wrprotect(FAR struct sdio_dev_s *dev, bool wrprotect); - -#undef EXTERN -#if defined(__cplusplus) -} -#endif - #endif /* __ASSEMBLY__ */ #endif /* __ARCH_ARM_SRC_LPC54XX_LPC54_SDMMC_H */ diff --git a/configs/arduino-due/README.txt b/configs/arduino-due/README.txt index fd86ed27fce..6aaa13177ce 100644 --- a/configs/arduino-due/README.txt +++ b/configs/arduino-due/README.txt @@ -813,7 +813,7 @@ Configuration sub-directories CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers - CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO + CONFIG_MMCSD_HAVE_CARDDETECT=y : I/O1 module as a card detect GPIO CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency CONFIG_MMCSD_SPIMODE=0 : Mode 0 is required diff --git a/configs/fire-stm32v2/nsh/defconfig b/configs/fire-stm32v2/nsh/defconfig index 122c67c5f28..27651d312f2 100644 --- a/configs/fire-stm32v2/nsh/defconfig +++ b/configs/fire-stm32v2/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/freedom-k64f/README.txt b/configs/freedom-k64f/README.txt index 906c8a4a6c9..5559b2fe5f1 100644 --- a/configs/freedom-k64f/README.txt +++ b/configs/freedom-k64f/README.txt @@ -453,7 +453,7 @@ SD Card Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/freedom-k66f/README.txt b/configs/freedom-k66f/README.txt index b1283e8dc9f..7f5da7cffaa 100644 --- a/configs/freedom-k66f/README.txt +++ b/configs/freedom-k66f/README.txt @@ -456,7 +456,7 @@ SD Card Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/hymini-stm32v/README.txt b/configs/hymini-stm32v/README.txt index b079d5ae23b..6726c459928 100644 --- a/configs/hymini-stm32v/README.txt +++ b/configs/hymini-stm32v/README.txt @@ -286,7 +286,7 @@ HY-Mini specific Configuration Options Default: Medium CONFIG_STM32_SDIO_WIDTH_D1_ONLY - Select 1-bit transfer mode. Default: 4-bit transfer mode. - CONFIG_MMCSD_HAVECARDDETECT - Select if SDIO driver card detection + CONFIG_MMCSD_HAVE_CARDDETECT - Select if SDIO driver card detection is 100% accurate (it is on the HY-MiniSTM32V) HY-MiniSTM32V CAN Configuration diff --git a/configs/hymini-stm32v/usbmsc/defconfig b/configs/hymini-stm32v/usbmsc/defconfig index bc5e803748d..722fb02dbc2 100644 --- a/configs/hymini-stm32v/usbmsc/defconfig +++ b/configs/hymini-stm32v/usbmsc/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set CONFIG_ARCH_BOARD_HYMINI_STM32V=y CONFIG_ARCH_BOARD="hymini-stm32v" diff --git a/configs/lpcxpresso-lpc1768/nsh/defconfig b/configs/lpcxpresso-lpc1768/nsh/defconfig index 339716342e0..1c7be2c4615 100644 --- a/configs/lpcxpresso-lpc1768/nsh/defconfig +++ b/configs/lpcxpresso-lpc1768/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/lpcxpresso-lpc54628/src/lpc54_bringup.c b/configs/lpcxpresso-lpc54628/src/lpc54_bringup.c index b77c80d15f0..12d32ce6b89 100644 --- a/configs/lpcxpresso-lpc54628/src/lpc54_bringup.c +++ b/configs/lpcxpresso-lpc54628/src/lpc54_bringup.c @@ -51,6 +51,12 @@ # include #endif +#ifdef CONFIG_LPC54_SDMMC +# include +# include +# include "lpc54_sdmmc.h" +#endif + #include "lpcxpresso-lpc54628.h" /**************************************************************************** @@ -73,6 +79,9 @@ int lpc54_bringup(void) { +#ifdef HAVE_MMCSD + struct sdio_dev_s *sdmmc; +#endif int ret; #ifdef CONFIG_FS_PROCFS @@ -85,6 +94,9 @@ int lpc54_bringup(void) } #endif +FAR struct sdio_dev_s *lpc54_sdmmc_initialize(int slotno); + + #ifdef HAVE_I2CTOOL /* Register I2C drivers on behalf of the I2C tool */ @@ -111,6 +123,28 @@ int lpc54_bringup(void) } #endif +#ifdef HAVE_MMCSD + /* Get an instance of the SDIO interface */ + + sdmmc = lpc54_sdmmc_initialize(0); + if (!sdmmc) + { + syslog(LOG_ERR, "ERROR: Failed to initialize SD/MMC\n"); + } + else + { + /* Dind the SDIO interface to the MMC/SD driver */ + + ret = mmcsd_slotinitialize(MMCSD_MINOR, sdmmc); + if (ret != OK) + { + syslog(LOG_ERR, + "ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n", + ret); + } + } +#endif + #ifdef CONFIG_BUTTONS_LOWER /* Register the BUTTON driver */ diff --git a/configs/lpcxpresso-lpc54628/src/lpcxpresso-lpc54628.h b/configs/lpcxpresso-lpc54628/src/lpcxpresso-lpc54628.h index 48cb4e00261..fab030b691d 100644 --- a/configs/lpcxpresso-lpc54628/src/lpcxpresso-lpc54628.h +++ b/configs/lpcxpresso-lpc54628/src/lpcxpresso-lpc54628.h @@ -51,6 +51,7 @@ #define HAVE_I2CTOOL 1 #define HAVE_FT5x06 1 +#define HAVE_MMCSD 1 /* Do we need to register I2C drivers on behalf of the I2C tool? */ @@ -66,6 +67,21 @@ # undef HAVE_FT5x06 #endif +/* MMC/SD support */ + +#if !defined(CONFIG_LPC54_SDMMC) || !defined(CONFIG_MMCSD) || \ + !defined(CONFIG_MMCSD_SDIO) || defined(CONFIG_DISABLE_MOUNTPOINT) +# undef HAVE_MMCSD +#endif + +/* Select the MMCSD minor number */ + +#ifdef CONFIG_NSH_MMCSDMINOR +# define MMCSD_MINOR CONFIG_NSH_MMCSDMINOR +#else +# define MMCSD_MINOR 0 +#endif + /* Indices into a sparse I2C array. Used with lpc54_i2c_handle() */ #ifdef CONFIG_LPC54_I2C0_MASTER diff --git a/configs/mbed/nsh/defconfig b/configs/mbed/nsh/defconfig index 66597a84960..4b0e23d51e6 100644 --- a/configs/mbed/nsh/defconfig +++ b/configs/mbed/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/mcb1700/nsh/defconfig b/configs/mcb1700/nsh/defconfig index 375b1b97afc..547ab51b129 100644 --- a/configs/mcb1700/nsh/defconfig +++ b/configs/mcb1700/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/olimex-lpc1766stk/nsh/defconfig b/configs/olimex-lpc1766stk/nsh/defconfig index f1fd8616a82..81cc9af9067 100644 --- a/configs/olimex-lpc1766stk/nsh/defconfig +++ b/configs/olimex-lpc1766stk/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/olimex-lpc1766stk/usbmsc/defconfig b/configs/olimex-lpc1766stk/usbmsc/defconfig index 516324e2ac9..a668169a43c 100644 --- a/configs/olimex-lpc1766stk/usbmsc/defconfig +++ b/configs/olimex-lpc1766stk/usbmsc/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_SPI_CALLBACK is not set # CONFIG_SPI_EXCHANGE is not set diff --git a/configs/olimex-lpc1766stk/zmodem/defconfig b/configs/olimex-lpc1766stk/zmodem/defconfig index 86becd2f58f..4a3e5a41034 100644 --- a/configs/olimex-lpc1766stk/zmodem/defconfig +++ b/configs/olimex-lpc1766stk/zmodem/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CMDOPT_DF_H is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/olimex-stm32-p107/nsh/defconfig b/configs/olimex-stm32-p107/nsh/defconfig index e8e8b2e151b..b3c828df2a3 100644 --- a/configs/olimex-stm32-p107/nsh/defconfig +++ b/configs/olimex-stm32-p107/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/olimex-stm32-p407/README.txt b/configs/olimex-stm32-p407/README.txt index f77162379f8..f7c2f6ce8e8 100644 --- a/configs/olimex-stm32-p407/README.txt +++ b/configs/olimex-stm32-p407/README.txt @@ -98,7 +98,7 @@ microSD Card Interface Device Drivers -> MMC/SD Driver Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance - # CONFIG_MMCSD_HAVECARDDETECT is not set : No card-detect GPIO + # CONFIG_MMCSD_HAVE_CARDDETECT is not set : No card-detect GPIO # CONFIG_MMCSD_MMCSUPPORT is not set : Interferes with some SD cards # CONFIG_MMCSD_SPI is not set : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/olimexino-stm32/composite/defconfig b/configs/olimexino-stm32/composite/defconfig index 1883cd23b43..ad25c1672df 100644 --- a/configs/olimexino-stm32/composite/defconfig +++ b/configs/olimexino-stm32/composite/defconfig @@ -1,6 +1,6 @@ # CONFIG_DISABLE_OS_API is not set # CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_NSH_DISABLE_CMP is not set # CONFIG_NSH_DISABLE_DD is not set # CONFIG_NSH_DISABLE_DF is not set diff --git a/configs/olimexino-stm32/nsh/defconfig b/configs/olimexino-stm32/nsh/defconfig index 1ca4a2fc561..30a421918e3 100644 --- a/configs/olimexino-stm32/nsh/defconfig +++ b/configs/olimexino-stm32/nsh/defconfig @@ -1,6 +1,6 @@ # CONFIG_DISABLE_OS_API is not set # CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_NSH_DISABLE_CMP is not set # CONFIG_NSH_DISABLE_DD is not set # CONFIG_NSH_DISABLE_DF is not set diff --git a/configs/open1788/src/lpc17_bringup.c b/configs/open1788/src/lpc17_bringup.c index 7967040a533..98a79fcf4ec 100644 --- a/configs/open1788/src/lpc17_bringup.c +++ b/configs/open1788/src/lpc17_bringup.c @@ -103,7 +103,7 @@ */ #ifdef NSH_HAVE_MMCSD -# ifdef CONFIG_MMCSD_HAVECARDDETECT +# ifdef CONFIG_MMCSD_HAVE_CARDDETECT # define NSH_HAVE_MMCSD_CD 1 # ifdef CONFIG_LPC17_GPIOIRQ # define NSH_HAVE_MMCSD_CDINT 1 diff --git a/configs/photon/wlan/defconfig b/configs/photon/wlan/defconfig index 5e3fe78650e..82874317032 100644 --- a/configs/photon/wlan/defconfig +++ b/configs/photon/wlan/defconfig @@ -1,5 +1,5 @@ # CONFIG_ARCH_LEDS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/pic32mx-starterkit/nsh2/defconfig b/configs/pic32mx-starterkit/nsh2/defconfig index 4fd623b657d..5072e9db3a1 100644 --- a/configs/pic32mx-starterkit/nsh2/defconfig +++ b/configs/pic32mx-starterkit/nsh2/defconfig @@ -1,5 +1,5 @@ # CONFIG_ARCH_RAMFUNCS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CONSOLE is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/pic32mx7mmb/nsh/defconfig b/configs/pic32mx7mmb/nsh/defconfig index bc119376fa2..497af6031d6 100644 --- a/configs/pic32mx7mmb/nsh/defconfig +++ b/configs/pic32mx7mmb/nsh/defconfig @@ -1,5 +1,5 @@ # CONFIG_ARCH_RAMFUNCS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_SPI_CALLBACK is not set # CONFIG_SPI_EXCHANGE is not set diff --git a/configs/sam3u-ek/README.txt b/configs/sam3u-ek/README.txt index caf48dcd743..4f63108cbd0 100644 --- a/configs/sam3u-ek/README.txt +++ b/configs/sam3u-ek/README.txt @@ -438,7 +438,7 @@ Configurations Device Drivers -> MMC/SD Driver Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support CONFIG_SDIO_DMA=y : Use SDIO DMA CONFIG_SDIO_BLOCKSETUP=y : Needs to know block sizes diff --git a/configs/sam3u-ek/knsh/defconfig b/configs/sam3u-ek/knsh/defconfig index fb3c156632f..42a96050210 100644 --- a/configs/sam3u-ek/knsh/defconfig +++ b/configs/sam3u-ek/knsh/defconfig @@ -1,5 +1,5 @@ # CONFIG_ARCH_RAMFUNCS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CMDOPT_DF_H is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/sam4e-ek/README.txt b/configs/sam4e-ek/README.txt index 93039d6e065..58c4c4c7858 100644 --- a/configs/sam4e-ek/README.txt +++ b/configs/sam4e-ek/README.txt @@ -678,7 +678,7 @@ HSMCI Device Drivers -> MMC/SD Driver Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMCSD_NSLOTS=1 : One slot per driver instance - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : Probably works but is untested diff --git a/configs/sam4l-xplained/README.txt b/configs/sam4l-xplained/README.txt index 4476e608152..7178b3e31df 100644 --- a/configs/sam4l-xplained/README.txt +++ b/configs/sam4l-xplained/README.txt @@ -525,7 +525,7 @@ Configuration sub-directories CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers - CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO + CONFIG_MMCSD_HAVE_CARDDETECT=y : I/O1 module as a card detect GPIO CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency CONFIG_MMCSD_SPIMODE=0 : Mode 0 is required diff --git a/configs/sam4s-xplained-pro/src/sam4s-xplained-pro.h b/configs/sam4s-xplained-pro/src/sam4s-xplained-pro.h index d995541bbbd..a20eb969deb 100644 --- a/configs/sam4s-xplained-pro/src/sam4s-xplained-pro.h +++ b/configs/sam4s-xplained-pro/src/sam4s-xplained-pro.h @@ -197,7 +197,7 @@ int sam_hsmci_initialize(void); * ************************************************************************************/ -#if defined(HAVE_HSMCI) && defined(CONFIG_MMCSD_HAVECARDDETECT) +#if defined(HAVE_HSMCI) && defined(CONFIG_MMCSD_HAVE_CARDDETECT) bool sam_cardinserted(int slotno); #endif diff --git a/configs/sam4s-xplained-pro/src/sam_hsmci.c b/configs/sam4s-xplained-pro/src/sam_hsmci.c index 1446269a5d5..dc62e4a5692 100644 --- a/configs/sam4s-xplained-pro/src/sam_hsmci.c +++ b/configs/sam4s-xplained-pro/src/sam_hsmci.c @@ -94,7 +94,7 @@ static struct sam_hsmci_state_s g_hsmci; * ****************************************************************************/ -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT static int sam_hsmci_cardetect_int(int irq, void *regs, FAR void *arg) { bool inserted; @@ -160,7 +160,7 @@ int sam_hsmci_initialize(void) return ret; } -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT /* Initialize card-detect GPIO. There is no write-protection GPIO. */ sam_configgpio(GPIO_MCI_CD); @@ -183,7 +183,7 @@ int sam_hsmci_initialize(void) /* Enable card detect interrupts */ -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT sam_gpioirqenable(MCI_CD_IRQ); #endif } @@ -199,7 +199,7 @@ int sam_hsmci_initialize(void) * ****************************************************************************/ -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT bool sam_cardinserted(int slotno) { bool removed; diff --git a/configs/sama5d3-xplained/README.txt b/configs/sama5d3-xplained/README.txt index 2e6cb77045a..8711ba449b6 100644 --- a/configs/sama5d3-xplained/README.txt +++ b/configs/sama5d3-xplained/README.txt @@ -1129,7 +1129,7 @@ HSMCI Card Slots CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/sama5d3x-ek/README.txt b/configs/sama5d3x-ek/README.txt index 9f6b401f660..26007c8f921 100644 --- a/configs/sama5d3x-ek/README.txt +++ b/configs/sama5d3x-ek/README.txt @@ -1305,7 +1305,7 @@ HSMCI Card Slots CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/sama5d4-ek/README.txt b/configs/sama5d4-ek/README.txt index 8483a0ddc99..40a703e4025 100644 --- a/configs/sama5d4-ek/README.txt +++ b/configs/sama5d4-ek/README.txt @@ -1675,7 +1675,7 @@ HSMCI Card Slots CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/samd20-xplained/README.txt b/configs/samd20-xplained/README.txt index ac885a6dd13..c8af7952be1 100644 --- a/configs/samd20-xplained/README.txt +++ b/configs/samd20-xplained/README.txt @@ -57,7 +57,7 @@ STATUS/ISSUES with the USART output on SERCOM4. Both symptoms imply some clock- related issue. - The configuration suggests CONFIG_MMCSD_HAVECARDDETECT=y, but as of + The configuration suggests CONFIG_MMCSD_HAVE_CARDDETECT=y, but as of this writing, there is no support for EIC pin interrupts. 4. OLED1 module is untested. These instructions were just lifted from @@ -766,7 +766,7 @@ Configuration sub-directories CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers CONFIG_MMCSD_MMCSUPPORT=n : May interfere with some SD cards - CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO + CONFIG_MMCSD_HAVE_CARDDETECT=y : I/O1 module as a card detect GPIO CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency CONFIG_MMCSD_SPIMODE=0 : Mode 0 is required diff --git a/configs/samd21-xplained/README.txt b/configs/samd21-xplained/README.txt index 927a84273ed..3f3624ff181 100644 --- a/configs/samd21-xplained/README.txt +++ b/configs/samd21-xplained/README.txt @@ -631,7 +631,7 @@ Configuration sub-directories CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers CONFIG_MMCSD_MMCSUPPORT=n : May interfere with some SD cards - CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO + CONFIG_MMCSD_HAVE_CARDDETECT=y : I/O1 module as a card detect GPIO CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency CONFIG_MMCSD_SPIMODE=0 : Mode 0 is required diff --git a/configs/same70-xplained/README.txt b/configs/same70-xplained/README.txt index a237b19e7d9..9695034a64c 100644 --- a/configs/same70-xplained/README.txt +++ b/configs/same70-xplained/README.txt @@ -163,7 +163,7 @@ the SD slots can be enabled with the following settings: CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/saml21-xplained/README.txt b/configs/saml21-xplained/README.txt index 94c22382131..88323bfd534 100644 --- a/configs/saml21-xplained/README.txt +++ b/configs/saml21-xplained/README.txt @@ -798,7 +798,7 @@ Configuration sub-directories CONFIG_MMCSD_NSLOTS=1 : Only one MMC/SD card slot CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers CONFIG_MMCSD_MMCSUPPORT=n : May interfere with some SD cards - CONFIG_MMCSD_HAVECARDDETECT=y : I/O1 module as a card detect GPIO + CONFIG_MMCSD_HAVE_CARDDETECT=y : I/O1 module as a card detect GPIO CONFIG_MMCSD_SPI=y : Use the SPI interface to the MMC/SD card CONFIG_MMCSD_SPICLOCK=20000000 : This is a guess for the optimal MMC/SD frequency CONFIG_MMCSD_SPIMODE=0 : Mode 0 is required diff --git a/configs/samv71-xult/README.txt b/configs/samv71-xult/README.txt index 7d36853a51e..c290d05badd 100644 --- a/configs/samv71-xult/README.txt +++ b/configs/samv71-xult/README.txt @@ -279,7 +279,7 @@ Enabling HSMCI support. The SAMV7-XULT provides a one, full-size SD memory card CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance CONFIG_MMCSD_MULTIBLOCK_DISABLE=y : (REVISIT) - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/stm3210e-eval/composite/defconfig b/configs/stm3210e-eval/composite/defconfig index c39ea0632d7..d881bc64f7f 100644 --- a/configs/stm3210e-eval/composite/defconfig +++ b/configs/stm3210e-eval/composite/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set CONFIG_ARCH_BOARD_STM3210E_EVAL=y CONFIG_ARCH_BOARD="stm3210e-eval" diff --git a/configs/stm3210e-eval/nsh/defconfig b/configs/stm3210e-eval/nsh/defconfig index 8d7ec1e665d..06e1408e1a7 100644 --- a/configs/stm3210e-eval/nsh/defconfig +++ b/configs/stm3210e-eval/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/stm3210e-eval/nsh2/defconfig b/configs/stm3210e-eval/nsh2/defconfig index 531ca9de5e9..81ba91ba1dc 100644 --- a/configs/stm3210e-eval/nsh2/defconfig +++ b/configs/stm3210e-eval/nsh2/defconfig @@ -2,7 +2,7 @@ # CONFIG_EXAMPLES_NX_DEFAULT_FONT is not set # CONFIG_EXAMPLES_NXHELLO_DEFAULT_COLORS is not set # CONFIG_EXAMPLES_NXHELLO_DEFAULT_FONT is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/stm3210e-eval/usbmsc/defconfig b/configs/stm3210e-eval/usbmsc/defconfig index 59c0641fa31..bd3c4339a11 100644 --- a/configs/stm3210e-eval/usbmsc/defconfig +++ b/configs/stm3210e-eval/usbmsc/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set CONFIG_ARCH_BOARD_STM3210E_EVAL=y CONFIG_ARCH_BOARD="stm3210e-eval" diff --git a/configs/stm3220g-eval/nsh/defconfig b/configs/stm3220g-eval/nsh/defconfig index e2331f75efb..a20a2296c17 100644 --- a/configs/stm3220g-eval/nsh/defconfig +++ b/configs/stm3220g-eval/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/stm3220g-eval/nsh2/defconfig b/configs/stm3220g-eval/nsh2/defconfig index 92c0df11e1a..0d7255a4b72 100644 --- a/configs/stm3220g-eval/nsh2/defconfig +++ b/configs/stm3220g-eval/nsh2/defconfig @@ -1,5 +1,5 @@ # CONFIG_DEV_CONSOLE is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CONSOLE is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/stm3220g-eval/nxwm/defconfig b/configs/stm3220g-eval/nxwm/defconfig index 803e2d6c43b..1bfe7f85415 100644 --- a/configs/stm3220g-eval/nxwm/defconfig +++ b/configs/stm3220g-eval/nxwm/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/stm3240g-eval/nsh2/defconfig b/configs/stm3240g-eval/nsh2/defconfig index 23a3aea1a87..692234b06e5 100644 --- a/configs/stm3240g-eval/nsh2/defconfig +++ b/configs/stm3240g-eval/nsh2/defconfig @@ -1,6 +1,6 @@ # CONFIG_ARCH_FPU is not set # CONFIG_DEV_CONSOLE is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_CONSOLE is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set diff --git a/configs/ubw32/nsh/defconfig b/configs/ubw32/nsh/defconfig index 1e72cdf3423..f462066f626 100644 --- a/configs/ubw32/nsh/defconfig +++ b/configs/ubw32/nsh/defconfig @@ -1,5 +1,5 @@ # CONFIG_ARCH_RAMFUNCS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_DISABLE_IFCONFIG is not set # CONFIG_NSH_DISABLE_PS is not set diff --git a/configs/viewtool-stm32f107/README.txt b/configs/viewtool-stm32f107/README.txt index 09c5248bd40..3bb13a31662 100644 --- a/configs/viewtool-stm32f107/README.txt +++ b/configs/viewtool-stm32f107/README.txt @@ -276,7 +276,7 @@ microSD Card Interface Device Drivers -> MMC/SD Driver Support CONFIG_MMCSD=y : Enable MMC/SD support CONFIG_MMSCD_NSLOTS=1 : One slot per driver instance - CONFIG_MMCSD_HAVECARDDETECT=y : Supports card-detect PIOs + CONFIG_MMCSD_HAVE_CARDDETECT=y : Supports card-detect PIOs CONFIG_MMCSD_MMCSUPPORT=n : Interferes with some SD cards CONFIG_MMCSD_SPI=n : No SPI-based MMC/SD support CONFIG_MMCSD_SDIO=y : SDIO-based MMC/SD support diff --git a/configs/zkit-arm-1769/nsh/defconfig b/configs/zkit-arm-1769/nsh/defconfig index 3dcfabe078c..b6157e5acbd 100644 --- a/configs/zkit-arm-1769/nsh/defconfig +++ b/configs/zkit-arm-1769/nsh/defconfig @@ -1,4 +1,4 @@ -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_DF_H is not set diff --git a/configs/zkit-arm-1769/nxhello/defconfig b/configs/zkit-arm-1769/nxhello/defconfig index 2ab4c5a1761..732573cceb5 100644 --- a/configs/zkit-arm-1769/nxhello/defconfig +++ b/configs/zkit-arm-1769/nxhello/defconfig @@ -1,5 +1,5 @@ # CONFIG_EXAMPLES_NXHELLO_DEFAULT_COLORS is not set -# CONFIG_MMCSD_HAVECARDDETECT is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_MMCSUPPORT is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set diff --git a/drivers/mmcsd/Kconfig b/drivers/mmcsd/Kconfig index 4d4485e0d40..74a11d0b027 100755 --- a/drivers/mmcsd/Kconfig +++ b/drivers/mmcsd/Kconfig @@ -31,12 +31,17 @@ config MMCSD_MMCSUPPORT ---help--- Enable support for MMC cards -config MMCSD_HAVECARDDETECT - bool "MMC/SD card detection" +config MMCSD_HAVE_CARDDETECT + bool "MMC/SD card detect pin" default y ---help--- - SDIO driver card detection is - 100% accurate + SDIO driver card present detection is supported. + +config MMCSD_HAVE_WRITEPROTECT + bool "MMC/SD write protect pin" + default y + ---help--- + SDIO driver write protection detection is supported. config MMCSD_SPI bool "MMC/SD SPI transfer support" diff --git a/drivers/mmcsd/mmcsd_sdio.c b/drivers/mmcsd/mmcsd_sdio.c index b1b87c27e35..3d890287010 100644 --- a/drivers/mmcsd/mmcsd_sdio.c +++ b/drivers/mmcsd/mmcsd_sdio.c @@ -3011,7 +3011,7 @@ static int mmcsd_probe(FAR struct mmcsd_state_s *priv) * else */ -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT if (priv->probed && SDIO_PRESENT(priv->dev)) { return OK; @@ -3038,7 +3038,7 @@ static int mmcsd_probe(FAR struct mmcsd_state_s *priv) if (ret != OK) { ferr("ERROR: Failed to initialize card: %d\n", ret); -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT SDIO_CALLBACKENABLE(priv->dev, SDIOMEDIA_INSERTED); #endif } @@ -3075,7 +3075,7 @@ static int mmcsd_probe(FAR struct mmcsd_state_s *priv) finfo("Capacity: %lu Kbytes\n", (unsigned long)(priv->capacity / 1024)); priv->mediachanged = true; -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT /* Set up to receive asynchronous, media removal events */ SDIO_CALLBACKENABLE(priv->dev, SDIOMEDIA_EJECTED); @@ -3096,7 +3096,7 @@ static int mmcsd_probe(FAR struct mmcsd_state_s *priv) /* There is no card in the slot */ finfo("No card\n"); -#ifdef CONFIG_MMCSD_HAVECARDDETECT +#ifdef CONFIG_MMCSD_HAVE_CARDDETECT SDIO_CALLBACKENABLE(priv->dev, SDIOMEDIA_INSERTED); #endif ret = -ENODEV;