|
|
@ -158,6 +158,9 @@ int mmc_set_blocklen(struct mmc *mmc, int len) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct mmc_cmd cmd; |
|
|
|
struct mmc_cmd cmd; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mmc->card_caps & MMC_MODE_DDR_52MHz) |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
cmd.cmdidx = MMC_CMD_SET_BLOCKLEN; |
|
|
|
cmd.cmdidx = MMC_CMD_SET_BLOCKLEN; |
|
|
|
cmd.resp_type = MMC_RSP_R1; |
|
|
|
cmd.resp_type = MMC_RSP_R1; |
|
|
|
cmd.cmdarg = len; |
|
|
|
cmd.cmdarg = len; |
|
|
@ -514,10 +517,13 @@ static int mmc_change_freq(struct mmc *mmc) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
/* High Speed is set, there are two types: 52MHz and 26MHz */ |
|
|
|
/* High Speed is set, there are two types: 52MHz and 26MHz */ |
|
|
|
if (cardtype & EXT_CSD_CARD_TYPE_52) |
|
|
|
if (cardtype & EXT_CSD_CARD_TYPE_52) { |
|
|
|
|
|
|
|
if (cardtype & EXT_CSD_CARD_TYPE_DDR_52) |
|
|
|
|
|
|
|
mmc->card_caps |= MMC_MODE_DDR_52MHz; |
|
|
|
mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; |
|
|
|
mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; |
|
|
|
else |
|
|
|
} else { |
|
|
|
mmc->card_caps |= MMC_MODE_HS; |
|
|
|
mmc->card_caps |= MMC_MODE_HS; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
@ -1054,6 +1060,8 @@ static int mmc_startup(struct mmc *mmc) |
|
|
|
|
|
|
|
|
|
|
|
/* An array of possible bus widths in order of preference */ |
|
|
|
/* An array of possible bus widths in order of preference */ |
|
|
|
static unsigned ext_csd_bits[] = { |
|
|
|
static unsigned ext_csd_bits[] = { |
|
|
|
|
|
|
|
EXT_CSD_DDR_BUS_WIDTH_8, |
|
|
|
|
|
|
|
EXT_CSD_DDR_BUS_WIDTH_4, |
|
|
|
EXT_CSD_BUS_WIDTH_8, |
|
|
|
EXT_CSD_BUS_WIDTH_8, |
|
|
|
EXT_CSD_BUS_WIDTH_4, |
|
|
|
EXT_CSD_BUS_WIDTH_4, |
|
|
|
EXT_CSD_BUS_WIDTH_1, |
|
|
|
EXT_CSD_BUS_WIDTH_1, |
|
|
@ -1061,13 +1069,15 @@ static int mmc_startup(struct mmc *mmc) |
|
|
|
|
|
|
|
|
|
|
|
/* An array to map CSD bus widths to host cap bits */ |
|
|
|
/* An array to map CSD bus widths to host cap bits */ |
|
|
|
static unsigned ext_to_hostcaps[] = { |
|
|
|
static unsigned ext_to_hostcaps[] = { |
|
|
|
|
|
|
|
[EXT_CSD_DDR_BUS_WIDTH_4] = MMC_MODE_DDR_52MHz, |
|
|
|
|
|
|
|
[EXT_CSD_DDR_BUS_WIDTH_8] = MMC_MODE_DDR_52MHz, |
|
|
|
[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT, |
|
|
|
[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT, |
|
|
|
[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT, |
|
|
|
[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/* An array to map chosen bus width to an integer */ |
|
|
|
/* An array to map chosen bus width to an integer */ |
|
|
|
static unsigned widths[] = { |
|
|
|
static unsigned widths[] = { |
|
|
|
8, 4, 1, |
|
|
|
8, 4, 8, 4, 1, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) { |
|
|
|
for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) { |
|
|
|