i2c: mxc: refactor i2c driver and support dm
Subsystems (3)
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
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 }
"
---
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 | 575 ++++++++++++++++++++---------- 3 files changed, 426 insertions(+), 194 deletions(-)
arch/arm/imx-common/i2c-mxv7.c +4 -3
@@ -12,7 +12,7 @@#include <asm/imx-common/mxc_i2c.h> #include <watchdog.h> -static int force_idle_bus (void *priv) +int force_idle_bus (void *priv) {int i;int sda, scl;
@@ -99,8 +99,9 @@ int setup_i2c(unsigned i2c_index, int speed, int slave_addr,if (ret) goto err_idle; -bus_i2c_init (i2c_bases[i2c_index], speed, slave_addr, - force_idle_bus, p); +#ifndef CONFIG_DM_I2C +bus_i2c_init (i2c_index, speed, slave_addr, force_idle_bus, p); +#endif return 0 ;
arch/arm/include/asm/imx-common/mxc_i2c.h +33 -5
@@ -19,6 +19,36 @@ struct i2c_pads_info {struct i2c_pin_ctrl sda; }; +/* +* Information about i2c controller +* struct mxc_i2c_bus - information about the i2c[x] bus +* @index: i2c bus index +* @base: Address of I2C bus controller +* @driver_data: Flags for different platforms, such as I2C_QUIRK_FLAG. +* @speed: Speed of I2C bus +* @pads_info: pinctrl info for this i2c bus, will be used when pinctrl is ok. +* The following two is only to be compatible with non-DM part. +* @idle_bus_fn: function to force bus idle +* @idle_bus_data: parameter for idle_bus_fun +*/ +struct mxc_i2c_bus { +/* +* board file can use this index to locate which i2c_pads_info is for +* i2c_idle_bus. When pinmux is implement, this entry can be +* discarded. Here we do not use dev->seq, because we do not want to +* export device to board file. +*/ +int index; +ulong base; +ulong driver_data; +int speed; +struct i2c_pads_info *pads_info; +#ifndef CONFIG_DM_I2C +int (*idle_bus_fn)(void *p); +void *idle_bus_data; +#endif +}; +#if defined(CONFIG_MX6QDL )#define I2C_PADS (name, scl_i2c, scl_gpio, scl_gp, sda_i2c, sda_gpio, sda_gp) \ struct i2c_pads_info mx6q_##name = { \
@@ -54,10 +84,8 @@ struct i2c_pads_info {int setup_i2c (unsigned i2c_index,int speed,int slave_addr,struct i2c_pads_info *p); -void bus_i2c_init (void *base,int speed,int slave_addr, +void bus_i2c_init (int index,int speed,int slave_addr,int (*idle_bus_fn)(void *p),void *p); -int bus_i2c_read (void *base,uchar chip,uint addr,int alen,uchar *buf, -int len); -int bus_i2c_write (void *base,uchar chip,uint addr,int alen, -const uchar *buf,int len); +int force_idle_bus (void *priv); +int i2c_idle_bus (struct mxc_i2c_bus *i2c_bus);#endif
drivers/i2c/mxc_i2c.c +389 -186
778 lines not on this page · raw message
Signature · 1 line
1.8.4
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
Quoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The frist paramter ofbus_i2c_initis modified to i2c index. Add new prototypei2c_idle_busandforce_idle_bus. Sincebus_i2c_initis not good for DM I2C and pinctrl is missed, we use a weak function fori2c_idle_busfor 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 } "
Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.
Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms
4. Avoid duplicated code between DM and non-DM part
5. The function namei2c_init_transferis 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(-)
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
Hi,
Is there any further comments? Or this patch will be applied?
Regards,
Peng.
-----Original Message-----
From: [email protected] [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
Quoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The frist paramter ofbus_i2c_initis modified to i2c index. Add new prototypei2c_idle_busandforce_idle_bus. Sincebus_i2c_initis not good for DM I2C and pinctrl is missed, we use a weak function fori2c_idle_busfor 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 } "
Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.
Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms 4. Avoid
duplicated code between DM and non-DM part 5. The function namei2c_init_transferis 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(-)
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
Hi,
Quoted 5 lines · Fan Peng
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
Quoted 70 lines
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 dmQuoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The frist paramter ofbus_i2c_initis modified to i2c index. Add new prototypei2c_idle_busandforce_idle_bus. Sincebus_i2c_initis not good for DM I2C and pinctrl is missed, we use a weak function fori2c_idle_busfor 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 } "Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.Acked-by Simon Glass <[email protected]>Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms 4. Avoid
duplicated code between DM and non-DM part 5. The function namei2c_init_transferis 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(-)
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
Hello Simon,
Am 13.05.2015 03:44, schrieb Simon Glass:
Quoted 10 lines
Hi,
Quoted 5 lines · Fan Peng
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
Quoted 74 lines
- Simon
Quoted 70 lines
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 dmQuoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The fristparamter 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 } "Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.Acked-by Simon Glass <[email protected]>Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms 4. Avoid
duplicated code between DM and non-DM part 5. The function namei2c_init_transferis 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(-)
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
In reply to Fan PengHi,
Quoted 3 lines · Fan Peng
Hi,
Is there any further comments? Or this patch will be applied?
This gives build errors for me:
02: i2c: mxc: refactor i2c driver and support dm
arm: + nitrogen6dl2g mx53smd ls1021atwr_nor_SECURE_BOOTtqma6s_mba6_spi apf27 mx6sxsabresd_spl ls1021aqds_nor_lpuart nitrogen6s nitrogen6q ls1021aqds_ddr4_nor wandboard_solo ls1021aqds_nand ls1021atwr_nor novena riotboard mx6dlsabreauto nitrogen6dl titanium ls1021aqds_ddr4_nor_lpuart tqma6s_mba6_mmc mx25pdk ot1200_spl mx53ard nitrogen6q2g ls1021atwr_nor_lpuart wandboard_dl wandboard_quad mx6sxsabresd platinum_titanium m53evk woodburn_sd mx6dlsabresd ls1021aqds_sdcard mx6qsabrelite mx6sabresd_spl ls1021atwr_sdcard ls1021atwr_qspi vf610twr_nand tqma6q_mba6_mmc woodburn vf610twr usbarmory flea3 ot1200 tbs2910 ls1021aqds_nor imx31_phycore_eet mx35pdk mx6slevk_spinor ls1021aqds_qspi cm_fx6 mx6qsabresd imx31_phycore nitrogen6s1g marsboard tqma6q_mba6_spi mx53evk aristainetos mx6slevk platinum_picon mx6qsabreauto mx53loco ls1021aqds_nor_SECURE_BOOT gwventana +../drivers/i2c/mxc_i2c.c:524:11: error: missing binary operator before token "ined"+../drivers/i2c/mxc_i2c.c:581:2: error: expected ?;? before ?}? token +make[2]: *** [drivers/i2c/mxc_i2c.o] Error 1
+make[1]: *** [drivers/i2c] Error 2 +../drivers/i2c/mxc_i2c.c:532:2: error: #error "architecture not supported" +In file included from ../arch/arm/include/asm/imx-common/mxc_i2c.h:8:0,
+ from ../drivers/i2c/mxc_i2c.c:21:w+../drivers/i2c/mxc_i2c.c: In function ?bus_i2c_init?:w+../drivers/i2c/mxc_i2c.c:580:3: warning: ?return? with a value, in function returning void [enabled by default] w+../drivers/i2c/mxc_i2c.c:577:2: warning: implicit declaration of function ?enable_i2c_clk? [-Wimplicit-function-declaration] w+../arch/arm/include/asm/imx-common/iomux-v3.h:175:0: warning:
"GPIO_PORTA" redefined [enabled by default]
w+In file included from ../drivers/i2c/mxc_i2c.c:19:0:w+include/asm/arch/imx-regs.h:457:0: note: this is the location of the previous definition w+../arch/arm/include/asm/imx-common/iomux-v3.h:176:0: warning:
"GPIO_PORTB" redefined [enabled by default] w+include/asm/arch/imx-regs.h:458:0: note: this is the location of the previous definition w+../arch/arm/include/asm/imx-common/iomux-v3.h:177:0: warning:
"GPIO_PORTC" redefined [enabled by default] w+include/asm/arch/imx-regs.h:459:0: note: this is the location of the previous definition w+../arch/arm/include/asm/imx-common/iomux-v3.h:178:0: warning:
"GPIO_PORTD" redefined [enabled by default] w+include/asm/arch/imx-regs.h:460:0: note: this is the location of the previous definition w+../arch/arm/include/asm/imx-common/iomux-v3.h:179:0: warning:
"GPIO_PORTE" redefined [enabled by default] w+include/asm/arch/imx-regs.h:461:0: note: this is the location of the previous definition w+../arch/arm/include/asm/imx-common/iomux-v3.h:180:0: warning:
"GPIO_PORTF" redefined [enabled by default] w+include/asm/arch/imx-regs.h:462:0: note: this is the location of the previous definition
Regards,
Simon
Quoted 71 lines
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 dmQuoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The frist paramter ofbus_i2c_initis modified to i2c index. Add new prototypei2c_idle_busandforce_idle_bus. Sincebus_i2c_initis not good for DM I2C and pinctrl is missed, we use a weak function fori2c_idle_busfor 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 } "Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.Acked-by Simon Glass <[email protected]>Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms 4. Avoid
duplicated code between DM and non-DM part 5. The function namei2c_init_transferis 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(-)
PATCH v3 1/1 i2c: mxc: refactor i2c driver and support dm
Hi, Simon
There may be something wrong in my side. I will fix the build errors and send out new version.
Thanks,
Peng.
-----Original Message-----
From: [email protected] [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: Wednesday, May 13, 2015 11:25 PM
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
Hi,
Quoted 3 lines · Fan Peng
Hi,
Is there any further comments? Or this patch will be applied?
This gives build errors for me:
02: i2c: mxc: refactor i2c driver and support dm
arm: + nitrogen6dl2g mx53smd ls1021atwr_nor_SECURE_BOOTtqma6s_mba6_spi apf27 mx6sxsabresd_spl ls1021aqds_nor_lpuart nitrogen6s nitrogen6q ls1021aqds_ddr4_nor wandboard_solo ls1021aqds_nand ls1021atwr_nor novena riotboard mx6dlsabreauto nitrogen6dl titanium ls1021aqds_ddr4_nor_lpuart tqma6s_mba6_mmc mx25pdk ot1200_spl mx53ard nitrogen6q2g ls1021atwr_nor_lpuart wandboard_dl wandboard_quad mx6sxsabresd platinum_titanium m53evk woodburn_sd mx6dlsabresd ls1021aqds_sdcard mx6qsabrelite mx6sabresd_spl ls1021atwr_sdcard ls1021atwr_qspi vf610twr_nand tqma6q_mba6_mmc woodburn vf610twr usbarmory flea3 ot1200 tbs2910 ls1021aqds_nor imx31_phycore_eet mx35pdk mx6slevk_spinor ls1021aqds_qspi cm_fx6 mx6qsabresd imx31_phycore nitrogen6s1g marsboard tqma6q_mba6_spi mx53evk aristainetos mx6slevk platinum_picon mx6qsabreauto mx53loco ls1021aqds_nor_SECURE_BOOT gwventana +../drivers/i2c/mxc_i2c.c:524:11: error: missing binary operator
before token "ined"+../drivers/i2c/mxc_i2c.c:581:2: error: expected ?;? before ?}? token
+make[2]: *** [drivers/i2c/mxc_i2c.o] Error 1
+make[1]: *** [drivers/i2c] Error 2+../drivers/i2c/mxc_i2c.c:532:2: error: #error "architecture not supported"
+In file included from ../arch/arm/include/asm/imx-common/mxc_i2c.h:8:0,
+ from ../drivers/i2c/mxc_i2c.c:21:w+../drivers/i2c/mxc_i2c.c: In function ?bus_i2c_init?:w+../drivers/i2c/mxc_i2c.c:580:3: warning: ?return? with a value, in
function returning void [enabled by default]w+../drivers/i2c/mxc_i2c.c:577:2: warning: implicit declaration of
function ?enable_i2c_clk? [-Wimplicit-function-declaration]w+../arch/arm/include/asm/imx-common/iomux-v3.h:175:0: warning:
"GPIO_PORTA" redefined [enabled by default]
w+In file included from ../drivers/i2c/mxc_i2c.c:19:0:w+include/asm/arch/imx-regs.h:457:0: note: this is the location of the
previous definitionw+../arch/arm/include/asm/imx-common/iomux-v3.h:176:0: warning:
"GPIO_PORTB" redefined [enabled by default]w+include/asm/arch/imx-regs.h:458:0: note: this is the location of the
previous definitionw+../arch/arm/include/asm/imx-common/iomux-v3.h:177:0: warning:
"GPIO_PORTC" redefined [enabled by default]w+include/asm/arch/imx-regs.h:459:0: note: this is the location of the
previous definitionw+../arch/arm/include/asm/imx-common/iomux-v3.h:178:0: warning:
"GPIO_PORTD" redefined [enabled by default]w+include/asm/arch/imx-regs.h:460:0: note: this is the location of the
previous definitionw+../arch/arm/include/asm/imx-common/iomux-v3.h:179:0: warning:
"GPIO_PORTE" redefined [enabled by default]w+include/asm/arch/imx-regs.h:461:0: note: this is the location of the
previous definitionw+../arch/arm/include/asm/imx-common/iomux-v3.h:180:0: warning:
"GPIO_PORTF" redefined [enabled by default]w+include/asm/arch/imx-regs.h:462:0: note: this is the location of the
previous definition
Regards,
Simon
Quoted 72 lines
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 dmQuoted 30 lines · Peng Fan
1. Introduce a new structure
struct mxc_i2c_bus, this structure will used for non-DM and DM.
2. Removestruct mxc_i2c_regsstructure, but use register offset to access registers based onbaseentry ofstruct mxc_i2c_bus.
3. Remove most#ifdef I2C_QUIRK_REG. Usingdriver_datato contain platform flags. A new flag is introduced,I2C_QUIRK_FLAG.
4. Most functions usestruct mxc_i2c_busas 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 bysetup_i2c, but we do not needbus_i2c_initfor DM.
6. structi2c_parmsand structsram_dataare removed.
7. Removebus_i2c_readbus_i2c_writeprototype in header file. The frist paramter ofbus_i2c_initis modified to i2c index. Add new prototypei2c_idle_busandforce_idle_bus. Sincebus_i2c_initis not good for DM I2C and pinctrl is missed, we use a weak function fori2c_idle_busfor 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 } "Quoted 8 lines
Signed-off-by Peng Fan <[email protected]>---
Changes v3:
1. removebus_i2c_initfor DM, introuduce a weak functioni2c_idle_bus.
2. remove static return type forforce_idle_bus, since we need to call it ini2c_idle_buswhich may be implemented in board file. This does not hurt for non-DM.Acked-by Simon Glass <[email protected]>Quoted 18 lines
Changes v2:
1. Refactor driver, remove register access based on structure, but use 'base + offset'
2. Introducemxc_i2c_busstructure
3. IntroduceI2C_QUIRK_FLAGand remove mostI2C_QUIRK_REGand usedriver_datato contain the flags for different platforms 4.
Avoid duplicated code between DM and non-DM part 5. The function namei2c_init_transferis 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(-)