From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Wed, 13 May 2015 07:08:14 +0200 Subject: [U-Boot] [PATCH V3] i2c: mxc: refactor i2c driver and support dm In-Reply-To: References: <1430141760-2204-1-git-send-email-Peng.Fan@freescale.com> Message-ID: <5552DC3E.5050107@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Simon, Am 13.05.2015 03:44, schrieb Simon Glass: > Hi, > > On 12 May 2015 at 19:09, Fan Peng 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? Yes, please. Thanks. bye, Heiko > > - 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 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 >>> --- >>> >>> 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 >> >>> >>> 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(-) >>> > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany