summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-11-27 13:05:02 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-11-27 13:05:02 +0000
commit275154249a7026000e98102dce03e66481a6176f (patch)
treee92754d1de464d39f39191fc58c41e46836e9b3d
parentca1f8ac53e4af7c72a36f294fb720a3f63cac34d (diff)
downloadnuttx-275154249a7026000e98102dce03e66481a6176f.tar.gz
nuttx-275154249a7026000e98102dce03e66481a6176f.tar.bz2
nuttx-275154249a7026000e98102dce03e66481a6176f.zip
Need a cancel method to stop DMA
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2280 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/drivers/mmcsd/mmcsd_sdio.c3
-rwxr-xr-xnuttx/include/nuttx/sdio.h20
2 files changed, 23 insertions, 0 deletions
diff --git a/nuttx/drivers/mmcsd/mmcsd_sdio.c b/nuttx/drivers/mmcsd/mmcsd_sdio.c
index a0db7d76c..9601bdc0f 100644
--- a/nuttx/drivers/mmcsd/mmcsd_sdio.c
+++ b/nuttx/drivers/mmcsd/mmcsd_sdio.c
@@ -459,6 +459,7 @@ static int mmcsd_getSCR(FAR struct mmcsd_state_s *priv, uint32 scr[2])
if (ret != OK)
{
fdbg("ERROR: RECVR1 for ACMD51 failed: %d\n", ret);
+ SDIO_CANCEL(priv->dev);
return ret;
}
@@ -1254,6 +1255,7 @@ static ssize_t mmcsd_readsingle(FAR struct mmcsd_state_s *priv,
if (ret != OK)
{
fdbg("ERROR: mmcsd_recvR1 for CMD17 failed: %d\n", ret);
+ SDIO_CANCEL(priv->dev);
return ret;
}
@@ -1359,6 +1361,7 @@ static ssize_t mmcsd_readmultiple(FAR struct mmcsd_state_s *priv,
if (ret != OK)
{
fdbg("ERROR: mmcsd_recvR1 for CMD18 failed: %d\n", ret);
+ SDIO_CANCEL(priv->dev);
return ret;
}
diff --git a/nuttx/include/nuttx/sdio.h b/nuttx/include/nuttx/sdio.h
index 92a059abc..7733624d0 100755
--- a/nuttx/include/nuttx/sdio.h
+++ b/nuttx/include/nuttx/sdio.h
@@ -445,6 +445,25 @@
#define SDIO_SENDSETUP(dev,buffer,nbytes) ((dev)->sendsetup(dev,buffer,nbytes))
/****************************************************************************
+ * Name: SDIO_CANCEL
+ *
+ * Description:
+ * Cancel the data transfer setup of SDIO_RECVSETUP, SDIO_SENDSETUP,
+ * SDIO_DMARECVSETUP or SDIO_DMASENDSETUP. This must be called to cancel
+ * the data transfer setup if, for some reason, you cannot perform the
+ * transfer.
+ *
+ * Input Parameters:
+ * dev - An instance of the SDIO device interface
+ *
+ * Returned Value:
+ * OK is success; a negated errno on failure
+ *
+ ****************************************************************************/
+
+#define SDIO_CANCEL(dev) ((dev)->cancel(dev))
+
+/****************************************************************************
* Name: SDIO_WAITRESPONSE
*
* Description:
@@ -708,6 +727,7 @@ struct sdio_dev_s
size_t nbytes);
int (*sendsetup)(FAR struct sdio_dev_s *dev, FAR const ubyte *buffer,
size_t nbytes);
+ int (*cancel)(FAR struct sdio_dev_s *dev);
int (*waitresponse)(FAR struct sdio_dev_s *dev, uint32 cmd);
int (*recvR1)(FAR struct sdio_dev_s *dev, uint32 cmd, uint32 *R1);