Patchwork [U-Boot,4/5] mxc_i2c: add support for MX53 processor

login
register
mail settings
Submitter Liu Hui-R64343
Date Dec. 16, 2010, 10:17 a.m.
Message ID <1292494665-25674-5-git-send-email-r64343@freescale.com>
Download mbox | patch
Permalink /patch/75733/
State Changes Requested
Headers show

Comments

Liu Hui-R64343 - Dec. 16, 2010, 10:17 a.m.
This patch add I2C support for Freescale MX53 processor

Signed-off-by: Jason Liu <r64343@freescale.com>
---
 drivers/i2c/mxc_i2c.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)
 mode change 100644 => 100755 drivers/i2c/mxc_i2c.c
Heiko Schocher - Dec. 16, 2010, 10:37 a.m.
Hello Jason,

Jason Liu wrote:
> This patch add I2C support for Freescale MX53 processor
> 
> Signed-off-by: Jason Liu <r64343@freescale.com>
> ---
>  drivers/i2c/mxc_i2c.c |   18 +++++++++++++-----
>  1 files changed, 13 insertions(+), 5 deletions(-)
>  mode change 100644 => 100755 drivers/i2c/mxc_i2c.c
> 
> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
> old mode 100644
> new mode 100755
> index 8e10fbb..f9f32cc
> --- a/drivers/i2c/mxc_i2c.c
> +++ b/drivers/i2c/mxc_i2c.c
> @@ -24,10 +24,11 @@
>  
>  #include <common.h>
>  
> -#if defined(CONFIG_HARD_I2C)
> +#if defined(CONFIG_MX53)
> +#include <asm/arch/clock.h>
> +#endif
>  
> -#include <asm/arch/mx31.h>
> -#include <asm/arch/mx31-regs.h>

Why do you delete this includes? That will break mx31 boards.
Please add instead a

#if defined(CONFIG_MX31) around it

> +#if defined(CONFIG_HARD_I2C)

Why you move this define here?

>  #define IADR	0x00
>  #define IFDR	0x04
> @@ -56,8 +57,10 @@
>  #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
>  #define I2C_BASE	0x43f84000
>  #define I2C_CLK_OFFSET	30
> +#elif defined(CONFIG_SYS_I2C_PORT)
> +#define I2C_BASE CONFIG_SYS_I2C_PORT
>  #else
> -#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
> +#error "define CONFIG_SYS_I2C_PORT to use the I2C driver"

This error message will be not correct on mx31 based boards,
as they have to define CONFIG_SYS_I2C_MX31_PORTx, please correct.

