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

pwm: Emit native configuration in /sys/kernel/debug/pwm



Currently there are two abstractions for PWM drivers. Use the waveform
representation for the drivers that support it as this is more
expressive and so tells more about the actual hardware state.

Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://patch.msgid.link/20251121104947.2652013-2-u.kleine-koenig@baylibre.com


Signed-off-by: default avatarUwe Kleine-König <ukleinek@kernel.org>
parent 85a5ffbd
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -2638,10 +2638,10 @@ static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)

	for (i = 0; i < chip->npwm; i++) {
		struct pwm_device *pwm = &chip->pwms[i];
		struct pwm_state state, hwstate;
		struct pwm_state state;
		int err;

		pwm_get_state(pwm, &state);
		pwm_get_state_hw(pwm, &hwstate);

		seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label);

@@ -2657,9 +2657,26 @@ static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
			seq_puts(s, ", usage_power");
		seq_puts(s, "\n");

		if (pwmchip_supports_waveform(chip)) {
			struct pwm_waveform wf;

			err = pwm_get_waveform_might_sleep(pwm, &wf);
			if (!err)
				seq_printf(s, "  actual configuration: %lld/%lld [+%lld]",
					   wf.duty_length_ns, wf.period_length_ns, wf.duty_offset_ns);
			else
				seq_printf(s, "  actual configuration: read out error: %pe\n", ERR_PTR(err));
		} else {
			struct pwm_state hwstate;

			err = pwm_get_state_hw(pwm, &hwstate);
			if (!err)
				seq_printf(s, "  actual configuration:    %3sabled, %llu/%llu ns, %s polarity",
					   hwstate.enabled ? "en" : "dis", hwstate.duty_cycle, hwstate.period,
					   hwstate.polarity ? "inverse" : "normal");
			else
				seq_printf(s, "  actual configuration: read out error: %pe", ERR_PTR(err));
		}

		seq_puts(s, "\n");
	}