|
@@ -489,6 +489,13 @@ static unsigned short sh_sdhi_set_cmd(struct sh_sdhi_host *host,
|
|
|
else /* SD_SWITCH */
|
|
|
opc = SDHI_SD_SWITCH;
|
|
|
break;
|
|
|
+ case MMC_CMD_SEND_OP_COND:
|
|
|
+ opc = SDHI_MMC_SEND_OP_COND;
|
|
|
+ break;
|
|
|
+ case MMC_CMD_SEND_EXT_CSD:
|
|
|
+ if (data)
|
|
|
+ opc = SDHI_MMC_SEND_EXT_CSD;
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -513,6 +520,7 @@ static unsigned short sh_sdhi_data_trans(struct sh_sdhi_host *host,
|
|
|
case MMC_CMD_READ_SINGLE_BLOCK:
|
|
|
case SDHI_SD_APP_SEND_SCR:
|
|
|
case SDHI_SD_SWITCH: /* SD_SWITCH */
|
|
|
+ case SDHI_MMC_SEND_EXT_CSD:
|
|
|
ret = sh_sdhi_single_read(host, data);
|
|
|
break;
|
|
|
default:
|
|
@@ -648,12 +656,18 @@ static int sh_sdhi_set_ios(struct mmc *mmc)
|
|
|
if (ret)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (mmc->bus_width == 4)
|
|
|
- sh_sdhi_writew(host, SDHI_OPTION, ~OPT_BUS_WIDTH_1 &
|
|
|
- sh_sdhi_readw(host, SDHI_OPTION));
|
|
|
+ if (mmc->bus_width == 8)
|
|
|
+ sh_sdhi_writew(host, SDHI_OPTION,
|
|
|
+ OPT_BUS_WIDTH_8 | (~OPT_BUS_WIDTH_M &
|
|
|
+ sh_sdhi_readw(host, SDHI_OPTION)));
|
|
|
+ else if (mmc->bus_width == 4)
|
|
|
+ sh_sdhi_writew(host, SDHI_OPTION,
|
|
|
+ OPT_BUS_WIDTH_4 | (~OPT_BUS_WIDTH_M &
|
|
|
+ sh_sdhi_readw(host, SDHI_OPTION)));
|
|
|
else
|
|
|
- sh_sdhi_writew(host, SDHI_OPTION, OPT_BUS_WIDTH_1 |
|
|
|
- sh_sdhi_readw(host, SDHI_OPTION));
|
|
|
+ sh_sdhi_writew(host, SDHI_OPTION,
|
|
|
+ OPT_BUS_WIDTH_1 | (~OPT_BUS_WIDTH_M &
|
|
|
+ sh_sdhi_readw(host, SDHI_OPTION)));
|
|
|
|
|
|
debug("clock = %d, buswidth = %d\n", mmc->clock, mmc->bus_width);
|
|
|
|