xref: /optee_os/core/include/spi.h (revision 71716c2aa6f357c4708159e8bb4cca38ece5c475)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2aca1545dSVictor Chong /*
3aca1545dSVictor Chong  * Copyright (c) 2016, Linaro Limited
4aca1545dSVictor Chong  */
5aca1545dSVictor Chong 
6aca1545dSVictor Chong #ifndef __SPI_H__
7aca1545dSVictor Chong #define __SPI_H__
8aca1545dSVictor Chong 
9aca1545dSVictor Chong #include <types_ext.h>
10aca1545dSVictor Chong 
11aca1545dSVictor Chong enum spi_mode {
12aca1545dSVictor Chong 	SPI_MODE0,
13aca1545dSVictor Chong 	SPI_MODE1,
14aca1545dSVictor Chong 	SPI_MODE2,
15aca1545dSVictor Chong 	SPI_MODE3
16aca1545dSVictor Chong };
17aca1545dSVictor Chong 
189a2efe04SVictor Chong enum spi_result {
199a2efe04SVictor Chong 	SPI_OK,
209a2efe04SVictor Chong 	SPI_ERR_CFG,
219a2efe04SVictor Chong 	SPI_ERR_PKTCNT,
229a2efe04SVictor Chong 	SPI_ERR_GENERIC
239a2efe04SVictor Chong };
249a2efe04SVictor Chong 
25aca1545dSVictor Chong struct spi_chip {
26aca1545dSVictor Chong 	const struct spi_ops *ops;
27aca1545dSVictor Chong };
28aca1545dSVictor Chong 
29aca1545dSVictor Chong struct spi_ops {
306356eeb2SVictor Chong 	void (*configure)(struct spi_chip *chip);
316356eeb2SVictor Chong 	void (*start)(struct spi_chip *chip);
329a2efe04SVictor Chong 	enum spi_result (*txrx8)(struct spi_chip *chip, uint8_t *wdat,
339a2efe04SVictor Chong 		uint8_t *rdat, size_t num_pkts);
349a2efe04SVictor Chong 	enum spi_result (*txrx16)(struct spi_chip *chip, uint16_t *wdat,
359a2efe04SVictor Chong 		uint16_t *rdat, size_t num_pkts);
366356eeb2SVictor Chong 	void (*end)(struct spi_chip *chip);
37*71716c2aSVahid Dukandar 	void (*flushfifo)(struct spi_chip *chip);
38aca1545dSVictor Chong };
39aca1545dSVictor Chong 
40aca1545dSVictor Chong #endif	/* __SPI_H__ */
41aca1545dSVictor Chong 
42