From 58d460fe45849342713867bf2cb16a2e2d11376b Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Fri, 14 Apr 2023 11:32:00 +0800 Subject: [PATCH] PM / devfreq: rockchip_dmc: Add system monitor support when no devfreq Signed-off-by: Finley Xiao Change-Id: Ib7cba347c705ea5159bc29a2268da9d63116f1e0 --- drivers/devfreq/rockchip_dmc.c | 47 ++++++++++------------------------ 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/drivers/devfreq/rockchip_dmc.c b/drivers/devfreq/rockchip_dmc.c index 15a9bb86bb23..9ddc74bd500d 100644 --- a/drivers/devfreq/rockchip_dmc.c +++ b/drivers/devfreq/rockchip_dmc.c @@ -2977,30 +2977,6 @@ static void rockchip_dmcfreq_parse_dt(struct rockchip_dmcfreq *dmcfreq) dmcfreq->touchboostpulse_duration_val = 500 * USEC_PER_MSEC; } -static int rockchip_dmcfreq_set_volt_only(struct rockchip_dmcfreq *dmcfreq) -{ - struct device *dev = dmcfreq->dev; - struct dev_pm_opp *opp; - unsigned long opp_volt, opp_rate = dmcfreq->rate; - int ret; - - opp = devfreq_recommended_opp(dev, &opp_rate, 0); - if (IS_ERR(opp)) { - dev_err(dev, "Failed to find opp for %lu Hz\n", opp_rate); - return PTR_ERR(opp); - } - opp_volt = dev_pm_opp_get_voltage(opp); - dev_pm_opp_put(opp); - - ret = regulator_set_voltage(dmcfreq->vdd_center, opp_volt, INT_MAX); - if (ret) { - dev_err(dev, "Cannot set voltage %lu uV\n", opp_volt); - return ret; - } - - return 0; -} - static int rockchip_dmcfreq_add_devfreq(struct rockchip_dmcfreq *dmcfreq) { struct devfreq_dev_profile *devp = &rockchip_devfreq_dmc_profile; @@ -3039,14 +3015,16 @@ static void rockchip_dmcfreq_register_notifier(struct rockchip_dmcfreq *dmcfreq) { int ret; - if (vop_register_dmc()) - dev_err(dmcfreq->dev, "fail to register notify to vop.\n"); + if (dmcfreq->system_status_en || dmcfreq->info.auto_freq_en) { + if (vop_register_dmc()) + dev_err(dmcfreq->dev, "fail to register notify to vop.\n"); - dmcfreq->status_nb.notifier_call = - rockchip_dmcfreq_system_status_notifier; - ret = rockchip_register_system_status_notifier(&dmcfreq->status_nb); - if (ret) - dev_err(dmcfreq->dev, "failed to register system_status nb\n"); + dmcfreq->status_nb.notifier_call = + rockchip_dmcfreq_system_status_notifier; + ret = rockchip_register_system_status_notifier(&dmcfreq->status_nb); + if (ret) + dev_err(dmcfreq->dev, "failed to register system_status nb\n"); + } dmcfreq->panic_nb.notifier_call = rockchip_dmcfreq_panic_notifier; ret = atomic_notifier_chain_register(&panic_notifier_list, @@ -3338,13 +3316,16 @@ static int rockchip_dmcfreq_probe(struct platform_device *pdev) return ret; rockchip_dmcfreq_parse_dt(data); + + platform_set_drvdata(pdev, data); + if (!data->system_status_en && !data->info.auto_freq_en) { dev_info(dev, "don't add devfreq feature\n"); - return rockchip_dmcfreq_set_volt_only(data); + rockchip_dmcfreq_register_notifier(data); + return 0; } cpu_latency_qos_add_request(&pm_qos, PM_QOS_DEFAULT_VALUE); - platform_set_drvdata(pdev, data); ret = devfreq_add_governor(&devfreq_dmc_ondemand); if (ret)