diff options
| -rw-r--r-- | drivers/pwm/core.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index ec8731515333..41fd3a9b2883 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -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"); - seq_printf(s, " actual configuration: %3sabled, %llu/%llu ns, %s polarity", - hwstate.enabled ? "en" : "dis", hwstate.duty_cycle, hwstate.period, - hwstate.polarity ? "inverse" : "normal"); + 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"); } |
