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

Commit 73153010 authored by Jarkko Lavinen's avatar Jarkko Lavinen Committed by Pierre Ossman
Browse files

omap_hsmmc: Add 8-bit bus width mode support

parent 0ccd76d4
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -77,6 +77,7 @@
#define MSBS			(1 << 5)
#define MSBS			(1 << 5)
#define BCE			(1 << 1)
#define BCE			(1 << 1)
#define FOUR_BIT		(1 << 1)
#define FOUR_BIT		(1 << 1)
#define DW8			(1 << 5)
#define CC			0x1
#define CC			0x1
#define TC			0x02
#define TC			0x02
#define OD			0x1
#define OD			0x1
@@ -817,6 +818,7 @@ static void omap_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
	u16 dsor = 0;
	u16 dsor = 0;
	unsigned long regval;
	unsigned long regval;
	unsigned long timeout;
	unsigned long timeout;
	u32 con;


	switch (ios->power_mode) {
	switch (ios->power_mode) {
	case MMC_POWER_OFF:
	case MMC_POWER_OFF:
@@ -827,12 +829,18 @@ static void omap_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
		break;
		break;
	}
	}


	con = OMAP_HSMMC_READ(host->base, CON);
	switch (mmc->ios.bus_width) {
	switch (mmc->ios.bus_width) {
	case MMC_BUS_WIDTH_8:
		OMAP_HSMMC_WRITE(host->base, CON, con | DW8);
		break;
	case MMC_BUS_WIDTH_4:
	case MMC_BUS_WIDTH_4:
		OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
		OMAP_HSMMC_WRITE(host->base, HCTL,
		OMAP_HSMMC_WRITE(host->base, HCTL,
			OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
			OMAP_HSMMC_READ(host->base, HCTL) | FOUR_BIT);
		break;
		break;
	case MMC_BUS_WIDTH_1:
	case MMC_BUS_WIDTH_1:
		OMAP_HSMMC_WRITE(host->base, CON, con & ~DW8);
		OMAP_HSMMC_WRITE(host->base, HCTL,
		OMAP_HSMMC_WRITE(host->base, HCTL,
			OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
			OMAP_HSMMC_READ(host->base, HCTL) & ~FOUR_BIT);
		break;
		break;
@@ -1057,7 +1065,9 @@ static int __init omap_mmc_probe(struct platform_device *pdev)
	mmc->ocr_avail = mmc_slot(host).ocr_mask;
	mmc->ocr_avail = mmc_slot(host).ocr_mask;
	mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;
	mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;


	if (pdata->slots[host->slot_id].wires >= 4)
	if (pdata->slots[host->slot_id].wires >= 8)
		mmc->caps |= MMC_CAP_8_BIT_DATA;
	else if (pdata->slots[host->slot_id].wires >= 4)
		mmc->caps |= MMC_CAP_4_BIT_DATA;
		mmc->caps |= MMC_CAP_4_BIT_DATA;


	omap_hsmmc_init(host);
	omap_hsmmc_init(host);