OPP: Pass rounded rate to _set_opp()
authorViresh Kumar <viresh.kumar@linaro.org>
Fri, 5 Jan 2024 08:25:37 +0000 (13:55 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2024 00:18:49 +0000 (16:18 -0800)
commit 7269c250db1b89cda72ca419b7bd5e37997309d6 upstream.

The OPP core finds the eventual frequency to set with the help of
clk_round_rate() and the same was earlier getting passed to _set_opp()
and that's what would get configured.

The commit 1efae8d2e777 ("OPP: Make dev_pm_opp_set_opp() independent of
frequency") mistakenly changed that. Fix it.

Fixes: 1efae8d2e777 ("OPP: Make dev_pm_opp_set_opp() independent of frequency")
Cc: v5.18+ <stable@vger.kernel.org> # v6.0+
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/opp/core.c

index 919cc53..bceb27b 100644 (file)
@@ -1322,12 +1322,12 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
                 * value of the frequency. In such a case, do not abort but
                 * configure the hardware to the desired frequency forcefully.
                 */
-               forced = opp_table->rate_clk_single != target_freq;
+               forced = opp_table->rate_clk_single != freq;
        }
 
-       ret = _set_opp(dev, opp_table, opp, &target_freq, forced);
+       ret = _set_opp(dev, opp_table, opp, &freq, forced);
 
-       if (target_freq)
+       if (freq)
                dev_pm_opp_put(opp);
 
 put_opp_table: