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