[PATCH 2/3] spi: mvebu: make sure the value calculated for PSCL is also used

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Thu Dec 8 01:05:43 PST 2016


The function used a separate variable to hold the value calculated and
only used it for range checking but then didn't use it.

This fixes calculation for slow baud rate that require a divider > 15.

Additionally fix the rounding.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
---
 drivers/spi/mvebu_spi.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/spi/mvebu_spi.c b/drivers/spi/mvebu_spi.c
index d61a545f02d8..319d213872e0 100644
--- a/drivers/spi/mvebu_spi.c
+++ b/drivers/spi/mvebu_spi.c
@@ -135,22 +135,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);
-- 
2.10.2




More information about the barebox mailing list