soc: rockchip: power-domain: export idle request
authorCaesar Wang <wxt@rock-chips.com>
Fri, 18 Nov 2016 08:24:20 +0000 (16:24 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Wed, 7 Dec 2016 06:53:43 +0000 (14:53 +0800)
We need to put the power status of HEVC IP into IDLE unless
we can't reset that IP or the SoC would crash down.
rockchip_pmu_idle_request(dev, true)---> enter idle
rockchip_pmu_idle_request(dev, false)---> exit idle

Change-Id: I76733efd2de4f7ee183c1b6bd1545d60038ee31b
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Randy Li <randy.li@rock-chips.com>
drivers/soc/rockchip/pm_domains.c
include/linux/rockchip/pmu.h

index c102dbc4ef6aded3b19b08f708463aed5ba13a58..1656c67bb1fe2600cc14ac26f1be4915125e61e5 100644 (file)
@@ -158,6 +158,29 @@ static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
        return 0;
 }
 
+int rockchip_pmu_idle_request(struct device *dev, bool idle)
+{
+       struct generic_pm_domain *genpd;
+       struct rockchip_pm_domain *pd;
+       int ret;
+
+       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);
+
+       mutex_lock(&pd->pmu->mutex);
+       ret = rockchip_pmu_set_idle_request(pd, idle);
+       mutex_unlock(&pd->pmu->mutex);
+
+       return ret;
+}
+EXPORT_SYMBOL(rockchip_pmu_idle_request);
+
 static int rockchip_pmu_save_qos(struct rockchip_pm_domain *pd)
 {
        int i;
index ece7b277f5b95caf8b1c9ad3841e6cbec96e222d..5f983976a4eae7f3eb581ad1b30e2bf82c4fdd29 100644 (file)
@@ -134,6 +134,7 @@ struct rockchip_pmu_operations {
        int (*set_idle_request)(enum pmu_idle_req req, bool idle);
 };
 
+int rockchip_pmu_idle_request(struct device *dev, bool idle);
 extern struct rockchip_pmu_operations rockchip_pmu_ops;
 
 #endif