
On Thursday 28 December 2017 11:42 AM, Jagan Teki wrote: [...]
+static const struct mtd_ops spi_nor_mtd_ops = {
- .read = spi_nor_mread,
- .erase = spi_nor_merase,
+};
Wondering why spi_nor_mwrite is not hooked up here?
+U_BOOT_DRIVER(spinor_mtd) = {
- .name = "spinor_mtd",
- .id = UCLASS_MTD,
- .ops = &spi_nor_mtd_ops,
- .probe = spi_nor_mtd_probe,
+};
+U_BOOT_DRIVER(spinor) = {
- .name = "spinor",
- .id = UCLASS_SPI_NOR,
+};
+UCLASS_DRIVER(spinor) = {
- .id = UCLASS_SPI_NOR,
- .name = "spinor",
- .flags = DM_UC_FLAG_SEQ_ALIAS,
- .per_device_auto_alloc_size = sizeof(struct spi_nor_uclass_priv),
+};
[...]
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h new file mode 100644 index 0000000..e1688e2 --- /dev/null +++ b/include/linux/mtd/spi-nor.h @@ -0,0 +1,217 @@
[...]
+struct spi_nor {
- struct udevice *dev;
- const char *name;
- u8 init_done;
- u32 page_size;
- u8 addr_width;
- u8 erase_opcode;
- u8 read_opcode;
- u8 read_dummy;
- u8 program_opcode;
- u32 max_write_size;
- u32 flags;
- u8 mode;
- u8 read_mode;
Where is this field used? Shouldn't this field carry single/dual/quad mode information?
- u8 cmd_buf[SNOR_MAX_CMD_SIZE];
- void *memory_map;
+};
+struct spi_nor_ops {
- int (*read_reg)(struct udevice *dev, u8 cmd, u8 *val, int len);
- int (*write_reg)(struct udevice *dev, u8 cmd, u8 *data, int len);
- int (*read)(struct udevice *dev, loff_t from, size_t len,
u_char *buf);
- int (*write)(struct udevice *dev, loff_t to, size_t len,
const u_char *buf);
+};
+#define spi_nor_get_ops(dev) ((struct spi_nor_ops *)(dev)->driver->ops)
+int spi_nor_merase(struct udevice *dev, struct erase_info *instr); +int spi_nor_mread(struct udevice *dev, loff_t from, size_t len,
size_t *retlen, u_char *buf);
+int spi_nor_scan(struct spi_nor *nor); +int spi_nor_bind(struct udevice *dev, struct spi_nor *nor);
+struct spi_nor *find_spi_nor_device(int dev_num); +int get_spi_nor_num(void); +struct spi_nor *spi_nor_get_spi_nor_dev(struct udevice *dev); +struct mtd_info *spi_nor_get_mtd_info(struct spi_nor *nor);
+#endif /* __MTD_SPI_NOR_H */