Skip to content

Commit

Permalink
mmc: host: omap_hsmmc: add separate function to set pbias
Browse files Browse the repository at this point in the history
No functional change. Cleanup omap_hsmmc_set_power by adding separate
functions to set pbias and invoke it from omap_hsmmc_set_power.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Tested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
  • Loading branch information
Kishon Vijay Abraham I authored and Ulf Hansson committed Aug 27, 2015
1 parent 2a17f84 commit ec85c95
Showing 1 changed file with 48 additions and 30 deletions.
78 changes: 48 additions & 30 deletions drivers/mmc/host/omap_hsmmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,48 @@ static int omap_hsmmc_disable_supply(struct mmc_host *mmc)
return ret;
}

static int omap_hsmmc_set_pbias(struct omap_hsmmc_host *host, bool power_on,
int vdd)
{
int ret;

if (!host->pbias)
return 0;

if (power_on) {
if (vdd <= VDD_165_195)
ret = regulator_set_voltage(host->pbias, VDD_1V8,
VDD_1V8);
else
ret = regulator_set_voltage(host->pbias, VDD_3V0,
VDD_3V0);
if (ret < 0) {
dev_err(host->dev, "pbias set voltage fail\n");
return ret;
}

if (host->pbias_enabled == 0) {
ret = regulator_enable(host->pbias);
if (ret) {
dev_err(host->dev, "pbias reg enable fail\n");
return ret;
}
host->pbias_enabled = 1;
}
} else {
if (host->pbias_enabled == 1) {
ret = regulator_disable(host->pbias);
if (ret) {
dev_err(host->dev, "pbias reg disable fail\n");
return ret;
}
host->pbias_enabled = 0;
}
}

return 0;
}

static int omap_hsmmc_set_power(struct device *dev, int power_on, int vdd)
{
struct omap_hsmmc_host *host =
Expand All @@ -325,16 +367,9 @@ static int omap_hsmmc_set_power(struct device *dev, int power_on, int vdd)
if (mmc_pdata(host)->before_set_reg)
mmc_pdata(host)->before_set_reg(dev, power_on, vdd);

if (host->pbias) {
if (host->pbias_enabled == 1) {
ret = regulator_disable(host->pbias);
if (ret) {
dev_err(dev, "pbias reg disable failed\n");
return ret;
}
host->pbias_enabled = 0;
}
}
ret = omap_hsmmc_set_pbias(host, false, 0);
if (ret)
return ret;

/*
* Assume Vcc regulator is used only to power the card ... OMAP
Expand All @@ -359,26 +394,9 @@ static int omap_hsmmc_set_power(struct device *dev, int power_on, int vdd)
return ret;
}

if (host->pbias) {
if (vdd <= VDD_165_195)
ret = regulator_set_voltage(host->pbias, VDD_1V8,
VDD_1V8);
else
ret = regulator_set_voltage(host->pbias, VDD_3V0,
VDD_3V0);
if (ret < 0)
goto err_set_voltage;

if (host->pbias_enabled == 0) {
ret = regulator_enable(host->pbias);
if (ret) {
dev_err(dev, "pbias reg enable failed\n");
goto err_set_voltage;
} else {
host->pbias_enabled = 1;
}
}
}
ret = omap_hsmmc_set_pbias(host, true, vdd);
if (ret)
goto err_set_voltage;

if (mmc_pdata(host)->after_set_reg)
mmc_pdata(host)->after_set_reg(dev, power_on, vdd);
Expand Down

0 comments on commit ec85c95

Please sign in to comment.