crypto: ccree - clean up clock handling
authorGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 11 Feb 2020 18:19:02 +0000 (19:19 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 22 Feb 2020 01:25:43 +0000 (09:25 +0800)
Use devm_clk_get_optional() instead of devm_clk_get() and explicit
optional clock handling.
As clk_prepare_enable() and clk_disable_unprepare() handle optional
clocks fine, the cc_clk_on() and cc_clk_off() wrappers can be removed.

While at it, use the new "%pe" format specifier to print error codes.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccree/cc_driver.c
drivers/crypto/ccree/cc_driver.h
drivers/crypto/ccree/cc_pm.c

index f8aba89e48730e4dc479ebd698c3bdd1df1f9bbc..a7b7f65939e2f62076ba6932c0b55f04d9716b68 100644 (file)
@@ -302,22 +302,12 @@ static int init_cc_resources(struct platform_device *plat_dev)
        platform_set_drvdata(plat_dev, new_drvdata);
        new_drvdata->plat_dev = plat_dev;
 
-       clk = devm_clk_get(dev, NULL);
-       if (IS_ERR(clk))
-               switch (PTR_ERR(clk)) {
-               /* Clock is optional so this might be fine */
-               case -ENOENT:
-                       break;
-
-               /* Clock not available, let's try again soon */
-               case -EPROBE_DEFER:
-                       return -EPROBE_DEFER;
-
-               default:
-                       dev_err(dev, "Error getting clock: %ld\n",
-                               PTR_ERR(clk));
-                       return PTR_ERR(clk);
-               }
+       clk = devm_clk_get_optional(dev, NULL);
+       if (IS_ERR(clk)) {
+               if (PTR_ERR(clk) != -EPROBE_DEFER)
+                       dev_err(dev, "Error getting clock: %pe\n", clk);
+               return PTR_ERR(clk);
+       }
        new_drvdata->clk = clk;
 
        new_drvdata->coherent = of_dma_is_coherent(np);
@@ -362,7 +352,7 @@ static int init_cc_resources(struct platform_device *plat_dev)
                return rc;
        }
 
-       rc = cc_clk_on(new_drvdata);
+       rc = clk_prepare_enable(new_drvdata->clk);
        if (rc) {
                dev_err(dev, "Failed to enable clock");
                return rc;
@@ -545,7 +535,7 @@ post_debugfs_err:
 post_regs_err:
        fini_cc_regs(new_drvdata);
 post_clk_err:
-       cc_clk_off(new_drvdata);
+       clk_disable_unprepare(new_drvdata->clk);
        return rc;
 }
 
@@ -569,23 +559,7 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
        cc_fips_fini(drvdata);
        cc_debugfs_fini(drvdata);
        fini_cc_regs(drvdata);
-       cc_clk_off(drvdata);
-}
-
-int cc_clk_on(struct cc_drvdata *drvdata)
-{
-       struct clk *clk = drvdata->clk;
-       int rc;
-
-       if (IS_ERR(clk))
-               /* Not all devices have a clock associated with CCREE  */
-               return 0;
-
-       rc = clk_prepare_enable(clk);
-       if (rc)
-               return rc;
-
-       return 0;
+       clk_disable_unprepare(drvdata->clk);
 }
 
 unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata)
@@ -596,17 +570,6 @@ unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata)
                return HASH_LEN_SIZE_630;
 }
 
-void cc_clk_off(struct cc_drvdata *drvdata)
-{
-       struct clk *clk = drvdata->clk;
-
-       if (IS_ERR(clk))
-               /* Not all devices have a clock associated with CCREE */
-               return;
-
-       clk_disable_unprepare(clk);
-}
-
 static int ccree_probe(struct platform_device *plat_dev)
 {
        int rc;
index c227718ba9923472442a2f9bef1049bd49974b29..b983e721f2f758fee8fc42cbaeb8832c65f59cc7 100644 (file)
@@ -212,8 +212,6 @@ static inline void dump_byte_array(const char *name, const u8 *the_array,
 bool cc_wait_for_reset_completion(struct cc_drvdata *drvdata);
 int init_cc_regs(struct cc_drvdata *drvdata, bool is_probe);
 void fini_cc_regs(struct cc_drvdata *drvdata);
-int cc_clk_on(struct cc_drvdata *drvdata);
-void cc_clk_off(struct cc_drvdata *drvdata);
 unsigned int cc_get_default_hash_len(struct cc_drvdata *drvdata);
 
 static inline void cc_iowrite(struct cc_drvdata *drvdata, u32 reg, u32 val)
index 24c368b866f6b5ea87c526800bb8eb9543cc2ddf..81376173c3ecf48f072c29964e5a3ba3cfc9db92 100644 (file)
@@ -26,7 +26,7 @@ int cc_pm_suspend(struct device *dev)
        dev_dbg(dev, "set HOST_POWER_DOWN_EN\n");
        fini_cc_regs(drvdata);
        cc_iowrite(drvdata, CC_REG(HOST_POWER_DOWN_EN), POWER_DOWN_ENABLE);
-       cc_clk_off(drvdata);
+       clk_disable_unprepare(drvdata->clk);
        return 0;
 }
 
@@ -37,7 +37,7 @@ int cc_pm_resume(struct device *dev)
 
        dev_dbg(dev, "unset HOST_POWER_DOWN_EN\n");
        /* Enables the device source clk */
-       rc = cc_clk_on(drvdata);
+       rc = clk_prepare_enable(drvdata->clk);
        if (rc) {
                dev_err(dev, "failed getting clock back on. We're toast.\n");
                return rc;