summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVenkat Gopalakrishnan <venkatg@codeaurora.org>2015-05-29 17:49:46 -0700
committerSubhash Jadavani <subhashj@codeaurora.org>2016-05-31 15:26:30 -0700
commit11bb322287709984f829ca51e65a929cd8fb7f9c (patch)
tree7e2c33cd309987287140b8faeb24f66dbfe243df
parentc4dd8dad71e8b77f7585e2b7d74d2ea7dcfcf91d (diff)
mmc: sdhci-msm: add support for command-queue
Adds support for command-queue (CQ). MSM driver supports CQ in the hardware. The controller can send commands to the card and read statuses from the device. This patch adds support for the same. Change-Id: I1b19a2ce4c124c96dc6c3852d8f58ad076851f4b Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> Signed-off-by: Konstantin Dorfman <kdorfman@codeaurora.org> Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
-rw-r--r--drivers/mmc/host/sdhci-msm.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 03040ad52b2b..c5c2881556a7 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -41,6 +41,7 @@
#include "sdhci-msm.h"
#include "sdhci-msm-ice.h"
+#include "cmdq_hci.h"
#define CORE_POWER 0x0
#define CORE_SW_RST (1 << 7)
@@ -2841,6 +2842,28 @@ static void sdhci_set_default_hw_caps(struct sdhci_msm_host *msm_host,
msm_host->caps_0 = caps;
}
+#ifdef CONFIG_MMC_CQ_HCI
+static void sdhci_msm_cmdq_init(struct sdhci_host *host,
+ struct platform_device *pdev)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct sdhci_msm_host *msm_host = pltfm_host->priv;
+
+ host->cq_host = cmdq_pltfm_init(pdev);
+ if (IS_ERR(host->cq_host))
+ dev_dbg(&pdev->dev, "cmdq-pltfm init: failed: %ld\n",
+ PTR_ERR(host->cq_host));
+ else
+ msm_host->mmc->caps2 |= MMC_CAP2_CMD_QUEUE;
+}
+#else
+static void sdhci_msm_cmdq_init(struct sdhci_host *host,
+ struct platform_device *pdev)
+{
+
+}
+#endif
+
static int sdhci_msm_probe(struct platform_device *pdev)
{
struct sdhci_host *host;
@@ -3218,6 +3241,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "%s: Failed to set dma mask\n", __func__);
}
+ sdhci_msm_cmdq_init(host, pdev);
ret = sdhci_add_host(host);
if (ret) {
dev_err(&pdev->dev, "Add host failed (%d)\n", ret);