|
@@ -19,6 +19,7 @@
|
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
*/
|
|
|
|
|
|
+#include <linux/err.h>
|
|
|
#include <linux/io.h>
|
|
|
#include <linux/clk.h>
|
|
|
#include <linux/err.h>
|
|
@@ -84,30 +85,32 @@ static int __devinit sdhci_dove_probe(struct platform_device *pdev)
|
|
|
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;
|
|
|
+ return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
+ priv->clk = 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 = 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:
|
|
|
+ if (!IS_ERR(priv->clk)) {
|
|
|
+ clk_disable_unprepare(priv->clk);
|
|
|
+ clk_put(priv->clk);
|
|
|
+ }
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -117,14 +120,13 @@ static int __devexit sdhci_dove_remove(struct platform_device *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);
|
|
|
+ sdhci_pltfm_unregister(pdev);
|
|
|
+
|
|
|
+ if (!IS_ERR(priv->clk)) {
|
|
|
+ clk_disable_unprepare(priv->clk);
|
|
|
+ clk_put(priv->clk);
|
|
|
}
|
|
|
- return sdhci_pltfm_unregister(pdev);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static const struct of_device_id sdhci_dove_of_match_table[] __devinitdata = {
|