Move the driver to the driver model & DT support.

Signed-off-by: Wenyou Yang <[email protected]>
---

 arch/arm/mach-at91/include/mach/atmel_sdhci.h | 13 --------
 drivers/mmc/Kconfig                           | 10 ++++++
 drivers/mmc/atmel_sdhci.c                     | 44 ++++++++++++++++++++-------
 3 files changed, 43 insertions(+), 24 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/atmel_sdhci.h

diff --git a/arch/arm/mach-at91/include/mach/atmel_sdhci.h 
b/arch/arm/mach-at91/include/mach/atmel_sdhci.h
deleted file mode 100644
index 9652bc2..0000000
--- a/arch/arm/mach-at91/include/mach/atmel_sdhci.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright (c) 2015 Atmel Corporation
- *                   Wenyou.Yang <[email protected]>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef __ATMEL_SDHCI_H
-#define __ATMEL_SDHCI_H
-
-int atmel_sdhci_init(void *regbase, u32 id);
-
-#endif
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index dc8532f..7f6b2e1 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -16,6 +16,16 @@ config DM_MMC
          appear as block devices in U-Boot and can support filesystems such
          as EXT4 and FAT.
 
+config ATMEL_SDHCI
+       bool "Atmel SDHCI controller support"
+       depends on DM_MMC && ARCH_AT91
+       help
+         This enables support for the Atmel SDHCI controller, which supports
+         the embedded MultiMedia Card (e.MMC) Specification V4.51, the SD
+         Memory Card Specification V3.0, and the SDIO V3.0 specification.
+         It is compliant with the SD Host Controller Standard V3.0
+         specification.
+
 config ROCKCHIP_DWMMC
        bool "Rockchip SD/MMC controller support"
        depends on DM_MMC && OF_CONTROL
diff --git a/drivers/mmc/atmel_sdhci.c b/drivers/mmc/atmel_sdhci.c
index 24b68b6..ec2885e 100644
--- a/drivers/mmc/atmel_sdhci.c
+++ b/drivers/mmc/atmel_sdhci.c
@@ -6,35 +6,57 @@
  */
 
 #include <common.h>
+#include <dm.h>
 #include <malloc.h>
 #include <sdhci.h>
 #include <asm/arch/clk.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #define ATMEL_SDHC_MIN_FREQ    400000
 
-int atmel_sdhci_init(void *regbase, u32 id)
+static int atmel_sdhci_probe(struct udevice *dev)
 {
-       struct sdhci_host *host;
+       struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
+       struct sdhci_host *host = dev_get_priv(dev);
        u32 max_clk, min_clk = ATMEL_SDHC_MIN_FREQ;
+       u32 periph_id;
 
-       host = (struct sdhci_host *)calloc(1, sizeof(struct sdhci_host));
-       if (!host) {
-               printf("%s: sdhci_host calloc failed\n", __func__);
-               return -ENOMEM;
-       }
+       host->name = (char *)dev->name;
+       host->ioaddr = (void *)dev_get_addr(dev);
 
-       host->name = "atmel_sdhci";
-       host->ioaddr = regbase;
        host->quirks = 0;
        host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
-       max_clk = at91_get_periph_generated_clk(id);
+
+       host->bus_width = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+                                        "bus-width", 4);
+
+       periph_id = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "id", 0);
+       if (periph_id < 0)
+               return -EINVAL;
+
+       max_clk = at91_get_periph_generated_clk(periph_id);
        if (!max_clk) {
                printf("%s: Failed to get the proper clock\n", __func__);
-               free(host);
                return -ENODEV;
        }
 
        add_sdhci(host, max_clk, min_clk);
 
+       upriv->mmc = host->mmc;
+
        return 0;
 }
+
+static const struct udevice_id atmel_sdhci_ids[] = {
+       { .compatible = "atmel,sama5d2-sdhci" },
+       { }
+};
+
+U_BOOT_DRIVER(atmel_sdhci_drv) = {
+       .name           = "atmel_sdhci",
+       .id             = UCLASS_MMC,
+       .of_match       = atmel_sdhci_ids,
+       .probe          = atmel_sdhci_probe,
+       .priv_auto_alloc_size = sizeof(struct sdhci_host),
+};
-- 
2.7.4

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to