Patchwork [U-Boot,v2,2/3] mxc_i2c: add support for MX53 processor

login
register
mail settings
Submitter Liu Hui-R64343
Date Dec. 22, 2010, 1:23 p.m.
Message ID <1293024212-4858-2-git-send-email-r64343@freescale.com>
Download mbox | patch
Permalink /patch/76408/
State Changes Requested
Delegated to: Stefano Babic
Headers show

Comments

Liu Hui-R64343 - Dec. 22, 2010, 1:23 p.m.
This patch add I2C support for Freescale MX53 processor

Signed-off-by: Jason Liu <r64343@freescale.com>

---
Changes for v2:
-address the comments of Heiko, add #if defined(CONFIG_MX31)
 to avoid break MX31 build. Move CONFIG_HARD_I2C to the top
 of the file and fix the error message from:
	 #error "define CONFIG_SYS_I2C_PORT to use the I2C driver"
 to      #error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
---
 drivers/i2c/mxc_i2c.c |   19 +++++++++++++++++--
 1 files changed, 17 insertions(+), 2 deletions(-)
Albert ARIBAUD - Dec. 22, 2010, 6:07 p.m.
Le 22/12/2010 14:23, Jason Liu a écrit :
> This patch add I2C support for Freescale MX53 processor
>
> Signed-off-by: Jason Liu<r64343@freescale.com>
>
> ---
> Changes for v2:
> -address the comments of Heiko, add #if defined(CONFIG_MX31)
>   to avoid break MX31 build. Move CONFIG_HARD_I2C to the top
>   of the file and fix the error message from:
> 	 #error "define CONFIG_SYS_I2C_PORT to use the I2C driver"
>   to      #error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
> ---
>   drivers/i2c/mxc_i2c.c |   19 +++++++++++++++++--
>   1 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
> old mode 100644
> new mode 100755
> index 8e10fbb..95d27ae
> --- a/drivers/i2c/mxc_i2c.c
> +++ b/drivers/i2c/mxc_i2c.c
> @@ -26,8 +26,14 @@
>
>   #if defined(CONFIG_HARD_I2C)
>
> +#ifdef CONFIG_MX31

Can you make this an #if defined() like all others you are adding here?

>   #include<asm/arch/mx31.h>
>   #include<asm/arch/mx31-regs.h>
> +#endif
> +
> +#if defined(CONFIG_MX53)
> +#include<asm/arch/clock.h>
> +#endif
>
>   #define IADR	0x00
>   #define IFDR	0x04
> @@ -56,8 +62,12 @@
>   #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
>   #define I2C_BASE	0x43f84000
>   #define I2C_CLK_OFFSET	30
> +#elif defined(CONFIG_SYS_I2C_MX53_PORT1)
> +#define I2C_BASE        I2C1_BASE_ADDR
> +#elif defined(CONFIG_SYS_I2C_MX53_PORT2)
> +#define I2C_BASE        I2C2_BASE_ADDR
>   #else
> -#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
> +#error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
>   #endif
>
>   #ifdef DEBUG
> @@ -72,11 +82,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

Ditto, for the sake of homogeneity.

> +	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)


Amicalement,
Jason Liu - Dec. 23, 2010, 2:30 a.m.
Hi, Albert,

2010/12/23 Albert ARIBAUD <albert.aribaud@free.fr>:
> Le 22/12/2010 14:23, Jason Liu a écrit :
>> This patch add I2C support for Freescale MX53 processor
>>
>> Signed-off-by: Jason Liu<r64343@freescale.com>
>>
>> ---
>> Changes for v2:
>> -address the comments of Heiko, add #if defined(CONFIG_MX31)
>>   to avoid break MX31 build. Move CONFIG_HARD_I2C to the top
>>   of the file and fix the error message from:
>>        #error "define CONFIG_SYS_I2C_PORT to use the I2C driver"
>>   to      #error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
>> ---
>>   drivers/i2c/mxc_i2c.c |   19 +++++++++++++++++--
>>   1 files changed, 17 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
>> old mode 100644
>> new mode 100755
>> index 8e10fbb..95d27ae
>> --- a/drivers/i2c/mxc_i2c.c
>> +++ b/drivers/i2c/mxc_i2c.c
>> @@ -26,8 +26,14 @@
>>
>>   #if defined(CONFIG_HARD_I2C)
>>
>> +#ifdef CONFIG_MX31
>
> Can you make this an #if defined() like all others you are adding here?

OK, I will do it. Thanks,

>
>>   #include<asm/arch/mx31.h>
>>   #include<asm/arch/mx31-regs.h>
>> +#endif
>> +
>> +#if defined(CONFIG_MX53)
>> +#include<asm/arch/clock.h>
>> +#endif
>>
>>   #define IADR        0x00
>>   #define IFDR        0x04
>> @@ -56,8 +62,12 @@
>>   #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
>>   #define I2C_BASE    0x43f84000
>>   #define I2C_CLK_OFFSET      30
>> +#elif defined(CONFIG_SYS_I2C_MX53_PORT1)
>> +#define I2C_BASE        I2C1_BASE_ADDR
>> +#elif defined(CONFIG_SYS_I2C_MX53_PORT2)
>> +#define I2C_BASE        I2C2_BASE_ADDR
>>   #else
>> -#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
>> +#error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
>>   #endif
>>
>>   #ifdef DEBUG
>> @@ -72,11 +82,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
>
> Ditto, for the sake of homogeneity.
>
>> +     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)
>
>
> Amicalement,
> --
> Albert.
> _______________________________________________
> 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..95d27ae
--- a/drivers/i2c/mxc_i2c.c
+++ b/drivers/i2c/mxc_i2c.c
@@ -26,8 +26,14 @@ 
 
 #if defined(CONFIG_HARD_I2C)
 
+#ifdef CONFIG_MX31
 #include <asm/arch/mx31.h>
 #include <asm/arch/mx31-regs.h>
+#endif
+
+#if defined(CONFIG_MX53)
+#include <asm/arch/clock.h>
+#endif
 
 #define IADR	0x00
 #define IFDR	0x04
@@ -56,8 +62,12 @@ 
 #elif defined (CONFIG_SYS_I2C_MX31_PORT3)
 #define I2C_BASE	0x43f84000
 #define I2C_CLK_OFFSET	30
+#elif defined(CONFIG_SYS_I2C_MX53_PORT1)
+#define I2C_BASE        I2C1_BASE_ADDR
+#elif defined(CONFIG_SYS_I2C_MX53_PORT2)
+#define I2C_BASE        I2C2_BASE_ADDR
 #else
-#error "define CONFIG_SYS_I2C_MX31_PORTx to use the mx31 I2C driver"
+#error "define CONFIG_SYS_I2C_MXxx_PORTx to use the I2C driver"
 #endif
 
 #ifdef DEBUG
@@ -72,11 +82,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)