Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 987fd49b authored by Balaji T K's avatar Balaji T K Committed by Chris Ball
Browse files

mmc: omap_hsmmc: handle vcc and vcc_aux independently



handle vcc and vcc_aux independently to reduce indent.

Signed-off-by: default avatarBalaji T K <balajitk@ti.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Tested-by: default avatarFlorian Vaussard <florian.vaussard@epfl.ch>
Tested-by: default avatarStefan Roese <sr@denx.de>
Signed-off-by: default avatarChris Ball <chris@printf.net>
parent f2ddc1da
Loading
Loading
Loading
Loading
+23 −27
Original line number Diff line number Diff line
@@ -291,11 +291,12 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,
	 * chips/cards need an interface voltage rail too.
	 */
	if (power_on) {
		if (host->vcc)
			ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
		/* Enable interface voltage rail, if needed */
		if (ret == 0 && host->vcc_aux) {
			ret = regulator_enable(host->vcc_aux);
			if (ret < 0)
			if (ret < 0 && host->vcc)
				ret = mmc_regulator_set_ocr(host->mmc,
							host->vcc, 0);
		}
@@ -303,7 +304,7 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,
		/* Shut down the rail */
		if (host->vcc_aux)
			ret = regulator_disable(host->vcc_aux);
		if (!ret) {
		if (host->vcc) {
			/* Then proceed to shut down the local regulator */
			ret = mmc_regulator_set_ocr(host->mmc,
						host->vcc, 0);
@@ -323,10 +324,10 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)

	reg = devm_regulator_get(host->dev, "vmmc");
	if (IS_ERR(reg)) {
		dev_err(host->dev, "vmmc regulator missing\n");
		dev_err(host->dev, "unable to get vmmc regulator %ld\n",
			PTR_ERR(reg));
		return PTR_ERR(reg);
	} else {
		mmc_slot(host).set_power = omap_hsmmc_set_power;
		host->vcc = reg;
		ocr_value = mmc_regulator_get_ocrmask(reg);
		if (!mmc_slot(host).ocr_mask) {
@@ -339,6 +340,8 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
				return -EINVAL;
			}
		}
	}
	mmc_slot(host).set_power = omap_hsmmc_set_power;

	/* Allow an aux regulator */
	reg = devm_regulator_get_optional(host->dev, "vmmc_aux");
@@ -348,22 +351,15 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
	if (mmc_slot(host).no_regulator_off_init)
		return 0;
	/*
		* UGLY HACK:  workaround regulator framework bugs.
		* When the bootloader leaves a supply active, it's
		* initialized with zero usecount ... and we can't
		* disable it without first enabling it.  Until the
		* framework is fixed, we need a workaround like this
		* (which is safe for MMC, but not in general).
	 * To disable boot_on regulator, enable regulator
	 * to increase usecount and then disable it.
	 */
		if (regulator_is_enabled(host->vcc) > 0 ||
	if ((host->vcc && regulator_is_enabled(host->vcc) > 0) ||
	    (host->vcc_aux && regulator_is_enabled(host->vcc_aux))) {
		int vdd = ffs(mmc_slot(host).ocr_mask) - 1;

			mmc_slot(host).set_power(host->dev, host->slot_id,
						 1, vdd);
			mmc_slot(host).set_power(host->dev, host->slot_id,
						 0, 0);
		}
		mmc_slot(host).set_power(host->dev, host->slot_id, 1, vdd);
		mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0);
	}

	return 0;