[1/2] i2c: ocores: add gaisler to platform data

Message ID 20200814163134.29493-1-mab@mab-labs.com
State New
Headers show
Series
  • [1/2] i2c: ocores: add gaisler to platform data
Related show

Commit Message

Mohammed Billoo Aug. 14, 2020, 4:31 p.m.
There may be instances when the device tree is not suitable to interface
with the ocores implementation. For example, when the FPGA/ASIC is
not on the same silicon die (e.g. the communication between the CPU and
the FPGA/ASIC is over PCI), information about the ocore implementation,
such as whether the gaisler implementation is used, must be determined
during runtime. In this case, the client driver would prepopulate the
platform data during device instantiation. Thus, a boolean needs to be
added in the platform data, to instruct the i2c-ocores driver whether
the gaisler register callbacks should be used.

Signed-off-by: Mohammed Billoo <mab@mab-labs.com>
---
 drivers/i2c/busses/i2c-ocores.c          | 4 ++++
 include/linux/platform_data/i2c-ocores.h | 1 +
 2 files changed, 5 insertions(+)

Patch

diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
index f5fc75b65a19..0975f6797069 100644
--- a/drivers/i2c/busses/i2c-ocores.c
+++ b/drivers/i2c/busses/i2c-ocores.c
@@ -647,6 +647,10 @@  static int ocores_i2c_probe(struct platform_device *pdev)
 			i2c->bus_clock_khz = pdata->bus_khz;
 		else
 			i2c->bus_clock_khz = 100;
+		if (pdata->gaisler) {
+			i2c->setreg = oc_setreg_grlib;
+			i2c->getreg = oc_getreg_grlib;
+		}
 	} else {
 		ret = ocores_i2c_of_probe(pdev, i2c);
 		if (ret)
diff --git a/include/linux/platform_data/i2c-ocores.h b/include/linux/platform_data/i2c-ocores.h
index e6326cbafe59..8a5849f1e267 100644
--- a/include/linux/platform_data/i2c-ocores.h
+++ b/include/linux/platform_data/i2c-ocores.h
@@ -14,6 +14,7 @@  struct ocores_i2c_platform_data {
 	u32 clock_khz; /* input clock in kHz */
 	u32 bus_khz; /* bus clock in kHz */
 	bool big_endian; /* registers are big endian */
+	bool gaisler; /* use grlib accessors */
 	u8 num_devices; /* number of devices in the devices list */
 	struct i2c_board_info const *devices; /* devices connected to the bus */
 };