On Tue, Jul 22, 2025 at 06:23:48PM +0200, Mathieu Dubois-Briand wrote: > +static int max7360_pwm_round_waveform_tohw(struct pwm_chip *chip, > + struct pwm_device *pwm, > + const struct pwm_waveform *wf, > + void *_wfhw) > +{ > + struct max7360_pwm_waveform *wfhw = _wfhw; > + u64 duty_steps; > + > + /* > + * Ignore user provided values for period_length_ns and duty_offset_ns: > + * we only support fixed period of MAX7360_PWM_PERIOD_NS and offset of 0. > + * Values from 0 to 254 as duty_steps will provide duty cycles of 0/256 > + * to 254/256, while value 255 will provide a duty cycle of 100%. > + */ > + if (wf->duty_length_ns >= MAX7360_PWM_PERIOD_NS) { > + duty_steps = MAX7360_PWM_MAX; > + } else { > + duty_steps = (u32)wf->duty_length_ns * MAX7360_PWM_STEPS / MAX7360_PWM_PERIOD_NS; > + if (duty_steps == MAX7360_PWM_MAX) > + duty_steps = MAX7360_PWM_MAX - 1; > + } > + > + wfhw->duty_steps = min(MAX7360_PWM_MAX, duty_steps); > + wfhw->enabled = !!wf->period_length_ns; > + > + return 0; The unconditional return 0 is wrong and testing with PWM_DEBUG enabled should tell you that. I think the right thing to do here is: if (wf->period_length_ns > MAX7360_PWM_PERIOD_NS) return 1; else return 0; Otherwise looks fine. Best regards Uwe
Attachment:
signature.asc
Description: PGP signature