Lines Matching refs:pg
644 static void tegra_powergate_disable_clocks(struct tegra_powergate *pg)
648 for (i = 0; i < pg->num_clks; i++)
649 clk_disable_unprepare(pg->clks[i]);
652 static int tegra_powergate_enable_clocks(struct tegra_powergate *pg)
657 for (i = 0; i < pg->num_clks; i++) {
658 err = clk_prepare_enable(pg->clks[i]);
667 clk_disable_unprepare(pg->clks[i]);
677 static int tegra_powergate_power_up(struct tegra_powergate *pg,
682 err = reset_control_assert(pg->reset);
688 err = tegra_powergate_set(pg->pmc, pg->id, true);
694 err = tegra_powergate_enable_clocks(pg);
700 err = __tegra_powergate_remove_clamping(pg->pmc, pg->id);
706 err = reset_control_deassert(pg->reset);
712 if (pg->pmc->soc->needs_mbist_war)
713 err = tegra210_clk_handle_mbist_war(pg->id);
718 tegra_powergate_disable_clocks(pg);
723 tegra_powergate_disable_clocks(pg);
727 tegra_powergate_set(pg->pmc, pg->id, false);
732 static int tegra_powergate_power_down(struct tegra_powergate *pg)
736 err = tegra_powergate_enable_clocks(pg);
742 err = reset_control_assert(pg->reset);
748 tegra_powergate_disable_clocks(pg);
752 err = tegra_powergate_set(pg->pmc, pg->id, false);
759 tegra_powergate_enable_clocks(pg);
761 reset_control_deassert(pg->reset);
765 tegra_powergate_disable_clocks(pg);
772 struct tegra_powergate *pg = to_powergate(domain);
773 struct device *dev = pg->pmc->dev;
776 err = tegra_powergate_power_up(pg, true);
779 pg->genpd.name, err);
783 reset_control_release(pg->reset);
791 struct tegra_powergate *pg = to_powergate(domain);
792 struct device *dev = pg->pmc->dev;
795 err = reset_control_acquire(pg->reset);
801 err = tegra_powergate_power_down(pg);
804 pg->genpd.name, err);
805 reset_control_release(pg->reset);
874 struct tegra_powergate *pg;
880 pg = kzalloc(sizeof(*pg), GFP_KERNEL);
881 if (!pg)
884 pg->id = id;
885 pg->clks = &clk;
886 pg->num_clks = 1;
887 pg->reset = rst;
888 pg->pmc = pmc;
890 err = tegra_powergate_power_up(pg, false);
895 kfree(pg);
1030 static int tegra_powergate_of_get_clks(struct tegra_powergate *pg,
1041 pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL);
1042 if (!pg->clks)
1046 pg->clks[i] = of_clk_get(np, i);
1047 if (IS_ERR(pg->clks[i])) {
1048 err = PTR_ERR(pg->clks[i]);
1053 pg->num_clks = count;
1059 clk_put(pg->clks[i]);
1061 kfree(pg->clks);
1066 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
1069 struct device *dev = pg->pmc->dev;
1072 pg->reset = of_reset_control_array_get_exclusive_released(np);
1073 if (IS_ERR(pg->reset)) {
1074 err = PTR_ERR(pg->reset);
1079 err = reset_control_acquire(pg->reset);
1086 err = reset_control_assert(pg->reset);
1088 err = reset_control_deassert(pg->reset);
1092 reset_control_release(pg->reset);
1097 reset_control_release(pg->reset);
1098 reset_control_put(pg->reset);
1107 struct tegra_powergate *pg;
1111 pg = kzalloc(sizeof(*pg), GFP_KERNEL);
1112 if (!pg)
1128 pg->id = id;
1129 pg->genpd.name = np->name;
1130 pg->genpd.power_off = tegra_genpd_power_off;
1131 pg->genpd.power_on = tegra_genpd_power_on;
1132 pg->pmc = pmc;
1134 off = !tegra_powergate_is_powered(pmc, pg->id);
1136 err = tegra_powergate_of_get_clks(pg, np);
1142 err = tegra_powergate_of_get_resets(pg, np, off);
1150 WARN_ON(tegra_powergate_power_up(pg, true));
1155 err = pm_genpd_init(&pg->genpd, NULL, off);
1162 err = of_genpd_add_provider_simple(np, &pg->genpd);
1169 dev_dbg(dev, "added PM domain %s\n", pg->genpd.name);
1174 pm_genpd_remove(&pg->genpd);
1177 reset_control_put(pg->reset);
1180 while (pg->num_clks--)
1181 clk_put(pg->clks[pg->num_clks]);
1183 kfree(pg->clks);
1189 kfree(pg);
1219 struct tegra_powergate *pg = to_powergate(genpd);
1221 reset_control_put(pg->reset);
1223 while (pg->num_clks--)
1224 clk_put(pg->clks[pg->num_clks]);
1226 kfree(pg->clks);
1228 set_bit(pg->id, pmc->powergates_available);
1230 kfree(pg);