未验证 提交 33a23423 编写于 作者: A Alexandru Ardelean 提交者: Mark Brown

staging: greybus: spilib: use 'spi_delay_to_ns' for getting xfer delay

The intent is the removal of the 'delay_usecs' field from the
spi_transfer struct, as there is a 'delay' field that does the same
thing.

The spi_delay_to_ns() can be used to get the transfer delay. It works by
using the 'delay_usecs' field first (if it is non-zero), and finally
uses the 'delay' field.

Since the 'delay_usecs' field is going away, this change makes use of the
spi_delay_to_ns() function. This also means dividing the return value of
the function by 1000, to convert it to microseconds.
To prevent any potential faults when converting to microseconds and since
the result of spi_delay_to_ns() is int, the delay is being computed in 32
bits and then clamped between 0 & U16_MAX.
Signed-off-by: NAlexandru Ardelean <aardelean@deviqon.com>
Acked-by: NViresh Kumar <viresh.kumar@linaro.org>
Acked-by: NRui Miguel Silva <rmfrfs@gmail.com>
Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20210308145502.1075689-7-aardelean@deviqon.comSigned-off-by: NMark Brown <broonie@kernel.org>
上级 7ca660f8
...@@ -245,6 +245,7 @@ static struct gb_operation *gb_spi_operation_create(struct gb_spilib *spi, ...@@ -245,6 +245,7 @@ static struct gb_operation *gb_spi_operation_create(struct gb_spilib *spi,
/* Fill in the transfers array */ /* Fill in the transfers array */
xfer = spi->first_xfer; xfer = spi->first_xfer;
while (msg->state != GB_SPI_STATE_OP_DONE) { while (msg->state != GB_SPI_STATE_OP_DONE) {
int xfer_delay;
if (xfer == spi->last_xfer) if (xfer == spi->last_xfer)
xfer_len = spi->last_xfer_size; xfer_len = spi->last_xfer_size;
else else
...@@ -259,7 +260,9 @@ static struct gb_operation *gb_spi_operation_create(struct gb_spilib *spi, ...@@ -259,7 +260,9 @@ static struct gb_operation *gb_spi_operation_create(struct gb_spilib *spi,
gb_xfer->speed_hz = cpu_to_le32(xfer->speed_hz); gb_xfer->speed_hz = cpu_to_le32(xfer->speed_hz);
gb_xfer->len = cpu_to_le32(xfer_len); gb_xfer->len = cpu_to_le32(xfer_len);
gb_xfer->delay_usecs = cpu_to_le16(xfer->delay_usecs); xfer_delay = spi_delay_to_ns(&xfer->delay, xfer) / 1000;
xfer_delay = clamp_t(u16, xfer_delay, 0, U16_MAX);
gb_xfer->delay_usecs = cpu_to_le16(xfer_delay);
gb_xfer->cs_change = xfer->cs_change; gb_xfer->cs_change = xfer->cs_change;
gb_xfer->bits_per_word = xfer->bits_per_word; gb_xfer->bits_per_word = xfer->bits_per_word;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册