diff mbox

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

Message ID 1424212195-7501-2-git-send-email-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Feb. 17, 2015, 10:29 p.m. UTC
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(-)

Comments

Simon Glass May 2, 2015, 8:58 p.m. UTC | #1
On 17 February 2015 at 15:29, Simon Glass <sjg@chromium.org> wrote:
>
> 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(-)
>

Applied to u-boot-dm.
diff mbox

Patch

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;