123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #ifndef __SPIFLASH_H__
- #define __SPIFLASH_H__
- #include "typedef.h"
- #include "generic/list.h"
- #include "generic/ioctl.h"
- #include "device/device.h"
- #include "system/task.h"
- struct spi_device;
- enum spiflash_bit_mode {
- SPI_2WIRE_MODE,
- SPI_ODD_MODE,
- SPI_DUAL_MODE,
- SPI_QUAD_MODE,
- };
- enum spiflash_read_mode {
- FAST_READ_OUTPUT_MODE,
- FAST_READ_IO_MODE,
- FAST_READ_IO_CONTINUOUS_READ_MODE,
- };
- enum sfc_run_mode {
- //1bit mode
- SFC_READ_DATA_MODE = (1 << 0),
- SFC_FAST_READ_MODE = (1 << 1),
- //2bit mode
- SFC_FAST_READ_DUAL_IO_NORMAL_READ_MODE = (1 << 2),
- SFC_FAST_READ_DUAL_IO_CONTINUOUS_READ_MODE = (1 << 3),
- SFC_FAST_READ_DUAL_OUTPUT_MODE = (1 << 4),
- //4bit mode
- SFC_FAST_READ_QUAD_IO_NORMAL_READ_MODE = (1 << 5),
- SFC_FAST_READ_QUAD_IO_CONTINUOUS_READ_MODE = (1 << 6),
- SFC_FAST_READ_QUAD_OUTPUT_MODE = (1 << 7),
- };
- struct spi_ops {
- int (*set_cs)(int);
- int (*init)(void *);
- u8(*read_byte)(int *err);
- int (*read)(u8 *, u32 len, u8 mode);
- int (*write_byte)(u8 cmd);
- int (*write_cmd)(u8 *cmd, u32 len);
- int (*write)(u8 *, u32 len);
- u8(*get_bit_mode)();
- };
- struct sf_info {
- u32 id;
- u16 page_size; //byte
- u16 block_size; //KByte
- u32 chip_size; //KByte
- };
- enum sf_erase_type {
- SF_SECTOR_ERASE,
- SF_BLOCK_ERASE,
- SF_CHIP_ERASE,
- };
- //struct sf_erase {
- //enum sf_erase_type type;
- //u32 addr;
- //};
- //struct sf_wp {
- //u8 enable;
- //u8 cmd;
- //};
- struct spi_device {
- const char *name;
- const struct spi_ops *ops;
- };
- struct spiflash_platform_data {
- const char *name;
- enum spiflash_read_mode mode;
- enum sfc_run_mode sfc_run_mode;
- void *private_data;
- };
- struct spiflash {
- struct list_head entry;
- void *device;
- struct device dev;
- struct sf_info info;
- const struct spiflash_platform_data *pd;
- const char *name;
- OS_MUTEX mutext;
- u8 inited;
- u8 read_mode;
- u8 read_cmd_mode;
- u8 write_cmd_mode;
- u8 continuous_read_mode;
- };
- #define REGISTER_SPIFLASH_DEVICE(dev) \
- static const struct spi_device dev sec(.spi_device)
- extern struct spi_device spi_device_begin[];
- extern struct spi_device spi_device_end[];
- extern struct spiflash *__get_spiflash(const char *name);
- #endif
|