diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-05-14 15:03:19 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-05-14 15:03:19 -0700 |
commit | 9d81e2d5a9e4befa119e40742a60c366e15d76ce (patch) | |
tree | f16cc19e854074d8a9844129e24396031b317906 /drivers/pwm/pwm-bcm2835.c | |
parent | 00fddaf58854717a075f3690c828b61290701e7e (diff) | |
parent | 4817118f257e49b043f3d80f021a327b7e1d796f (diff) |
Merge tag 'pwm/for-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux
Pull pwm updates from Uwe Kleine-König:
"Apart for the normal updates for dt bindings, cleanups and support for
new device variants to existing drivers this completes the conversion
to pwmchip_alloc() which was started in the v6.9 development cycle.
Using pwmchip_alloc() is a precondition to the character device
support which allows easier and faster access to PWM devices. However
there are some issues I want to clean up before including it in
mainline, so this isn't contained here despite it was in next for some
time.
Thanks to Alexandre Mergnat, Binbin Zhou, Dmitry Rokosov, George
Stark, Jerome Brunet and Varshini Rajendran for their contributions.
Further thanks go to AngeloGioacchino Del Regno, Conor Dooley, David
Lechner, Fabrice Gasnier, Florian Fainelli, Guenter Roeck, Gustavo A.
R. Silva, Krzysztof Kozlowski and Rob Herring for valuable patch
review"
* tag 'pwm/for-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux: (34 commits)
pwm: pca9685: Drop explicit initialization of struct i2c_device_id::driver_data to 0
dt-bindings: pwm: snps,dw-apb-timers: Do not require pwm-cells twice
dt-bindings: pwm: mediatek,pwm-disp: Do not require pwm-cells twice
dt-bindings: pwm: mediatek,mt2712: Do not require pwm-cells twice
dt-bindings: pwm: marvell,pxa: Do not require pwm-cells twice
dt-bindings: pwm: google,cros-ec: Do not require pwm-cells twice
dt-bindings: pwm: bcm2835: Do not require pwm-cells twice
pwm: meson: Use mul_u64_u64_div_u64() for frequency calculating
pwm: meson: Add check for error from clk_round_rate()
pwm: meson: Drop unneeded check in .get_state()
dt-bindings: pwm: mediatek,pwm-disp: add compatible for mt8365 SoC
pwm: meson: Add generic compatible for meson8 to sm1
pwm: bcm2835: Drop open coded variant of devm_clk_rate_exclusive_get()
pwm: bcm2835: Introduce a local variable for &pdev->dev
pwm: stm32: Calculate prescaler with a division instead of a loop
pwm: stm32: Fix for settings using period > UINT32_MAX
pwm: stm32: Improve precision of calculation in .apply()
pwm: stm32: Add error messages in .probe()'s error paths
pwm: Make pwmchip_[sg]et_drvdata() a wrapper around dev_set_drvdata()
pwm: Don't check pointer for being non-NULL after use
...
Diffstat (limited to 'drivers/pwm/pwm-bcm2835.c')
-rw-r--r-- | drivers/pwm/pwm-bcm2835.c | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/drivers/pwm/pwm-bcm2835.c b/drivers/pwm/pwm-bcm2835.c index aa35acbb0cbc..578e95e0296c 100644 --- a/drivers/pwm/pwm-bcm2835.c +++ b/drivers/pwm/pwm-bcm2835.c @@ -124,20 +124,14 @@ static const struct pwm_ops bcm2835_pwm_ops = { .apply = bcm2835_pwm_apply, }; -static void devm_clk_rate_exclusive_put(void *data) -{ - struct clk *clk = data; - - clk_rate_exclusive_put(clk); -} - static int bcm2835_pwm_probe(struct platform_device *pdev) { + struct device *dev = &pdev->dev; struct pwm_chip *chip; struct bcm2835_pwm *pc; int ret; - chip = devm_pwmchip_alloc(&pdev->dev, 2, sizeof(*pc)); + chip = devm_pwmchip_alloc(dev, 2, sizeof(*pc)); if (IS_ERR(chip)) return PTR_ERR(chip); pc = to_bcm2835_pwm(chip); @@ -146,24 +140,19 @@ static int bcm2835_pwm_probe(struct platform_device *pdev) if (IS_ERR(pc->base)) return PTR_ERR(pc->base); - pc->clk = devm_clk_get_enabled(&pdev->dev, NULL); + pc->clk = devm_clk_get_enabled(dev, NULL); if (IS_ERR(pc->clk)) - return dev_err_probe(&pdev->dev, PTR_ERR(pc->clk), + return dev_err_probe(dev, PTR_ERR(pc->clk), "clock not found\n"); - ret = clk_rate_exclusive_get(pc->clk); + ret = devm_clk_rate_exclusive_get(dev, pc->clk); if (ret) - return dev_err_probe(&pdev->dev, ret, + return dev_err_probe(dev, ret, "fail to get exclusive rate\n"); - ret = devm_add_action_or_reset(&pdev->dev, devm_clk_rate_exclusive_put, - pc->clk); - if (ret) - return ret; - pc->rate = clk_get_rate(pc->clk); if (!pc->rate) - return dev_err_probe(&pdev->dev, -EINVAL, + return dev_err_probe(dev, -EINVAL, "failed to get clock rate\n"); chip->ops = &bcm2835_pwm_ops; @@ -171,10 +160,9 @@ static int bcm2835_pwm_probe(struct platform_device *pdev) platform_set_drvdata(pdev, pc); - ret = devm_pwmchip_add(&pdev->dev, chip); + ret = devm_pwmchip_add(dev, chip); if (ret < 0) - return dev_err_probe(&pdev->dev, ret, - "failed to add pwmchip\n"); + return dev_err_probe(dev, ret, "failed to add pwmchip\n"); return 0; } |