mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 12:04:46 +08:00
pwm: sti: Fix capture for st,pwm-num-chan < st,capture-num-chan
[ Upstream commit5f62383558
] The driver only used the number of pwm channels to set the pwm_chip's npwm member. The result is that if there are more capture channels than PWM channels specified in the device tree, only a part of the capture channel is usable. Fix that by passing the bigger channel count to the pwm framework. This makes it possible that the .apply() callback is called with .hwpwm >= pwm_num_devs, catch that case and return an error code. Fixes:c97267ae83
("pwm: sti: Add PWM capture callback") Link: https://lore.kernel.org/r/20240204212043.2951852-2-u.kleine-koenig@pengutronix.de Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
fc866c1061
commit
97927e0730
@ -395,8 +395,17 @@ out:
|
||||
static int sti_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||
const struct pwm_state *state)
|
||||
{
|
||||
struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
|
||||
struct sti_pwm_compat_data *cdata = pc->cdata;
|
||||
struct device *dev = pc->dev;
|
||||
int err;
|
||||
|
||||
if (pwm->hwpwm >= cdata->pwm_num_devs) {
|
||||
dev_err(dev, "device %u is not valid for pwm mode\n",
|
||||
pwm->hwpwm);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (state->polarity != PWM_POLARITY_NORMAL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -646,7 +655,7 @@ static int sti_pwm_probe(struct platform_device *pdev)
|
||||
|
||||
pc->chip.dev = dev;
|
||||
pc->chip.ops = &sti_pwm_ops;
|
||||
pc->chip.npwm = pc->cdata->pwm_num_devs;
|
||||
pc->chip.npwm = max(cdata->pwm_num_devs, cdata->cpt_num_devs);
|
||||
|
||||
for (i = 0; i < cdata->cpt_num_devs; i++) {
|
||||
struct sti_cpt_ddata *ddata = &cdata->ddata[i];
|
||||
|
Loading…
Reference in New Issue
Block a user