nvmem: meson-efuse: fix function pointer type mismatch
authorJerome Brunet <jbrunet@baylibre.com>
Sat, 24 Feb 2024 11:40:23 +0000 (11:40 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Mar 2024 20:21:35 +0000 (20:21 +0000)
clang-16 warns about casting functions to incompatible types, as is done
here to call clk_disable_unprepare:

drivers/nvmem/meson-efuse.c:78:12: error: cast from 'void (*)(struct clk *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
   78 |                                        (void(*)(void *))clk_disable_unprepare,

The pattern of getting, enabling and setting a disable callback for a
clock can be replaced with devm_clk_get_enabled(), which also fixes
this warning.

Fixes: 611fbca1c861 ("nvmem: meson-efuse: add peripheral clock")
Cc: Stable@vger.kernel.org
Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Justin Stitt <justinstitt@google.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20240224114023.85535-2-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvmem/meson-efuse.c

index b922df99f9bc3df457df742123b3c8d970ffa9a5..33678d0af2c2455abff8b18acf0d92c180848d83 100644 (file)
@@ -47,7 +47,6 @@ static int meson_efuse_probe(struct platform_device *pdev)
        struct nvmem_config *econfig;
        struct clk *clk;
        unsigned int size;
-       int ret;
 
        sm_np = of_parse_phandle(pdev->dev.of_node, "secure-monitor", 0);
        if (!sm_np) {
@@ -60,27 +59,9 @@ static int meson_efuse_probe(struct platform_device *pdev)
        if (!fw)
                return -EPROBE_DEFER;
 
-       clk = devm_clk_get(dev, NULL);
-       if (IS_ERR(clk)) {
-               ret = PTR_ERR(clk);
-               if (ret != -EPROBE_DEFER)
-                       dev_err(dev, "failed to get efuse gate");
-               return ret;
-       }
-
-       ret = clk_prepare_enable(clk);
-       if (ret) {
-               dev_err(dev, "failed to enable gate");
-               return ret;
-       }
-
-       ret = devm_add_action_or_reset(dev,
-                                      (void(*)(void *))clk_disable_unprepare,
-                                      clk);
-       if (ret) {
-               dev_err(dev, "failed to add disable callback");
-               return ret;
-       }
+       clk = devm_clk_get_enabled(dev, NULL);
+       if (IS_ERR(clk))
+               return dev_err_probe(dev, PTR_ERR(clk), "failed to get efuse gate");
 
        if (meson_sm_call(fw, SM_EFUSE_USER_MAX, &size, 0, 0, 0, 0, 0) < 0) {
                dev_err(dev, "failed to get max user");