Skip to content

Commit 5c93506

Browse files
committed
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()
2 parents 21c91bb + 9320fc5 commit 5c93506

File tree

3 files changed

+6
-7
lines changed

3 files changed

+6
-7
lines changed

drivers/pwm/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ of_pwm_single_xlate(struct pwm_chip *chip, const struct of_phandle_args *args)
152152
pwm->args.period = args->args[0];
153153
pwm->args.polarity = PWM_POLARITY_NORMAL;
154154

155-
if (args->args_count == 2 && args->args[2] & PWM_POLARITY_INVERTED)
155+
if (args->args_count == 2 && args->args[1] & PWM_POLARITY_INVERTED)
156156
pwm->args.polarity = PWM_POLARITY_INVERSED;
157157

158158
return pwm;

drivers/pwm/pwm-bcm2835.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,8 @@ static int bcm2835_pwm_probe(struct platform_device *pdev)
160160

161161
ret = devm_add_action_or_reset(&pdev->dev, devm_clk_rate_exclusive_put,
162162
pc->clk);
163-
if (ret) {
164-
clk_rate_exclusive_put(pc->clk);
163+
if (ret)
165164
return ret;
166-
}
167165

168166
pc->rate = clk_get_rate(pc->clk);
169167
if (!pc->rate)

drivers/pwm/pwm-jz4740.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ static int jz4740_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
6161
snprintf(name, sizeof(name), "timer%u", pwm->hwpwm);
6262

6363
clk = clk_get(chip->dev, name);
64-
if (IS_ERR(clk))
65-
return dev_err_probe(chip->dev, PTR_ERR(clk),
66-
"Failed to get clock\n");
64+
if (IS_ERR(clk)) {
65+
dev_err(chip->dev, "error %pe: Failed to get clock\n", clk);
66+
return PTR_ERR(clk);
67+
}
6768

6869
err = clk_prepare_enable(clk);
6970
if (err < 0) {

0 commit comments

Comments
 (0)