Accessing and talking to the client
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 struct spi_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 /* 1 bit transfer */ #define SPI_NBITS_DUAL 0x02 /* 2 bits transfer */ #define SPI_NBITS_QUAD 0x04 /* 4 bits transfer */ u8 bits_per_word; u16 delay_usecs; u32 speed_hz...