Commit d744d035 authored by Weiyi Lu's avatar Weiyi Lu Committed by Matthias Brugger
Browse files

soc: mediatek: Refactor regulator control



Put regulator enable and disable control in separate functions.

Signed-off-by: default avatarWeiyi Lu <weiyi.lu@mediatek.com>
Signed-off-by: default avatarMatthias Brugger <matthias.bgg@gmail.com>
parent 90a94314
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -191,6 +191,22 @@ static int scpsys_domain_is_on(struct scp_domain *scpd)
	return -EINVAL;
}

static int scpsys_regulator_enable(struct scp_domain *scpd)
{
	if (!scpd->supply)
		return 0;

	return regulator_enable(scpd->supply);
}

static int scpsys_regulator_disable(struct scp_domain *scpd)
{
	if (!scpd->supply)
		return 0;

	return regulator_disable(scpd->supply);
}

static int scpsys_power_on(struct generic_pm_domain *genpd)
{
	struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
@@ -201,11 +217,9 @@ static int scpsys_power_on(struct generic_pm_domain *genpd)
	int ret, tmp;
	int i;

	if (scpd->supply) {
		ret = regulator_enable(scpd->supply);
		if (ret)
	ret = scpsys_regulator_enable(scpd);
	if (ret < 0)
		return ret;
	}

	for (i = 0; i < MAX_CLKS && scpd->clk[i]; i++) {
		ret = clk_prepare_enable(scpd->clk[i]);
@@ -273,8 +287,7 @@ err_pwr_ack:
			clk_disable_unprepare(scpd->clk[i]);
	}
err_clk:
	if (scpd->supply)
		regulator_disable(scpd->supply);
	scpsys_regulator_disable(scpd);

	dev_err(scp->dev, "Failed to power on domain %s\n", genpd->name);

@@ -333,8 +346,9 @@ static int scpsys_power_off(struct generic_pm_domain *genpd)
	for (i = 0; i < MAX_CLKS && scpd->clk[i]; i++)
		clk_disable_unprepare(scpd->clk[i]);

	if (scpd->supply)
		regulator_disable(scpd->supply);
	ret = scpsys_regulator_disable(scpd);
	if (ret < 0)
		goto out;

	return 0;