Hi, On Thu, Jul 05 2012, Sebastian Hesselbarth wrote: > As mach-dove is moving towards common clock framework prepare > the sdhci driver to grab it's clock. > > Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@xxxxxxxxxxxxxx> > Cc: Chris Ball <cjb@xxxxxxxxxx> > Cc: Anton Vorontsov <cbouatmailru@xxxxxxxxx> > Cc: Shawn Guo <shawn.guo@xxxxxxxxxx> > Cc: Viresh Kumar <viresh.kumar@xxxxxx> > Cc: Manuel Lauss <manuel.lauss@xxxxxxxxxxxxxx> > Cc: linux-mmc@xxxxxxxxxxxxxxx > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > --- > drivers/mmc/host/sdhci-dove.c | 48 ++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 47 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c > index 9c85368..a6e53a1 100644 > --- a/drivers/mmc/host/sdhci-dove.c > +++ b/drivers/mmc/host/sdhci-dove.c > @@ -20,11 +20,17 @@ > */ > > #include <linux/io.h> > +#include <linux/clk.h> > +#include <linux/err.h> > #include <linux/module.h> > #include <linux/mmc/host.h> > > #include "sdhci-pltfm.h" > > +struct sdhci_dove_priv { > + struct clk *clk; > +}; > + > static u16 sdhci_dove_readw(struct sdhci_host *host, int reg) > { > u16 ret; > @@ -72,11 +78,51 @@ static struct sdhci_pltfm_data sdhci_dove_pdata = { > > static int __devinit sdhci_dove_probe(struct platform_device *pdev) > { > - return sdhci_pltfm_register(pdev, &sdhci_dove_pdata); > + struct sdhci_host *host; > + struct sdhci_pltfm_host *pltfm_host; > + struct sdhci_dove_priv *priv; > + int ret; > + > + ret = sdhci_pltfm_register(pdev, &sdhci_dove_pdata); > + if (ret) > + goto sdhci_dove_register_fail; > + > + priv = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_dove_priv), > + GFP_KERNEL); > + if (!priv) { > + dev_err(&pdev->dev, "unable to allocate private data"); > + ret = -ENOMEM; > + goto sdhci_dove_allocate_fail; > + } > + > + host = platform_get_drvdata(pdev); > + pltfm_host = sdhci_priv(host); > + pltfm_host->priv = priv; > + > + priv->clk = clk_get(&pdev->dev, NULL); > + if (!IS_ERR(priv->clk)) > + clk_prepare_enable(priv->clk); > + return 0; > + > +sdhci_dove_allocate_fail: > + sdhci_pltfm_unregister(pdev); > +sdhci_dove_register_fail: > + return ret; > } > > static int __devexit sdhci_dove_remove(struct platform_device *pdev) > { > + struct sdhci_host *host = platform_get_drvdata(pdev); > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_dove_priv *priv = pltfm_host->priv; > + > + if (priv->clk) { > + if (!IS_ERR(priv->clk)) { > + clk_disable_unprepare(priv->clk); > + clk_put(priv->clk); > + } > + devm_kfree(&pdev->dev, priv->clk); > + } > return sdhci_pltfm_unregister(pdev); > } Thanks, pushed to mmc-next for 3.6. - Chris. -- Chris Ball <cjb@xxxxxxxxxx> <http://printf.net/> One Laptop Per Child -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html