The SPI I/O model consists of a set of queued messages. We submit one or more struct spi_message structures, which are processed and completed synchronously or asynchronously. A single message consists of one or more structspi_transfer objects, each of which represents a full duplex SPI transfer. These are two main structures to exchange data between the driver and the device. They are both defined in include/linux/spi/spi.h:
SPI message structure
struct spi_transfer represents a full duplex SPI transfer:
struct spi_transfer { const void *tx_buf; void *rx_buf; unsigned len; dma_addr_t tx_dma; dma_addr_t rx_dma; unsigned cs_change:1; unsigned tx_nbits:3; unsigned rx_nbits:3; #define SPI_NBITS_SINGLE 0x01 /* 1bit transfer */ #define SPI_NBITS_DUAL 0x02 /* 2bits transfer */ #define...