summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-10-15 22:52:42 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-10-15 22:52:42 +0000
commitf5b780c8e6be1e08df0e48d011d8ebe9a82e97e0 (patch)
tree8e41b15dcb0671329fd7b4153d4dc40eb631866f
parentec1e792ec8f6506571e9003b84992c4682004eb2 (diff)
downloadnuttx-f5b780c8e6be1e08df0e48d011d8ebe9a82e97e0.tar.gz
nuttx-f5b780c8e6be1e08df0e48d011d8ebe9a82e97e0.tar.bz2
nuttx-f5b780c8e6be1e08df0e48d011d8ebe9a82e97e0.zip
Need to clear mediachanged indication after it is sampled
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1049 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/drivers/mmcsd/mmcsd_spi.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/nuttx/drivers/mmcsd/mmcsd_spi.c b/nuttx/drivers/mmcsd/mmcsd_spi.c
index 537540536..2ca69bb05 100644
--- a/nuttx/drivers/mmcsd/mmcsd_spi.c
+++ b/nuttx/drivers/mmcsd/mmcsd_spi.c
@@ -1040,10 +1040,9 @@ static int mmcsd_geometry(FAR struct inode *inode, struct geometry *geometry)
mmcsd_semtake(&slot->sem);
ret = mmcsd_getcsd(slot, csd);
- mmcsd_semgive(&slot->sem);
-
if (ret < 0)
{
+ mmcsd_semgive(&slot->sem);
fdbg("mmcsd_getcsd returned %d\n", ret);
return ret;
}
@@ -1067,11 +1066,19 @@ static int mmcsd_geometry(FAR struct inode *inode, struct geometry *geometry)
geometry->geo_nsectors = slot->nsectors;
geometry->geo_sectorsize = slot->sectorsize;
+ /* After reporting mediachanged, clear the indication so that it is not
+ * reported again.
+ */
+
+ slot->state &= ~MMCSD_SLOTSTATUS_MEDIACHGD;
+ mmcsd_semgive(&slot->sem);
+
fvdbg("geo_available: %d\n", geometry->geo_available);
fvdbg("geo_mediachanged: %d\n", geometry->geo_mediachanged);
fvdbg("geo_writeenabled: %d\n", geometry->geo_writeenabled);
fvdbg("geo_nsectors: %d\n", geometry->geo_nsectors);
fvdbg("geo_sectorsize: %d\n", geometry->geo_sectorsize);
+
return OK;
}