Messages in this thread Patch in this message | | | Date | Tue, 2 Dec 2008 22:16:50 +0530 | Subject | Re: [patch 1/8] SDHCI: Add timeout hooks | From | smohideen@mx2 ... |
| |
On Tue, Dec 02, 2008 at 03:40:19PM +0000, Ben Dooks wrote: > Some controllers do not provide clock information in their > capabilities (in the Samsung case, it is because there are > multiple clock sources available to the controller). Add hooks > to allow the system to supply clock information. > > Signed-off-by: Ben Dooks <ben-linux@fluff.org> > > Index: linux.git/drivers/mmc/host/sdhci.c > =================================================================== > --- linux.git.orig/drivers/mmc/host/sdhci.c 2008-12-01 19:11:54.000000000 +0000 > +++ linux.git/drivers/mmc/host/sdhci.c 2008-12-01 19:24:14.000000000 +0000 > @@ -1606,18 +1606,26 @@ int sdhci_add_host(struct sdhci_host *ho > > host->max_clk = > (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; > + host->max_clk *= 1000000; > if (host->max_clk == 0) { > - printk(KERN_ERR "%s: Hardware doesn't specify base clock " > - "frequency.\n", mmc_hostname(mmc)); > + if (host->ops->get_max_clock) > + host->max_clk = host->ops->get_max_clock(host); > + else > + printk(KERN_ERR > + "%s: Hardware doesn't specify base clock " > + "frequency.\n", mmc_hostname(mmc)); > return -ENODEV; > } > - host->max_clk *= 1000000; > > host->timeout_clk = > (caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT; > if (host->timeout_clk == 0) { > - printk(KERN_ERR "%s: Hardware doesn't specify timeout clock " > - "frequency.\n", mmc_hostname(mmc)); > + if (host->ops->get_timeout_clock) > + host->timeout_clk = host->ops->get_timeout_clock(host); > + else > + printk(KERN_ERR > + "%s: Hardware doesn't specify timeout clock " > + "frequency.\n", mmc_hostname(mmc)); > return -ENODEV; > } > if (caps & SDHCI_TIMEOUT_CLK_UNIT) > Index: linux.git/drivers/mmc/host/sdhci.h > =================================================================== > --- linux.git.orig/drivers/mmc/host/sdhci.h 2008-12-01 19:11:54.000000000 +0000 > +++ linux.git/drivers/mmc/host/sdhci.h 2008-12-01 19:17:55.000000000 +0000 > @@ -267,6 +267,8 @@ struct sdhci_host { > > struct sdhci_ops { > int (*enable_dma)(struct sdhci_host *host); > + unsigned int (*get_max_clock)(struct sdhci_host *host); > + unsigned int (*get_timeout_clock)(struct sdhci_host *host); > }; >
Can we cache the multiple dereferences. Here host->ops can be saved to a local, instead of multiple dereference several time.
| |