|
@@ -1958,6 +1958,20 @@ int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen)
|
|
|
}
|
|
|
EXPORT_SYMBOL(mmc_set_blocklen);
|
|
|
|
|
|
+int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount,
|
|
|
+ bool is_rel_write)
|
|
|
+{
|
|
|
+ struct mmc_command cmd = {0};
|
|
|
+
|
|
|
+ cmd.opcode = MMC_SET_BLOCK_COUNT;
|
|
|
+ cmd.arg = blockcount & 0x0000FFFF;
|
|
|
+ if (is_rel_write)
|
|
|
+ cmd.arg |= 1 << 31;
|
|
|
+ cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
|
|
|
+ return mmc_wait_for_cmd(card->host, &cmd, 5);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(mmc_set_blockcount);
|
|
|
+
|
|
|
static void mmc_hw_reset_for_init(struct mmc_host *host)
|
|
|
{
|
|
|
if (!(host->caps & MMC_CAP_HW_RESET) || !host->ops->hw_reset)
|