This is a preparatory step for multiple regulator per device support.
Move the voltage/current variables to a new structure.

Signed-off-by: Viresh Kumar <viresh.ku...@linaro.org>
Tested-by: Dave Gerlach <d-gerl...@ti.com>
Reviewed-by: Stephen Boyd <sb...@codeaurora.org>
---
 drivers/base/power/opp/core.c    | 44 +++++++++++++++++++++-------------------
 drivers/base/power/opp/debugfs.c |  8 ++++----
 drivers/base/power/opp/of.c      | 18 ++++++++--------
 drivers/base/power/opp/opp.h     | 11 +++-------
 include/linux/pm_opp.h           | 16 +++++++++++++++
 5 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index 056527a3fb4e..8d6006151c9a 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -112,7 +112,7 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
        if (IS_ERR_OR_NULL(tmp_opp))
                pr_err("%s: Invalid parameters\n", __func__);
        else
-               v = tmp_opp->u_volt;
+               v = tmp_opp->supply.u_volt;
 
        return v;
 }
@@ -246,10 +246,10 @@ unsigned long dev_pm_opp_get_max_volt_latency(struct 
device *dev)
                if (!opp->available)
                        continue;
 
-               if (opp->u_volt_min < min_uV)
-                       min_uV = opp->u_volt_min;
-               if (opp->u_volt_max > max_uV)
-                       max_uV = opp->u_volt_max;
+               if (opp->supply.u_volt_min < min_uV)
+                       min_uV = opp->supply.u_volt_min;
+               if (opp->supply.u_volt_max > max_uV)
+                       max_uV = opp->supply.u_volt_max;
        }
 
        rcu_read_unlock();
@@ -637,14 +637,14 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long 
target_freq)
        if (IS_ERR(old_opp)) {
                old_u_volt = 0;
        } else {
-               old_u_volt = old_opp->u_volt;
-               old_u_volt_min = old_opp->u_volt_min;
-               old_u_volt_max = old_opp->u_volt_max;
+               old_u_volt = old_opp->supply.u_volt;
+               old_u_volt_min = old_opp->supply.u_volt_min;
+               old_u_volt_max = old_opp->supply.u_volt_max;
        }
 
-       u_volt = opp->u_volt;
-       u_volt_min = opp->u_volt_min;
-       u_volt_max = opp->u_volt_max;
+       u_volt = opp->supply.u_volt;
+       u_volt_min = opp->supply.u_volt_min;
+       u_volt_max = opp->supply.u_volt_max;
 
        reg = opp_table->regulator;
 
@@ -957,10 +957,11 @@ static bool _opp_supported_by_regulators(struct 
dev_pm_opp *opp,
        struct regulator *reg = opp_table->regulator;
 
        if (!IS_ERR(reg) &&
-           !regulator_is_supported_voltage(reg, opp->u_volt_min,
-                                           opp->u_volt_max)) {
+           !regulator_is_supported_voltage(reg, opp->supply.u_volt_min,
+                                           opp->supply.u_volt_max)) {
                pr_warn("%s: OPP minuV: %lu maxuV: %lu, not supported by 
regulator\n",
-                       __func__, opp->u_volt_min, opp->u_volt_max);
+                       __func__, opp->supply.u_volt_min,
+                       opp->supply.u_volt_max);
                return false;
        }
 
@@ -993,11 +994,12 @@ int _opp_add(struct device *dev, struct dev_pm_opp 
*new_opp,
 
                /* Duplicate OPPs */
                dev_warn(dev, "%s: duplicate OPPs detected. Existing: freq: 
%lu, volt: %lu, enabled: %d. New: freq: %lu, volt: %lu, enabled: %d\n",
-                        __func__, opp->rate, opp->u_volt, opp->available,
-                        new_opp->rate, new_opp->u_volt, new_opp->available);
+                        __func__, opp->rate, opp->supply.u_volt,
+                        opp->available, new_opp->rate, new_opp->supply.u_volt,
+                        new_opp->available);
 
-               return opp->available && new_opp->u_volt == opp->u_volt ?
-                       0 : -EEXIST;
+               return opp->available &&
+                      new_opp->supply.u_volt == opp->supply.u_volt ? 0 : 
-EEXIST;
        }
 
        new_opp->opp_table = opp_table;
