Skip to content

Commit 8022456

Browse files
David BrownellLinus Torvalds
authored andcommitted
[PATCH] SPI doc clarifications
This clarifies some aspects of the SPI programming interface, based on feedback from Hans-Peter Nilsson. The in-memory representation of words is right-aligned, so for example a twelve bit word is stored using sixteen bits with four undefined bits in the MSB. And controller drivers must reject protocol tweaking modes they do not support. Signed-off-by: David Brownell <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 0ffa028 commit 8022456

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

include/linux/spi/spi.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
163163
* each slave has a chipselect signal, but it's common that not
164164
* every chipselect is connected to a slave.
165165
* @setup: updates the device mode and clocking records used by a
166-
* device's SPI controller; protocol code may call this.
166+
* device's SPI controller; protocol code may call this. This
167+
* must fail if an unrecognized or unsupported mode is requested.
167168
* @transfer: adds a message to the controller's transfer queue.
168169
* @cleanup: frees controller-specific state
169170
*
@@ -305,6 +306,16 @@ extern struct spi_master *spi_busnum_to_master(u16 busnum);
305306
* shifting out three bytes with word size of sixteen or twenty bits;
306307
* the former uses two bytes per word, the latter uses four bytes.)
307308
*
309+
* In-memory data values are always in native CPU byte order, translated
310+
* from the wire byte order (big-endian except with SPI_LSB_FIRST). So
311+
* for example when bits_per_word is sixteen, buffers are 2N bytes long
312+
* and hold N sixteen bit words in CPU byte order.
313+
*
314+
* When the word size of the SPI transfer is not a power-of-two multiple
315+
* of eight bits, those in-memory words include extra bits. In-memory
316+
* words are always seen by protocol drivers as right-justified, so the
317+
* undefined (rx) or unused (tx) bits are always the most significant bits.
318+
*
308319
* All SPI transfers start with the relevant chipselect active. Normally
309320
* it stays selected until after the last transfer in a message. Drivers
310321
* can affect the chipselect signal using cs_change:
@@ -462,6 +473,11 @@ static inline void spi_message_free(struct spi_message *m)
462473
* changes those settings, and must be called from a context that can sleep.
463474
* The changes take effect the next time the device is selected and data
464475
* is transferred to or from it.
476+
*
477+
* Note that this call wil fail if the protocol driver specifies an option
478+
* that the underlying controller or its driver does not support. For
479+
* example, not all hardware supports wire transfers using nine bit words,
480+
* LSB-first wire encoding, or active-high chipselects.
465481
*/
466482
static inline int
467483
spi_setup(struct spi_device *spi)

0 commit comments

Comments
 (0)