spi: Implement spi_set_speed

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>
This commit is contained in:
Paul Barker 2022-10-05 13:18:34 +01:00 committed by Heinrich Schuchardt
parent 0e49f5c26c
commit c98f6fed93
2 changed files with 18 additions and 1 deletions

View File

@ -130,6 +130,21 @@ void spi_release_bus(struct spi_slave *slave)
dm_spi_release_bus(slave->dev); 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, int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
const void *dout, void *din, unsigned long flags) const void *dout, void *din, unsigned long flags)
{ {

View 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(). * This sets a new speed to be applied for next spi_xfer().
* @slave: The SPI slave * @slave: The SPI slave
* @hz: The transfer speed * @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. * Write 8 bits, then read 8 bits.