diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/spi-generic.h | 28 | ||||
-rw-r--r-- | src/include/spi_flash.h | 14 |
2 files changed, 22 insertions, 20 deletions
diff --git a/src/include/spi-generic.h b/src/include/spi-generic.h index 20c7cc72c7..e3e7f829f7 100644 --- a/src/include/spi-generic.h +++ b/src/include/spi-generic.h @@ -109,7 +109,10 @@ enum { }; /*----------------------------------------------------------------------- - * Representation of a SPI controller. + * Representation of a SPI controller. Note the xfer() and xfer_vector() + * callbacks are meant to process full duplex transactions. If the + * controller cannot handle these transactions then return an error when + * din and dout are both set. See spi_xfer() below for more details. * * claim_bus: Claim SPI bus and prepare for communication. * release_bus: Release SPI bus. @@ -232,6 +235,10 @@ void spi_release_bus(const struct spi_slave *slave); * din: Pointer to a string of bytes that will be filled in. * bytesin: How many bytes to read. * + * Note that din and dout are transferred simulataneously in a full duplex + * transaction. The number of clocks within one transaction is calculated + * as: MAX(bytesout*8, bytesin*8). + * * Returns: 0 on success, not 0 on failure */ int spi_xfer(const struct spi_slave *slave, const void *dout, size_t bytesout, @@ -281,23 +288,4 @@ static inline int spi_w8r8(const struct spi_slave *slave, unsigned char byte) return ret < 0 ? ret : din[1]; } -/* - * Helper function to allow chipsets to combine two vectors if possible. It can - * only handle upto 2 vectors. - * - * This function is provided to support command-response kind of transactions - * expected by users like flash. Some special SPI flash controllers can handle - * such command-response operations in a single transaction. For these special - * controllers, separate command and response vectors can be combined into a - * single operation. - * - * Two vectors are combined if first vector has a non-NULL dout and NULL din and - * second vector has a non-NULL din and NULL dout. Otherwise, each vector is - * operated upon one at a time. - * - * Returns 0 on success and non-zero on failure. - */ -int spi_xfer_two_vectors(const struct spi_slave *slave, - struct spi_op vectors[], size_t count); - #endif /* _SPI_GENERIC_H_ */ diff --git a/src/include/spi_flash.h b/src/include/spi_flash.h index 3a6df9ab1f..f7f3b3dbdf 100644 --- a/src/include/spi_flash.h +++ b/src/include/spi_flash.h @@ -125,4 +125,18 @@ const struct spi_flash *boot_device_spi_flash(void); int spi_flash_ctrlr_protect_region(const struct spi_flash *flash, const struct region *region); +/* + * This function is provided to support spi flash command-response transactions. + * Only 2 vectors are supported and the 'func' is called with appropriate + * write and read buffers together. This can be used for chipsets that + * have specific spi flash controllers that don't conform to the normal + * spi xfer API because they are specialized controllers and not generic. + * + * Returns 0 on success and non-zero on failure. + */ +int spi_flash_vector_helper(const struct spi_slave *slave, + struct spi_op vectors[], size_t count, + int (*func)(const struct spi_slave *slave, const void *dout, + size_t bytesout, void *din, size_t bytesin)); + #endif /* _SPI_FLASH_H_ */ |