mmc: sdhci-dove: use two-stage initialization for sdhci-pltfm
authorRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 22 Nov 2012 23:55:30 +0000 (23:55 +0000)
committerChris Ball <cjb@laptop.org>
Thu, 6 Dec 2012 18:55:14 +0000 (13:55 -0500)
We need to use the two-stage initialization for sdhci-pltfm if we're
going to do anything extra at initialization time.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/sdhci-dove.c

index 4233fd98e3aabfeb6ce2ca2fb1b6f58e2cba2528..4af64f32c6d1e84606eccae9eede04e2a8321845 100644 (file)
@@ -93,22 +93,32 @@ static int __devinit sdhci_dove_probe(struct platform_device *pdev)
        }
 
        priv->clk = devm_clk_get(&pdev->dev, NULL);
-       if (!IS_ERR(priv->clk))
-               clk_prepare_enable(priv->clk);
 
-       ret = sdhci_pltfm_register(pdev, &sdhci_dove_pdata);
-       if (ret)
-               goto sdhci_dove_register_fail;
+       host = sdhci_pltfm_init(pdev, &sdhci_dove_pdata);
+       if (IS_ERR(host)) {
+               ret = PTR_ERR(host);
+               goto err_sdhci_pltfm_init;
+       }
 
-       host = platform_get_drvdata(pdev);
        pltfm_host = sdhci_priv(host);
        pltfm_host->priv = priv;
 
+       if (!IS_ERR(priv->clk))
+               clk_prepare_enable(priv->clk);
+
+       sdhci_get_of_property(pdev);
+
+       ret = sdhci_add_host(host);
+       if (ret)
+               goto err_sdhci_add;
+
        return 0;
 
-sdhci_dove_register_fail:
+err_sdhci_add:
        if (!IS_ERR(priv->clk))
                clk_disable_unprepare(priv->clk);
+       sdhci_pltfm_free(pdev);
+err_sdhci_pltfm_init:
        return ret;
 }