summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>2014-12-03 17:57:00 +0900
committerNobuhiro Iwamatsu <iwamatsu@nigauri.org>2014-12-05 11:15:11 +0900
commit21ea350385149e0e96c51b2cac5e91cd4fd143bc (patch)
tree75e007c78a848f003dfc07cf07b2d5dcfb0ca05f /drivers
parent97cdf64026c7d749dd7a5c0dbaba7a60a7292ac9 (diff)
downloadu-boot-imx-21ea350385149e0e96c51b2cac5e91cd4fd143bc.zip
u-boot-imx-21ea350385149e0e96c51b2cac5e91cd4fd143bc.tar.gz
u-boot-imx-21ea350385149e0e96c51b2cac5e91cd4fd143bc.tar.bz2
mmc: sh_mmcif: Use DIV_ROUND_UP and fls instead of calculation loop
Use DIV_ROUND_UP and fls to simplify the code. Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/sh_mmcif.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/mmc/sh_mmcif.c b/drivers/mmc/sh_mmcif.c
index ed83a14..8f386e2 100644
--- a/drivers/mmc/sh_mmcif.c
+++ b/drivers/mmc/sh_mmcif.c
@@ -103,20 +103,18 @@ static int mmcif_wait_interrupt_flag(struct sh_mmcif_host *host)
static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
{
- int i;
-
sh_mmcif_bitclr(CLK_ENABLE, &host->regs->ce_clk_ctrl);
sh_mmcif_bitclr(CLK_CLEAR, &host->regs->ce_clk_ctrl);
if (!clk)
return;
- if (clk == CLKDEV_EMMC_DATA) {
+
+ if (clk == CLKDEV_EMMC_DATA)
sh_mmcif_bitset(CLK_PCLK, &host->regs->ce_clk_ctrl);
- } else {
- for (i = 1; (unsigned int)host->clk / (1 << i) >= clk; i++)
- ;
- sh_mmcif_bitset((i - 1) << 16, &host->regs->ce_clk_ctrl);
- }
+ else
+ sh_mmcif_bitset((fls(DIV_ROUND_UP(host->clk,
+ clk) - 1) - 1) << 16,
+ &host->regs->ce_clk_ctrl);
sh_mmcif_bitset(CLK_ENABLE, &host->regs->ce_clk_ctrl);
}