[PATCH 19/23] mci i.MX: Switch to clock support

Sascha Hauer s.hauer at pengutronix.de
Mon Sep 24 07:04:48 EDT 2012


Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 drivers/mci/imx.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/mci/imx.c b/drivers/mci/imx.c
index 0e4fa66..035a3aa 100644
--- a/drivers/mci/imx.c
+++ b/drivers/mci/imx.c
@@ -25,6 +25,8 @@
 #include <clock.h>
 #include <init.h>
 #include <driver.h>
+#include <linux/clk.h>
+#include <linux/err.h>
 #include <mach/clock.h>
 #include <io.h>
 
@@ -103,6 +105,7 @@ struct mxcmci_regs {
 struct mxcmci_host {
 	struct mci_host		mci;
 	struct mxcmci_regs	*base;
+	struct clk		*clk;
 	int			irq;
 	int			detect_irq;
 	int			dma;
@@ -415,7 +418,7 @@ static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios)
 {
 	unsigned int divider;
 	int prescaler = 0;
-	unsigned long clk_in = imx_get_mmcclk();
+	unsigned long clk_in = clk_get_rate(host->clk);
 
 	while (prescaler <= 0x800) {
 		for (divider = 1; divider <= 0xF; divider++) {
@@ -490,9 +493,14 @@ static int mxcmci_init(struct mci_host *mci, struct device_d *dev)
 static int mxcmci_probe(struct device_d *dev)
 {
 	struct mxcmci_host *host;
+	unsigned long rate;
 
 	host = xzalloc(sizeof(*host));
 
+	host->clk = clk_get(dev, NULL);
+	if (IS_ERR(host->clk))
+		return PTR_ERR(host->clk);
+
 	host->mci.send_cmd = mxcmci_request;
 	host->mci.set_ios = mxcmci_set_ios;
 	host->mci.init = mxcmci_init;
@@ -503,8 +511,9 @@ static int mxcmci_probe(struct device_d *dev)
 
 	host->mci.voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
 
-	host->mci.f_min = imx_get_mmcclk() >> 7;
-	host->mci.f_max = imx_get_mmcclk() >> 1;
+	rate = clk_get_rate(host->clk);
+	host->mci.f_min = rate >> 7;
+	host->mci.f_max = rate >> 1;
 
 	mci_register(&host->mci);
 
-- 
1.7.10.4




More information about the barebox mailing list