Lines Matching refs:pg
530 static void tegra_powergate_disable_clocks(struct tegra_powergate *pg) in tegra_powergate_disable_clocks() argument
534 for (i = 0; i < pg->num_clks; i++) in tegra_powergate_disable_clocks()
535 clk_disable_unprepare(pg->clks[i]); in tegra_powergate_disable_clocks()
538 static int tegra_powergate_enable_clocks(struct tegra_powergate *pg) in tegra_powergate_enable_clocks() argument
543 for (i = 0; i < pg->num_clks; i++) { in tegra_powergate_enable_clocks()
544 err = clk_prepare_enable(pg->clks[i]); in tegra_powergate_enable_clocks()
553 clk_disable_unprepare(pg->clks[i]); in tegra_powergate_enable_clocks()
563 static int tegra_powergate_power_up(struct tegra_powergate *pg, in tegra_powergate_power_up() argument
568 err = reset_control_assert(pg->reset); in tegra_powergate_power_up()
574 err = tegra_powergate_set(pg->pmc, pg->id, true); in tegra_powergate_power_up()
580 err = tegra_powergate_enable_clocks(pg); in tegra_powergate_power_up()
586 err = __tegra_powergate_remove_clamping(pg->pmc, pg->id); in tegra_powergate_power_up()
592 err = reset_control_deassert(pg->reset); in tegra_powergate_power_up()
598 if (pg->pmc->soc->needs_mbist_war) in tegra_powergate_power_up()
599 err = tegra210_clk_handle_mbist_war(pg->id); in tegra_powergate_power_up()
604 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_up()
609 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_up()
613 tegra_powergate_set(pg->pmc, pg->id, false); in tegra_powergate_power_up()
618 static int tegra_powergate_power_down(struct tegra_powergate *pg) in tegra_powergate_power_down() argument
622 err = tegra_powergate_enable_clocks(pg); in tegra_powergate_power_down()
628 err = reset_control_assert(pg->reset); in tegra_powergate_power_down()
634 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_down()
638 err = tegra_powergate_set(pg->pmc, pg->id, false); in tegra_powergate_power_down()
645 tegra_powergate_enable_clocks(pg); in tegra_powergate_power_down()
647 reset_control_deassert(pg->reset); in tegra_powergate_power_down()
651 tegra_powergate_disable_clocks(pg); in tegra_powergate_power_down()
658 struct tegra_powergate *pg = to_powergate(domain); in tegra_genpd_power_on() local
659 struct device *dev = pg->pmc->dev; in tegra_genpd_power_on()
662 err = tegra_powergate_power_up(pg, true); in tegra_genpd_power_on()
665 pg->genpd.name, err); in tegra_genpd_power_on()
669 reset_control_release(pg->reset); in tegra_genpd_power_on()
677 struct tegra_powergate *pg = to_powergate(domain); in tegra_genpd_power_off() local
678 struct device *dev = pg->pmc->dev; in tegra_genpd_power_off()
681 err = reset_control_acquire(pg->reset); in tegra_genpd_power_off()
687 err = tegra_powergate_power_down(pg); in tegra_genpd_power_off()
690 pg->genpd.name, err); in tegra_genpd_power_off()
691 reset_control_release(pg->reset); in tegra_genpd_power_off()
760 struct tegra_powergate *pg; in tegra_powergate_sequence_power_up() local
766 pg = kzalloc(sizeof(*pg), GFP_KERNEL); in tegra_powergate_sequence_power_up()
767 if (!pg) in tegra_powergate_sequence_power_up()
770 pg->id = id; in tegra_powergate_sequence_power_up()
771 pg->clks = &clk; in tegra_powergate_sequence_power_up()
772 pg->num_clks = 1; in tegra_powergate_sequence_power_up()
773 pg->reset = rst; in tegra_powergate_sequence_power_up()
774 pg->pmc = pmc; in tegra_powergate_sequence_power_up()
776 err = tegra_powergate_power_up(pg, false); in tegra_powergate_sequence_power_up()
781 kfree(pg); in tegra_powergate_sequence_power_up()
916 static int tegra_powergate_of_get_clks(struct tegra_powergate *pg, in tegra_powergate_of_get_clks() argument
927 pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL); in tegra_powergate_of_get_clks()
928 if (!pg->clks) in tegra_powergate_of_get_clks()
932 pg->clks[i] = of_clk_get(np, i); in tegra_powergate_of_get_clks()
933 if (IS_ERR(pg->clks[i])) { in tegra_powergate_of_get_clks()
934 err = PTR_ERR(pg->clks[i]); in tegra_powergate_of_get_clks()
939 pg->num_clks = count; in tegra_powergate_of_get_clks()
945 clk_put(pg->clks[i]); in tegra_powergate_of_get_clks()
947 kfree(pg->clks); in tegra_powergate_of_get_clks()
952 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg, in tegra_powergate_of_get_resets() argument
955 struct device *dev = pg->pmc->dev; in tegra_powergate_of_get_resets()
958 pg->reset = of_reset_control_array_get_exclusive_released(np); in tegra_powergate_of_get_resets()
959 if (IS_ERR(pg->reset)) { in tegra_powergate_of_get_resets()
960 err = PTR_ERR(pg->reset); in tegra_powergate_of_get_resets()
965 err = reset_control_acquire(pg->reset); in tegra_powergate_of_get_resets()
972 err = reset_control_assert(pg->reset); in tegra_powergate_of_get_resets()
974 err = reset_control_deassert(pg->reset); in tegra_powergate_of_get_resets()
978 reset_control_release(pg->reset); in tegra_powergate_of_get_resets()
983 reset_control_release(pg->reset); in tegra_powergate_of_get_resets()
984 reset_control_put(pg->reset); in tegra_powergate_of_get_resets()
993 struct tegra_powergate *pg; in tegra_powergate_add() local
997 pg = kzalloc(sizeof(*pg), GFP_KERNEL); in tegra_powergate_add()
998 if (!pg) in tegra_powergate_add()
1014 pg->id = id; in tegra_powergate_add()
1015 pg->genpd.name = np->name; in tegra_powergate_add()
1016 pg->genpd.power_off = tegra_genpd_power_off; in tegra_powergate_add()
1017 pg->genpd.power_on = tegra_genpd_power_on; in tegra_powergate_add()
1018 pg->pmc = pmc; in tegra_powergate_add()
1020 off = !tegra_powergate_is_powered(pmc, pg->id); in tegra_powergate_add()
1022 err = tegra_powergate_of_get_clks(pg, np); in tegra_powergate_add()
1028 err = tegra_powergate_of_get_resets(pg, np, off); in tegra_powergate_add()
1036 WARN_ON(tegra_powergate_power_up(pg, true)); in tegra_powergate_add()
1041 err = pm_genpd_init(&pg->genpd, NULL, off); in tegra_powergate_add()
1048 err = of_genpd_add_provider_simple(np, &pg->genpd); in tegra_powergate_add()
1055 dev_dbg(dev, "added PM domain %s\n", pg->genpd.name); in tegra_powergate_add()
1060 pm_genpd_remove(&pg->genpd); in tegra_powergate_add()
1063 reset_control_put(pg->reset); in tegra_powergate_add()
1066 while (pg->num_clks--) in tegra_powergate_add()
1067 clk_put(pg->clks[pg->num_clks]); in tegra_powergate_add()
1069 kfree(pg->clks); in tegra_powergate_add()
1075 kfree(pg); in tegra_powergate_add()
1105 struct tegra_powergate *pg = to_powergate(genpd); in tegra_powergate_remove() local
1107 reset_control_put(pg->reset); in tegra_powergate_remove()
1109 while (pg->num_clks--) in tegra_powergate_remove()
1110 clk_put(pg->clks[pg->num_clks]); in tegra_powergate_remove()
1112 kfree(pg->clks); in tegra_powergate_remove()
1114 set_bit(pg->id, pmc->powergates_available); in tegra_powergate_remove()
1116 kfree(pg); in tegra_powergate_remove()