drm/lima: Convert to use resource-managed OPP API
Use resource-managed OPP API to simplify code. Signed-off-by: Yangtao Li <tiny.windzz@gmail.com> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
411281d24b
commit
864a270189
@ -99,20 +99,12 @@ void lima_devfreq_fini(struct lima_device *ldev)
|
||||
devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
|
||||
devfreq->devfreq = NULL;
|
||||
}
|
||||
|
||||
dev_pm_opp_of_remove_table(ldev->dev);
|
||||
|
||||
dev_pm_opp_put_regulators(devfreq->regulators_opp_table);
|
||||
dev_pm_opp_put_clkname(devfreq->clkname_opp_table);
|
||||
devfreq->regulators_opp_table = NULL;
|
||||
devfreq->clkname_opp_table = NULL;
|
||||
}
|
||||
|
||||
int lima_devfreq_init(struct lima_device *ldev)
|
||||
{
|
||||
struct thermal_cooling_device *cooling;
|
||||
struct device *dev = ldev->dev;
|
||||
struct opp_table *opp_table;
|
||||
struct devfreq *devfreq;
|
||||
struct lima_devfreq *ldevfreq = &ldev->devfreq;
|
||||
struct dev_pm_opp *opp;
|
||||
@ -125,40 +117,28 @@ int lima_devfreq_init(struct lima_device *ldev)
|
||||
|
||||
spin_lock_init(&ldevfreq->lock);
|
||||
|
||||
opp_table = dev_pm_opp_set_clkname(dev, "core");
|
||||
if (IS_ERR(opp_table)) {
|
||||
ret = PTR_ERR(opp_table);
|
||||
goto err_fini;
|
||||
}
|
||||
|
||||
ldevfreq->clkname_opp_table = opp_table;
|
||||
|
||||
opp_table = dev_pm_opp_set_regulators(dev,
|
||||
(const char *[]){ "mali" },
|
||||
1);
|
||||
if (IS_ERR(opp_table)) {
|
||||
ret = PTR_ERR(opp_table);
|
||||
ret = devm_pm_opp_set_clkname(dev, "core");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = devm_pm_opp_set_regulators(dev, (const char *[]){ "mali" }, 1);
|
||||
if (ret) {
|
||||
/* Continue if the optional regulator is missing */
|
||||
if (ret != -ENODEV)
|
||||
goto err_fini;
|
||||
} else {
|
||||
ldevfreq->regulators_opp_table = opp_table;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = dev_pm_opp_of_add_table(dev);
|
||||
ret = devm_pm_opp_of_add_table(dev);
|
||||
if (ret)
|
||||
goto err_fini;
|
||||
return ret;
|
||||
|
||||
lima_devfreq_reset(ldevfreq);
|
||||
|
||||
cur_freq = clk_get_rate(ldev->clk_gpu);
|
||||
|
||||
opp = devfreq_recommended_opp(dev, &cur_freq, 0);
|
||||
if (IS_ERR(opp)) {
|
||||
ret = PTR_ERR(opp);
|
||||
goto err_fini;
|
||||
}
|
||||
if (IS_ERR(opp))
|
||||
return PTR_ERR(opp);
|
||||
|
||||
lima_devfreq_profile.initial_freq = cur_freq;
|
||||
dev_pm_opp_put(opp);
|
||||
@ -167,8 +147,7 @@ int lima_devfreq_init(struct lima_device *ldev)
|
||||
DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
|
||||
if (IS_ERR(devfreq)) {
|
||||
dev_err(dev, "Couldn't initialize GPU devfreq\n");
|
||||
ret = PTR_ERR(devfreq);
|
||||
goto err_fini;
|
||||
return PTR_ERR(devfreq);
|
||||
}
|
||||
|
||||
ldevfreq->devfreq = devfreq;
|
||||
@ -180,10 +159,6 @@ int lima_devfreq_init(struct lima_device *ldev)
|
||||
ldevfreq->cooling = cooling;
|
||||
|
||||
return 0;
|
||||
|
||||
err_fini:
|
||||
lima_devfreq_fini(ldev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void lima_devfreq_record_busy(struct lima_devfreq *devfreq)
|
||||
|
@ -8,15 +8,12 @@
|
||||
#include <linux/ktime.h>
|
||||
|
||||
struct devfreq;
|
||||
struct opp_table;
|
||||
struct thermal_cooling_device;
|
||||
|
||||
struct lima_device;
|
||||
|
||||
struct lima_devfreq {
|
||||
struct devfreq *devfreq;
|
||||
struct opp_table *clkname_opp_table;
|
||||
struct opp_table *regulators_opp_table;
|
||||
struct thermal_cooling_device *cooling;
|
||||
|
||||
ktime_t busy_time;
|
||||
|
Loading…
Reference in New Issue
Block a user