[U-Boot] [PATCH 01/20] dm: spi: Avoid setting the speed with every transfer

Simon Glass
2015-02-17T22:29:35Z

Only set the speed if it has changed from last time. Since the speed will
be 0 when the device is probed it will always be changed on the first
transfer after the device is probed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

drivers/spi/spi-uclass.c | 9 ++++++---
include/spi.h | 3 +++
2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index 63a6217..34cab34 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -63,9 +63,12 @@ int spi_claim_bus(struct spi_slave *slave)
}
if (!speed)
speed = 100000;
- ret = spi_set_speed_mode(bus, speed, slave->mode);
- if (ret)
- return ret;
+ if (speed != slave->speed) {
+ ret = spi_set_speed_mode(bus, speed, slave->mode);
+ if (ret)
+ return ret;
+ slave->speed = speed;
+ }

return ops->claim_bus ? ops->claim_bus(bus) : 0;
}
diff --git a/include/spi.h b/include/spi.h
index c58e453..0d9ae97 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -99,6 +99,8 @@ struct dm_spi_slave_platdata {
* @dev: SPI slave device
* @max_hz: Maximum speed for this slave
* @mode: SPI mode to use for this slave (see SPI mode flags)
+ * @speed: Current bus speed. This is 0 until the bus is first
+ * claimed.
* @bus: ID of the bus that the slave is attached to. For
* driver model this is the sequence number of the SPI
* bus (bus->seq) so does not need to be stored
@@ -116,6 +118,7 @@ struct spi_slave {
#ifdef CONFIG_DM_SPI
struct udevice *dev; /* struct spi_slave is dev->parentdata */
uint max_hz;
+ uint speed;
uint mode;
#else
unsigned int bus;
--
2.2.0.rc0.207.ga3a616c