Subject: [PATCH 4/4] mmc: sdhci-pltfm: add pltfm-driver for imx35/51

From: [email-masked] (Anton Vorontsov)
Date: Tue, 21 Sep 2010 16:59:43 +0400

On Tue, Sep 21, 2010 at 02:30:10PM +0200, Wolfram Sang wrote:
> This driver adds basic support for the esdhc-core found on e.g.
> imx35/51. It adds up to the pltfm-core.
> 
> Signed-off-by: Wolfram Sang <[email-masked]>
> ---
>  drivers/mmc/host/Kconfig       |    9 +++
>  drivers/mmc/host/Makefile      |    1 +
>  drivers/mmc/host/sdhci-esdhc.c |  141 ++++++++++++++++++++++++++++++++++++++++

I'd reserve that file for esdhc common code, and move IMX
specific bits to sdhci-esdhc-imx.c.

>  drivers/mmc/host/sdhci-pltfm.c |    3 +
>  drivers/mmc/host/sdhci-pltfm.h |    1 +
>  5 files changed, 155 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/mmc/host/sdhci-esdhc.c
> 
> diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
> index 6f12d5d..20d03f5 100644
> --- a/drivers/mmc/host/Kconfig
> +++ b/drivers/mmc/host/Kconfig
> @@ -143,6 +143,15 @@ config MMC_SDHCI_MV
>  
>  	  If unsure, say N.
>  
> +config MMC_SDHCI_ESDHC
> +	bool "SDHCI platform support for the Freescale eSDHC controller"

Maybe Freescale IMX eSDHC? Let's keep MPC and IMX eSDHC
separate as it's quite possible that they may have different
bugs and limitations.

[...]
> +#include <linux/io.h>
> +#include <linux/delay.h>
> +#include <linux/err.h>
> +#include <linux/clk.h>
> +#include <linux/mmc/host.h>
> +#include <linux/mmc/sdhci-pltfm.h>
> +#include "sdhci.h"
> +#include "sdhci-esdhc.h"
> +#include "sdhci-pltfm.h"
> +
> +static inline void esdhc_clrset_le(struct sdhci_host *host, u32 mask, u32 val, int reg)
> +{
> +	void __iomem *base = host->ioaddr + (reg & ~0x3);

#include <linux/compiler.h> is needed for __iomem.

[...]
> +static unsigned int esdhc_pltfm_get_max_clock(struct sdhci_host *host)
> +{
> +	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);

Please put an empty line here.

> +	return clk_get_rate(pltfm_host->clk);
> +}
> +
> +static unsigned int esdhc_pltfm_get_min_clock(struct sdhci_host *host)
> +{
> +	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);

Ditto.

> +	return clk_get_rate(pltfm_host->clk) / 256 / 16;
> +}

[...]
> +++ b/drivers/mmc/host/sdhci-pltfm.c
> @@ -164,6 +164,9 @@ static const struct platform_device_id sdhci_pltfm_ids[] = {
>  #ifdef CONFIG_MMC_SDHCI_CNS3XXX
>  	{ "sdhci-cns3xxx", (kernel_ulong_t)&sdhci_cns3xxx_pdata },
>  #endif
> +#ifdef CONFIG_MMC_SDHCI_ESDHC
> +	{ "sdhci-esdhc", (kernel_ulong_t)&sdhci_esdhc_pdata },

sdhci-esdhc-imx, sdhci_esdhc_imx_pdata.

-- 
Anton Vorontsov
email: cbouatmailru at gmail.com
irc://irc.freenode.net/bd2