stm32h7 sdmmc: added missing sdio_set_sdio_card_isr() function to initialize SDIO in-band interrupt logic

This commit is contained in:
Alexander Lunev 2021-11-01 04:31:04 +03:00 committed by Xiang Xiao
parent b58379b738
commit 33d236121f
2 changed files with 65 additions and 0 deletions

View File

@ -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 */

View File

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