diff --git a/drivers/spi/mvebu_spi.c b/drivers/spi/mvebu_spi.c index 785dec2e5..3298b608f 100644 --- a/drivers/spi/mvebu_spi.c +++ b/drivers/spi/mvebu_spi.c @@ -128,22 +128,22 @@ static int mvebu_spi_set_baudrate(struct mvebu_spi *p, u32 speed) #if defined(CONFIG_ARCH_ARMADA_370) || defined(CONFIG_ARCH_ARMADA_XP) static int armada_370_xp_spi_set_baudrate(struct mvebu_spi *p, u32 speed) { - u32 pscl, pdiv, rate, val; + u32 pscl, pdiv, val; /* prescaler values: 1,2,3,...,15 */ pscl = DIV_ROUND_UP(clk_get_rate(p->clk), speed); /* additional prescaler divider: 1, 2, 4, 8, 16, 32, 64, 128 */ - pdiv = 0; rate = pscl; - while (rate > 15 && pdiv <= 7) { - rate /= 2; + pdiv = 0; + while (pscl > 15 && pdiv <= 7) { + pscl = DIV_ROUND_UP(pscl, 2); pdiv++; } dev_dbg(p->master.dev, "%s: clk = %lu, speed = %u, pscl = %d, pdiv = %d\n", __func__, clk_get_rate(p->clk), speed, pscl, pdiv); - if (rate > 15 || pdiv > 7) + if (pscl > 15 || pdiv > 7) return -EINVAL; val = readl(p->base + SPI_IF_CONFIG) & ~(IF_CLK_PRESCALE_MASK);