PM / devfreq: Switch to dev_pm_opp_find_freq_{ceil/floor}_indexed() APIs
authorManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Tue, 3 Oct 2023 11:12:28 +0000 (16:42 +0530)
committerChanwoo Choi <cw00.choi@samsung.com>
Sun, 8 Oct 2023 22:28:50 +0000 (07:28 +0900)
Some devfreq consumers like UFS driver need to work with multiple clocks
through the OPP framework. For this reason, OPP framework exposes the
_indexed() APIs for finding the floor/ceil of the supplied frequency of
the indexed clock. So let's use them in the devfreq driver.

Currently, the clock index of 0 is used which works fine for multiple as
well as single clock.

Link: https://lore.kernel.org/all/20231003111232.42663-3-manivannan.sadhasivam@linaro.org/
Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/devfreq/devfreq.c

index 474d81831ad36b153b145178937467f3dae0a038..b3a68d5833bd676b7a97c390baa2b0d8a2dda80c 100644 (file)
@@ -88,7 +88,7 @@ static unsigned long find_available_min_freq(struct devfreq *devfreq)
        struct dev_pm_opp *opp;
        unsigned long min_freq = 0;
 
-       opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
+       opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &min_freq, 0);
        if (IS_ERR(opp))
                min_freq = 0;
        else
@@ -102,7 +102,7 @@ static unsigned long find_available_max_freq(struct devfreq *devfreq)
        struct dev_pm_opp *opp;
        unsigned long max_freq = ULONG_MAX;
 
-       opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
+       opp = dev_pm_opp_find_freq_floor_indexed(devfreq->dev.parent, &max_freq, 0);
        if (IS_ERR(opp))
                max_freq = 0;
        else
@@ -196,7 +196,7 @@ static int set_freq_table(struct devfreq *devfreq)
                return -ENOMEM;
 
        for (i = 0, freq = 0; i < devfreq->max_state; i++, freq++) {
-               opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq);
+               opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &freq, 0);
                if (IS_ERR(opp)) {
                        devm_kfree(devfreq->dev.parent, devfreq->freq_table);
                        return PTR_ERR(opp);
@@ -2036,18 +2036,18 @@ struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
 
        if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
                /* The freq is an upper bound. opp should be lower */
-               opp = dev_pm_opp_find_freq_floor(dev, freq);
+               opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
 
                /* If not available, use the closest opp */
                if (opp == ERR_PTR(-ERANGE))
-                       opp = dev_pm_opp_find_freq_ceil(dev, freq);
+                       opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
        } else {
                /* The freq is an lower bound. opp should be higher */
-               opp = dev_pm_opp_find_freq_ceil(dev, freq);
+               opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0);
 
                /* If not available, use the closest opp */
                if (opp == ERR_PTR(-ERANGE))
-                       opp = dev_pm_opp_find_freq_floor(dev, freq);
+                       opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0);
        }
 
        return opp;