From 867d3c471cffb7cdee09b3361102b4e234473417 Mon Sep 17 00:00:00 2001 From: patacongo Date: Wed, 15 Oct 2008 22:52:42 +0000 Subject: [PATCH] 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 --- drivers/mmcsd/mmcsd_spi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/mmcsd/mmcsd_spi.c b/drivers/mmcsd/mmcsd_spi.c index 53754053693..2ca69bb05b2 100644 --- a/drivers/mmcsd/mmcsd_spi.c +++ b/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; }