diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c index 142d9cdfef3a6646ffde0b16b5f32f9494c2e07a..00609bf785fb6081c77f0c7405c42685952f3cc0 100644 --- a/drivers/base/regmap/regcache.c +++ b/drivers/base/regmap/regcache.c @@ -221,12 +221,18 @@ EXPORT_SYMBOL_GPL(regcache_write); */ int regcache_sync(struct regmap *map) { + int ret; + const char *name; + BUG_ON(!map->cache_ops); if (map->cache_ops->sync) { dev_dbg(map->dev, "Syncing %s cache\n", map->cache_ops->name); - return map->cache_ops->sync(map); + name = map->cache_ops->name; + trace_regcache_sync(map->dev, name, "start"); + ret = map->cache_ops->sync(map); + trace_regcache_sync(map->dev, name, "stop"); } return 0; } diff --git a/include/trace/events/regmap.h b/include/trace/events/regmap.h index e35e37c378c6b325fe5e36288d9705dd2af17a71..1e3193b8fcc8f5863e665d91f287c4728f036346 100644 --- a/include/trace/events/regmap.h +++ b/include/trace/events/regmap.h @@ -106,6 +106,30 @@ DEFINE_EVENT(regmap_block, regmap_hw_write_done, TP_ARGS(dev, reg, count) ); +TRACE_EVENT(regcache_sync, + + TP_PROTO(struct device *dev, const char *type, + const char *status), + + TP_ARGS(dev, type, status), + + TP_STRUCT__entry( + __string( name, dev_name(dev) ) + __string( status, status ) + __string( type, type ) + __field( int, type ) + ), + + TP_fast_assign( + __assign_str(name, dev_name(dev)); + __assign_str(status, status); + __assign_str(type, type); + ), + + TP_printk("%s type=%s status=%s", __get_str(name), + __get_str(type), __get_str(status)) +); + #endif /* _TRACE_REGMAP_H */ /* This part must be outside protection */