|
@@ -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;
|