spi: core: add spi_replace_transfers method
Add the spi_replace_transfers method that can get used to replace some spi_transfers from a spi_message with other transfers. Signed-off-by: Martin Sperl <kernel@martin.sperl.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -890,6 +890,51 @@ spi_max_transfer_size(struct spi_device *spi)
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/* SPI transfer replacement methods which make use of spi_res */
|
||||
|
||||
/**
|
||||
* struct spi_replaced_transfers - structure describing the spi_transfer
|
||||
* replacements that have occurred
|
||||
* so that they can get reverted
|
||||
* @release: some extra release code to get executed prior to
|
||||
* relasing this structure
|
||||
* @extradata: pointer to some extra data if requested or NULL
|
||||
* @replaced_transfers: transfers that have been replaced and which need
|
||||
* to get restored
|
||||
* @replaced_after: the transfer after which the @replaced_transfers
|
||||
* are to get re-inserted
|
||||
* @inserted: number of transfers inserted
|
||||
* @inserted_transfers: array of spi_transfers of array-size @inserted,
|
||||
* that have been replacing replaced_transfers
|
||||
*
|
||||
* note: that @extradata will point to @inserted_transfers[@inserted]
|
||||
* if some extra allocation is requested, so alignment will be the same
|
||||
* as for spi_transfers
|
||||
*/
|
||||
struct spi_replaced_transfers;
|
||||
typedef void (*spi_replaced_release_t)(struct spi_master *master,
|
||||
struct spi_message *msg,
|
||||
struct spi_replaced_transfers *res);
|
||||
struct spi_replaced_transfers {
|
||||
spi_replaced_release_t release;
|
||||
void *extradata;
|
||||
struct list_head replaced_transfers;
|
||||
struct list_head *replaced_after;
|
||||
size_t inserted;
|
||||
struct spi_transfer inserted_transfers[];
|
||||
};
|
||||
|
||||
extern struct spi_replaced_transfers *spi_replace_transfers(
|
||||
struct spi_message *msg,
|
||||
struct spi_transfer *xfer_first,
|
||||
size_t remove,
|
||||
size_t insert,
|
||||
spi_replaced_release_t release,
|
||||
size_t extradatasize,
|
||||
gfp_t gfp);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/* All these synchronous SPI transfer routines are utilities layered
|
||||
* over the core async transfer primitive. Here, "synchronous" means
|
||||
* they will sleep uninterruptibly until the async transfer completes.
|
||||
|
Reference in New Issue
Block a user