Lines Matching refs:pd
78 static bool rockchip_pmu_domain_is_idle(struct rockchip_pm_domain *pd) in rockchip_pmu_domain_is_idle() argument
80 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_idle()
81 const struct rockchip_domain_info *pd_info = pd->info; in rockchip_pmu_domain_is_idle()
88 static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd, in rockchip_pmu_set_idle_request() argument
91 const struct rockchip_domain_info *pd_info = pd->info; in rockchip_pmu_set_idle_request()
92 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_set_idle_request()
104 while (rockchip_pmu_domain_is_idle(pd) != idle) in rockchip_pmu_set_idle_request()
110 static bool rockchip_pmu_domain_is_on(struct rockchip_pm_domain *pd) in rockchip_pmu_domain_is_on() argument
112 struct rockchip_pmu *pmu = pd->pmu; in rockchip_pmu_domain_is_on()
118 return !(val & pd->info->status_mask); in rockchip_pmu_domain_is_on()
121 static void rockchip_do_pmu_set_power_domain(struct rockchip_pm_domain *pd, in rockchip_do_pmu_set_power_domain() argument
124 struct rockchip_pmu *pmu = pd->pmu; in rockchip_do_pmu_set_power_domain()
127 pd->info->pwr_mask, on ? 0 : -1U); in rockchip_do_pmu_set_power_domain()
131 while (rockchip_pmu_domain_is_on(pd) != on) in rockchip_do_pmu_set_power_domain()
135 static int rockchip_pd_power(struct rockchip_pm_domain *pd, bool power_on) in rockchip_pd_power() argument
139 mutex_lock(&pd->pmu->mutex); in rockchip_pd_power()
141 if (rockchip_pmu_domain_is_on(pd) != power_on) { in rockchip_pd_power()
142 for (i = 0; i < pd->num_clks; i++) in rockchip_pd_power()
143 clk_enable(pd->clks[i]); in rockchip_pd_power()
149 rockchip_pmu_set_idle_request(pd, true); in rockchip_pd_power()
152 rockchip_do_pmu_set_power_domain(pd, power_on); in rockchip_pd_power()
156 rockchip_pmu_set_idle_request(pd, false); in rockchip_pd_power()
161 for (i = pd->num_clks - 1; i >= 0; i--) in rockchip_pd_power()
162 clk_disable(pd->clks[i]); in rockchip_pd_power()
165 mutex_unlock(&pd->pmu->mutex); in rockchip_pd_power()
171 struct rockchip_pm_domain *pd = to_rockchip_pd(domain); in rockchip_pd_power_on() local
173 return rockchip_pd_power(pd, true); in rockchip_pd_power_on()
178 struct rockchip_pm_domain *pd = to_rockchip_pd(domain); in rockchip_pd_power_off() local
180 return rockchip_pd_power(pd, false); in rockchip_pd_power_off()
225 struct rockchip_pm_domain *pd; in rockchip_pm_add_one_domain() local
254 pd = devm_kzalloc(pmu->dev, in rockchip_pm_add_one_domain()
255 sizeof(*pd) + clk_cnt * sizeof(pd->clks[0]), in rockchip_pm_add_one_domain()
257 if (!pd) in rockchip_pm_add_one_domain()
260 pd->info = pd_info; in rockchip_pm_add_one_domain()
261 pd->pmu = pmu; in rockchip_pm_add_one_domain()
282 pd->clks[pd->num_clks++] = clk; in rockchip_pm_add_one_domain()
288 error = rockchip_pd_power(pd, true); in rockchip_pm_add_one_domain()
296 pd->genpd.name = node->name; in rockchip_pm_add_one_domain()
297 pd->genpd.power_off = rockchip_pd_power_off; in rockchip_pm_add_one_domain()
298 pd->genpd.power_on = rockchip_pd_power_on; in rockchip_pm_add_one_domain()
299 pd->genpd.attach_dev = rockchip_pd_attach_dev; in rockchip_pm_add_one_domain()
300 pd->genpd.detach_dev = rockchip_pd_detach_dev; in rockchip_pm_add_one_domain()
301 pd->genpd.flags = GENPD_FLAG_PM_CLK; in rockchip_pm_add_one_domain()
302 pm_genpd_init(&pd->genpd, NULL, false); in rockchip_pm_add_one_domain()
304 pmu->genpd_data.domains[id] = &pd->genpd; in rockchip_pm_add_one_domain()
309 clk_unprepare(pd->clks[i]); in rockchip_pm_add_one_domain()
310 clk_put(pd->clks[i]); in rockchip_pm_add_one_domain()
315 static void rockchip_pm_remove_one_domain(struct rockchip_pm_domain *pd) in rockchip_pm_remove_one_domain() argument
319 for (i = 0; i < pd->num_clks; i++) { in rockchip_pm_remove_one_domain()
320 clk_unprepare(pd->clks[i]); in rockchip_pm_remove_one_domain()
321 clk_put(pd->clks[i]); in rockchip_pm_remove_one_domain()
325 mutex_lock(&pd->pmu->mutex); in rockchip_pm_remove_one_domain()
326 pd->num_clks = 0; in rockchip_pm_remove_one_domain()
327 mutex_unlock(&pd->pmu->mutex); in rockchip_pm_remove_one_domain()
335 struct rockchip_pm_domain *pd; in rockchip_pm_domain_cleanup() local
341 pd = to_rockchip_pd(genpd); in rockchip_pm_domain_cleanup()
342 rockchip_pm_remove_one_domain(pd); in rockchip_pm_domain_cleanup()