You need to set the tx_nbits and rx_nbits fields of the spi_ioc_transfer
struct
to something valid. Zero will do.
If you are using a stack variable (which your code snippet implied), the
tx_nbits
and rx_nbits fields are likely random garbage.
You might just be getting lucky now.
--- from include/uapi/linux/spi/spidev.h
struct spi_ioc_transfer {
__u64 tx_buf;
__u64 rx_buf;
__u32 len;
__u32 speed_hz;
__u16 delay_usecs;
__u8 bits_per_word;
__u8 cs_change;
__u8 tx_nbits;
__u8 rx_nbits;
__u16 pad;
};
--- from include/linux/spi/spi.h
...
/**
* struct spi_transfer - a read/write buffer pair
* @tx_buf: data to be written (dma-safe memory), or NULL
* @rx_buf: data to be read (dma-safe memory), or NULL
* @tx_dma: DMA address of tx_buf, if @spi_message.is_dma_mapped
* @rx_dma: DMA address of rx_buf, if @spi_message.is_dma_mapped
* @tx_nbits: number of bits used for writing. If 0 the default
* (SPI_NBITS_SINGLE) is used.
* @rx_nbits: number of bits used for reading. If 0 the default
* (SPI_NBITS_SINGLE) is used.
...
--- from drivers/spi/spi.c
2013 static int __spi_validate(struct spi_device *spi, struct spi_message
*message)
2014 {
...
2087 /* check transfer tx/rx_nbits:
2088 * 1. check the value matches one of single, dual and
quad
2089 * 2. check tx/rx_nbits match the mode in spi_device
2090 */
2091 if (xfer->tx_buf) {
2092 if (xfer->tx_nbits != SPI_NBITS_SINGLE &&
2093 xfer->tx_nbits != SPI_NBITS_DUAL &&
2094 xfer->tx_nbits != SPI_NBITS_QUAD)
2095 return -EINVAL;
2096 if ((xfer->tx_nbits == SPI_NBITS_DUAL) &&
2097 !(spi->mode & (SPI_TX_DUAL |
SPI_TX_QUAD)))
2098 return -EINVAL;
2099 if ((xfer->tx_nbits == SPI_NBITS_QUAD) &&
2100 !(spi->mode & SPI_TX_QUAD))
2101 return -EINVAL;
2102 }
2103 /* check transfer rx_nbits */
2104 if (xfer->rx_buf) {
2105 if (xfer->rx_nbits != SPI_NBITS_SINGLE &&
2106 xfer->rx_nbits != SPI_NBITS_DUAL &&
2107 xfer->rx_nbits != SPI_NBITS_QUAD)
2108 return -EINVAL;
2109 if ((xfer->rx_nbits == SPI_NBITS_DUAL) &&
2110 !(spi->mode & (SPI_RX_DUAL |
SPI_RX_QUAD)))
2111 return -EINVAL;
2112 if ((xfer->rx_nbits == SPI_NBITS_QUAD) &&
2113 !(spi->mode & SPI_RX_QUAD))
2114 return -EINVAL;
2115 }
...
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.