sw: add spi base
This is taken from fomu-flash, and needs to be adapted. Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
		
							
								
								
									
										89
									
								
								sw/include/spi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								sw/include/spi.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
#ifndef BB_SPI_H_
 | 
			
		||||
#define BB_SPI_H_
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
enum spi_state {
 | 
			
		||||
	SS_UNCONFIGURED = 0,
 | 
			
		||||
	SS_SINGLE,
 | 
			
		||||
	SS_DUAL_RX,
 | 
			
		||||
	SS_DUAL_TX,
 | 
			
		||||
	SS_QUAD_RX,
 | 
			
		||||
	SS_QUAD_TX,
 | 
			
		||||
	SS_HARDWARE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum spi_type {
 | 
			
		||||
	ST_UNCONFIGURED,
 | 
			
		||||
	ST_SINGLE,
 | 
			
		||||
	ST_DUAL,
 | 
			
		||||
	ST_QUAD,
 | 
			
		||||
	ST_QPI,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum spi_pin {
 | 
			
		||||
	SP_MOSI,
 | 
			
		||||
	SP_MISO,
 | 
			
		||||
	SP_HOLD,
 | 
			
		||||
	SP_WP,
 | 
			
		||||
	SP_CS,
 | 
			
		||||
	SP_CLK,
 | 
			
		||||
	SP_D0,
 | 
			
		||||
	SP_D1,
 | 
			
		||||
	SP_D2,
 | 
			
		||||
	SP_D3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct spi_id {
 | 
			
		||||
	uint8_t manufacturer_id;	// Result from 0x90
 | 
			
		||||
	uint8_t device_id;		// Result from 0x90
 | 
			
		||||
	uint8_t _manufacturer_id;	// Result from 0x9f
 | 
			
		||||
	uint8_t memory_type;		// Result from 0x9f
 | 
			
		||||
	uint8_t memory_size;		// Result from 0x9f
 | 
			
		||||
	uint8_t signature;		// Result from 0xab
 | 
			
		||||
	uint8_t serial[4];		// Result from 0x4b
 | 
			
		||||
	int bytes;			// -1 if unknown
 | 
			
		||||
	const char *manufacturer;
 | 
			
		||||
	const char *model;
 | 
			
		||||
	const char *capacity;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ff_spi;
 | 
			
		||||
 | 
			
		||||
void spiPause(struct ff_spi *spi);
 | 
			
		||||
void spiBegin(struct ff_spi *spi);
 | 
			
		||||
void spiEnd(struct ff_spi *spi);
 | 
			
		||||
 | 
			
		||||
//void spiSingleTx(struct ff_spi *spi, uint8_t out);
 | 
			
		||||
//uint8_t spiSingleRx(struct ff_spi *spi);
 | 
			
		||||
//void spiDualTx(struct ff_spi *spi, uint8_t out);
 | 
			
		||||
//void spiQuadTx(struct ff_spi *spi, uint8_t out);
 | 
			
		||||
void spiCommand(struct ff_spi *spi, uint8_t cmd);
 | 
			
		||||
//uint8_t spiDualRx(struct ff_spi *spi);
 | 
			
		||||
//uint8_t spiQuadRx(struct ff_spi *spi);
 | 
			
		||||
int spiTx(struct ff_spi *spi, uint8_t word);
 | 
			
		||||
uint8_t spiRx(struct ff_spi *spi);
 | 
			
		||||
uint8_t spiReadStatus(struct ff_spi *spi, uint8_t sr);
 | 
			
		||||
void spiWriteStatus(struct ff_spi *spi, uint8_t sr, uint8_t val);
 | 
			
		||||
void spiReadSecurity(struct ff_spi *spi, uint8_t sr, uint8_t security[256]);
 | 
			
		||||
void spiWriteSecurity(struct ff_spi *spi, uint8_t sr, uint8_t security[256]);
 | 
			
		||||
int spiSetType(struct ff_spi *spi, enum spi_type type);
 | 
			
		||||
int spiRead(struct ff_spi *spi, uint32_t addr, uint8_t *data, unsigned int count);
 | 
			
		||||
 | 
			
		||||
struct spi_id spiId(struct ff_spi *spi);
 | 
			
		||||
void spiOverrideSize(struct ff_spi *spi, uint32_t new_size);
 | 
			
		||||
 | 
			
		||||
//int spi_wait_for_not_busy(struct ff_spi *spi);
 | 
			
		||||
int spiWrite(struct ff_spi *spi, uint32_t addr, const uint8_t *data, unsigned int count);
 | 
			
		||||
uint8_t spiReset(struct ff_spi *spi);
 | 
			
		||||
int spiInit(struct ff_spi *spi);
 | 
			
		||||
 | 
			
		||||
void spiHold(struct ff_spi *spi);
 | 
			
		||||
void spiUnhold(struct ff_spi *spi);
 | 
			
		||||
void spiSwapTxRx(struct ff_spi *spi);
 | 
			
		||||
 | 
			
		||||
struct ff_spi *spiAlloc(void);
 | 
			
		||||
void spiSetPin(struct ff_spi *spi, enum spi_pin pin, int val);
 | 
			
		||||
void spiFree(struct ff_spi **spi);
 | 
			
		||||
 | 
			
		||||
#endif /* BB_SPI_H_ */
 | 
			
		||||
		Reference in New Issue
	
	Block a user