From 7876323cebe4f65a68d08b6d7ae67bf0b17d2f04 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Tue, 29 Apr 2008 09:34:07 +0100 Subject: [PATCH] --- yaml --- r: 96357 b: refs/heads/master c: c8df9a53e8d16877fc0b268b002af2a47a14643a h: refs/heads/master i: 96355: ab09c8a962397918f0ad827a65aac28c8be2fa54 v: v3 --- [refs] | 2 +- trunk/drivers/mmc/host/mmci.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index cbbb0e838430..60ad0ea580bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f8b6389bd53361a19ec5236e298527c9c905ca4d +refs/heads/master: c8df9a53e8d16877fc0b268b002af2a47a14643a diff --git a/trunk/drivers/mmc/host/mmci.c b/trunk/drivers/mmc/host/mmci.c index 626ac083f4e0..da5fecad74d9 100644 --- a/trunk/drivers/mmc/host/mmci.c +++ b/trunk/drivers/mmc/host/mmci.c @@ -425,7 +425,7 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) host->cclk = host->mclk; } else { clk = host->mclk / (2 * ios->clock) - 1; - if (clk > 256) + if (clk >= 256) clk = 255; host->cclk = host->mclk / (2 * (clk + 1)); } @@ -512,6 +512,18 @@ static int mmci_probe(struct amba_device *dev, void *id) host->plat = plat; host->mclk = clk_get_rate(host->clk); + /* + * According to the spec, mclk is max 100 MHz, + * so we try to adjust the clock down to this, + * (if possible). + */ + if (host->mclk > 100000000) { + ret = clk_set_rate(host->clk, 100000000); + if (ret < 0) + goto clk_disable; + host->mclk = clk_get_rate(host->clk); + DBG(host, "eventual mclk rate: %u Hz\n", host->mclk); + } host->mmc = mmc; host->base = ioremap(dev->res.start, SZ_4K); if (!host->base) {