spi: Implement spi_set_speed
authorPaul Barker <paul.barker@sancloud.com>
Wed, 5 Oct 2022 12:18:34 +0000 (13:18 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 16 Oct 2022 10:23:22 +0000 (12:23 +0200)
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@sancloud.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
drivers/spi/spi-uclass.c
include/spi.h

index f2791c4..c929e7c 100644 (file)
@@ -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)
 {
index 9a8c1fb..1bc18e6 100644 (file)
@@ -352,8 +352,10 @@ void spi_cs_deactivate(struct spi_slave *slave);
  * This sets a new speed to be applied for next spi_xfer().
  * @slave:     The SPI slave
  * @hz:                The transfer speed
+ *
+ * Returns:    0 on success, or a negative value on error.
  */
-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.