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

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

 



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.  

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