]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mtd/nand/orion_nand.c
mtd: nand: orion: improve handling of optional clock
[karo-tx-linux.git] / drivers / mtd / nand / orion_nand.c
index 3acdc20485f1a5ec71f5595d6e70f77416bd1bb8..f8e463a97b9ee479028dd9c282ff74436d885389 100644 (file)
@@ -156,8 +156,17 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        /* Not all platforms can gate the clock, so it is not
           an error if the clock does not exists. */
        info->clk = devm_clk_get(&pdev->dev, NULL);
-       if (!IS_ERR(info->clk))
-               clk_prepare_enable(info->clk);
+       if (IS_ERR(info->clk)) {
+               ret = PTR_ERR(info->clk);
+               if (ret == -ENOENT) {
+                       info->clk = NULL;
+               } else {
+                       dev_err(&pdev->dev, "failed to get clock!\n");
+                       return ret;
+               }
+       }
+
+       clk_prepare_enable(info->clk);
 
        ret = nand_scan(mtd, 1);
        if (ret)
@@ -173,9 +182,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        return 0;
 
 no_dev:
-       if (!IS_ERR(info->clk))
-               clk_disable_unprepare(info->clk);
-
+       clk_disable_unprepare(info->clk);
        return ret;
 }
 
@@ -187,8 +194,7 @@ static int orion_nand_remove(struct platform_device *pdev)
 
        nand_release(mtd);
 
-       if (!IS_ERR(info->clk))
-               clk_disable_unprepare(info->clk);
+       clk_disable_unprepare(info->clk);
 
        return 0;
 }