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 <alexanderlu...@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) }