arch/arm/src/lkpc54xx: In SDMMC driver, fix an error which was clobbering the interrupt mask register (xfrmask). Also, add a kludge for the missing DTO interrupt.
This commit is contained in:
parent
eef12f1f91
commit
b26c70b11f
@ -677,7 +677,6 @@ static void lpc54_configwaitints(struct lpc54_dev_s *priv, uint32_t waitmask,
|
|||||||
priv->waitevents = waitevents;
|
priv->waitevents = waitevents;
|
||||||
priv->wkupevent = wkupevent;
|
priv->wkupevent = wkupevent;
|
||||||
priv->waitmask = waitmask;
|
priv->waitmask = waitmask;
|
||||||
priv->xfrmask = waitmask;
|
|
||||||
|
|
||||||
regval = priv->xfrmask | priv->waitmask | SDCARD_INT_CDET;
|
regval = priv->xfrmask | priv->waitmask | SDCARD_INT_CDET;
|
||||||
lpc54_putreg(regval, LPC54_SDMMC_INTMASK);
|
lpc54_putreg(regval, LPC54_SDMMC_INTMASK);
|
||||||
@ -959,6 +958,8 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg)
|
|||||||
uint32_t intmask = lpc54_getreg(LPC54_SDMMC_INTMASK);
|
uint32_t intmask = lpc54_getreg(LPC54_SDMMC_INTMASK);
|
||||||
intmask &= ~SDMMC_INT_TXDR;
|
intmask &= ~SDMMC_INT_TXDR;
|
||||||
lpc54_putreg(intmask, LPC54_SDMMC_INTMASK);
|
lpc54_putreg(intmask, LPC54_SDMMC_INTMASK);
|
||||||
|
|
||||||
|
priv->xfrmask &= ~SDMMC_INT_TXDR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((pending & SDMMC_INT_RXDR) != 0)
|
else if ((pending & SDMMC_INT_RXDR) != 0)
|
||||||
@ -987,9 +988,17 @@ static int lpc54_interrupt(int irq, void *context, FAR void *arg)
|
|||||||
|
|
||||||
if (priv->remaining <= 0)
|
if (priv->remaining <= 0)
|
||||||
{
|
{
|
||||||
|
#if 0 /* Kludge for missing DTO interrupt */
|
||||||
uint32_t intmask = lpc54_getreg(LPC54_SDMMC_INTMASK);
|
uint32_t intmask = lpc54_getreg(LPC54_SDMMC_INTMASK);
|
||||||
intmask &= ~SDMMC_INT_RXDR;
|
intmask &= ~SDMMC_INT_RXDR;
|
||||||
lpc54_putreg(intmask, LPC54_SDMMC_INTMASK);
|
lpc54_putreg(intmask, LPC54_SDMMC_INTMASK);
|
||||||
|
|
||||||
|
priv->xfrmask &= ~SDMMC_INT_TXDR;
|
||||||
|
#else
|
||||||
|
/* Force the DTO event */
|
||||||
|
|
||||||
|
pending |= SDMMC_INT_DTO;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2235,7 +2244,7 @@ static int lpc54_registercallback(FAR struct sdio_dev_s *dev,
|
|||||||
|
|
||||||
mcinfo("callback=%p arg=%p\n", callback, arg);
|
mcinfo("callback=%p arg=%p\n", callback, arg);
|
||||||
|
|
||||||
/* Disable callbacks and register this callback and is argument */
|
/* Disable callbacks and register this callback and its argument */
|
||||||
|
|
||||||
mcinfo("Register %p(%p)\n", callback, arg);
|
mcinfo("Register %p(%p)\n", callback, arg);
|
||||||
DEBUGASSERT(priv != NULL);
|
DEBUGASSERT(priv != NULL);
|
||||||
@ -2483,7 +2492,7 @@ static void lpc54_callback(void *arg)
|
|||||||
{
|
{
|
||||||
/* No... return without performing the callback */
|
/* No... return without performing the callback */
|
||||||
|
|
||||||
mcinfo("Media is not Inserted!\n");
|
mcinfo("Media inserted but callback not enabled\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2495,7 +2504,7 @@ static void lpc54_callback(void *arg)
|
|||||||
{
|
{
|
||||||
/* No... return without performing the callback */
|
/* No... return without performing the callback */
|
||||||
|
|
||||||
mcinfo("Media is not present\n");
|
mcinfo("Media removed but callback not enabled\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
/* Media events are used for enable/disable registered event callbacks */
|
/* Media events are used for enable/disable registered event callbacks */
|
||||||
|
|
||||||
#define SDIOMEDIA_EJECTED (1 << 0) /* Bit 0: Mmedia removed */
|
#define SDIOMEDIA_EJECTED (1 << 0) /* Bit 0: Media removed */
|
||||||
#define SDIOMEDIA_INSERTED (1 << 1) /* Bit 1: Media inserted */
|
#define SDIOMEDIA_INSERTED (1 << 1) /* Bit 1: Media inserted */
|
||||||
|
|
||||||
/* Commands are bit-encoded to provide as much information to the SDIO driver as
|
/* Commands are bit-encoded to provide as much information to the SDIO driver as
|
||||||
|
Loading…
Reference in New Issue
Block a user