Message ID | 20240213142831.3069049-1-jbrunet@baylibre.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] nvmem: meson-efuse: fix function pointer type mismatch | expand |
On Tue, Feb 13, 2024, at 15:28, Jerome Brunet wrote: > 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") > Reported-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Perfect, much nicer than my version. Acked-by: Arnd Bergmann <arnd@arndb.de>
On Tue, Feb 13, 2024 at 3:28 PM Jerome Brunet <jbrunet@baylibre.com> wrote: > > 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") > Reported-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Thanks Jerome!
Hi, On Tue, Feb 13, 2024 at 6:28 AM Jerome Brunet <jbrunet@baylibre.com> wrote: > > 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") > Reported-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> > --- > drivers/nvmem/meson-efuse.c | 25 +++---------------------- I love negative diffs ^^^^^^^^^^^^^^^ > 1 file changed, 3 insertions(+), 22 deletions(-) > > diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c > index b922df99f9bc..33678d0af2c2 100644 > --- a/drivers/nvmem/meson-efuse.c > +++ b/drivers/nvmem/meson-efuse.c > @@ -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"); Wow, this simplified nicely and doesn't make any new helpers (like Arnd's version). Reviewed-by: Justin Stitt <justinstitt@google.com> > > if (meson_sm_call(fw, SM_EFUSE_USER_MAX, &size, 0, 0, 0, 0, 0) < 0) { > dev_err(dev, "failed to get max user"); > -- > 2.43.0 > Thanks Justin
On Tue, 13 Feb 2024 15:28:28 +0100, Jerome Brunet wrote: > 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. > > [...] Applied, thanks! [1/1] nvmem: meson-efuse: fix function pointer type mismatch commit: 6b475e23544a560b4bf2acfab8dc54c4e7b1749e Best regards,
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c index b922df99f9bc..33678d0af2c2 100644 --- a/drivers/nvmem/meson-efuse.c +++ b/drivers/nvmem/meson-efuse.c @@ -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");
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") Reported-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> --- drivers/nvmem/meson-efuse.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-)