Hello Sean, On Tue, Dec 12, 2023 at 08:34:03AM +0000, Sean Young wrote: > +/** > + * pwm_apply_might_sleep() - atomically apply a new state to a PWM device > + * Cannot be used in atomic context. > + * @pwm: PWM device > + * @state: new state to apply > + */ > +int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state) > +{ > + int err; > + > + /* > + * Some lowlevel driver's implementations of .apply() make use of > + * mutexes, also with some drivers only returning when the new > + * configuration is active calling pwm_apply_might_sleep() from atomic context > + * is a bad idea. So make it explicit that calling this function might > + * sleep. > + */ > + might_sleep(); > + > + if (IS_ENABLED(CONFIG_PWM_DEBUG) && pwm->chip->atomic) { > + /* > + * Catch any drivers that have been marked as atomic but > + * that will sleep anyway. > + */ > + non_block_start(); > + err = pwm_apply_unchecked(pwm, state); > + non_block_end(); > + } else { > + err = pwm_apply_unchecked(pwm, state); > + } > + > /* > * only do this after pwm->state was applied as some > * implementations of .get_state depend on this > */ > - pwm_apply_debug(pwm, state); > + if (!err) > + pwm_apply_debug(pwm, state); It's easier to keep that in pwm_apply_unchecked(), isn't it? Then pwm_apply_atomic() also benefits from the checks. I'm not so happy with the function name of pwm_apply_unchecked(), but I don't have a good suggestion either. Probably I'd have chosen __pam_apply(), but that's probably subjective. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature