Skip to content

Commit

Permalink
spi: spi_mpc83xx clockrate fixes
Browse files Browse the repository at this point in the history
This updates the SPI clock rate calculations for the spi_mpc83xx driver.
Some boundary conditions were wrong, and in several cases divide-by-16
wasn't always needed

Signed-off-by: Chen Gong <g.chen@freescale.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Chen Gong authored and Linus Torvalds committed Jul 24, 2008
1 parent 708d8ce commit a61f534
Showing 1 changed file with 16 additions and 13 deletions.
29 changes: 16 additions & 13 deletions drivers/spi/spi_mpc83xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,21 +266,24 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)

cs->hw_mode |= SPMODE_LEN(bits_per_word);

if ((mpc83xx_spi->spibrg / hz) >= 64) {
pm = mpc83xx_spi->spibrg / (hz * 64) - 1;
if (pm > 0x0f) {
dev_err(&spi->dev, "Requested speed is too "
"low: %d Hz. Will use %d Hz instead.\n",
hz, mpc83xx_spi->spibrg / 1024);
pm = 0x0f;
if ((mpc83xx_spi->spibrg / hz) > 64) {
pm = mpc83xx_spi->spibrg / (hz * 64);
if (pm > 16) {
cs->hw_mode |= SPMODE_DIV16;
pm /= 16;
if (pm > 16) {
dev_err(&spi->dev, "Requested speed is too "
"low: %d Hz. Will use %d Hz instead.\n",
hz, mpc83xx_spi->spibrg / 1024);
pm = 16;
}
}
cs->hw_mode |= SPMODE_PM(pm) | SPMODE_DIV16;
} else {
} else
pm = mpc83xx_spi->spibrg / (hz * 4);
if (pm)
pm--;
cs->hw_mode |= SPMODE_PM(pm);
}
if (pm)
pm--;

cs->hw_mode |= SPMODE_PM(pm);
regval = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
if (cs->hw_mode != regval) {
unsigned long flags;
Expand Down

0 comments on commit a61f534

Please sign in to comment.