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