[U-Boot] [PATCH V5 1/2] i2c: mxc: refactor i2c driver and support dm
Simon Glass
sjg at chromium.org
Fri May 15 15:53:12 CEST 2015
On 14 May 2015 at 17:29, 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, but pinctrl is not included. 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_bus_idle. Since bus_i2c_init is not good for
> DM I2C and pinctrl is missed, we use a weak function for i2c_idle_bus.
> 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_bus_idle(i2c_pads_info0);
> else if (i2c_bus->index == 1)
> force_bus_idle(i2c_pads_info1);
> else
> xxxxxx
> }
> "
> 8. Introduce a weak function, enable_i2c_clk
> 9. Tested on an i.MX7 platform. Log info:
> => dm tree
> Class Probed Name
> ----------------------------------------
> root [ + ] root_driver
> simple_bus [ ] |-- soc
> simple_bus [ ] | |-- aips-bus at 30000000
> simple_bus [ ] | | |-- anatop at 30360000
> simple_bus [ ] | | `-- snvs at 30370000
> simple_bus [ ] | |-- aips-bus at 30400000
> simple_bus [ ] | `-- aips-bus at 30800000
> i2c [ ] | |-- i2c at 30a20000
> i2c [ ] | `-- i2c at 30a40000
> simple_bus [ ] `-- regulators
> => i2c dev 0
> Setting bus to 0
> => i2c probe
> Valid chip addresses: 08 50
> => i2c md 8 31
> 0031: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08
>
> Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
> Acked-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes v5:
> none
>
> Changes v4:
> 1. fix build errors
> 2. Introduce a weak function enable_i2c_clk.
> 3. add Simon's Acked-by.
> 4. Add test log in commit log.
>
> 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.
>
> 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 | 581 ++++++++++++++++++++----------
> 3 files changed, 433 insertions(+), 193 deletions(-)
Applied to u-boot-dm, take 2, thanks!
More information about the U-Boot
mailing list