gpio: mvebu: Fix optional clock enable handling
PATCH v2 1/1 gpio: mvebu: Fix optional clock enable handling
mvebu_gpio_probe() ignores clk_prepare_enable() failures and has no matching disable path for later probe failures.
Use devm_clk_get_optional_enabled() so clock lookup and enable failures are reported, and so devres disables the clock on cleanup.
Fixes de88747f514a ("gpio: mvebu: Add clk support to prevent lockup")
Signed-off-by Yuho Choi <[email protected]>
--- drivers/gpio/gpio-mvebu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/gpio/gpio-mvebu.c +4 -3
@@ -1153,10 +1153,11 @@ static int mvebu_gpio_probe(struct platform_device *pdev)return id; } - mvchip->clk =devm_clk_get (&pdev->dev,NULL ); + mvchip->clk =devm_clk_get_optional_enabled (&pdev->dev,NULL );/* Not all SoCs require a clock.*/ -if (!IS_ERR (mvchip->clk)) -clk_prepare_enable (mvchip->clk); + +if (IS_ERR (mvchip->clk)) +return PTR_ERR (mvchip->clk); mvchip->soc_variant = soc_variant; mvchip->chip.label =dev_name (&pdev->dev);
Signature · 1 line
2.43.0
Bartosz Golaszewski
maintainerQuoted 8 lines · Yuho Choi
mvebu_gpio_probe()ignoresclk_prepare_enable()failures and has no matching disable path for later probe failures.Use
devm_clk_get_optional_enabled()so clock lookup and enable failures are reported, and so devres disables the clock on cleanup.Fixes de88747f514a ("gpio: mvebu: Add clk support to prevent lockup")
No blank line here please.
Quoted 1 line
Signed-off-by Yuho Choi <[email protected]>
You should also explain that the binding for this chip does not describe the clocks as required so using the optional variant is actually a fix as well.
Bart
Quoted 27 lines
--- drivers/gpio/gpio-mvebu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)drivers/gpio/gpio-mvebu.c +4
-4@@ -1153,10 +1153,11 @@ static int mvebu_gpio_probe(struct platform_device *pdev)return id; } - mvchip->clk =devm_clk_get (&pdev->dev,NULL ); + mvchip->clk =devm_clk_get_optional_enabled (&pdev->dev,NULL );/* Not all SoCs require a clock.*/ -if (!IS_ERR (mvchip->clk)) -clk_prepare_enable (mvchip->clk); + +if (IS_ERR (mvchip->clk)) +return PTR_ERR (mvchip->clk); mvchip->soc_variant = soc_variant; mvchip->chip.label =dev_name (&pdev->dev); --2.43.0