Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53604dbe authored by Peter Korsgaard's avatar Peter Korsgaard Committed by Linus Torvalds
Browse files

spi_mpc83xx: fix clockrate calculation for low speed



Commit a61f5345 (spi_mpc83xx clockrate fixes) broke clockrate calculation
for low speeds.  SPMODE_DIV16 should be set if the divider is higher than
64, not only if the divider gets clipped to 1024.

Furthermore, the clipping check was off by a factor 16 as well.

Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d7a3e495
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -267,17 +267,14 @@ 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);
		if (pm > 16) {
		cs->hw_mode |= SPMODE_DIV16;
			pm /= 16;
		pm = mpc83xx_spi->spibrg / (hz * 64);
		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;
		}
		}
	} else
		pm = mpc83xx_spi->spibrg / (hz * 4);
	if (pm)