X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=drivers%2Fmmc%2Funiphier-sd.c;h=6539880ab5d7cb885d33c05848c04e8a28f024e1;hb=9450ab2ba8d720bd9f73bccc0af2e2b5a2c2aaf1;hp=47379b0328e6208aa37d7bf316091fecf5a4055b;hpb=6d0409f256127000a9b32f94d1b52a6ee83382bf;p=platform%2Fkernel%2Fu-boot.git diff --git a/drivers/mmc/uniphier-sd.c b/drivers/mmc/uniphier-sd.c index 47379b0..6539880 100644 --- a/drivers/mmc/uniphier-sd.c +++ b/drivers/mmc/uniphier-sd.c @@ -1,8 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2016 Socionext Inc. * Author: Masahiro Yamada - * - * SPDX-License-Identifier: GPL-2.0+ */ #include @@ -26,12 +25,53 @@ static const struct dm_mmc_ops uniphier_sd_ops = { }; static const struct udevice_id uniphier_sd_match[] = { - { .compatible = "socionext,uniphier-sdhc", .data = 0 }, + { .compatible = "socionext,uniphier-sd-v2.91" }, + { .compatible = "socionext,uniphier-sd-v3.1" }, + { .compatible = "socionext,uniphier-sd-v3.1.1" }, { /* sentinel */ } }; +static ulong uniphier_sd_clk_get_rate(struct tmio_sd_priv *priv) +{ +#if CONFIG_IS_ENABLED(CLK) + return clk_get_rate(&priv->clk); +#elif CONFIG_SPL_BUILD + return 100000000; +#else + return 0; +#endif +} + static int uniphier_sd_probe(struct udevice *dev) { + struct tmio_sd_priv *priv = dev_get_priv(dev); + + priv->clk_get_rate = uniphier_sd_clk_get_rate; + +#ifndef CONFIG_SPL_BUILD + int ret; + + ret = clk_get_by_index(dev, 0, &priv->clk); + if (ret < 0) { + dev_err(dev, "failed to get host clock\n"); + return ret; + } + + /* set to max rate */ + ret = clk_set_rate(&priv->clk, ULONG_MAX); + if (ret < 0) { + dev_err(dev, "failed to set rate for host clock\n"); + clk_free(&priv->clk); + return ret; + } + + ret = clk_enable(&priv->clk); + if (ret) { + dev_err(dev, "failed to enable host clock\n"); + return ret; + } +#endif + return tmio_sd_probe(dev, 0); }