From 43a0c422db98d28d9a4e8f7540229a42fe5266e4 Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Thu, 19 Mar 2020 16:22:05 +0800 Subject: [PATCH] soc: rockchip: power-domain: export pd on/off and pd status Some special applications of video may require: rockchip_pmu_pd_on(dev)---> force power on pd rockchip_pmu_pd_off(dev)---> force power down pd rockchip_pmu_pd_is_on(dev)---> pd status Change-Id: I264d76559aef0b0540130bf29a4635a3f5380a7c Signed-off-by: Elaine Zhang --- drivers/soc/rockchip/pm_domains.c | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c index e70753a325fc..66328029974d 100644 --- a/drivers/soc/rockchip/pm_domains.c +++ b/drivers/soc/rockchip/pm_domains.c @@ -499,6 +499,65 @@ static int rockchip_pd_power_off(struct generic_pm_domain *domain) return rockchip_pd_power(pd, false); } +int rockchip_pmu_pd_on(struct device *dev) +{ + struct generic_pm_domain *genpd; + struct rockchip_pm_domain *pd; + + if (IS_ERR_OR_NULL(dev)) + return -EINVAL; + + if (IS_ERR_OR_NULL(dev->pm_domain)) + return -EINVAL; + + genpd = pd_to_genpd(dev->pm_domain); + pd = to_rockchip_pd(genpd); + + return rockchip_pd_power(pd, true); +} +EXPORT_SYMBOL(rockchip_pmu_pd_on); + +int rockchip_pmu_pd_off(struct device *dev) +{ + struct generic_pm_domain *genpd; + struct rockchip_pm_domain *pd; + + if (IS_ERR_OR_NULL(dev)) + return -EINVAL; + + if (IS_ERR_OR_NULL(dev->pm_domain)) + return -EINVAL; + + genpd = pd_to_genpd(dev->pm_domain); + pd = to_rockchip_pd(genpd); + + return rockchip_pd_power(pd, false); +} +EXPORT_SYMBOL(rockchip_pmu_pd_off); + +bool rockchip_pmu_pd_is_on(struct device *dev) +{ + struct generic_pm_domain *genpd; + struct rockchip_pm_domain *pd; + bool is_on; + + if (IS_ERR_OR_NULL(dev)) + return false; + + if (IS_ERR_OR_NULL(dev->pm_domain)) + return false; + + genpd = pd_to_genpd(dev->pm_domain); + pd = to_rockchip_pd(genpd); + + rockchip_pmu_lock(pd); + is_on = rockchip_pmu_domain_is_on(pd); + rockchip_pmu_unlock(pd); + + return is_on; +} +EXPORT_SYMBOL(rockchip_pmu_pd_is_on); + static int rockchip_pd_attach_dev(struct generic_pm_domain *genpd, struct device *dev) {