+// SPDX-License-Identifier: GPL-2.0
/*
* drivers/mmc/sh_sdhi.c
*
* Copyright (C) 2011,2013-2017 Renesas Electronics Corporation
* Copyright (C) 2014 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
* Copyright (C) 2008-2009 Renesas Solutions Corp.
- *
- * SPDX-License-Identifier: GPL-2.0
*/
#include <common.h>
+#include <log.h>
#include <malloc.h>
#include <mmc.h>
#include <dm.h>
+#include <part.h>
+#include <dm/device_compat.h>
+#include <linux/bitops.h>
+#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/compat.h>
#include <linux/io.h>
#include <linux/sizes.h>
#include <asm/arch/rmobile.h>
#include <asm/arch/sh_sdhi.h>
+#include <asm/global_data.h>
+#include <clk.h>
#define DRIVER_NAME "sh-sdhi"
struct mmc *mmc;
struct sh_sdhi_host *host = NULL;
- if (ch >= CONFIG_SYS_SH_SDHI_NR_CHANNEL)
+ if (ch >= CFG_SYS_SH_SDHI_NR_CHANNEL)
return -ENODEV;
host = malloc(sizeof(struct sh_sdhi_host));
return ret;
error:
- if (host)
- free(host);
+ free(host);
return ret;
}
static int sh_sdhi_dm_bind(struct udevice *dev)
{
- struct sh_sdhi_plat *plat = dev_get_platdata(dev);
+ struct sh_sdhi_plat *plat = dev_get_plat(dev);
return mmc_bind(dev, &plat->mmc, &plat->cfg);
}
static int sh_sdhi_dm_probe(struct udevice *dev)
{
- struct sh_sdhi_plat *plat = dev_get_platdata(dev);
+ struct sh_sdhi_plat *plat = dev_get_plat(dev);
struct sh_sdhi_host *host = dev_get_priv(dev);
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
+ struct clk sh_sdhi_clk;
const u32 quirks = dev_get_driver_data(dev);
fdt_addr_t base;
+ int ret;
- base = devfdt_get_addr(dev);
+ base = dev_read_addr(dev);
if (base == FDT_ADDR_T_NONE)
return -EINVAL;
if (!host->addr)
return -ENOMEM;
+ ret = clk_get_by_index(dev, 0, &sh_sdhi_clk);
+ if (ret) {
+ debug("failed to get clock, ret=%d\n", ret);
+ return ret;
+ }
+
+ ret = clk_enable(&sh_sdhi_clk);
+ if (ret) {
+ debug("failed to enable clock, ret=%d\n", ret);
+ return ret;
+ }
+
host->quirks = quirks;
if (host->quirks & SH_SDHI_QUIRK_64BIT_BUF)
.of_match = sh_sdhi_sd_match,
.bind = sh_sdhi_dm_bind,
.probe = sh_sdhi_dm_probe,
- .priv_auto_alloc_size = sizeof(struct sh_sdhi_host),
- .platdata_auto_alloc_size = sizeof(struct sh_sdhi_plat),
+ .priv_auto = sizeof(struct sh_sdhi_host),
+ .plat_auto = sizeof(struct sh_sdhi_plat),
.ops = &sh_sdhi_dm_ops,
};
#endif