[PATCH v4 1/6] spi: Implement spi_set_speed

Paul Barker paul.barker at sancloud.com
Wed Oct 5 14:18:34 CEST 2022


This function is already defined in spi.h but no implementation of it
currently exists in the tree. The implementation is based on the static
function spi_set_speed_mode(). The function prototype is modified so
that an success or error condition can be returned to the caller.

Signed-off-by: Paul Barker <paul.barker at sancloud.com>
---
 drivers/spi/spi-uclass.c | 15 +++++++++++++++
 include/spi.h            |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index f2791c4b88ec..c929e7c1d0e9 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -130,6 +130,21 @@ void spi_release_bus(struct spi_slave *slave)
 	dm_spi_release_bus(slave->dev);
 }
 
+int spi_set_speed(struct spi_slave *slave, uint hz)
+{
+	struct dm_spi_ops *ops;
+	int ret;
+
+	ops = spi_get_ops(slave->dev->parent);
+	if (ops->set_speed)
+		ret = ops->set_speed(slave->dev->parent, hz);
+	else
+		ret = -EINVAL;
+	if (ret)
+		dev_err(slave->dev, "Cannot set speed (err=%d)\n", ret);
+	return ret;
+}
+
 int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
 	     const void *dout, void *din, unsigned long flags)
 {
diff --git a/include/spi.h b/include/spi.h
index 9a8c1fb260e6..de97ffb4c385 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -353,7 +353,7 @@ void spi_cs_deactivate(struct spi_slave *slave);
  * @slave:	The SPI slave
  * @hz:		The transfer speed
  */
-void spi_set_speed(struct spi_slave *slave, uint hz);
+int spi_set_speed(struct spi_slave *slave, uint hz);
 
 /**
  * Write 8 bits, then read 8 bits.
-- 
2.25.1



More information about the U-Boot mailing list