can: mcp251xfd: mcp251xfd_handle_rxif_ring_uinc(): factor out in separate function
This is a preparation patch. Sending the UINC messages followed by incrementing the tail pointer will be called in more than one place in upcoming patches, so factor this out into a separate function. Also make mcp251xfd_handle_rxif_ring_uinc() safe to be called with a "len" of 0. Tested-by: Stefan Althöfer <Stefan.Althoefer@janztec.com> Tested-by: Thomas Kopp <thomas.kopp@microchip.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
e793c724b4
commit
d49184b7b5
@ -197,6 +197,37 @@ mcp251xfd_rx_obj_read(const struct mcp251xfd_priv *priv,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
mcp251xfd_handle_rxif_ring_uinc(const struct mcp251xfd_priv *priv,
|
||||
struct mcp251xfd_rx_ring *ring,
|
||||
u8 len)
|
||||
{
|
||||
int offset;
|
||||
int err;
|
||||
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
/* Increment the RX FIFO tail pointer 'len' times in a
|
||||
* single SPI message.
|
||||
*
|
||||
* Note:
|
||||
* Calculate offset, so that the SPI transfer ends on
|
||||
* the last message of the uinc_xfer array, which has
|
||||
* "cs_change == 0", to properly deactivate the chip
|
||||
* select.
|
||||
*/
|
||||
offset = ARRAY_SIZE(ring->uinc_xfer) - len;
|
||||
err = spi_sync_transfer(priv->spi,
|
||||
ring->uinc_xfer + offset, len);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
ring->tail += len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
||||
struct mcp251xfd_rx_ring *ring)
|
||||
@ -210,8 +241,6 @@ mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
||||
return err;
|
||||
|
||||
while ((len = mcp251xfd_get_rx_linear_len(ring))) {
|
||||
int offset;
|
||||
|
||||
rx_tail = mcp251xfd_get_rx_tail(ring);
|
||||
|
||||
err = mcp251xfd_rx_obj_read(priv, ring, hw_rx_obj,
|
||||
@ -227,22 +256,9 @@ mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Increment the RX FIFO tail pointer 'len' times in a
|
||||
* single SPI message.
|
||||
*
|
||||
* Note:
|
||||
* Calculate offset, so that the SPI transfer ends on
|
||||
* the last message of the uinc_xfer array, which has
|
||||
* "cs_change == 0", to properly deactivate the chip
|
||||
* select.
|
||||
*/
|
||||
offset = ARRAY_SIZE(ring->uinc_xfer) - len;
|
||||
err = spi_sync_transfer(priv->spi,
|
||||
ring->uinc_xfer + offset, len);
|
||||
err = mcp251xfd_handle_rxif_ring_uinc(priv, ring, len);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
ring->tail += len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user