|
|
|
@ -5416,3 +5416,65 @@ Signed-off-by: John Crispin <blogic@openwrt.org> |
|
|
|
|
|
|
|
|
|
/* Initialise write buffer */
|
|
|
|
|
init_rwsem(&c->wbuf_sem);
|
|
|
|
|
--- a/include/linux/mtd/spi-nor.h
|
|
|
|
|
+++ b/include/linux/mtd/spi-nor.h
|
|
|
|
|
@@ -85,6 +85,7 @@
|
|
|
|
|
#define SR_BP0 BIT(2) /* Block protect 0 */
|
|
|
|
|
#define SR_BP1 BIT(3) /* Block protect 1 */
|
|
|
|
|
#define SR_BP2 BIT(4) /* Block protect 2 */
|
|
|
|
|
+#define SR_TB BIT(5) /* Top/Bottom protect */
|
|
|
|
|
#define SR_SRWD BIT(7) /* SR write protect */
|
|
|
|
|
|
|
|
|
|
#define SR_QUAD_EN_MX BIT(6) /* Macronix Quad I/O */
|
|
|
|
|
@@ -116,6 +117,7 @@
|
|
|
|
|
|
|
|
|
|
enum spi_nor_option_flags {
|
|
|
|
|
SNOR_F_USE_FSR = BIT(0),
|
|
|
|
|
+ SNOR_F_HAS_SR_TB = BIT(1),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -123,7 +125,6 @@
|
|
|
|
|
* @mtd: point to a mtd_info structure
|
|
|
|
|
* @lock: the lock for the read/write/erase/lock/unlock operations
|
|
|
|
|
* @dev: point to a spi device, or a spi nor controller device.
|
|
|
|
|
- * @flash_node: point to a device node describing this flash instance.
|
|
|
|
|
* @page_size: the page size of the SPI NOR
|
|
|
|
|
* @addr_width: number of address bytes
|
|
|
|
|
* @erase_opcode: the opcode for erasing a sector
|
|
|
|
|
@@ -143,7 +144,8 @@
|
|
|
|
|
* @read: [DRIVER-SPECIFIC] read data from the SPI NOR
|
|
|
|
|
* @write: [DRIVER-SPECIFIC] write data to the SPI NOR
|
|
|
|
|
* @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR
|
|
|
|
|
- * at the offset @offs
|
|
|
|
|
+ * at the offset @offs; if not provided by the driver,
|
|
|
|
|
+ * spi-nor will send the erase opcode via write_reg()
|
|
|
|
|
* @flash_lock: [FLASH-SPECIFIC] lock a region of the SPI NOR
|
|
|
|
|
* @flash_unlock: [FLASH-SPECIFIC] unlock a region of the SPI NOR
|
|
|
|
|
* @flash_is_locked: [FLASH-SPECIFIC] check if a region of the SPI NOR is
|
|
|
|
|
@@ -154,7 +156,6 @@
|
|
|
|
|
struct mtd_info mtd;
|
|
|
|
|
struct mutex lock;
|
|
|
|
|
struct device *dev;
|
|
|
|
|
- struct device_node *flash_node;
|
|
|
|
|
u32 page_size;
|
|
|
|
|
u8 addr_width;
|
|
|
|
|
u8 erase_opcode;
|
|
|
|
|
@@ -184,6 +185,17 @@
|
|
|
|
|
void *priv;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
+static inline void spi_nor_set_flash_node(struct spi_nor *nor,
|
|
|
|
|
+ struct device_node *np)
|
|
|
|
|
+{
|
|
|
|
|
+ mtd_set_of_node(&nor->mtd, np);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static inline struct device_node *spi_nor_get_flash_node(struct spi_nor *nor)
|
|
|
|
|
+{
|
|
|
|
|
+ return mtd_get_of_node(&nor->mtd);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
/**
|
|
|
|
|
* spi_nor_scan() - scan the SPI NOR
|
|
|
|
|
* @nor: the spi_nor structure
|
|
|
|
|