126 lines
2.2 KiB
C
126 lines
2.2 KiB
C
#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
|
|
|