summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch')
-rw-r--r--target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch b/target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch
new file mode 100644
index 0000000000..b5b3e06c10
--- /dev/null
+++ b/target/linux/bcm27xx/patches-6.6/950-0936-pwm-bcm2835-Simplify-using-devm-functions.patch
@@ -0,0 +1,80 @@
+From d765936e530124d438ae5b265891d1280097455d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Fri, 29 Sep 2023 18:19:09 +0200
+Subject: [PATCH 0936/1085] pwm: bcm2835: Simplify using devm functions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 2ce7b7f6704c9a8040fb12eb2b682986d9129e68 upstream.
+
+With devm_clk_get_enabled() the call to clk_disable_unprepare() can be
+dropped from the error path and the remove callback. With
+devm_pwmchip_add() pwmchip_remove() can be dropped. Then the remove
+callback is empty and can go away, too. With bcm2835_pwm_remove() the only
+user of platform_get_drvdata() is gone and so platform_set_drvdata() can
+be dropped from .probe(), too.
+
+Also use dev_err_probe() for simplified (and improved) error reporting.
+
+Link: https://lore.kernel.org/r/20230929161918.2410424-3-u.kleine-koenig@pengutronix.de
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
+---
+ drivers/pwm/pwm-bcm2835.c | 27 ++++-----------------------
+ 1 file changed, 4 insertions(+), 23 deletions(-)
+
+--- a/drivers/pwm/pwm-bcm2835.c
++++ b/drivers/pwm/pwm-bcm2835.c
+@@ -147,39 +147,21 @@ static int bcm2835_pwm_probe(struct plat
+ if (IS_ERR(pc->base))
+ return PTR_ERR(pc->base);
+
+- pc->clk = devm_clk_get(&pdev->dev, NULL);
++ pc->clk = devm_clk_get_enabled(&pdev->dev, NULL);
+ if (IS_ERR(pc->clk))
+ return dev_err_probe(&pdev->dev, PTR_ERR(pc->clk),
+ "clock not found\n");
+
+- ret = clk_prepare_enable(pc->clk);
+- if (ret)
+- return ret;
+-
+ pc->chip.dev = &pdev->dev;
+ pc->chip.ops = &bcm2835_pwm_ops;
+ pc->chip.npwm = 2;
+
+- platform_set_drvdata(pdev, pc);
+-
+- ret = pwmchip_add(&pc->chip);
++ ret = devm_pwmchip_add(&pdev->dev, &pc->chip);
+ if (ret < 0)
+- goto add_fail;
++ return dev_err_probe(&pdev->dev, ret,
++ "failed to add pwmchip\n");
+
+ return 0;
+-
+-add_fail:
+- clk_disable_unprepare(pc->clk);
+- return ret;
+-}
+-
+-static void bcm2835_pwm_remove(struct platform_device *pdev)
+-{
+- struct bcm2835_pwm *pc = platform_get_drvdata(pdev);
+-
+- pwmchip_remove(&pc->chip);
+-
+- clk_disable_unprepare(pc->clk);
+ }
+
+ static const struct of_device_id bcm2835_pwm_of_match[] = {
+@@ -194,7 +176,6 @@ static struct platform_driver bcm2835_pw
+ .of_match_table = bcm2835_pwm_of_match,
+ },
+ .probe = bcm2835_pwm_probe,
+- .remove_new = bcm2835_pwm_remove,
+ };
+ module_platform_driver(bcm2835_pwm_driver);
+