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 #define TP_PROTO_pwm(args...) \ 12 TP_PROTO(struct pwm_device *pwm, args) 13 14 #define TP_ARGS_pwm(args...) \ 15 TP_ARGS(pwm, args) 16 17 #define TP_STRUCT__entry_pwm(args...) \ 18 TP_STRUCT__entry( \ 19 __field(unsigned int, chipid) \ 20 __field(unsigned int, hwpwm) \ 21 args) 22 23 #define TP_fast_assign_pwm(args...) \ 24 TP_fast_assign( \ 25 __entry->chipid = pwm->chip->id; \ 26 __entry->hwpwm = pwm->hwpwm; \ 27 args) 28 29 #define TP_printk_pwm(fmt, args...) \ 30 TP_printk("pwmchip%u.%u: " fmt, __entry->chipid, __entry->hwpwm, args) 31 32 #define __field_pwmwf(wf) \ 33 __field(u64, wf ## _period_length_ns) \ 34 __field(u64, wf ## _duty_length_ns) \ 35 __field(u64, wf ## _duty_offset_ns) \ 36 37 #define fast_assign_pwmwf(wf) \ 38 __entry->wf ## _period_length_ns = wf->period_length_ns; \ 39 __entry->wf ## _duty_length_ns = wf->duty_length_ns; \ 40 __entry->wf ## _duty_offset_ns = wf->duty_offset_ns 41 42 #define printk_pwmwf_format(wf) \ 43 "%lld/%lld [+%lld]" 44 45 #define printk_pwmwf_formatargs(wf) \ 46 __entry->wf ## _duty_length_ns, __entry->wf ## _period_length_ns, __entry->wf ## _duty_offset_ns 47 48 TRACE_EVENT(pwm_round_waveform_tohw, 49 50 TP_PROTO_pwm(const struct pwm_waveform *wf, void *wfhw, int err), 51 52 TP_ARGS_pwm(wf, wfhw, err), 53 54 TP_STRUCT__entry_pwm( 55 __field_pwmwf(wf) 56 __field(void *, wfhw) 57 __field(int, err) 58 ), 59 60 TP_fast_assign_pwm( 61 fast_assign_pwmwf(wf); 62 __entry->wfhw = wfhw; 63 __entry->err = err; 64 ), 65 66 TP_printk_pwm(printk_pwmwf_format(wf) " > %p err=%d", 67 printk_pwmwf_formatargs(wf), __entry->wfhw, __entry->err) 68 ); 69 70 TRACE_EVENT(pwm_round_waveform_fromhw, 71 72 TP_PROTO_pwm(const void *wfhw, struct pwm_waveform *wf, int err), 73 74 TP_ARGS_pwm(wfhw, wf, err), 75 76 TP_STRUCT__entry_pwm( 77 __field(const void *, wfhw) 78 __field_pwmwf(wf) 79 __field(int, err) 80 ), 81 82 TP_fast_assign_pwm( 83 __entry->wfhw = wfhw; 84 fast_assign_pwmwf(wf); 85 __entry->err = err; 86 ), 87 88 TP_printk_pwm("%p > " printk_pwmwf_format(wf) " err=%d", 89 __entry->wfhw, printk_pwmwf_formatargs(wf), __entry->err) 90 ); 91 92 TRACE_EVENT(pwm_read_waveform, 93 94 TP_PROTO_pwm(void *wfhw, int err), 95 96 TP_ARGS_pwm(wfhw, err), 97 98 TP_STRUCT__entry_pwm( 99 __field(void *, wfhw) 100 __field(int, err) 101 ), 102 103 TP_fast_assign_pwm( 104 __entry->wfhw = wfhw; 105 __entry->err = err; 106 ), 107 108 TP_printk_pwm("%p err=%d", 109 __entry->wfhw, __entry->err) 110 ); 111 112 TRACE_EVENT(pwm_write_waveform, 113 114 TP_PROTO_pwm(const void *wfhw, int err), 115 116 TP_ARGS_pwm(wfhw, err), 117 118 TP_STRUCT__entry_pwm( 119 __field(const void *, wfhw) 120 __field(int, err) 121 ), 122 123 TP_fast_assign_pwm( 124 __entry->wfhw = wfhw; 125 __entry->err = err; 126 ), 127 128 TP_printk_pwm("%p err=%d", 129 __entry->wfhw, __entry->err) 130 ); 131 132 133 DECLARE_EVENT_CLASS(pwm, 134 135 TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state, int err), 136 137 TP_ARGS(pwm, state, err), 138 139 TP_STRUCT__entry_pwm( 140 __field(u64, period) 141 __field(u64, duty_cycle) 142 __field(enum pwm_polarity, polarity) 143 __field(bool, enabled) 144 __field(int, err) 145 ), 146 147 TP_fast_assign_pwm( 148 __entry->period = state->period; 149 __entry->duty_cycle = state->duty_cycle; 150 __entry->polarity = state->polarity; 151 __entry->enabled = state->enabled; 152 __entry->err = err; 153 ), 154 155 TP_printk_pwm("period=%llu duty_cycle=%llu polarity=%d enabled=%d err=%d", 156 __entry->period, __entry->duty_cycle, 157 __entry->polarity, __entry->enabled, __entry->err) 158 159 ); 160 161 DEFINE_EVENT(pwm, pwm_apply, 162 163 TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state, int err), 164 165 TP_ARGS(pwm, state, err) 166 ); 167 168 DEFINE_EVENT(pwm, pwm_get, 169 170 TP_PROTO(struct pwm_device *pwm, const struct pwm_state *state, int err), 171 172 TP_ARGS(pwm, state, err) 173 ); 174 175 #endif /* _TRACE_PWM_H */ 176 177 /* This part must be outside protection */ 178 #include <trace/define_trace.h> 179