On Mon, Aug 16, 2010 at 05:07:15PM +0100, David Vrabel wrote:
> zhangfei gao wrote:
> >
> > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> > index 913555e..32dcac9 100644
> > --- a/drivers/mmc/host/sdhci.c
> > +++ b/drivers/mmc/host/sdhci.c
> [...]
> > @@ -1001,13 +1001,23 @@ static void sdhci_set_clock(struct sdhci_host
> > *host, unsigned int clock)
> > if (clock == 0)
> > goto out;
> >
> > - for (div = 1;div < 256;div *= 2) {
> > - if ((host->max_clk / div) <= clock)
> > - break;
> > + if (host->version >= SDHCI_SPEC_300)
> > + max_div = 2046;
> > + else
> > + max_div = 256;
> > +
> > + if(host->max_clk <= clock)
> > + div = 1;
> > + else {
> > + for (div = 2; div < max_div; div += 2) {
> > + if ((host->max_clk / div) <= clock)
> > + break;
> > + }
>
> This isn't correct. The divisor must be a power of two for 2.00
> controllers.
Sorry, I did mean to reply to this sooner but I've been travelling. Yeah
David, you're right. Zhangfei, have you confused the Programmable Clock
Mode in the 3.00 spec here with 10-bit Divided Clock Mode?
Both 8-bit Divided Clock Mode and 10-bit Divided Clock Mode require the
divisor to be a power of two. Support for Programmable Clock Mode would
require a bit more work because not all clock multiplier values are
valid. Support for that should be done as a separate patch.
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html