Commit 5c935069 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pwm/for-6.8-2' of gitolite.kernel.org:pub/scm/linux/kernel/git/ukleinek/linux

Pull pwm fixes from Uwe Kleine-König:

 - fix a duplicate cleanup in an error path introduced in
   this merge window

 - fix an out-of-bounds access

   In practise it doesn't happen - otherwise someone would have noticed
   since v5.17-rc1 I guess - because the device tree binding for the two
   drivers using of_pwm_single_xlate() only have args->args_count == 1.

   A device-tree that doesn't conform to the respective bindings could
   trigger that easily however.

 - correct the request callback of the jz4740 pwm driver which used
   dev_err_probe() long after .probe() completed.

   This is conceptually wrong because dev_err_probe() might call
   device_set_deferred_probe_reason() which is nonsensical after the
   driver is bound.

* tag 'pwm/for-6.8-2' of gitolite.kernel.org:pub/scm/linux/kernel/git/ukleinek/linux:
  pwm: jz4740: Don't use dev_err_probe() in .request()
  pwm: Fix out-of-bounds access in of_pwm_single_xlate()
  pwm: bcm2835: Remove duplicate call to clk_rate_exclusive_put()
parents 21c91bb9 9320fc50
...@@ -152,7 +152,7 @@ of_pwm_single_xlate(struct pwm_chip *chip, const struct of_phandle_args *args) ...@@ -152,7 +152,7 @@ of_pwm_single_xlate(struct pwm_chip *chip, const struct of_phandle_args *args)
pwm->args.period = args->args[0]; pwm->args.period = args->args[0];
pwm->args.polarity = PWM_POLARITY_NORMAL; pwm->args.polarity = PWM_POLARITY_NORMAL;
if (args->args_count == 2 && args->args[2] & PWM_POLARITY_INVERTED) if (args->args_count == 2 && args->args[1] & PWM_POLARITY_INVERTED)
pwm->args.polarity = PWM_POLARITY_INVERSED; pwm->args.polarity = PWM_POLARITY_INVERSED;
return pwm; return pwm;
......
...@@ -160,10 +160,8 @@ static int bcm2835_pwm_probe(struct platform_device *pdev) ...@@ -160,10 +160,8 @@ static int bcm2835_pwm_probe(struct platform_device *pdev)
ret = devm_add_action_or_reset(&pdev->dev, devm_clk_rate_exclusive_put, ret = devm_add_action_or_reset(&pdev->dev, devm_clk_rate_exclusive_put,
pc->clk); pc->clk);
if (ret) { if (ret)
clk_rate_exclusive_put(pc->clk);
return ret; return ret;
}
pc->rate = clk_get_rate(pc->clk); pc->rate = clk_get_rate(pc->clk);
if (!pc->rate) if (!pc->rate)
......
...@@ -61,9 +61,10 @@ static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) ...@@ -61,9 +61,10 @@ static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
snprintf(name, sizeof(name), "timer%u", pwm->hwpwm); snprintf(name, sizeof(name), "timer%u", pwm->hwpwm);
clk = clk_get(chip->dev, name); clk = clk_get(chip->dev, name);
if (IS_ERR(clk)) if (IS_ERR(clk)) {
return dev_err_probe(chip->dev, PTR_ERR(clk), dev_err(chip->dev, "error %pe: Failed to get clock\n", clk);
"Failed to get clock\n"); return PTR_ERR(clk);
}
err = clk_prepare_enable(clk); err = clk_prepare_enable(clk);
if (err < 0) { if (err < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment