Re: [PATCH] i2c: ocores: add gaisler to platform data

Peter Korsgaard
2020-08-13T14:11:04Z

>>>>> "Mohammed" == Mohammed Billoo <mab@mab-labs.com> writes:

Hi,

Please send i2c patches to the linux-i2c mailing list as well, so the
i2c maintainer can apply it.

> 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(+)

> 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..a3cb38f21417 100644
> --- a/include/linux/platform_data/i2c-ocores.h
> +++ b/include/linux/platform_data/i2c-ocores.h
> @@ -16,6 +16,7 @@ struct ocores_i2c_platform_data {
> bool big_endian; /* registers are big endian */
> u8 num_devices; /* number of devices in the devices list */
> struct i2c_board_info const *devices; /* devices connected to the bus */
> + bool gaisler; /* implementation is gaisler */

NIT: Perhaps it would be nicer to place this after big_endian, as it is
quite similar to that?

A clearer comment could be "Use Gaisler GRLIB accessors"

Other than that it looks good to me, thanks.

Acked-by: Peter Korsgaard <peter@korsgaard.com>

--
Bye, Peter Korsgaard