On Dec 7, 2012, at 2:36 AM, Kevin Liu <kl...@marvell.com> 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 <b...@marvell.com>
> Signed-off-by: Philip Rakity <prak...@marvell.com>
> Signed-off-by: Kevin Liu <kl...@marvell.com>
> ---
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to