diff options
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/zynq_sdhci.c | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index 72a272f2b..fdce2c2c1 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -7,6 +7,8 @@   */  #include <common.h> +#include <fdtdec.h> +#include <libfdt.h>  #include <malloc.h>  #include <sdhci.h>  #include <asm/arch/sys_proto.h> @@ -32,3 +34,30 @@ int zynq_sdhci_init(u32 regbase)  	add_sdhci(host, 52000000, 52000000 >> 9);  	return 0;  } + +#ifdef CONFIG_OF_CONTROL +int zynq_sdhci_of_init(const void *blob) +{ +	int offset = 0; +	u32 ret = 0; +	u32 reg; + +	debug("ZYNQ SDHCI: Initialization\n"); + +	do { +		offset = fdt_node_offset_by_compatible(blob, offset, +					"arasan,sdhci-8.9a"); +		if (offset != -1) { +			reg = fdtdec_get_addr(blob, offset, "reg"); +			if (reg != FDT_ADDR_T_NONE) { +				ret |= zynq_sdhci_init(reg); +			} else { +				debug("ZYNQ SDHCI: Can't get base address\n"); +				return -1; +			} +		} +	} while (offset != -1); + +	return ret; +} +#endif |