aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-fsl-espi.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2012-03-15 13:42:32 -0400
committerGrant Likely <grant.likely@secretlab.ca>2012-03-15 17:14:24 -0400
commit87bf5ab82884c829366914aaa813cc8b07b9fe58 (patch)
tree6f42d875a90bddeb6f1250d967fd9065cbda9cb0 /drivers/spi/spi-fsl-espi.c
parent35faa55cff56441477973e454f62408714f35cd3 (diff)
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>
Diffstat (limited to 'drivers/spi/spi-fsl-espi.c')
-rw-r--r--drivers/spi/spi-fsl-espi.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
index 43350f999314..7523a2429d09 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,
182 cs->hw_mode |= CSMODE_DIV16; 182 cs->hw_mode |= CSMODE_DIV16;
183 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4); 183 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4);
184 184
185 WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. " 185 WARN_ONCE(pm > 33, "%s: Requested speed is too low: %d Hz. "
186 "Will use %d Hz instead.\n", dev_name(&spi->dev), 186 "Will use %d Hz instead.\n", dev_name(&spi->dev),
187 hz, mpc8xxx_spi->spibrg / 1024); 187 hz, mpc8xxx_spi->spibrg / (4 * 16 * (32 + 1)));
188 if (pm > 16) 188 if (pm > 33)
189 pm = 16; 189 pm = 33;
190 } else { 190 } else {
191 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4); 191 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4);
192 } 192 }
193 if (pm) 193 if (pm)
194 pm--; 194 pm--;
195 if (pm < 2)
196 pm = 2;
195 197
196 cs->hw_mode |= CSMODE_PM(pm); 198 cs->hw_mode |= CSMODE_PM(pm);
197 199