Re: [PATCH] sdhci: allow for eMMC 74 clock generation by controller

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 21/09/10 18:06, Philip Rakity wrote:

Our hardware needs to be programmed to handle this case.  The host-ops option is only needed from h/w that does not handle this.

If you can suggest a way to do this in the mmc layer I would welcome implementing it.

No, I misunderstood sorry :(.  The 74-clocks requirement is standard and
drivers handle it via set_ios.


I looked and the solution requires a call into the driver from the mmc layer after the all setting POWER_ON call.  This was more intrusive than doing it in the driver but if you think this makes sense I can do a patch for that.

eg

/*
  * Apply power to the MMC stack.  This is a two-stage process.
  * First, we enable power to the card without the clock running.
  * We then wait a bit for the power to stabilise.  Finally,
  * enable the bus drivers and clock to the card.
  *
  * We must _NOT_ enable the clock prior to power stablising.
  *
  * If a host does all the power sequencing itself, ignore the
  * initial MMC_POWER_UP stage.
  */
static void mmc_power_up(struct mmc_host *host)
{
	int bit = fls(host->ocr_avail) - 1;

	host->ios.vdd = bit;
	if (mmc_host_is_spi(host)) {
		host->ios.chip_select = MMC_CS_HIGH;
		host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
	} else {
		host->ios.chip_select = MMC_CS_DONTCARE;
		host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
	}
	host->ios.power_mode = MMC_POWER_UP;
	host->ios.bus_width = MMC_BUS_WIDTH_1;
	host->ios.timing = MMC_TIMING_LEGACY;
	mmc_set_ios(host);

	/*  CALL INTO DRIVER HERE TO SEND 74 CLOCKS */<==========
Philip


On Sep 20, 2010, at 11:04 PM, Adrian Hunter wrote:

On 21/09/10 08:43, ext Philip Rakity wrote:

Wolfram,

I generated the patch for eMMC 74 clocks.  I do not know if you want to incorporate into your submission or let it stand on its own.

Wouldn't it be better to fix it in MMC core rather than duplicate it in every driver?


regards,

Philip



From: Philip Rakity<prakity@xxxxxxxxxxx>
Subject: [PATCH] sdhci: allow for eMMC 74 clock generation by controller
Signed-off-by: Philip Rakity<prakity@xxxxxxxxxxx>

Patch is below and sample usage in sdhci-xxxx.c adaption code is below.

/*
  * eMMC spec calls for the host to send 74 clocks to the card
  * during initialization, right after voltage stabilization.
  * create the clocks manually right here.
  */
void generate_init_clocks_A0(struct sdhci_host *host, u8 power_mode)
{
	struct sdhci_mmc_slot *slot = sdhci_priv(host);

	DBG ("%s: ENTER %s: slot->power_mode = %d, ios->power_mode = %d\n",
	 	__func__,
		mmc_hostname(host->mmc),
		slot->power_mode,
		power_mode);

	if (slot->power_mode == MMC_POWER_UP
	&&   power_mode == MMC_POWER_ON) {
	
		/* controller specific code here */
		/* slot->power_mode holds previous power setting */

	}
	slot->power_mode = power_mode;
}



diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 401527d..6aadd0f 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1168,6 +1168,9 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
  	else
  		sdhci_set_power(host, ios->vdd);

+	if (host->ops->platform_generate_initial_74_clocks)
+		host->ops->platform_generate_initial_74_clocks(host, ios->power_mode);
+
  	ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);

  	if (ios->bus_width == MMC_BUS_WIDTH_8)
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index d316bc7..70c5806 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -323,6 +323,8 @@ struct sdhci_ops {
  	unsigned int	(*get_max_clock)(struct sdhci_host *host);
  	unsigned int	(*get_min_clock)(struct sdhci_host *host);
  	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
+	void		(*platform_generate_initial_74_clocks)(struct sdhci_host *host,
+				u8 power_mode);
  };

  #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS

--
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





--
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


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux