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 <ckee...@opensource.cirrus.com>
---
 drivers/regulator/core.c         |  9 +++++++++
 include/trace/events/regulator.h | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 941783a14b454..ec04fe8ece475 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4312,6 +4312,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)
@@ -4326,18 +4327,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);
                }
        }
 
diff --git a/include/trace/events/regulator.h b/include/trace/events/regulator.h
index b70583c32c08c..72b3ba93b0a5a 100644
--- a/include/trace/events/regulator.h
+++ b/include/trace/events/regulator.h
@@ -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.
-- 
2.11.0

Reply via email to