On Fri, Aug 14, 2020 at 12:31:33PM -0400, Mohammed Billoo wrote: > 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@xxxxxxxxxxxx> > --- > drivers/i2c/busses/i2c-ocores.c | 4 ++++ > include/linux/platform_data/i2c-ocores.h | 1 + > 2 files changed, 5 insertions(+) > > 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 */ Hi Mohammed A collection of bools does not scale too well. How about an enum. And you could add values for all the current accessorrs. It is also possible to add a device tree node to a PCI device. So platform data is not the only way to do this. Andrew