@@ -1064,9 +1066,9 @@ int _opp_add_v1(struct device *dev, unsigned long freq, 
long u_volt,
        /* populate the opp table */
        new_opp->rate = freq;
        tol = u_volt * opp_table->voltage_tolerance_v1 / 100;
-       new_opp->u_volt = u_volt;
-       new_opp->u_volt_min = u_volt - tol;
-       new_opp->u_volt_max = u_volt + tol;
+       new_opp->supply.u_volt = u_volt;
+       new_opp->supply.u_volt_min = u_volt - tol;
+       new_opp->supply.u_volt_max = u_volt + tol;
        new_opp->available = true;
        new_opp->dynamic = dynamic;
 
diff --git a/drivers/base/power/opp/debugfs.c b/drivers/base/power/opp/debugfs.c
index ef1ae6b52042..c897676ca35f 100644
--- a/drivers/base/power/opp/debugfs.c
+++ b/drivers/base/power/opp/debugfs.c
@@ -63,16 +63,16 @@ int opp_debug_create_one(struct dev_pm_opp *opp, struct 
opp_table *opp_table)
        if (!debugfs_create_ulong("rate_hz", S_IRUGO, d, &opp->rate))
                return -ENOMEM;
 
-       if (!debugfs_create_ulong("u_volt_target", S_IRUGO, d, &opp->u_volt))
+       if (!debugfs_create_ulong("u_volt_target", S_IRUGO, d, 
&opp->supply.u_volt))
                return -ENOMEM;
 
-       if (!debugfs_create_ulong("u_volt_min", S_IRUGO, d, &opp->u_volt_min))
+       if (!debugfs_create_ulong("u_volt_min", S_IRUGO, d, 
&opp->supply.u_volt_min))
                return -ENOMEM;
 
-       if (!debugfs_create_ulong("u_volt_max", S_IRUGO, d, &opp->u_volt_max))
+       if (!debugfs_create_ulong("u_volt_max", S_IRUGO, d, 
&opp->supply.u_volt_max))
                return -ENOMEM;
 
-       if (!debugfs_create_ulong("u_amp", S_IRUGO, d, &opp->u_amp))
+       if (!debugfs_create_ulong("u_amp", S_IRUGO, d, &opp->supply.u_amp))
                return -ENOMEM;
 
        if (!debugfs_create_ulong("clock_latency_ns", S_IRUGO, d,
diff --git a/drivers/base/power/opp/of.c b/drivers/base/power/opp/of.c
index 5b3755e49731..bdf409d42126 100644
--- a/drivers/base/power/opp/of.c
+++ b/drivers/base/power/opp/of.c
@@ -148,14 +148,14 @@ static int opp_parse_supplies(struct dev_pm_opp *opp, 
struct device *dev,
                return -EINVAL;
        }
 
-       opp->u_volt = microvolt[0];
+       opp->supply.u_volt = microvolt[0];
 
        if (count == 1) {
-               opp->u_volt_min = opp->u_volt;
-               opp->u_volt_max = opp->u_volt;
+               opp->supply.u_volt_min = opp->supply.u_volt;
+               opp->supply.u_volt_max = opp->supply.u_volt;
        } else {
-               opp->u_volt_min = microvolt[1];
-               opp->u_volt_max = microvolt[2];
+               opp->supply.u_volt_min = microvolt[1];
+               opp->supply.u_volt_max = microvolt[2];
        }
 
        /* Search for "opp-microamp-<name>" */
@@ -173,7 +173,7 @@ static int opp_parse_supplies(struct dev_pm_opp *opp, 
struct device *dev,
        }
 
        if (prop && !of_property_read_u32(opp->np, name, &val))
-               opp->u_amp = val;
+               opp->supply.u_amp = val;
 
        return 0;
 }
@@ -303,9 +303,9 @@ static int _opp_add_static_v2(struct device *dev, struct 
device_node *np)
        mutex_unlock(&opp_table_lock);
 
        pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu 
latency:%lu\n",
-                __func__, new_opp->turbo, new_opp->rate, new_opp->u_volt,
-                new_opp->u_volt_min, new_opp->u_volt_max,
-                new_opp->clock_latency_ns);
+                __func__, new_opp->turbo, new_opp->rate,
+                new_opp->supply.u_volt, new_opp->supply.u_volt_min,
+                new_opp->supply.u_volt_max, new_opp->clock_latency_ns);
 
        /*
         * Notify the changes in the availability of the operable
diff --git a/drivers/base/power/opp/opp.h b/drivers/base/power/opp/opp.h
index 96cd30ac6c1d..8a02516542c2 100644
--- a/drivers/base/power/opp/opp.h
+++ b/drivers/base/power/opp/opp.h
@@ -61,10 +61,7 @@ extern struct list_head opp_tables;
  * @turbo:     true if turbo (boost) OPP
  * @suspend:   true if suspend OPP
  * @rate:      Frequency in hertz
- * @u_volt:    Target voltage in microvolts corresponding to this OPP
- * @u_volt_min:        Minimum voltage in microvolts corresponding to this OPP
- * @u_volt_max:        Maximum voltage in microvolts corresponding to this OPP
- * @u_amp:     Maximum current drawn by the device in microamperes
+ * @supply:    Power supply voltage/current values
  * @clock_latency_ns: Latency (in nanoseconds) of switching to this OPP's
  *             frequency from any other OPP's frequency.
  * @opp_table: points back to the opp_table struct this opp belongs to
@@ -83,10 +80,8 @@ struct dev_pm_opp {
        bool suspend;
        unsigned long rate;
 
-       unsigned long u_volt;
-       unsigned long u_volt_min;
-       unsigned long u_volt_max;
-       unsigned long u_amp;
+       struct dev_pm_opp_supply supply;
+
        unsigned long clock_latency_ns;
 
        struct opp_table *opp_table;
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index bca26157f5b6..f69126e2bb59 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -24,6 +24,22 @@ enum dev_pm_opp_event {
        OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE,
 };
 
+/**
+ * struct dev_pm_opp_supply - Power supply voltage/current values
+ * @u_volt:    Target voltage in microvolts corresponding to this OPP
+ * @u_volt_min:        Minimum voltage in microvolts corresponding to this OPP
+ * @u_volt_max:        Maximum voltage in microvolts corresponding to this OPP
+ * @u_amp:     Maximum current drawn by the device in microamperes
+ *
+ * This structure stores the voltage/current values for a single power supply.
+ */
+struct dev_pm_opp_supply {
+       unsigned long u_volt;
+       unsigned long u_volt_min;
+       unsigned long u_volt_max;
+       unsigned long u_amp;
+};
+
 #if defined(CONFIG_PM_OPP)
 
 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp);
-- 
2.7.1.410.g6faf27b

Reply via email to