[PATCH 08/14] atmel_mci: rwproof is only needed since IP version 0x200

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Fri Jan 25 10:17:41 EST 2013


Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
---
 drivers/mci/atmel_mci.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/mci/atmel_mci.c b/drivers/mci/atmel_mci.c
index d5fdd1d..bf0adb0 100644
--- a/drivers/mci/atmel_mci.c
+++ b/drivers/mci/atmel_mci.c
@@ -28,6 +28,7 @@
 #include "atmel-mci-regs.h"
 
 struct atmel_mci_caps {
+	bool    has_rwproof;
 	bool	has_odd_clk_div;
 };
 
@@ -94,7 +95,13 @@ static void atmci_set_clk_rate(struct atmel_mci *host,
 	dev_dbg(host->hw_dev, "atmel_set_clk_rate: clkIn=%ld clkIos=%d divider=%d\n",
 		host->bus_hz, clock_min, clkdiv);
 
-	host->mode_reg |= ATMCI_MR_RDPROOF | ATMCI_MR_WRPROOF;
+	/*
+	 * WRPROOF and RDPROOF prevent overruns/underruns by
+	 * stopping the clock when the FIFO is full/empty.
+	 * This state is not expected to last for long.
+	 */
+	if (host->caps.has_rwproof)
+		host->mode_reg |= ATMCI_MR_RDPROOF | ATMCI_MR_WRPROOF;
 
 	atmci_writel(host, ATMCI_MR, host->mode_reg);
 }
@@ -470,6 +477,7 @@ static void atmci_get_cap(struct atmel_mci *host)
 	case 0x400:
 	case 0x300:
 	case 0x200:
+		host->caps.has_rwproof = 1;
 	case 0x100:
 	case 0x0:
 		break;
-- 
1.7.10.4




More information about the barebox mailing list