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