hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mtd/nand/raw/brcmnand/brcmnand.h
....@@ -11,12 +11,25 @@
1111
1212 struct platform_device;
1313 struct dev_pm_ops;
14
+struct brcmnand_io_ops;
15
+
16
+/* Special register offset constant to intercept a non-MMIO access
17
+ * to the flash cache register space. This is intentionally large
18
+ * not to overlap with an existing offset.
19
+ */
20
+#define BRCMNAND_NON_MMIO_FC_ADDR 0xffffffff
1421
1522 struct brcmnand_soc {
1623 bool (*ctlrdy_ack)(struct brcmnand_soc *soc);
1724 void (*ctlrdy_set_enabled)(struct brcmnand_soc *soc, bool en);
1825 void (*prepare_data_bus)(struct brcmnand_soc *soc, bool prepare,
1926 bool is_param);
27
+ const struct brcmnand_io_ops *ops;
28
+};
29
+
30
+struct brcmnand_io_ops {
31
+ u32 (*read_reg)(struct brcmnand_soc *soc, u32 offset);
32
+ void (*write_reg)(struct brcmnand_soc *soc, u32 val, u32 offset);
2033 };
2134
2235 static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc,
....@@ -58,6 +71,22 @@
5871 writel_relaxed(val, addr);
5972 }
6073
74
+static inline bool brcmnand_soc_has_ops(struct brcmnand_soc *soc)
75
+{
76
+ return soc && soc->ops && soc->ops->read_reg && soc->ops->write_reg;
77
+}
78
+
79
+static inline u32 brcmnand_soc_read(struct brcmnand_soc *soc, u32 offset)
80
+{
81
+ return soc->ops->read_reg(soc, offset);
82
+}
83
+
84
+static inline void brcmnand_soc_write(struct brcmnand_soc *soc, u32 val,
85
+ u32 offset)
86
+{
87
+ soc->ops->write_reg(soc, val, offset);
88
+}
89
+
6190 int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc);
6291 int brcmnand_remove(struct platform_device *pdev);
6392