This reverts commit 79c452adb159dc9abc507ea13faec8d115a78758.

This was removed because hooks were never used by any driver. But
with upcoming OTP support in SPI-NOR, m25p80 driver will implement
it and will be used for reading/writing OTP area.

Signed-off-by: Rahul Bedarkar <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Brian Norris <[email protected]>
Cc: Boris Brezillon <[email protected]>
Cc: Marek Vasut <[email protected]>
Cc: Richard Weinberger <[email protected]>
Cc: Cyrille Pitchen <[email protected]>
---
 include/linux/mtd/spi-nor.h | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index f2a7180..0be3f86 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -126,6 +126,33 @@ enum read_mode {
        SPI_NOR_QUAD,
 };
 
+/**
+ * struct spi_nor_xfer_cfg - Structure for defining a Serial Flash transfer
+ * @wren:              command for "Write Enable", or 0x00 for not required
+ * @cmd:               command for operation
+ * @cmd_pins:          number of pins to send @cmd (1, 2, 4)
+ * @addr:              address for operation
+ * @addr_pins:         number of pins to send @addr (1, 2, 4)
+ * @addr_width:                number of address bytes
+ *                     (3,4, or 0 for address not required)
+ * @mode:              mode data
+ * @mode_pins:         number of pins to send @mode (1, 2, 4)
+ * @mode_cycles:       number of mode cycles (0 for mode not required)
+ * @dummy_cycles:      number of dummy cycles (0 for dummy not required)
+ */
+struct spi_nor_xfer_cfg {
+       u8              wren;
+       u8              cmd;
+       u8              cmd_pins;
+       u32             addr;
+       u8              addr_pins;
+       u8              addr_width;
+       u8              mode;
+       u8              mode_pins;
+       u8              mode_cycles;
+       u8              dummy_cycles;
+};
+
 #define SPI_NOR_MAX_CMD_SIZE   8
 enum spi_nor_ops {
        SPI_NOR_OPS_READ = 0,
@@ -157,11 +184,14 @@ enum spi_nor_option_flags {
  * @flash_read:                the mode of the read
  * @sst_write_second:  used by the SST write operation
  * @flags:             flag options for the current SPI-NOR (SNOR_F_*)
+ * @cfg:               used by the read_xfer/write_xfer
  * @cmd_buf:           used by the write_reg
  * @prepare:           [OPTIONAL] do some preparations for the
  *                     read/write/erase/lock/unlock operations
  * @unprepare:         [OPTIONAL] do some post work after the
  *                     read/write/erase/lock/unlock operations
+ * @read_xfer:         [OPTIONAL] the read fundamental primitive
+ * @write_xfer:                [OPTIONAL] the writefundamental primitive
  * @read_reg:          [DRIVER-SPECIFIC] read out the register
  * @write_reg:         [DRIVER-SPECIFIC] write data to the register
  * @read:              [DRIVER-SPECIFIC] read data from the SPI NOR
@@ -188,10 +218,15 @@ struct spi_nor {
        enum read_mode          flash_read;
        bool                    sst_write_second;
        u32                     flags;
+       struct spi_nor_xfer_cfg cfg;
        u8                      cmd_buf[SPI_NOR_MAX_CMD_SIZE];
 
        int (*prepare)(struct spi_nor *nor, enum spi_nor_ops ops);
        void (*unprepare)(struct spi_nor *nor, enum spi_nor_ops ops);
+       int (*read_xfer)(struct spi_nor *nor, struct spi_nor_xfer_cfg *cfg,
+                        u8 *buf, size_t len);
+       int (*write_xfer)(struct spi_nor *nor, struct spi_nor_xfer_cfg *cfg,
+                         u8 *buf, size_t len);
        int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
        int (*write_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
 
-- 
2.6.2

Reply via email to