mmc: Add 8-bit bus width 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
35ff8554d1
commit
b30f8af335
@@ -434,13 +434,24 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
|
|||||||
* Activate wide bus (if supported).
|
* Activate wide bus (if supported).
|
||||||
*/
|
*/
|
||||||
if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) &&
|
if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) &&
|
||||||
(host->caps & MMC_CAP_4_BIT_DATA)) {
|
(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) {
|
||||||
|
unsigned ext_csd_bit, bus_width;
|
||||||
|
|
||||||
|
if (host->caps & MMC_CAP_8_BIT_DATA) {
|
||||||
|
ext_csd_bit = EXT_CSD_BUS_WIDTH_8;
|
||||||
|
bus_width = MMC_BUS_WIDTH_8;
|
||||||
|
} else {
|
||||||
|
ext_csd_bit = EXT_CSD_BUS_WIDTH_4;
|
||||||
|
bus_width = MMC_BUS_WIDTH_4;
|
||||||
|
}
|
||||||
|
|
||||||
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
||||||
EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
|
EXT_CSD_BUS_WIDTH, ext_csd_bit);
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
goto free_card;
|
goto free_card;
|
||||||
|
|
||||||
mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
|
mmc_set_bus_width(card->host, bus_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!oldcard)
|
if (!oldcard)
|
||||||
@@ -624,4 +635,3 @@ err:
|
|||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -41,6 +41,7 @@ struct mmc_ios {
|
|||||||
|
|
||||||
#define MMC_BUS_WIDTH_1 0
|
#define MMC_BUS_WIDTH_1 0
|
||||||
#define MMC_BUS_WIDTH_4 2
|
#define MMC_BUS_WIDTH_4 2
|
||||||
|
#define MMC_BUS_WIDTH_8 3
|
||||||
|
|
||||||
unsigned char timing; /* timing specification used */
|
unsigned char timing; /* timing specification used */
|
||||||
|
|
||||||
@@ -116,6 +117,7 @@ struct mmc_host {
|
|||||||
#define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */
|
#define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */
|
||||||
#define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */
|
#define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */
|
||||||
#define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */
|
#define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */
|
||||||
|
#define MMC_CAP_8_BIT_DATA (1 << 6) /* Can the host do 8 bit transfers */
|
||||||
|
|
||||||
/* host specific block data */
|
/* host specific block data */
|
||||||
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
||||||
|
Reference in New Issue
Block a user