???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> /* SPDX-License-Identifier: GPL-2.0-or-later */ /* * I2C slave tracepoints * * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM i2c_slave #if !defined(_TRACE_I2C_SLAVE_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_I2C_SLAVE_H #include #include TRACE_DEFINE_ENUM(I2C_SLAVE_READ_REQUESTED); TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_REQUESTED); TRACE_DEFINE_ENUM(I2C_SLAVE_READ_PROCESSED); TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_RECEIVED); TRACE_DEFINE_ENUM(I2C_SLAVE_STOP); #define show_event_type(type) \ __print_symbolic(type, \ { I2C_SLAVE_READ_REQUESTED, "RD_REQ" }, \ { I2C_SLAVE_WRITE_REQUESTED, "WR_REQ" }, \ { I2C_SLAVE_READ_PROCESSED, "RD_PRO" }, \ { I2C_SLAVE_WRITE_RECEIVED, "WR_RCV" }, \ { I2C_SLAVE_STOP, " STOP" }) TRACE_EVENT(i2c_slave, TP_PROTO(const struct i2c_client *client, enum i2c_slave_event event, __u8 *val, int cb_ret), TP_ARGS(client, event, val, cb_ret), TP_STRUCT__entry( __field(int, adapter_nr ) __field(int, ret ) __field(__u16, addr ) __field(__u16, len ) __field(enum i2c_slave_event, event ) __array(__u8, buf, 1) ), TP_fast_assign( __entry->adapter_nr = client->adapter->nr; __entry->addr = client->addr; __entry->event = event; __entry->ret = cb_ret; switch (event) { case I2C_SLAVE_READ_REQUESTED: case I2C_SLAVE_READ_PROCESSED: case I2C_SLAVE_WRITE_RECEIVED: __entry->len = 1; memcpy(__entry->buf, val, __entry->len); break; default: __entry->len = 0; break; } ), TP_printk("i2c-%d a=%03x ret=%d %s [%*phD]", __entry->adapter_nr, __entry->addr, __entry->ret, show_event_type(__entry->event), __entry->len, __entry->buf )); #endif /* _TRACE_I2C_SLAVE_H */ /* This part must be outside protection */ #include