1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM asoc
4
5#if !defined(_TRACE_ASOC_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_ASOC_H
7
8#include <linux/ktime.h>
9#include <linux/tracepoint.h>
10#include <sound/jack.h>
11
12#define DAPM_DIRECT "(direct)"
13#define DAPM_ARROW(dir) (((dir) == SND_SOC_DAPM_DIR_OUT) ? "->" : "<-")
14
15struct snd_soc_jack;
16struct snd_soc_card;
17struct snd_soc_dapm_widget;
18struct snd_soc_dapm_path;
19
20DECLARE_EVENT_CLASS(snd_soc_dapm,
21
22	TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
23
24	TP_ARGS(dapm, val),
25
26	TP_STRUCT__entry(
27		__string(	card_name,	dapm->card->name)
28		__string(	comp_name,	dapm->component ? dapm->component->name : "(none)")
29		__field(	int,		val)
30	),
31
32	TP_fast_assign(
33		__assign_str(card_name, dapm->card->name);
34		__assign_str(comp_name, dapm->component ? dapm->component->name : "(none)");
35		__entry->val = val;
36	),
37
38	TP_printk("card=%s component=%s val=%d",
39		  __get_str(card_name), __get_str(comp_name), (int)__entry->val)
40);
41
42DEFINE_EVENT(snd_soc_dapm, snd_soc_bias_level_start,
43
44	TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
45
46	TP_ARGS(dapm, val)
47
48);
49
50DEFINE_EVENT(snd_soc_dapm, snd_soc_bias_level_done,
51
52	TP_PROTO(struct snd_soc_dapm_context *dapm, int val),
53
54	TP_ARGS(dapm, val)
55
56);
57
58DECLARE_EVENT_CLASS(snd_soc_dapm_basic,
59
60	TP_PROTO(struct snd_soc_card *card, int event),
61
62	TP_ARGS(card, event),
63
64	TP_STRUCT__entry(
65		__string(	name,	card->name	)
66		__field(	int,	event		)
67	),
68
69	TP_fast_assign(
70		__assign_str(name, card->name);
71		__entry->event = event;
72	),
73
74	TP_printk("card=%s event=%d", __get_str(name), (int)__entry->event)
75);
76
77DEFINE_EVENT(snd_soc_dapm_basic, snd_soc_dapm_start,
78
79	TP_PROTO(struct snd_soc_card *card, int event),
80
81	TP_ARGS(card, event)
82
83);
84
85DEFINE_EVENT(snd_soc_dapm_basic, snd_soc_dapm_done,
86
87	TP_PROTO(struct snd_soc_card *card, int event),
88
89	TP_ARGS(card, event)
90
91);
92
93DECLARE_EVENT_CLASS(snd_soc_dapm_widget,
94
95	TP_PROTO(struct snd_soc_dapm_widget *w, int val),
96
97	TP_ARGS(w, val),
98
99	TP_STRUCT__entry(
100		__string(	name,	w->name		)
101		__field(	int,	val		)
102	),
103
104	TP_fast_assign(
105		__assign_str(name, w->name);
106		__entry->val = val;
107	),
108
109	TP_printk("widget=%s val=%d", __get_str(name),
110		  (int)__entry->val)
111);
112
113DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_power,
114
115	TP_PROTO(struct snd_soc_dapm_widget *w, int val),
116
117	TP_ARGS(w, val)
118
119);
120
121DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_event_start,
122
123	TP_PROTO(struct snd_soc_dapm_widget *w, int val),
124
125	TP_ARGS(w, val)
126
127);
128
129DEFINE_EVENT(snd_soc_dapm_widget, snd_soc_dapm_widget_event_done,
130
131	TP_PROTO(struct snd_soc_dapm_widget *w, int val),
132
133	TP_ARGS(w, val)
134
135);
136
137TRACE_EVENT(snd_soc_dapm_walk_done,
138
139	TP_PROTO(struct snd_soc_card *card),
140
141	TP_ARGS(card),
142
143	TP_STRUCT__entry(
144		__string(	name,	card->name		)
145		__field(	int,	power_checks		)
146		__field(	int,	path_checks		)
147		__field(	int,	neighbour_checks	)
148	),
149
150	TP_fast_assign(
151		__assign_str(name, card->name);
152		__entry->power_checks = card->dapm_stats.power_checks;
153		__entry->path_checks = card->dapm_stats.path_checks;
154		__entry->neighbour_checks = card->dapm_stats.neighbour_checks;
155	),
156
157	TP_printk("%s: checks %d power, %d path, %d neighbour",
158		  __get_str(name), (int)__entry->power_checks,
159		  (int)__entry->path_checks, (int)__entry->neighbour_checks)
160);
161
162TRACE_EVENT(snd_soc_dapm_path,
163
164	TP_PROTO(struct snd_soc_dapm_widget *widget,
165		enum snd_soc_dapm_direction dir,
166		struct snd_soc_dapm_path *path),
167
168	TP_ARGS(widget, dir, path),
169
170	TP_STRUCT__entry(
171		__string(	wname,	widget->name		)
172		__string(	pname,	path->name ? path->name : DAPM_DIRECT)
173		__string(	pnname,	path->node[dir]->name	)
174		__field(	int,	path_node		)
175		__field(	int,	path_connect		)
176		__field(	int,	path_dir		)
177	),
178
179	TP_fast_assign(
180		__assign_str(wname, widget->name);
181		__assign_str(pname, path->name ? path->name : DAPM_DIRECT);
182		__assign_str(pnname, path->node[dir]->name);
183		__entry->path_connect = path->connect;
184		__entry->path_node = (long)path->node[dir];
185		__entry->path_dir = dir;
186	),
187
188	TP_printk("%c%s %s %s %s %s",
189		(int) __entry->path_node &&
190		(int) __entry->path_connect ? '*' : ' ',
191		__get_str(wname), DAPM_ARROW(__entry->path_dir),
192		__get_str(pname), DAPM_ARROW(__entry->path_dir),
193		__get_str(pnname))
194);
195
196TRACE_EVENT(snd_soc_dapm_connected,
197
198	TP_PROTO(int paths, int stream),
199
200	TP_ARGS(paths, stream),
201
202	TP_STRUCT__entry(
203		__field(	int,	paths		)
204		__field(	int,	stream		)
205	),
206
207	TP_fast_assign(
208		__entry->paths = paths;
209		__entry->stream = stream;
210	),
211
212	TP_printk("%s: found %d paths",
213		__entry->stream ? "capture" : "playback", __entry->paths)
214);
215
216TRACE_EVENT(snd_soc_jack_irq,
217
218	TP_PROTO(const char *name),
219
220	TP_ARGS(name),
221
222	TP_STRUCT__entry(
223		__string(	name,	name		)
224	),
225
226	TP_fast_assign(
227		__assign_str(name, name);
228	),
229
230	TP_printk("%s", __get_str(name))
231);
232
233TRACE_EVENT(snd_soc_jack_report,
234
235	TP_PROTO(struct snd_soc_jack *jack, int mask, int val),
236
237	TP_ARGS(jack, mask, val),
238
239	TP_STRUCT__entry(
240		__string(	name,		jack->jack->id		)
241		__field(	int,		mask			)
242		__field(	int,		val			)
243	),
244
245	TP_fast_assign(
246		__assign_str(name, jack->jack->id);
247		__entry->mask = mask;
248		__entry->val = val;
249	),
250
251	TP_printk("jack=%s %x/%x", __get_str(name), (int)__entry->val,
252		  (int)__entry->mask)
253);
254
255TRACE_EVENT(snd_soc_jack_notify,
256
257	TP_PROTO(struct snd_soc_jack *jack, int val),
258
259	TP_ARGS(jack, val),
260
261	TP_STRUCT__entry(
262		__string(	name,		jack->jack->id		)
263		__field(	int,		val			)
264	),
265
266	TP_fast_assign(
267		__assign_str(name, jack->jack->id);
268		__entry->val = val;
269	),
270
271	TP_printk("jack=%s %x", __get_str(name), (int)__entry->val)
272);
273
274#endif /* _TRACE_ASOC_H */
275
276/* This part must be outside protection */
277#include <trace/define_trace.h>
278