You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/11/01 03:26:25 UTC
[incubator-nuttx] branch master updated: stm32h7 sdmmc: added
missing sdio_set_sdio_card_isr() function to initialize SDIO in-band
interrupt logic
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 33d2361 stm32h7 sdmmc: added missing sdio_set_sdio_card_isr() function to initialize SDIO in-band interrupt logic
33d2361 is described below
commit 33d236121f755e21444f8c9193771ed2849b9fc6
Author: Alexander Lunev <al...@mail.ru>
AuthorDate: Mon Nov 1 04:31:04 2021 +0300
stm32h7 sdmmc: added missing sdio_set_sdio_card_isr() function to initialize SDIO in-band interrupt logic
---
arch/arm/src/stm32h7/stm32_sdmmc.c | 44 ++++++++++++++++++++++++++++++++++++++
arch/arm/src/stm32h7/stm32_sdmmc.h | 21 ++++++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/arch/arm/src/stm32h7/stm32_sdmmc.c b/arch/arm/src/stm32h7/stm32_sdmmc.c
index 09c65cf..40b52e3 100644
--- a/arch/arm/src/stm32h7/stm32_sdmmc.c
+++ b/arch/arm/src/stm32h7/stm32_sdmmc.c
@@ -1981,6 +1981,10 @@ static void stm32_reset(FAR struct sdio_dev_s *dev)
priv->remaining = 0; /* Number of bytes remaining in the transfer */
priv->xfrmask = 0; /* Interrupt enables for data transfer */
+#ifdef HAVE_SDMMC_SDIO_MODE
+ priv->sdiointmask = 0; /* SDIO card in-band interrupt mask */
+#endif
+
priv->widebus = false;
/* Configure the SDIO peripheral */
@@ -3623,4 +3627,44 @@ void sdio_wrprotect(FAR struct sdio_dev_s *dev, bool wrprotect)
mcinfo("cdstatus: %02" PRIx8 "\n", priv->cdstatus);
leave_critical_section(flags);
}
+
+/****************************************************************************
+ * Name: sdio_set_sdio_card_isr
+ *
+ * Description:
+ * SDIO card generates interrupt via SDIO_DATA_1 pin.
+ * Called by board-specific logic to register an ISR for SDIO card.
+ *
+ * Input Parameters:
+ * func - callback function.
+ * arg - arg to be passed to the function.
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef HAVE_SDMMC_SDIO_MODE
+void sdio_set_sdio_card_isr(FAR struct sdio_dev_s *dev,
+ int (*func)(void *), void *arg)
+{
+ struct stm32_dev_s *priv = (struct stm32_dev_s *)dev;
+
+ priv->do_sdio_card = func;
+
+ if (func != NULL)
+ {
+ priv->sdiointmask = STM32_SDMMC_MASK_SDIOITIE;
+ priv->do_sdio_arg = arg;
+ }
+ else
+ {
+ priv->sdiointmask = 0;
+ }
+
+ sdmmc_putreg32(priv, priv->xfrmask | priv->waitmask | priv->sdiointmask,
+ STM32_SDMMC_MASK_OFFSET);
+}
+#endif
+
#endif /* CONFIG_STM32H7_SDMMC1 || CONFIG_STM32H7_SDMMC2 */
diff --git a/arch/arm/src/stm32h7/stm32_sdmmc.h b/arch/arm/src/stm32h7/stm32_sdmmc.h
index 68cd0ce..2d4bbf3 100644
--- a/arch/arm/src/stm32h7/stm32_sdmmc.h
+++ b/arch/arm/src/stm32h7/stm32_sdmmc.h
@@ -104,6 +104,27 @@ void sdio_mediachange(FAR struct sdio_dev_s *dev, bool cardinslot);
void sdio_wrprotect(FAR struct sdio_dev_s *dev, bool wrprotect);
+/****************************************************************************
+ * Name: sdio_set_sdio_card_isr
+ *
+ * Description:
+ * SDIO card generates interrupt via SDIO_DATA_1 pin.
+ * Called by board-specific logic to register an ISR for SDIO card.
+ *
+ * Input Parameters:
+ * func - callback function.
+ * arg - arg to be passed to the function.
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_SDMMC1_SDIO_MODE) || defined(CONFIG_SDMMC2_SDIO_MODE)
+void sdio_set_sdio_card_isr(FAR struct sdio_dev_s *dev,
+ int (*func)(void *), void *arg);
+#endif
+
#undef EXTERN
#if defined(__cplusplus)
}