Commit fa829c1f authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Uwe Kleine-König
Browse files

pwm: stm32: Emit debug output also for corner cases of the rounding callbacks



When you're interested in the actual register settings the driver
chooses or interprets you want to see them also for calls that hit
corner cases.

Make sure that all calls to stm32_pwm_round_waveform_tohw() and
stm32_pwm_round_waveform_fromhw() emit the debug message about the
register settings.

Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/fe154e79319da5ff4159cdc71201a9d3b395e491.1743844730.git.u.kleine-koenig@baylibre.com


[ukleinek: widen scope of rate in stm32_pwm_round_waveform_fromhw() to fix FTBFS]
Signed-off-by: default avatarUwe Kleine-König <ukleinek@kernel.org>
parent 4cbeffc4
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -180,11 +180,11 @@ static int stm32_pwm_round_waveform_tohw(struct pwm_chip *chip,

	wfhw->ccr = min_t(u64, ccr, wfhw->arr + 1);

out:
	dev_dbg(&chip->dev, "pwm#%u: %lld/%lld [+%lld] @%lu -> CCER: %08x, PSC: %08x, ARR: %08x, CCR: %08x\n",
		pwm->hwpwm, wf->duty_length_ns, wf->period_length_ns, wf->duty_offset_ns,
		rate, wfhw->ccer, wfhw->psc, wfhw->arr, wfhw->ccr);

out:
	clk_disable(priv->clk);

	return ret;
@@ -213,10 +213,10 @@ static int stm32_pwm_round_waveform_fromhw(struct pwm_chip *chip,
{
	const struct stm32_pwm_waveform *wfhw = _wfhw;
	struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
	unsigned long rate = clk_get_rate(priv->clk);
	unsigned int ch = pwm->hwpwm;

	if (wfhw->ccer & TIM_CCER_CCxE(ch + 1)) {
		unsigned long rate = clk_get_rate(priv->clk);
		u64 ccr_ns;

		/* The result doesn't overflow for rate >= 15259 */
@@ -236,17 +236,16 @@ static int stm32_pwm_round_waveform_fromhw(struct pwm_chip *chip,
			wf->duty_length_ns = ccr_ns;
			wf->duty_offset_ns = 0;
		}

		dev_dbg(&chip->dev, "pwm#%u: CCER: %08x, PSC: %08x, ARR: %08x, CCR: %08x @%lu -> %lld/%lld [+%lld]\n",
			pwm->hwpwm, wfhw->ccer, wfhw->psc, wfhw->arr, wfhw->ccr, rate,
			wf->duty_length_ns, wf->period_length_ns, wf->duty_offset_ns);

	} else {
		*wf = (struct pwm_waveform){
			.period_length_ns = 0,
		};
	}

	dev_dbg(&chip->dev, "pwm#%u: CCER: %08x, PSC: %08x, ARR: %08x, CCR: %08x @%lu -> %lld/%lld [+%lld]\n",
		pwm->hwpwm, wfhw->ccer, wfhw->psc, wfhw->arr, wfhw->ccr, rate,
		wf->duty_length_ns, wf->period_length_ns, wf->duty_offset_ns);

	return 0;
}