regulator: core: Add regulator bypass trace points
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Fri, 29 May 2020 15:22:16 +0000 (16:22 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 29 May 2020 16:17:02 +0000 (17:17 +0100)
Add new trace points for the start and end of enabling bypass on a
regulator, to allow monitoring of when regulators are moved into bypass
and how long that takes.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20200529152216.9671-1-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/core.c
include/trace/events/regulator.h

index 370c655..03154f5 100644 (file)
@@ -4321,6 +4321,7 @@ EXPORT_SYMBOL_GPL(regulator_set_load);
 int regulator_allow_bypass(struct regulator *regulator, bool enable)
 {
        struct regulator_dev *rdev = regulator->rdev;
+       const char *name = rdev_get_name(rdev);
        int ret = 0;
 
        if (!rdev->desc->ops->set_bypass)
@@ -4335,18 +4336,26 @@ int regulator_allow_bypass(struct regulator *regulator, bool enable)
                rdev->bypass_count++;
 
                if (rdev->bypass_count == rdev->open_count) {
+                       trace_regulator_bypass_enable(name);
+
                        ret = rdev->desc->ops->set_bypass(rdev, enable);
                        if (ret != 0)
                                rdev->bypass_count--;
+                       else
+                               trace_regulator_bypass_enable_complete(name);
                }
 
        } else if (!enable && regulator->bypass) {
                rdev->bypass_count--;
 
                if (rdev->bypass_count != rdev->open_count) {
+                       trace_regulator_bypass_disable(name);
+
                        ret = rdev->desc->ops->set_bypass(rdev, enable);
                        if (ret != 0)
                                rdev->bypass_count++;
+                       else
+                               trace_regulator_bypass_disable_complete(name);
                }
        }
 
index b70583c..72b3ba9 100644 (file)
@@ -70,6 +70,38 @@ DEFINE_EVENT(regulator_basic, regulator_disable_complete,
 
 );
 
+DEFINE_EVENT(regulator_basic, regulator_bypass_enable,
+
+       TP_PROTO(const char *name),
+
+       TP_ARGS(name)
+
+);
+
+DEFINE_EVENT(regulator_basic, regulator_bypass_enable_complete,
+
+       TP_PROTO(const char *name),
+
+       TP_ARGS(name)
+
+);
+
+DEFINE_EVENT(regulator_basic, regulator_bypass_disable,
+
+       TP_PROTO(const char *name),
+
+       TP_ARGS(name)
+
+);
+
+DEFINE_EVENT(regulator_basic, regulator_bypass_disable_complete,
+
+       TP_PROTO(const char *name),
+
+       TP_ARGS(name)
+
+);
+
 /*
  * Events that take a range of numerical values, mostly for voltages
  * and so on.