]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pwm: xilinx: Simplify using devm_ functions
authorUwe Kleine-König <u.kleine-koenig@baylibre.com>
Fri, 28 Jun 2024 06:35:23 +0000 (08:35 +0200)
committerUwe Kleine-König <ukleinek@kernel.org>
Wed, 10 Jul 2024 15:53:52 +0000 (17:53 +0200)
There are devm variants for clk_prepare_enable() and pwmchip_add(); and
clk_prepare_enable() can be done together with devm_clk_get(). This
allows to simplify the error paths in .probe() and drop .remove()
completely.

With the remove callback gone, the last user of platform_get_drvdata()
is gone and so the call to platform_set_drvdata() can be dropped, too.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Reviewed-by: Sean Anderson <sean.anderson@seco.com>
Link: https://lore.kernel.org/r/20240628063524.92907-2-u.kleine-koenig@baylibre.com
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
drivers/pwm/pwm-xilinx.c

index 3a7deebb0d0c8a2d017f63e459d0d40f2fa1ee39..52c24198280732b423c20e1df740fecb749d7860 100644 (file)
@@ -224,7 +224,6 @@ static int xilinx_pwm_probe(struct platform_device *pdev)
        if (IS_ERR(chip))
                return PTR_ERR(chip);
        priv = xilinx_pwm_chip_to_priv(chip);
-       platform_set_drvdata(pdev, chip);
 
        regs = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(regs))
@@ -263,37 +262,24 @@ static int xilinx_pwm_probe(struct platform_device *pdev)
         * alas, such properties are not allowed to be used.
         */
 
-       priv->clk = devm_clk_get(dev, "s_axi_aclk");
+       priv->clk = devm_clk_get_enabled(dev, "s_axi_aclk");
        if (IS_ERR(priv->clk))
                return dev_err_probe(dev, PTR_ERR(priv->clk),
                                     "Could not get clock\n");
 
-       ret = clk_prepare_enable(priv->clk);
+       ret = devm_clk_rate_exclusive_get(dev, priv->clk);
        if (ret)
-               return dev_err_probe(dev, ret, "Clock enable failed\n");
-       clk_rate_exclusive_get(priv->clk);
+               return dev_err_probe(dev, ret,
+                                    "Failed to lock clock rate\n");
 
        chip->ops = &xilinx_pwm_ops;
-       ret = pwmchip_add(chip);
-       if (ret) {
-               clk_rate_exclusive_put(priv->clk);
-               clk_disable_unprepare(priv->clk);
+       ret = devm_pwmchip_add(dev, chip);
+       if (ret)
                return dev_err_probe(dev, ret, "Could not register PWM chip\n");
-       }
 
        return 0;
 }
 
-static void xilinx_pwm_remove(struct platform_device *pdev)
-{
-       struct pwm_chip *chip = platform_get_drvdata(pdev);
-       struct xilinx_timer_priv *priv = xilinx_pwm_chip_to_priv(chip);
-
-       pwmchip_remove(chip);
-       clk_rate_exclusive_put(priv->clk);
-       clk_disable_unprepare(priv->clk);
-}
-
 static const struct of_device_id xilinx_pwm_of_match[] = {
        { .compatible = "xlnx,xps-timer-1.00.a", },
        {},
@@ -302,7 +288,6 @@ MODULE_DEVICE_TABLE(of, xilinx_pwm_of_match);
 
 static struct platform_driver xilinx_pwm_driver = {
        .probe = xilinx_pwm_probe,
-       .remove_new = xilinx_pwm_remove,
        .driver = {
                .name = "xilinx-pwm",
                .of_match_table = of_match_ptr(xilinx_pwm_of_match),