| .. | .. |
|---|
| 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 | |
|---|