Lines Matching refs:pg
344 static void tegra_powergate_disable_clocks(struct tegra_powergate *pg) in tegra_powergate_disable_clocks() argument
348 for (i = 0; i < pg->num_clks; i++) in tegra_powergate_disable_clocks()
349 clk_disable_unprepare(pg->clks[i]); in tegra_powergate_disable_clocks()
352 static int tegra_powergate_enable_clocks(struct tegra_powergate *pg) in tegra_powergate_enable_clocks() argument
357 for (i = 0; i < pg->num_clks; i++) { in tegra_powergate_enable_clocks()
358 err = clk_prepare_enable(pg->clks[i]); in tegra_powergate_enable_clocks()
367 clk_disable_unprepare(pg->clks[i]); in tegra_powergate_enable_clocks()
377 static int tegra_powergate_power_up(struct tegra_powergate *pg, in tegra_powergate_power_up() argument
382 err = reset_control_assert(pg->reset); in tegra_powergate_power_up()
388 err = tegra_powergate_set(pg->id, true); in tegra_powergate_power_up()
394 err = tegra_powergate_enable_clocks(pg); in tegra_powergate_power_up()
400 err = __tegra_powergate_remove_clamping(pg->id); in tegra_powergate_power_up()
406 err = reset_control_deassert(pg->reset); in tegra_powergate_power_up()
412 if (pg->pmc->soc->needs_mbist_war) in tegra_powergate_power_up()
413 err = tegra210_clk_handle_mbist_war(pg->id); in tegra_powergate_power_up()
418 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_up()
423 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_up()
427 tegra_powergate_set(pg->id, false); in tegra_powergate_power_up()
432 static int tegra_powergate_power_down(struct tegra_powergate *pg) in tegra_powergate_power_down() argument
436 err = tegra_powergate_enable_clocks(pg); in tegra_powergate_power_down()
442 err = reset_control_assert(pg->reset); in tegra_powergate_power_down()
448 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_down()
452 err = tegra_powergate_set(pg->id, false); in tegra_powergate_power_down()
459 tegra_powergate_enable_clocks(pg); in tegra_powergate_power_down()
461 reset_control_deassert(pg->reset); in tegra_powergate_power_down()
465 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_down()
472 struct tegra_powergate *pg = to_powergate(domain); in tegra_genpd_power_on() local
475 err = tegra_powergate_power_up(pg, true); in tegra_genpd_power_on()
477 pr_err("failed to turn on PM domain %s: %d\n", pg->genpd.name, in tegra_genpd_power_on()
485 struct tegra_powergate *pg = to_powergate(domain); in tegra_genpd_power_off() local
488 err = tegra_powergate_power_down(pg); in tegra_genpd_power_off()
491 pg->genpd.name, err); in tegra_genpd_power_off()
563 struct tegra_powergate *pg; in tegra_powergate_sequence_power_up() local
569 pg = kzalloc(sizeof(*pg), GFP_KERNEL); in tegra_powergate_sequence_power_up()
570 if (!pg) in tegra_powergate_sequence_power_up()
573 pg->id = id; in tegra_powergate_sequence_power_up()
574 pg->clks = &clk; in tegra_powergate_sequence_power_up()
575 pg->num_clks = 1; in tegra_powergate_sequence_power_up()
576 pg->reset = rst; in tegra_powergate_sequence_power_up()
577 pg->pmc = pmc; in tegra_powergate_sequence_power_up()
579 err = tegra_powergate_power_up(pg, false); in tegra_powergate_sequence_power_up()
583 kfree(pg); in tegra_powergate_sequence_power_up()
728 static int tegra_powergate_of_get_clks(struct tegra_powergate *pg, in tegra_powergate_of_get_clks() argument
739 pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL); in tegra_powergate_of_get_clks()
740 if (!pg->clks) in tegra_powergate_of_get_clks()
744 pg->clks[i] = of_clk_get(np, i); in tegra_powergate_of_get_clks()
745 if (IS_ERR(pg->clks[i])) { in tegra_powergate_of_get_clks()
746 err = PTR_ERR(pg->clks[i]); in tegra_powergate_of_get_clks()
751 pg->num_clks = count; in tegra_powergate_of_get_clks()
757 clk_put(pg->clks[i]); in tegra_powergate_of_get_clks()
759 kfree(pg->clks); in tegra_powergate_of_get_clks()
764 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg, in tegra_powergate_of_get_resets() argument
769 pg->reset = of_reset_control_array_get_exclusive(np); in tegra_powergate_of_get_resets()
770 if (IS_ERR(pg->reset)) { in tegra_powergate_of_get_resets()
771 err = PTR_ERR(pg->reset); in tegra_powergate_of_get_resets()
777 err = reset_control_assert(pg->reset); in tegra_powergate_of_get_resets()
779 err = reset_control_deassert(pg->reset); in tegra_powergate_of_get_resets()
782 reset_control_put(pg->reset); in tegra_powergate_of_get_resets()
789 struct tegra_powergate *pg; in tegra_powergate_add() local
793 pg = kzalloc(sizeof(*pg), GFP_KERNEL); in tegra_powergate_add()
794 if (!pg) in tegra_powergate_add()
809 pg->id = id; in tegra_powergate_add()
810 pg->genpd.name = np->name; in tegra_powergate_add()
811 pg->genpd.power_off = tegra_genpd_power_off; in tegra_powergate_add()
812 pg->genpd.power_on = tegra_genpd_power_on; in tegra_powergate_add()
813 pg->pmc = pmc; in tegra_powergate_add()
815 off = !tegra_powergate_is_powered(pg->id); in tegra_powergate_add()
817 err = tegra_powergate_of_get_clks(pg, np); in tegra_powergate_add()
823 err = tegra_powergate_of_get_resets(pg, np, off); in tegra_powergate_add()
831 WARN_ON(tegra_powergate_power_up(pg, true)); in tegra_powergate_add()
847 WARN_ON(tegra_powergate_power_up(pg, true)); in tegra_powergate_add()
852 err = pm_genpd_init(&pg->genpd, NULL, off); in tegra_powergate_add()
859 err = of_genpd_add_provider_simple(np, &pg->genpd); in tegra_powergate_add()
866 pr_debug("added PM domain %s\n", pg->genpd.name); in tegra_powergate_add()
871 pm_genpd_remove(&pg->genpd); in tegra_powergate_add()
874 reset_control_put(pg->reset); in tegra_powergate_add()
877 while (pg->num_clks--) in tegra_powergate_add()
878 clk_put(pg->clks[pg->num_clks]); in tegra_powergate_add()
880 kfree(pg->clks); in tegra_powergate_add()
886 kfree(pg); in tegra_powergate_add()