[U-Boot] [PATCH V3] i2c: mxc: refactor i2c driver and support dm

Simon Glass sjg at chromium.org
Wed May 13 03:44:32 CEST 2015


Hi,

On 12 May 2015 at 19:09, Fan Peng <Peng.Fan at freescale.com> wrote:
>
> Hi,
>
> Is there any further comments? Or this patch will be applied?
>

I can apply it if you like - Heiko what do you prefer?

- Simon

> Regards,
> Peng.
>
> -----Original Message-----
> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> Sent: Wednesday, May 06, 2015 4:56 AM
> To: Fan Peng-B51431
> Cc: Stefano Babic; Heiko Schocher; Marek Vašut; Nikita Kiryanov; U-Boot Mailing List
> Subject: Re: [PATCH V3] i2c: mxc: refactor i2c driver and support dm
>
> On 27 April 2015 at 07:36, Peng Fan <Peng.Fan at freescale.com> wrote:
> >
> > 1. Introduce a new structure `struct mxc_i2c_bus`, this structure will
> >    used for non-DM and DM.
> > 2. Remove `struct mxc_i2c_regs` structure, but use register offset to access
> >    registers based on `base` entry of `struct mxc_i2c_bus`.
> > 3. Remove most `#ifdef I2C_QUIRK_REG`. Using driver_data to contain platform
> >    flags. A new flag is introduced, I2C_QUIRK_FLAG.
> > 4. Most functions use `struct mxc_i2c_bus` as one of the parameters.
> >    Make most functions common to DM and non-DM, try to avoid duplicated code.
> > 5. Support DM. Pinmux setting is still set by setup_i2c, but we do not
> >    need bus_i2c_init for DM.
> > 6. struct i2c_parms and struct sram_data are removed.
> > 7. Remove bus_i2c_read bus_i2c_write prototype in header file. The frist
> >    paramter of bus_i2c_init is modified to i2c index. Add new prototype
> >    i2c_idle_bus and force_idle_bus. Since bus_i2c_init is not good for
> >    DM I2C and pinctrl is missed, we use a weak function for i2c_idle_bus
> >    for DM part.
> >    Board file take the responsibility to implement this function, like this:
> >    "
> >    int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus)
> >    {
> >            if (i2c_bus->index == 0)
> >                    force_idle_bus(i2c_pads_info0);
> >            else if (i2c_bus->index == 1)
> >                    force_idle_bus(i2c_pads_info1);
> >            else
> >                    xxxxxx
> >    }
> >    "
> >
> > Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
> > ---
> >
> > Changes v3:
> >  1. remove bus_i2c_init for DM, introuduce a weak function i2c_idle_bus.
> >  2. remove static return type for force_idle_bus, since we need to call
> >     it in i2c_idle_bus which may be implemented in board file. This does
> >     not hurt for non-DM.
>
> Acked-by: Simon Glass <sjg at chromium.org>
>
> >
> > Changes v2:
> >  1. Refactor driver, remove register access based on structure, but use
> >    'base + offset'
> >  2. Introduce mxc_i2c_bus structure
> >  3. Introduce I2C_QUIRK_FLAG and remove most I2C_QUIRK_REG and use
> >     driver_data to contain the flags for different platforms  4. Avoid
> > duplicated code between DM and non-DM part  5. The function name
> > i2c_init_transfer is not changed.
> >  6. Remove bus_i2c_read/write prototype from header file  7. change
> > bus_i2c_init's first parameter to i2c index  8. Rename patch name,
> > since refactor non-DM part.
> >
> >  arch/arm/imx-common/i2c-mxv7.c            |   7 +-
> >  arch/arm/include/asm/imx-common/mxc_i2c.h |  38 +-
> >  drivers/i2c/mxc_i2c.c                     | 575 ++++++++++++++++++++----------
> >  3 files changed, 426 insertions(+), 194 deletions(-)
> >


More information about the U-Boot mailing list