>  #endif
>  
>  #ifdef DEBUG
> @@ -72,11 +75,16 @@ static u16 div[] = { 30, 32, 36, 42, 48, 52, 60, 72, 80, 88, 104, 128, 144,
>  
>  void i2c_init(int speed, int unused)
>  {
> -	int freq = mx31_get_ipg_clk();
> +	int freq;
>  	int i;
>  
> +#ifdef CONFIG_MX31
> +	freq = mx31_get_ipg_clk();
>  	/* start the required I2C clock */
>  	__REG(CCM_CGR0) = __REG(CCM_CGR0) | (3 << I2C_CLK_OFFSET);
> +#else
> +	freq = mxc_get_clock(MXC_IPG_PERCLK);
> +#endif
>  
>  	for (i = 0; i < 0x1f; i++)
>  		if (freq / div[i] <= speed)

bye,
Heiko
Jason Liu - Dec. 17, 2010, 3:28 a.m.
Hi, Heiko

2010/12/16 Heiko Schocher <hs@denx.de>:
> Hello Jason,
>
> Jason Liu wrote:
>> This patch add I2C support for Freescale MX53 processor
>>
>> Signed-off-by: Jason Liu <r64343@freescale.com>
>> ---
>>  drivers/i2c/mxc_i2c.c |   18 +++++++++++++-----
>>  1 files changed, 13 insertions(+), 5 deletions(-)
>>  mode change 100644 => 100755 drivers/i2c/mxc_i2c.c
>>
>> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
>> old mode 100644
>> new mode 100755
>> index 8e10fbb..f9f32cc
>> --- a/drivers/i2c/mxc_i2c.c
>> +++ b/drivers/i2c/mxc_i2c.c
>> @@ -24,10 +24,11 @@
>>
>>  #include <common.h>
>>
>> -#if defined(CONFIG_HARD_I2C)
>> +#if defined(CONFIG_MX53)
>> +#include <asm/arch/clock.h>
>> +#endif
>>
>> -#include <asm/arch/mx31.h>
>> -#include <asm/arch/mx31-regs.h>
>
> Why do you delete this includes? That will break mx31 boards.
> Please add instead a

As I think there is no need to include it? Am I wrong?
I see the only one board to use MXC_I2C is phycore, but it will build error,

board.c: In function '__dram_init_banksize':
board.c:233: error: 'CONFIG_SYS_SDRAM_BASE' undeclared (first use in
this function)
board.c:233: error: (Each undeclared identifier is reported only once
board.c:233: error: for each function it appears in.)
board.c: In function 'board_init_f':
board.c:279: error: 'CONFIG_SYS_INIT_SP_ADDR' undeclared (first use in
this function)
board.c:312: error: 'CONFIG_SYS_SDRAM_BASE' undeclared (first use in
this function)
make[1]: *** [board.o] Error 1
make[1]: Leaving directory
`/home/r64343/work_space/u-boot-upstream/u-boot/arch/arm/lib'
make: *** [arch/arm/lib/libarm.o] Error 2

>
> #if defined(CONFIG_MX31) around it
>
>> +#if defined(CONFIG_HARD_I2C)
>
> Why you move this define here?
>
>>  #define IADR 0x00
>>  #define IFDR 0x04
>> @@ -56,8 +57,10 @@
>>  #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
>>  #define I2C_BASE     0x43f84000
>>  #define I2C_CLK_OFFSET       30
>> +#elif defined(CONFIG_SYS_I2C_PORT)
>> +#define I2C_BASE CONFIG_SYS_I2C_PORT
>>  #else
>> -#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
>> +#error "define CONFIG_SYS_I2C_PORT to use the I2C driver"
>
> This error message will be not correct on mx31 based boards,
> as they have to define CONFIG_SYS_I2C_MX31_PORTx, please correct.
>
>>  #endif
>>
>>  #ifdef DEBUG
>> @@ -72,11 +75,16 @@ static u16 div[] = { 30, 32, 36, 42, 48, 52, 60, 72, 80, 88, 104, 128, 144,
>>
>>  void i2c_init(int speed, int unused)
>>  {
>> -     int freq = mx31_get_ipg_clk();
>> +     int freq;
>>       int i;
>>
>> +#ifdef CONFIG_MX31
>> +     freq = mx31_get_ipg_clk();
>>       /* start the required I2C clock */
>>       __REG(CCM_CGR0) = __REG(CCM_CGR0) | (3 << I2C_CLK_OFFSET);
>> +#else
>> +     freq = mxc_get_clock(MXC_IPG_PERCLK);
>> +#endif
>>
>>       for (i = 0; i < 0x1f; i++)
>>               if (freq / div[i] <= speed)
>
> bye,
> Heiko
> --
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

Patch

diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
old mode 100644
new mode 100755
index 8e10fbb..f9f32cc
--- a/drivers/i2c/mxc_i2c.c
+++ b/drivers/i2c/mxc_i2c.c
@@ -24,10 +24,11 @@ 
 
 #include <common.h>
 
-#if defined(CONFIG_HARD_I2C)
+#if defined(CONFIG_MX53)
+#include <asm/arch/clock.h>
+#endif
 
-#include <asm/arch/mx31.h>
-#include <asm/arch/mx31-regs.h>
+#if defined(CONFIG_HARD_I2C)
 
 #define IADR	0x00
 #define IFDR	0x04
@@ -56,8 +57,10 @@ 
 #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
 #define I2C_BASE	0x43f84000
 #define I2C_CLK_OFFSET	30
+#elif defined(CONFIG_SYS_I2C_PORT)
+#define I2C_BASE CONFIG_SYS_I2C_PORT
 #else
-#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
+#error "define CONFIG_SYS_I2C_PORT to use the I2C driver"
 #endif
 
 #ifdef DEBUG
@@ -72,11 +75,16 @@  static u16 div[] = { 30, 32, 36, 42, 48, 52, 60, 72, 80, 88, 104, 128, 144,
 
 void i2c_init(int speed, int unused)
 {
-	int freq = mx31_get_ipg_clk();
+	int freq;
 	int i;
 
+#ifdef CONFIG_MX31
+	freq = mx31_get_ipg_clk();
 	/* start the required I2C clock */
 	__REG(CCM_CGR0) = __REG(CCM_CGR0) | (3 << I2C_CLK_OFFSET);
+#else
+	freq = mxc_get_clock(MXC_IPG_PERCLK);
+#endif
 
 	for (i = 0; i < 0x1f; i++)
 		if (freq / div[i] <= speed)