Merge tag 'wireless-drivers-for-davem-2019-03-19' of git://git.kernel.org/pub/scm...
[linux-2.6-microblaze.git] / drivers / opp / core.c
index 18f1639..0420f7e 100644 (file)
@@ -130,6 +130,24 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq);
 
+/**
+ * dev_pm_opp_get_level() - Gets the level corresponding to an available opp
+ * @opp:       opp for which level value has to be returned for
+ *
+ * Return: level read from device tree corresponding to the opp, else
+ * return 0.
+ */
+unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp)
+{
+       if (IS_ERR_OR_NULL(opp) || !opp->available) {
+               pr_err("%s: Invalid parameters\n", __func__);
+               return 0;
+       }
+
+       return opp->level;
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_get_level);
+
 /**
  * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not
  * @opp: opp for which turbo mode is being verified
@@ -533,9 +551,8 @@ static int _set_opp_voltage(struct device *dev, struct regulator *reg,
        return ret;
 }
 
-static inline int
-_generic_set_opp_clk_only(struct device *dev, struct clk *clk,
-                         unsigned long old_freq, unsigned long freq)
+static inline int _generic_set_opp_clk_only(struct device *dev, struct clk *clk,
+                                           unsigned long freq)
 {
        int ret;
 
@@ -572,7 +589,7 @@ static int _generic_set_opp_regulator(const struct opp_table *opp_table,
        }
 
        /* Change frequency */
-       ret = _generic_set_opp_clk_only(dev, opp_table->clk, old_freq, freq);
+       ret = _generic_set_opp_clk_only(dev, opp_table->clk, freq);
        if (ret)
                goto restore_voltage;
 
@@ -586,7 +603,7 @@ static int _generic_set_opp_regulator(const struct opp_table *opp_table,
        return 0;
 
 restore_freq:
-       if (_generic_set_opp_clk_only(dev, opp_table->clk, freq, old_freq))
+       if (_generic_set_opp_clk_only(dev, opp_table->clk, old_freq))
                dev_err(dev, "%s: failed to restore old-freq (%lu Hz)\n",
                        __func__, old_freq);
 restore_voltage:
@@ -743,7 +760,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
                old_freq, freq);
 
        /* Scaling up? Configure required OPPs before frequency */
-       if (freq > old_freq) {
+       if (freq >= old_freq) {
                ret = _set_required_opps(dev, opp_table, opp);
                if (ret)
                        goto put_opp;
@@ -759,7 +776,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
                                                 opp->supplies);
        } else {
                /* Only frequency scaling */
-               ret = _generic_set_opp_clk_only(dev, clk, old_freq, freq);
+               ret = _generic_set_opp_clk_only(dev, clk, freq);
        }
 
        /* Scaling down? Configure required OPPs after frequency */
@@ -793,7 +810,6 @@ static struct opp_device *_add_opp_dev_unlocked(const struct device *dev,
                                                struct opp_table *opp_table)
 {
        struct opp_device *opp_dev;
-       int ret;
 
        opp_dev = kzalloc(sizeof(*opp_dev), GFP_KERNEL);
        if (!opp_dev)
@@ -805,10 +821,7 @@ static struct opp_device *_add_opp_dev_unlocked(const struct device *dev,
        list_add(&opp_dev->node, &opp_table->dev_list);
 
        /* Create debugfs entries for the opp_table */
-       ret = opp_debug_register(opp_dev, opp_table);
-       if (ret)
-               dev_err(dev, "%s: Failed to register opp debugfs (%d)\n",
-                       __func__, ret);
+       opp_debug_register(opp_dev, opp_table);
 
        return opp_dev;
 }
@@ -1229,10 +1242,7 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
        new_opp->opp_table = opp_table;
        kref_init(&new_opp->kref);
 
-       ret = opp_debug_create_one(new_opp, opp_table);
-       if (ret)
-               dev_err(dev, "%s: Failed to register opp to debugfs (%d)\n",
-                       __func__, ret);
+       opp_debug_create_one(new_opp, opp_table);
 
        if (!_opp_supported_by_regulators(new_opp, opp_table)) {
                new_opp->available = false;