|
@@ -408,7 +408,7 @@ static struct genpd_onecell_data imx_gpc_onecell_data = {
|
|
|
static int imx_gpc_genpd_init(struct device *dev, struct regulator *pu_reg)
|
|
|
{
|
|
|
struct clk *clk;
|
|
|
- int i;
|
|
|
+ int i, ret;
|
|
|
|
|
|
imx6q_pu_domain.reg = pu_reg;
|
|
|
|
|
@@ -432,12 +432,20 @@ static int imx_gpc_genpd_init(struct device *dev, struct regulator *pu_reg)
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(imx_gpc_domains); i++)
|
|
|
pm_genpd_init(imx_gpc_domains[i], NULL, false);
|
|
|
- return of_genpd_add_provider_onecell(dev->of_node,
|
|
|
+
|
|
|
+ ret = of_genpd_add_provider_onecell(dev->of_node,
|
|
|
&imx_gpc_onecell_data);
|
|
|
+ if (ret)
|
|
|
+ goto power_off;
|
|
|
+
|
|
|
+ return 0;
|
|
|
|
|
|
+power_off:
|
|
|
+ imx6q_pm_pu_power_off(&imx6q_pu_domain.base);
|
|
|
clk_err:
|
|
|
while (i--)
|
|
|
clk_put(imx6q_pu_domain.clk[i]);
|
|
|
+ imx6q_pu_domain.reg = NULL;
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|