diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2019-08-24 11:37:07 -0400 |
---|---|---|
committer | Thierry Reding <thierry.reding@gmail.com> | 2019-09-20 21:25:10 -0400 |
commit | 71523d1812aca61e32e742e87ec064e3d8c615e1 (patch) | |
tree | 20491f0323c9b71d0628741824c4dcf992e22363 /drivers/pwm/pwm-imx-tpm.c | |
parent | c9675829ba4b0e95c613f6d6d83d2b5cb9c5371c (diff) |
pwm: Ensure pwm_apply_state() doesn't modify the state argument
It is surprising for a PWM consumer when the variable holding the
requested state is modified by pwm_apply_state(). Consider for example a
driver doing:
#define PERIOD 5000000
#define DUTY_LITTLE 10
...
struct pwm_state state = {
.period = PERIOD,
.duty_cycle = DUTY_LITTLE,
.polarity = PWM_POLARITY_NORMAL,
.enabled = true,
};
pwm_apply_state(mypwm, &state);
...
state.duty_cycle = PERIOD / 2;
pwm_apply_state(mypwm, &state);
For sure the second call to pwm_apply_state() should still have
state.period = PERIOD and not something the hardware driver chose for a
reason that doesn't necessarily apply to the second call.
So declare the state argument as a pointer to a const type and adapt all
drivers' .apply callbacks.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Diffstat (limited to 'drivers/pwm/pwm-imx-tpm.c')
-rw-r--r-- | drivers/pwm/pwm-imx-tpm.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c index e8385c1cf342..9145f6160649 100644 --- a/drivers/pwm/pwm-imx-tpm.c +++ b/drivers/pwm/pwm-imx-tpm.c | |||
@@ -89,7 +89,7 @@ to_imx_tpm_pwm_chip(struct pwm_chip *chip) | |||
89 | static int pwm_imx_tpm_round_state(struct pwm_chip *chip, | 89 | static int pwm_imx_tpm_round_state(struct pwm_chip *chip, |
90 | struct imx_tpm_pwm_param *p, | 90 | struct imx_tpm_pwm_param *p, |
91 | struct pwm_state *real_state, | 91 | struct pwm_state *real_state, |
92 | struct pwm_state *state) | 92 | const struct pwm_state *state) |
93 | { | 93 | { |
94 | struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); | 94 | struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); |
95 | u32 rate, prescale, period_count, clock_unit; | 95 | u32 rate, prescale, period_count, clock_unit; |
@@ -289,7 +289,7 @@ static int pwm_imx_tpm_apply_hw(struct pwm_chip *chip, | |||
289 | 289 | ||
290 | static int pwm_imx_tpm_apply(struct pwm_chip *chip, | 290 | static int pwm_imx_tpm_apply(struct pwm_chip *chip, |
291 | struct pwm_device *pwm, | 291 | struct pwm_device *pwm, |
292 | struct pwm_state *state) | 292 | const struct pwm_state *state) |
293 | { | 293 | { |
294 | struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); | 294 | struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); |
295 | struct imx_tpm_pwm_param param; | 295 | struct imx_tpm_pwm_param param; |