diff options
| author | Uwe Kleine-König <u.kleine-koenig@baylibre.com> | 2025-01-23 20:27:07 +0300 |
|---|---|---|
| committer | Uwe Kleine-König <ukleinek@kernel.org> | 2025-01-23 22:35:53 +0300 |
| commit | da6b353786997c0ffa67127355ad1d54ed3324c2 (patch) | |
| tree | eaf64d98e08b8a8d3258252872e55feac9831dc1 /include | |
| parent | 752b6e3af374460a2de18f0c10bfa06bf844dbe8 (diff) | |
| download | linux-da6b353786997c0ffa67127355ad1d54ed3324c2.tar.xz | |
pwm: Ensure callbacks exist before calling them
If one of the waveform functions is called for a chip that only supports
.apply(), we want that an error code is returned and not a NULL pointer
exception.
Fixes: 6c5126c6406d ("pwm: Provide new consumer API functions for waveforms")
Cc: stable@vger.kernel.org
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Tested-by: Trevor Gamblin <tgamblin@baylibre.com>
Link: https://lore.kernel.org/r/20250123172709.391349-2-u.kleine-koenig@baylibre.com
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/pwm.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 78827f312407..b8d78009e779 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -347,6 +347,23 @@ struct pwm_chip { struct pwm_device pwms[] __counted_by(npwm); }; +/** + * pwmchip_supports_waveform() - checks if the given chip supports waveform callbacks + * @chip: The pwm_chip to test + * + * Returns true iff the pwm chip support the waveform functions like + * pwm_set_waveform_might_sleep() and pwm_round_waveform_might_sleep() + */ +static inline bool pwmchip_supports_waveform(struct pwm_chip *chip) +{ + /* + * only check for .write_waveform(). If that is available, + * .round_waveform_tohw() and .round_waveform_fromhw() asserted to be + * available, too, in pwmchip_add(). + */ + return chip->ops->write_waveform != NULL; +} + static inline struct device *pwmchip_parent(const struct pwm_chip *chip) { return chip->dev.parent; |
