diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2012-03-15 18:42:32 +0100 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2012-03-15 15:14:24 -0600 |
commit | 87bf5ab82884c829366914aaa813cc8b07b9fe58 (patch) | |
tree | 6f42d875a90bddeb6f1250d967fd9065cbda9cb0 | |
parent | 35faa55cff56441477973e454f62408714f35cd3 (diff) | |
download | op-kernel-dev-87bf5ab82884c829366914aaa813cc8b07b9fe58.zip op-kernel-dev-87bf5ab82884c829366914aaa813cc8b07b9fe58.tar.gz |
spi/fsl-espi: Make sure pm is within 2..32
The reference manual says that pm has to stay within 2 and 32. So the
lowest frequency is 32 and DIV16 set, the highest is 2 and DIV16 unset.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
-rw-r--r-- | drivers/spi/spi-fsl-espi.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 43350f9..7523a24 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -182,16 +182,18 @@ static int fsl_espi_setup_transfer(struct spi_device *spi, cs->hw_mode |= CSMODE_DIV16; pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4); - WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. " + WARN_ONCE(pm > 33, "%s: Requested speed is too low: %d Hz. " "Will use %d Hz instead.\n", dev_name(&spi->dev), - hz, mpc8xxx_spi->spibrg / 1024); - if (pm > 16) - pm = 16; + hz, mpc8xxx_spi->spibrg / (4 * 16 * (32 + 1))); + if (pm > 33) + pm = 33; } else { pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4); } if (pm) pm--; + if (pm < 2) + pm = 2; cs->hw_mode |= CSMODE_PM(pm); |