Re: [PATCH v9 05/10] mmc: sdhci: introduce signal_voltage_switch callback function

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

 



On Dec 7, 2012, at 2:36 AM, Kevin Liu <kliu5@xxxxxxxxxxx> wrote:

> Some soc/platform need specific handling for signal voltage
> switch. For example, mmp2/mmp3 need to set the AIB IO domain
> control register accordingly.
> 
> Signed-off-by: Bin Wang <binw@xxxxxxxxxxx>
> Signed-off-by: Philip Rakity <prakity@xxxxxxxxxxx>
> Signed-off-by: Kevin Liu <kliu5@xxxxxxxxxxx>
> ---
> drivers/mmc/host/sdhci.c |   17 +++++++++++++++++
> drivers/mmc/host/sdhci.h |    1 +
> 2 files changed, 18 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 50d0382..10d06fd 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -1687,6 +1687,15 @@ static int sdhci_do_3_3v_signal_voltage_switch(struct sdhci_host *host,
> 			return -EIO;
> 		}
> 	}
> +
> +	/*
> +	 * May need to apply soc/platfrom settings for the
> +	 * voltage switch
> +	 */
> +	if (host->ops->signal_voltage_switch)
> +		host->ops->signal_voltage_switch(host,
> +				host->mmc->ios.signal_voltage);
> +
> 	/* Wait for 5ms */
> 	usleep_range(5000, 5500);
> 
> @@ -1729,6 +1738,14 @@ static int sdhci_do_1_8v_signal_voltage_switch(struct sdhci_host *host,
> 			ret = 0;
> 
> 		if (!ret) {
> +			/*
> +			 * May need to apply soc/platfrom settings for the
> +			 * voltage switch
> +			 */
> +			if (host->ops->signal_voltage_switch)
> +				host->ops->signal_voltage_switch(host,
> +					host->mmc->ios.signal_voltage);
> +
> 			ctrl |= SDHCI_CTRL_VDD_180;
> 			sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
> 

I am wondering if this is needed.  

A better way would be to install a notifier for voltage switch notification from the regulator in the platform code for sdhci-pxav2 or -pxav3.
When the regulator changes the voltage the notifier is called and one can tell
a) The new voltage
b) The device asking for the voltage switch (passed in via the void data parameter on the request notitifer)

The only issue I can see is for voltage changes that occur via a SD Host Controller that handles voltage changes.



> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 7c659dd..cc408c4 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -291,6 +291,7 @@ struct sdhci_ops {
> 	void	(*platform_suspend)(struct sdhci_host *host);
> 	void	(*platform_resume)(struct sdhci_host *host);
> 	void	(*platform_init)(struct sdhci_host *host);
> +	void    (*signal_voltage_switch)(struct sdhci_host *host, u8 vol);
> };
> 
> #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
> -- 
> 1.7.0.4
> 

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------
--
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