From b21def416c5850657ea7a366b8eb5dbb3a562452 Mon Sep 17 00:00:00 2001 From: Vishal Singh Date: Fri, 27 Apr 2012 18:10:33 +0530 Subject: mmc: enable background ops in driver Adding a new config option and enabling background ops in driver. Correcting the EXT_CSD byte that needs to be written in order to trigger background ops in the MMC firmware. Bug 847037. Change-Id: Ibc517540cab43fa5070b142a416f6b67f2f7e7be Signed-off-by: Vishal Singh Reviewed-on: http://git-master/r/99117 Reviewed-by: Simone Willett Tested-by: Simone Willett --- drivers/mmc/card/Kconfig | 10 ++++++++++ drivers/mmc/core/mmc_ops.c | 2 +- drivers/mmc/host/sdhci-tegra.c | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig index ebb4afe6c702..3875c21e04fa 100644 --- a/drivers/mmc/card/Kconfig +++ b/drivers/mmc/card/Kconfig @@ -76,3 +76,13 @@ config MMC_TEST This driver is only of interest to those developing or testing a host driver. Most people should say N here. + +config MMC_BKOPS + bool "Enable background ops" + default n + help + Say Y here to enable background ops in driver. This will result + in issuing of MMC_SWITCH command to write byte 164 of EXT_CSD, + in order to trigger background ops in the MMC device's + firmware, whenever URGENT_BKOPS flag is found to be set in a + read/write command's response. diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 330b968393d6..28bed97ae1a5 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c @@ -588,7 +588,7 @@ int mmc_send_bk_ops_cmd(struct mmc_card *card, bool is_synchronous) cmd.opcode = MMC_SWITCH; cmd.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) | - (EXT_CSD_BKOPS_EN << 16) | + (EXT_CSD_BKOPS_START << 16) | (1 << 8) | EXT_CSD_CMD_SET_NORMAL; if (is_synchronous) diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c index 9bbec43dda99..8fec147471a8 100644 --- a/drivers/mmc/host/sdhci-tegra.c +++ b/drivers/mmc/host/sdhci-tegra.c @@ -1122,6 +1122,11 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev) host->mmc->caps |= MMC_CAP_NONREMOVABLE; } host->mmc->pm_flags |= MMC_PM_IGNORE_PM_NOTIFY; + +#ifdef CONFIG_MMC_BKOPS + host->mmc->caps |= MMC_CAP_BKOPS; +#endif + #ifdef CONFIG_MMC_EMBEDDED_SDIO /* Do not turn OFF embedded sdio cards as it support Wake on Wireless */ if (plat->mmc_data.embedded_sdio) -- cgit v1.2.3