On Apr 25, 2011, at 11:36 PM, Nath, Arindam wrote: > Hi Philip, > > >> -----Original Message----- >> From: Philip Rakity [mailto:prakity@xxxxxxxxxxx] >> Sent: Saturday, April 23, 2011 1:56 AM >> To: linux-mmc@xxxxxxxxxxxxxxx >> Cc: Nath, Arindam >> Subject: [PATCH] sdhci-pxa: add platform specific code for UHS >> signaling >> >> >> Marvell controller requires 1.8V bit in UHS control register 2 >> be set when doing UHS. eMMC does not require 1.8V for DDR. >> add platform code to handle this. >> >> Signed-off-by: Philip Rakity <prakity@xxxxxxxxxxx> >> --- >> drivers/mmc/host/sdhci-pxa.c | 38 >> ++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 38 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci-pxa.c b/drivers/mmc/host/sdhci- >> pxa.c >> index 0e64d66..279d677 100644 >> --- a/drivers/mmc/host/sdhci-pxa.c >> +++ b/drivers/mmc/host/sdhci-pxa.c >> @@ -94,7 +94,42 @@ static void platform_reset_exit(struct sdhci_host >> *host, u8 mask) >> } >> } >> >> +static int set_uhs_signaling(struct sdhci_host *host, unsigned int >> uhs) >> +{ >> + u16 ctrl_2; >> + >> + /* >> + * Set V18_EN -- UHS modes do not work without this. >> + * does not change signaling voltage >> + */ >> + ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2); >> + >> + /* Select Bus Speed Mode for host */ >> + ctrl_2 &= ~SDHCI_CTRL_UHS_MASK; >> + if (uhs == MMC_TIMING_UHS_SDR12) >> + ctrl_2 |= SDHCI_CTRL_UHS_SDR12; >> + else if (uhs == MMC_TIMING_UHS_SDR25) >> + ctrl_2 |= SDHCI_CTRL_UHS_SDR25; >> + else if (uhs == MMC_TIMING_UHS_SDR50) { >> + ctrl_2 |= SDHCI_CTRL_UHS_SDR50; >> + ctrl_2 |= SDHCI_CTRL_VDD_180; >> + } >> + else if (uhs == MMC_TIMING_UHS_SDR104) { >> + ctrl_2 |= SDHCI_CTRL_UHS_SDR104; >> + ctrl_2 |= SDHCI_CTRL_VDD_180; >> + } >> + else if (uhs == MMC_TIMING_UHS_DDR50) { >> + ctrl_2 |= SDHCI_CTRL_UHS_DDR50; >> + ctrl_2 |= SDHCI_CTRL_VDD_180; >> + } > > Since SDR12 and SDR25 are also UHS modes, don't we need to set 1.8V signaling for them as well? > will double check with hardware folks. >> + sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2); > > I am not sure about your controller, but as per the spec, we need to reset SDCLK before enabling 1.8V, and then re-enable SDCLK. Also there is a delay of 5ms between these two. Is that a concern here? > The bit must be set -- no need for 5ms delay since it does not control any power source. Internal. >> + pr_debug("%s:%s uhs = %d, ctrl_2 = %04X\n", >> + __func__, mmc_hostname(host->mmc), uhs, ctrl_2); >> + return 0; >> +} > > Since, we are just returning 0 from this function, why not use *void* return type instead? > > Thanks, > Arindam > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html