}
static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
- struct device_node *np)
+ struct device_node *np, bool off)
{
struct reset_control *rst;
unsigned int i, count;
err = PTR_ERR(pg->resets[i]);
goto error;
}
+
+ if (off)
+ err = reset_control_assert(pg->resets[i]);
+ else
+ err = reset_control_deassert(pg->resets[i]);
+
+ if (err) {
+ reset_control_put(pg->resets[i]);
+ goto error;
+ }
}
pg->num_resets = count;
pg->genpd.power_on = tegra_genpd_power_on;
pg->pmc = pmc;
+ off = !tegra_powergate_is_powered(pg->id);
+
if (tegra_powergate_of_get_clks(pg, np))
goto set_available;
- if (tegra_powergate_of_get_resets(pg, np))
+ if (tegra_powergate_of_get_resets(pg, np, off))
goto remove_clks;
- off = !tegra_powergate_is_powered(pg->id);
-
pm_genpd_init(&pg->genpd, NULL, off);
if (of_genpd_add_provider_simple(np, &pg->genpd))