From 1ae88ebc04851174eae446506f09463b5656ebdd Mon Sep 17 00:00:00 2001
From: gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>
Date: Thu, 10 May 2012 17:32:30 +0000
Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4184
 35acf78f-673a-0410-8e92-d51de3d6d3f4

---
 os/hal/platforms/STM32/sdc_lld.c | 18 ++++++++++++++++++
 os/hal/platforms/STM32/sdc_lld.h |  1 +
 os/hal/src/sdc.c                 |  6 +++---
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/os/hal/platforms/STM32/sdc_lld.c b/os/hal/platforms/STM32/sdc_lld.c
index ebed7cfa2..854a1b1e8 100644
--- a/os/hal/platforms/STM32/sdc_lld.c
+++ b/os/hal/platforms/STM32/sdc_lld.c
@@ -775,6 +775,24 @@ bool_t sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
   return sdc_lld_write_aligned(sdcp, startblk, buf, n);
 }
 
+/**
+ * @brief   Waits for card idle condition.
+ *
+ * @param[in] sdcp      pointer to the @p SDCDriver object
+ *
+ * @return              The operation status.
+ * @retval CH_SUCCESS   the operation succeeded.
+ * @retval CH_FAILED    the operation failed.
+ *
+ * @api
+ */
+bool_t sdc_lld_sync(SDCDriver *sdcp) {
+
+  /* TODO: Implement.*/
+  (void)sdcp;
+  return CH_SUCCESS;
+}
+
 #endif /* HAL_USE_SDC */
 
 /** @} */
diff --git a/os/hal/platforms/STM32/sdc_lld.h b/os/hal/platforms/STM32/sdc_lld.h
index b89ad2586..292688e40 100644
--- a/os/hal/platforms/STM32/sdc_lld.h
+++ b/os/hal/platforms/STM32/sdc_lld.h
@@ -314,6 +314,7 @@ extern "C" {
                       uint8_t *buf, uint32_t n);
   bool_t sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
                        const uint8_t *buf, uint32_t n);
+  bool_t sdc_lld_sync(SDCDriver *sdcp);
   bool_t sdc_lld_is_card_inserted(SDCDriver *sdcp);
   bool_t sdc_lld_is_write_protected(SDCDriver *sdcp);
 #ifdef __cplusplus
diff --git a/os/hal/src/sdc.c b/os/hal/src/sdc.c
index 7722a0eb7..653819bb3 100644
--- a/os/hal/src/sdc.c
+++ b/os/hal/src/sdc.c
@@ -443,8 +443,10 @@ sdcflags_t sdcGetAndClearErrors(SDCDriver *sdcp) {
 
   chDbgCheck(sdcp != NULL, "sdcGetAndClearErrors");
 
+  chSysLock();
   sdcflags_t flags = sdcp->errors;
   sdcp->errors = SDC_NO_ERROR;
+  chSysUnlock();
   return flags;
 }
 
@@ -470,9 +472,7 @@ bool_t sdcSync(SDCDriver *sdcp) {
   }
   chSysUnlock();
 
-  /* TODO: implement.*/
-
-  return CH_SUCCESS;
+  return sdc_lld_sync(sdcp);
 }
 
 /**
-- 
cgit v1.2.3