aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Yang <vincent.yang.fujitsu@gmail.com>2015-01-20 03:05:17 -0500
committerUlf Hansson <ulf.hansson@linaro.org>2015-01-20 03:29:16 -0500
commitd3fc5d71ac4dfd28a66689cfd1eea84c4dba8bde (patch)
treeb37f8c1a3c4341ecc76ef7573b25d77c3cc5c7b9
parent67d0d04a762db4bd610fd628ad683b5d7dc905e7 (diff)
mmc: sdhci: add a quirk for single block transactions
This patch defines a quirk to disable the block count for single block transactions. It is a preparation and will be used by Fujitsu SDHCI controller f_sdh30 driver. Signed-off-by: Vincent Yang <Vincent.Yang@tw.fujitsu.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r--drivers/mmc/host/sdhci.c8
-rw-r--r--include/linux/mmc/sdhci.h2
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index a3ecd20e5510..c9881ca131d5 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -904,7 +904,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
904static void sdhci_set_transfer_mode(struct sdhci_host *host, 904static void sdhci_set_transfer_mode(struct sdhci_host *host,
905 struct mmc_command *cmd) 905 struct mmc_command *cmd)
906{ 906{
907 u16 mode; 907 u16 mode = 0;
908 struct mmc_data *data = cmd->data; 908 struct mmc_data *data = cmd->data;
909 909
910 if (data == NULL) { 910 if (data == NULL) {
@@ -922,9 +922,11 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host,
922 922
923 WARN_ON(!host->data); 923 WARN_ON(!host->data);
924 924
925 mode = SDHCI_TRNS_BLK_CNT_EN; 925 if (!(host->quirks2 & SDHCI_QUIRK2_SUPPORT_SINGLE))
926 mode = SDHCI_TRNS_BLK_CNT_EN;
927
926 if (mmc_op_multi(cmd->opcode) || data->blocks > 1) { 928 if (mmc_op_multi(cmd->opcode) || data->blocks > 1) {
927 mode |= SDHCI_TRNS_MULTI; 929 mode = SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI;
928 /* 930 /*
929 * If we are sending CMD23, CMD12 never gets sent 931 * If we are sending CMD23, CMD12 never gets sent
930 * on successful completion (so no Auto-CMD12). 932 * on successful completion (so no Auto-CMD12).
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
index 933b897ca095..c3e3db196738 100644
--- a/include/linux/mmc/sdhci.h
+++ b/include/linux/mmc/sdhci.h
@@ -113,6 +113,8 @@ struct sdhci_host {
113#define SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 (1<<11) 113#define SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 (1<<11)
114/* forced tuned clock */ 114/* forced tuned clock */
115#define SDHCI_QUIRK2_TUNING_WORK_AROUND (1<<12) 115#define SDHCI_QUIRK2_TUNING_WORK_AROUND (1<<12)
116/* disable the block count for single block transactions */
117#define SDHCI_QUIRK2_SUPPORT_SINGLE (1<<13)
116 118
117 int irq; /* Device IRQ */ 119 int irq; /* Device IRQ */
118 void __iomem *ioaddr; /* Mapped address */ 120 void __iomem *ioaddr; /* Mapped address */