From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ben Dooks <ben@fluff.org>,
sdhci-devel@lists.ossman.eu, linux-kernel@vger.kernel.org,
linuxppc-dev@ozlabs.org, Pierre Ossman <pierre@ossman.eu>,
David Vrabel <david.vrabel@csr.com>
Subject: [PATCH 6/7] sdhci-of: Cleanup eSDHC's set_clock() a little bit
Date: Fri, 7 Aug 2009 23:58:13 +0400 [thread overview]
Message-ID: <20090807195813.GF2735@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090807195724.GA24020@oksana.dev.rtsoft.ru>
- Get rid of incomprehensible "if { for { if } }" construction for the
exponential divisor calculation. The first if statement isn't correct
at all, since it should check for "host->max_clk / pre_div / 16 >
clock". The error doesn't cause any bugs because the check in the for
loop does the right thing, and so the outer check becomes useless;
- For the linear divisor do the same: a single while statement is more
readable than for + if construction;
- Add dev_dbg() that prints desired and actual clock frequency.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/mmc/host/sdhci-of.c | 19 ++++++++-----------
1 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/drivers/mmc/host/sdhci-of.c b/drivers/mmc/host/sdhci-of.c
index 87aaf4b..048bc01 100644
--- a/drivers/mmc/host/sdhci-of.c
+++ b/drivers/mmc/host/sdhci-of.c
@@ -121,8 +121,8 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg)
static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
{
- int div;
int pre_div = 2;
+ int div = 1;
clrbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
@@ -130,17 +130,14 @@ static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
if (clock == 0)
goto out;
- if (host->max_clk / 16 > clock) {
- for (; pre_div < 256; pre_div *= 2) {
- if (host->max_clk / pre_div < clock * 16)
- break;
- }
- }
+ while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
+ pre_div *= 2;
- for (div = 1; div <= 16; div++) {
- if (host->max_clk / (div * pre_div) <= clock)
- break;
- }
+ while (host->max_clk / pre_div / div > clock && div < 16)
+ div++;
+
+ dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
+ clock, host->max_clk / pre_div / div);
pre_div >>= 1;
div--;
--
1.6.3.3
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Pierre Ossman <pierre@ossman.eu>,
Kumar Gala <galak@kernel.crashing.org>,
David Vrabel <david.vrabel@csr.com>, Ben Dooks <ben@fluff.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
linux-kernel@vger.kernel.org, sdhci-devel@lists.ossman.eu,
linuxppc-dev@ozlabs.org
Subject: [PATCH 6/7] sdhci-of: Cleanup eSDHC's set_clock() a little bit
Date: Fri, 7 Aug 2009 23:58:13 +0400 [thread overview]
Message-ID: <20090807195813.GF2735@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20090807195724.GA24020@oksana.dev.rtsoft.ru>
- Get rid of incomprehensible "if { for { if } }" construction for the
exponential divisor calculation. The first if statement isn't correct
at all, since it should check for "host->max_clk / pre_div / 16 >
clock". The error doesn't cause any bugs because the check in the for
loop does the right thing, and so the outer check becomes useless;
- For the linear divisor do the same: a single while statement is more
readable than for + if construction;
- Add dev_dbg() that prints desired and actual clock frequency.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
drivers/mmc/host/sdhci-of.c | 19 ++++++++-----------
1 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/drivers/mmc/host/sdhci-of.c b/drivers/mmc/host/sdhci-of.c
index 87aaf4b..048bc01 100644
--- a/drivers/mmc/host/sdhci-of.c
+++ b/drivers/mmc/host/sdhci-of.c
@@ -121,8 +121,8 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg)
static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
{
- int div;
int pre_div = 2;
+ int div = 1;
clrbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
@@ -130,17 +130,14 @@ static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
if (clock == 0)
goto out;
- if (host->max_clk / 16 > clock) {
- for (; pre_div < 256; pre_div *= 2) {
- if (host->max_clk / pre_div < clock * 16)
- break;
- }
- }
+ while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
+ pre_div *= 2;
- for (div = 1; div <= 16; div++) {
- if (host->max_clk / (div * pre_div) <= clock)
- break;
- }
+ while (host->max_clk / pre_div / div > clock && div < 16)
+ div++;
+
+ dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
+ clock, host->max_clk / pre_div / div);
pre_div >>= 1;
div--;
--
1.6.3.3
next prev parent reply other threads:[~2009-08-07 19:58 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-07 19:57 [PATCH v2 0/7] sdhci-of: Some fixes for high-speed and 4-bit SD cards Anton Vorontsov
2009-08-07 19:57 ` Anton Vorontsov
2009-08-07 19:58 ` [PATCH 1/7] sdhci-of: Fix SD clock calculation Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-07 19:58 ` [PATCH 2/7] sdhci-of: Avoid writing reserved bits into host control register Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-07 19:58 ` [PATCH 3/7] sdhci-of: Fix high-speed cards recognition Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-07 19:58 ` [PATCH 4/7] powerpc: Introduce and document sdhci,wp-inverted property for eSDHC Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-07 19:58 ` [PATCH 5/7] sdhci-of: Don't hard-code inverted write-protect quirk Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov [this message]
2009-08-07 19:58 ` [PATCH 6/7] sdhci-of: Cleanup eSDHC's set_clock() a little bit Anton Vorontsov
2009-08-07 19:58 ` [PATCH 7/7] powerpc/85xx: Add eSDHC support for MPC8536DS boards Anton Vorontsov
2009-08-07 19:58 ` Anton Vorontsov
2009-08-11 13:48 ` Kumar Gala
2009-08-11 13:48 ` Kumar Gala
2009-08-18 23:38 ` [PATCH v2] " Anton Vorontsov
2009-08-18 23:38 ` Anton Vorontsov
2009-08-19 1:24 ` Kumar Gala
2009-08-19 1:24 ` Kumar Gala
2009-08-19 1:51 ` Anton Vorontsov
2009-08-19 1:51 ` Anton Vorontsov
2009-08-28 11:02 ` Hu Mingkai-B21284
2009-08-28 11:02 ` Hu Mingkai-B21284
2009-08-28 15:19 ` Anton Vorontsov
2009-08-28 15:19 ` Anton Vorontsov
2009-08-31 7:51 ` Hu Mingkai-B21284
2009-08-31 7:51 ` Hu Mingkai-B21284
2009-08-25 14:44 ` Kumar Gala
2009-08-25 14:44 ` Kumar Gala
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090807195813.GF2735@oksana.dev.rtsoft.ru \
--to=avorontsov@ru.mvista.com \
--cc=akpm@linux-foundation.org \
--cc=ben@fluff.org \
--cc=david.vrabel@csr.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=pierre@ossman.eu \
--cc=sdhci-devel@lists.ossman.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.