Hi Philip,

On Fri, Jan 21 2011, Philip Rakity wrote:
> Marvell pxa controllers have private registers that may need to be
> modified before and after a reset is done.
>
> For example, the SD reset
> operation, RESET_ALL,  will reset the private registers to their
> default state.  This will cause the clock adjustment registers that
> may have been programmed to have incorrect values.
>
> RESET_DATA sometimes needs to be delayed before the reset is done
> (depending on SoC) to enable any transactions being handled by the
> SDIO card to be completed.  Needed in pre SD 3.0 silicon to handle
> clock gating.
>
> Implement hooks to allow this to happen.
>
> Signed-off-by: Philip Rakity <[email protected]>
> ---
>  drivers/mmc/host/sdhci.c |    6 ++++++
>  drivers/mmc/host/sdhci.h |    2 ++
>  2 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index d5febe5..f439881 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -157,6 +157,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
>       if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
>               ier = sdhci_readl(host, SDHCI_INT_ENABLE);
>  
> +     if (host->ops->platform_reset_enter)
> +             host->ops->platform_reset_enter(host, mask);
> +
>       sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
>  
>       if (mask & SDHCI_RESET_ALL)
> @@ -177,6 +180,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
>               mdelay(1);
>       }
>  
> +     if (host->ops->platform_reset_exit)
> +             host->ops->platform_reset_exit(host, mask);
> +
>       if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
>               sdhci_clear_set_irqs(host, SDHCI_INT_ALL_MASK, ier);
>  }
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 6e0969e..9dd7bc1 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -222,6 +222,8 @@ struct sdhci_ops {
>       void (*platform_send_init_74_clocks)(struct sdhci_host *host,
>                                            u8 power_mode);
>       unsigned int    (*get_ro)(struct sdhci_host *host);
> +     void    (*platform_reset_enter)(struct sdhci_host *host, u8 mask);
> +     void    (*platform_reset_exit)(struct sdhci_host *host, u8 mask);
>  };
>  
>  #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS

Thanks, pushed to mmc-next for .40.

- Chris.
-- 
Chris Ball   <[email protected]>   <http://printf.net/>
One Laptop Per Child
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to