omap_hsmmc: Add 8-bit bus width mode support
Signed-off-by: Jarkko Lavinen <jarkko.lavinen@nokia.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
committed by
Pierre Ossman
parent
0ccd76d4c2
commit
731530104a
@@ -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);
|
||||||
|
Reference in New Issue
Block a user