Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pwm: Implement tracing for .get_state() and .apply_state()

This allows to log all calls to the driver's lowlevel functions which
simplifies debugging in some cases.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>

authored by

Uwe Kleine-König and committed by
Thierry Reding
1188829a af4fab8b

+66 -1
+8 -1
drivers/pwm/core.c
··· 20 20 21 21 #include <dt-bindings/pwm/pwm.h> 22 22 23 + #define CREATE_TRACE_POINTS 24 + #include <trace/events/pwm.h> 25 + 23 26 #define MAX_PWMS 1024 24 27 25 28 static DEFINE_MUTEX(pwm_lookup_lock); ··· 117 114 } 118 115 } 119 116 120 - if (pwm->chip->ops->get_state) 117 + if (pwm->chip->ops->get_state) { 121 118 pwm->chip->ops->get_state(pwm->chip, pwm, &pwm->state); 119 + trace_pwm_get(pwm, &pwm->state); 120 + } 122 121 123 122 set_bit(PWMF_REQUESTED, &pwm->flags); 124 123 pwm->label = label; ··· 476 471 err = chip->ops->apply(chip, pwm, state); 477 472 if (err) 478 473 return err; 474 + 475 + trace_pwm_apply(pwm, state); 479 476 480 477 pwm->state = *state; 481 478 } else {
+58
include/trace/events/pwm.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 + #undef TRACE_SYSTEM 3 + #define TRACE_SYSTEM pwm 4 + 5 + #if !defined(_TRACE_PWM_H) || defined(TRACE_HEADER_MULTI_READ) 6 + #define _TRACE_PWM_H 7 + 8 + #include <linux/pwm.h> 9 + #include <linux/tracepoint.h> 10 + 11 + DECLARE_EVENT_CLASS(pwm, 12 + 13 + TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state), 14 + 15 + TP_ARGS(pwm, state), 16 + 17 + TP_STRUCT__entry( 18 + __field(struct pwm_device *, pwm) 19 + __field(u64, period) 20 + __field(u64, duty_cycle) 21 + __field(enum pwm_polarity, polarity) 22 + __field(bool, enabled) 23 + ), 24 + 25 + TP_fast_assign( 26 + __entry->pwm = pwm; 27 + __entry->period = state->period; 28 + __entry->duty_cycle = state->duty_cycle; 29 + __entry->polarity = state->polarity; 30 + __entry->enabled = state->enabled; 31 + ), 32 + 33 + TP_printk("%p: period=%llu duty_cycle=%llu polarity=%d enabled=%d", 34 + __entry->pwm, __entry->period, __entry->duty_cycle, 35 + __entry->polarity, __entry->enabled) 36 + 37 + ); 38 + 39 + DEFINE_EVENT(pwm, pwm_apply, 40 + 41 + TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state), 42 + 43 + TP_ARGS(pwm, state) 44 + 45 + ); 46 + 47 + DEFINE_EVENT(pwm, pwm_get, 48 + 49 + TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state), 50 + 51 + TP_ARGS(pwm, state) 52 + 53 + ); 54 + 55 + #endif /* _TRACE_PWM_H */ 56 + 57 + /* This part must be outside protection */ 58 + #include <trace/define_trace.h>