.. | .. |
---|
11 | 11 | |
---|
12 | 12 | struct platform_device; |
---|
13 | 13 | 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 |
---|
14 | 21 | |
---|
15 | 22 | struct brcmnand_soc { |
---|
16 | 23 | bool (*ctlrdy_ack)(struct brcmnand_soc *soc); |
---|
17 | 24 | void (*ctlrdy_set_enabled)(struct brcmnand_soc *soc, bool en); |
---|
18 | 25 | void (*prepare_data_bus)(struct brcmnand_soc *soc, bool prepare, |
---|
19 | 26 | 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); |
---|
20 | 33 | }; |
---|
21 | 34 | |
---|
22 | 35 | static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc, |
---|
.. | .. |
---|
58 | 71 | writel_relaxed(val, addr); |
---|
59 | 72 | } |
---|
60 | 73 | |
---|
| 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 | + |
---|
61 | 90 | int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc); |
---|
62 | 91 | int brcmnand_remove(struct platform_device *pdev); |
---|
63 | 92 | |
---|