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

Commit e13bb300 authored by Adrian Hunter's avatar Adrian Hunter Committed by Pierre Ossman
Browse files

omap_hsmmc: Wait for SDBP



It is necessary to wait for bus power before sending
any commands.

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent f3e2f1dd
Loading
Loading
Loading
Loading
+15 −5
Original line number Original line Diff line number Diff line
@@ -498,6 +498,19 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id)
	return IRQ_HANDLED;
	return IRQ_HANDLED;
}
}


static void set_sd_bus_power(struct mmc_omap_host *host)
{
	unsigned long i;

	OMAP_HSMMC_WRITE(host->base, HCTL,
			 OMAP_HSMMC_READ(host->base, HCTL) | SDBP);
	for (i = 0; i < loops_per_jiffy; i++) {
		if (OMAP_HSMMC_READ(host->base, HCTL) & SDBP)
			break;
		cpu_relax();
	}
}

/*
/*
 * Switch MMC interface voltage ... only relevant for MMC1.
 * Switch MMC interface voltage ... only relevant for MMC1.
 *
 *
@@ -554,9 +567,7 @@ static int omap_mmc_switch_opcond(struct mmc_omap_host *host, int vdd)
		reg_val |= SDVS30;
		reg_val |= SDVS30;


	OMAP_HSMMC_WRITE(host->base, HCTL, reg_val);
	OMAP_HSMMC_WRITE(host->base, HCTL, reg_val);

	set_sd_bus_power(host);
	OMAP_HSMMC_WRITE(host->base, HCTL,
		OMAP_HSMMC_READ(host->base, HCTL) | SDBP);


	return 0;
	return 0;
err:
err:
@@ -942,8 +953,7 @@ static void omap_hsmmc_init(struct mmc_omap_host *host)
	OMAP_HSMMC_WRITE(host->base, SYSCONFIG, value | AUTOIDLE);
	OMAP_HSMMC_WRITE(host->base, SYSCONFIG, value | AUTOIDLE);


	/* Set SD bus power bit */
	/* Set SD bus power bit */
	value = OMAP_HSMMC_READ(host->base, HCTL);
	set_sd_bus_power(host);
	OMAP_HSMMC_WRITE(host->base, HCTL, value | SDBP);
}
}


static struct mmc_host_ops mmc_omap_ops = {
static struct mmc_host_ops mmc_omap_ops = {