summaryrefslogtreecommitdiffstats
path: root/drivers/mci/imx.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-10-04 15:24:27 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-10-04 15:24:57 +0200
commit94de405d8f56aa66283d7497c707380762440601 (patch)
treeef6618eb4604ff3cbc69af90d9ec6feb4db5e771 /drivers/mci/imx.c
parentddba7e606bc7a6b3715d6c123c0a9b708a6b8776 (diff)
parentd4edd480b2ab0754361b142e307796405310d34b (diff)
downloadbarebox-94de405d8f56aa66283d7497c707380762440601.tar.gz
barebox-94de405d8f56aa66283d7497c707380762440601.tar.xz
Merge branch 'for-next/imx-clk'
Diffstat (limited to 'drivers/mci/imx.c')
-rw-r--r--drivers/mci/imx.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/mci/imx.c b/drivers/mci/imx.c
index 8a6547d87b..072ca93794 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);