spi: Add spi_bpw_to_bytes() helper and use it

This helper converts the given bits per word to bytes. The result
will always be power-of-two, e.g.,

    ===============    =================
    Input (in bits)    Output (in bytes)
    ===============    =================
            5                   1
            9                   2
            21                  4
            37                  8
    ===============    =================

It will return 0 for the 0 input.

There are a couple of cases in SPI that are using the same approach
and at least one more (in IIO) would benefit of it. Add a helper
for everyone.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250417152529.490582-2-andriy.shevchenko@linux.intel.com
Acked-by: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Andy Shevchenko 2025-04-17 18:24:46 +03:00 committed by Mark Brown
parent 8ffd015db8
commit 163ddf1fea
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
2 changed files with 27 additions and 1 deletions

View File

@ -3802,7 +3802,7 @@ int spi_split_transfers_maxwords(struct spi_controller *ctlr,
size_t maxsize;
int ret;
maxsize = maxwords * roundup_pow_of_two(BITS_TO_BYTES(xfer->bits_per_word));
maxsize = maxwords * spi_bpw_to_bytes(xfer->bits_per_word);
if (xfer->len > maxsize) {
ret = __spi_split_transfer_maxsize(ctlr, msg, &xfer,
maxsize);

View File

@ -1325,6 +1325,32 @@ static inline bool spi_is_bpw_supported(struct spi_device *spi, u32 bpw)
return false;
}
/**
* spi_bpw_to_bytes - Covert bits per word to bytes
* @bpw: Bits per word
*
* This function converts the given @bpw to bytes. The result is always
* power-of-two, e.g.,
*
* =============== =================
* Input (in bits) Output (in bytes)
* =============== =================
* 5 1
* 9 2
* 21 4
* 37 8
* =============== =================
*
* It will return 0 for the 0 input.
*
* Returns:
* Bytes for the given @bpw.
*/
static inline u32 spi_bpw_to_bytes(u32 bpw)
{
return roundup_pow_of_two(BITS_TO_BYTES(bpw));
}
/**
* spi_controller_xfer_timeout - Compute a suitable timeout value
* @ctlr: SPI device