From: Addy Ke <addy.ke@rock-chips.com>
To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
rdunlap@infradead.org, tgih.jun@samsung.com,
jh80.chung@samsung.com, chris@printf.net, ulf.hansson@linaro.org,
dinguyen@altera.com, heiko@sntech.de, olof@lixom.net,
dianders@chromium.org, sonnyrao@chromium.org
Cc: devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, zhenfu.fang@rock-chips.com,
cf@rock-chips.com, lintao@rock-chips.com, chenfen@rock-chips.com,
zyf@rock-chips.com, xjq@rock-chips.com, huangtao@rock-chips.com,
zyw@rock-chips.com, yzq@rock-chips.com, hj@rock-chips.com,
kever.yang@rock-chips.com, zhangqing@rock-chips.com,
hl@rock-chips.com, Addy Ke <addy.ke@rock-chips.com>
Subject: [PATCH] mmc: dw_mmc: add a quirk for the defferent bit of sdio interrupt
Date: Thu, 30 Oct 2014 10:21:19 +0800 [thread overview]
Message-ID: <1414635679-12565-1-git-send-email-addy.ke@rock-chips.com> (raw)
This patch add a quirk: DW_MCI_QUIRK_SDIO_INT_24BIT.
The bit of sdio interrupt is 16 in designware implementation, but
is 24 in RK3288. To support RK3288 mmc controller, we need add
a quirk for it.
Signed-off-by: Addy Ke <addy.ke@rock-chips.com>
---
drivers/mmc/host/dw_mmc.c | 32 +++++++++++++++++++++++++++-----
drivers/mmc/host/dw_mmc.h | 1 +
include/linux/mmc/dw_mmc.h | 2 ++
3 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 69f0cc6..db29621 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -778,6 +778,12 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
u32 div;
u32 clk_en_a;
u32 sdmmc_cmd_bits = SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT;
+ u32 sdio_int_bit;
+
+ if (host->quirks & DW_MCI_QUIRK_SDIO_INT_24BIT)
+ sdio_int_bit = SDMMC_INT_SDIO_24BIT(slot->id);
+ else
+ sdio_int_bit = SDMMC_INT_SDIO(slot->id);
/* We must continue to set bit 28 in CMD until the change is complete */
if (host->state == STATE_WAITING_CMD11_DONE)
@@ -819,7 +825,7 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
/* enable clock; only low power if no SDIO */
clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;
- if (!(mci_readl(host, INTMASK) & SDMMC_INT_SDIO(slot->id)))
+ if (!(mci_readl(host, INTMASK) & sdio_int_bit))
clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;
mci_writel(host, CLKENA, clk_en_a);
@@ -1167,6 +1173,12 @@ static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)
struct dw_mci_slot *slot = mmc_priv(mmc);
struct dw_mci *host = slot->host;
u32 int_mask;
+ u32 sdio_int_bit;
+
+ if (host->quirks & DW_MCI_QUIRK_SDIO_INT_24BIT)
+ sdio_int_bit = SDMMC_INT_SDIO_24BIT(slot->id);
+ else
+ sdio_int_bit = SDMMC_INT_SDIO(slot->id);
/* Enable/disable Slot Specific SDIO interrupt */
int_mask = mci_readl(host, INTMASK);
@@ -1180,10 +1192,10 @@ static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)
dw_mci_disable_low_power(slot);
mci_writel(host, INTMASK,
- (int_mask | SDMMC_INT_SDIO(slot->id)));
+ (int_mask | sdio_int_bit));
} else {
mci_writel(host, INTMASK,
- (int_mask & ~SDMMC_INT_SDIO(slot->id)));
+ (int_mask & ~sdio_int_bit));
}
}
@@ -2035,8 +2047,15 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
/* Handle SDIO Interrupts */
for (i = 0; i < host->num_slots; i++) {
struct dw_mci_slot *slot = host->slot[i];
- if (pending & SDMMC_INT_SDIO(i)) {
- mci_writel(host, RINTSTS, SDMMC_INT_SDIO(i));
+ u32 sdio_int_bit;
+
+ if (host->quirks & DW_MCI_QUIRK_SDIO_INT_24BIT)
+ sdio_int_bit = SDMMC_INT_SDIO_24BIT(i);
+ else
+ sdio_int_bit = SDMMC_INT_SDIO(i);
+
+ if (pending & sdio_int_bit) {
+ mci_writel(host, RINTSTS, sdio_int_bit);
mmc_signal_sdio_irq(slot->mmc);
}
}
@@ -2452,6 +2471,9 @@ static struct dw_mci_of_quirks {
}, {
.quirk = "disable-wp",
.id = DW_MCI_QUIRK_NO_WRITE_PROTECT,
+ }, {
+ .quirk = "sdio-int-24bit",
+ .id = DW_MCI_QUIRK_SDIO_INT_24BIT,
},
};
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index 01b99e8..6a48015 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
@@ -92,6 +92,7 @@
#define SDMMC_CTYPE_4BIT BIT(0)
#define SDMMC_CTYPE_1BIT 0
/* Interrupt status & mask register defines */
+#define SDMMC_INT_SDIO_24BIT(n) BIT(24 + (n))
#define SDMMC_INT_SDIO(n) BIT(16 + (n))
#define SDMMC_INT_EBE BIT(15)
#define SDMMC_INT_ACD BIT(14)
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h
index 0013669..6d4669e 100644
--- a/include/linux/mmc/dw_mmc.h
+++ b/include/linux/mmc/dw_mmc.h
@@ -217,6 +217,8 @@ struct dw_mci_dma_ops {
#define DW_MCI_QUIRK_BROKEN_CARD_DETECTION BIT(3)
/* No write protect */
#define DW_MCI_QUIRK_NO_WRITE_PROTECT BIT(4)
+/* In RK3288, the bit of sdio interrupt is 24 */
+#define DW_MCI_QUIRK_SDIO_INT_24BIT BIT(5)
/* Slot level quirks */
/* This slot has no write protect */
--
1.8.3.2
next reply other threads:[~2014-10-30 2:21 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-30 2:21 Addy Ke [this message]
2014-10-30 4:35 ` [PATCH] mmc: dw_mmc: add a quirk for the defferent bit of sdio interrupt Jaehoon Chung
2014-10-30 4:41 ` Doug Anderson
2014-10-30 4:49 ` Doug Anderson
2014-10-30 6:54 ` addy ke
2014-10-30 10:50 ` [PATCH] mmc: dw_mmc: add support for the other " Addy Ke
2014-10-30 11:02 ` Jaehoon Chung
2014-10-31 0:46 ` addy ke
2014-10-31 1:14 ` Jaehoon Chung
2014-10-30 11:11 ` Ulf Hansson
2014-10-30 11:17 ` Jaehoon Chung
2014-10-31 0:54 ` addy ke
2014-10-31 3:50 ` [PATCH v2] " Addy Ke
2014-10-31 5:14 ` Doug Anderson
2014-10-31 8:45 ` Jaehoon Chung
2014-10-31 15:55 ` Doug Anderson
2014-10-31 10:43 ` Heiko Stübner
2014-11-03 0:54 ` addy ke
2014-11-03 1:20 ` [PATCH v3] " Addy Ke
2014-11-03 8:59 ` Jaehoon Chung
2014-11-03 10:23 ` addy ke
2014-11-04 2:14 ` Jaehoon Chung
2014-11-03 10:23 ` Heiko Stübner
2014-11-04 2:15 ` Jaehoon Chung
2014-11-04 14:03 ` [PATCH v4] " Addy Ke
2014-11-11 4:02 ` [PATCH] mmc: dw_mmc: try pick the exact same voltage as vmmc for vqmmc Addy Ke
2014-11-11 8:52 ` Ulf Hansson
2014-11-12 18:04 ` Doug Anderson
2014-11-13 2:19 ` addy ke
2014-11-21 12:06 ` Ulf Hansson
2014-11-21 12:29 ` Jaehoon Chung
2014-11-21 17:42 ` Doug Anderson
2014-11-21 21:04 ` Doug Anderson
2014-11-24 13:29 ` Ulf Hansson
2014-11-25 2:38 ` Addy
2014-11-25 5:36 ` Doug Anderson
2014-11-25 21:11 ` Alexandru Stan
2014-11-25 5:29 ` Doug Anderson
2014-11-13 18:58 ` [PATCH v4] mmc: dw_mmc: add support for the other bit of sdio interrupt Doug Anderson
2014-11-14 13:25 ` Jaehoon Chung
2014-11-19 10:32 ` Ulf Hansson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1414635679-12565-1-git-send-email-addy.ke@rock-chips.com \
--to=addy.ke@rock-chips.com \
--cc=cf@rock-chips.com \
--cc=chenfen@rock-chips.com \
--cc=chris@printf.net \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=dinguyen@altera.com \
--cc=galak@codeaurora.org \
--cc=heiko@sntech.de \
--cc=hj@rock-chips.com \
--cc=hl@rock-chips.com \
--cc=huangtao@rock-chips.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jh80.chung@samsung.com \
--cc=kever.yang@rock-chips.com \
--cc=lintao@rock-chips.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=olof@lixom.net \
--cc=pawel.moll@arm.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=sonnyrao@chromium.org \
--cc=tgih.jun@samsung.com \
--cc=ulf.hansson@linaro.org \
--cc=xjq@rock-chips.com \
--cc=yzq@rock-chips.com \
--cc=zhangqing@rock-chips.com \
--cc=zhenfu.fang@rock-chips.com \
--cc=zyf@rock-chips.com \
--cc=zyw@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).