Message ID | 1461898114-29067-1-git-send-email-shawn.lin@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, 2016-04-29 at 10:48:34 +0800, Shawn Lin wrote: > Currently sdhci-arasan 5.1 can support enhanced strobe function, > and we now limit it just for "arasan,sdhci-5.1". Add > mmc-hs400-enhanced-strobe in DT to enable the function if we'r sure > our controller can support it. > > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> > --- > > Changes in v2: None > > drivers/mmc/host/sdhci-of-arasan.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c > index 20b859e..a0e4536 100644 > --- a/drivers/mmc/host/sdhci-of-arasan.c > +++ b/drivers/mmc/host/sdhci-of-arasan.c > @@ -25,7 +25,9 @@ > #include "sdhci-pltfm.h" > > #define SDHCI_ARASAN_CLK_CTRL_OFFSET 0x2c > +#define SDHCI_ARASAN_VENDOR_REGISTER 0x78 Just as a note: This register doesn't seem to exist in the IP version Zynq is using. So, as long as we exclude that version from accessing it, things should be fine (IIUC, that is the case). Acked-by: Sören Brinkmann <soren.brinkmann@xilinx.com> Sören -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c index 20b859e..a0e4536 100644 --- a/drivers/mmc/host/sdhci-of-arasan.c +++ b/drivers/mmc/host/sdhci-of-arasan.c @@ -25,7 +25,9 @@ #include "sdhci-pltfm.h" #define SDHCI_ARASAN_CLK_CTRL_OFFSET 0x2c +#define SDHCI_ARASAN_VENDOR_REGISTER 0x78 +#define VENDOR_ENHANCED_STROBE BIT(0) #define CLK_CTRL_TIMEOUT_SHIFT 16 #define CLK_CTRL_TIMEOUT_MASK (0xf << CLK_CTRL_TIMEOUT_SHIFT) #define CLK_CTRL_TIMEOUT_MIN_EXP 13 @@ -73,6 +75,23 @@ static void sdhci_arasan_set_clock(struct sdhci_host *host, unsigned int clock) phy_power_on(sdhci_arasan->phy); } +static int sdhci_arasan_enhanced_strobe(struct mmc_host *mmc, + bool enable) +{ + u32 vendor; + struct sdhci_host *host = mmc_priv(mmc); + + vendor = readl(host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER); + if (enable) + vendor |= VENDOR_ENHANCED_STROBE; + else + vendor &= (~VENDOR_ENHANCED_STROBE); + + writel(vendor, host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER); + + return 0; +} + static struct sdhci_ops sdhci_arasan_ops = { .set_clock = sdhci_arasan_set_clock, .get_max_clock = sdhci_pltfm_clk_get_max_clock, @@ -239,6 +258,9 @@ static int sdhci_arasan_probe(struct platform_device *pdev) dev_err(&pdev->dev, "phy_power_on err.\n"); goto err_phy_power; } + + host->mmc_host_ops.prepare_enhanced_strobe = + sdhci_arasan_enhanced_strobe; } ret = sdhci_add_host(host);
Currently sdhci-arasan 5.1 can support enhanced strobe function, and we now limit it just for "arasan,sdhci-5.1". Add mmc-hs400-enhanced-strobe in DT to enable the function if we'r sure our controller can support it. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> --- Changes in v2: None drivers/mmc/host/sdhci-of-arasan.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)