"Syed Rafiuddin" <[email protected]> writes:

> This patch Updates I2C register offset addresses and adds support for OMAP4430
> development platform.
>
> Signed-off-by: Syed Rafiuddin <[email protected]>

First fix checkpatch problems:

WARNING: suspect code indent for conditional statements (24, 24)
#199: FILE: drivers/i2c/busses/i2c-omap.c:330:
+                       if (!cpu_is_omap44xx())
                        omap_i2c_write_reg(dev, OMAP_I2C_WE_REG,

WARNING: line over 80 characters
#278: FILE: drivers/i2c/busses/i2c-omap.c:768:
+                                                               "XDR IRQ while 
no "

WARNING: line over 80 characters
#279: FILE: drivers/i2c/busses/i2c-omap.c:769:
+                                                               "data to 
send\n");

total: 0 errors, 3 warnings, 265 lines checked

Second, please also report test results on OMAP3 since you are changing
common code.

More comments below...

> ---
>  arch/arm/mach-omap2/board-4430sdp.c |    9 +++-
>  arch/arm/plat-omap/i2c.c            |   21 +++++++--
>  drivers/i2c/busses/i2c-omap.c       |   78 
> +++++++++++++++++++++++++-----------
>  3 files changed, 80 insertions(+), 28 deletions(-)
>
> Index: omap4_dev/arch/arm/mach-omap2/board-4430sdp.c
> ===================================================================
> --- omap4_dev.orig/arch/arm/mach-omap2/board-4430sdp.c
> +++ omap4_dev/arch/arm/mach-omap2/board-4430sdp.c
> @@ -66,10 +66,17 @@ static void __init omap_4430sdp_init_irq
>       gic_init_irq();
>       omap_gpio_init();
>  }
> -
> +static int __init omap4_i2c_init(void)
> +{
> +     omap_register_i2c_bus(1, 2600, NULL, 0);
> +     omap_register_i2c_bus(2, 400, NULL, 0);
> +     omap_register_i2c_bus(3, 400, NULL, 0);
> +     return 0;
> +}
>
>  static void __init omap_4430sdp_init(void)
>  {
> +     omap4_i2c_init();
>       platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
>       omap_board_config = sdp4430_config;
>       omap_board_config_size = ARRAY_SIZE(sdp4430_config);
> Index: omap4_dev/arch/arm/plat-omap/i2c.c
> ===================================================================
> --- omap4_dev.orig/arch/arm/plat-omap/i2c.c
> +++ omap4_dev/arch/arm/plat-omap/i2c.c
> @@ -53,9 +53,15 @@ static struct resource i2c_resources[][2
>  #if  defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
>       { I2C_RESOURCE_BUILDER(OMAP2_I2C_BASE2, INT_24XX_I2C2_IRQ) },
>  #endif
> +#if  defined(CONFIG_ARCH_OMAP4)
> +     { I2C_RESOURCE_BUILDER(OMAP2_I2C_BASE2, INT_44XX_I2C2_IRQ) },
> +#endif
>  #if  defined(CONFIG_ARCH_OMAP34XX)
>       { I2C_RESOURCE_BUILDER(OMAP2_I2C_BASE3, INT_34XX_I2C3_IRQ) },
>  #endif
> +#if  defined(CONFIG_ARCH_OMAP4)
> +     { I2C_RESOURCE_BUILDER(OMAP2_I2C_BASE3, INT_44XX_I2C3_IRQ) },
> +#endif
>  };
>
>  #define I2C_DEV_BUILDER(bus_id, res, data)           \
> @@ -72,10 +78,11 @@ static struct resource i2c_resources[][2
>  static u32 i2c_rate[ARRAY_SIZE(i2c_resources)];
>  static struct platform_device omap_i2c_devices[] = {
>       I2C_DEV_BUILDER(1, i2c_resources[0], &i2c_rate[0]),
> -#if  defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
> +#if  defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX) || \
> +defined(CONFIG_ARCH_OMAP4)
>       I2C_DEV_BUILDER(2, i2c_resources[1], &i2c_rate[1]),
>  #endif
> -#if  defined(CONFIG_ARCH_OMAP34XX)
> +#if  defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP4)
>       I2C_DEV_BUILDER(3, i2c_resources[2], &i2c_rate[2]),
>  #endif
>  };
> @@ -88,7 +95,7 @@ static const int omap24xx_pins[][2] = {
>  #else
>  static const int omap24xx_pins[][2] = {};
>  #endif
> -#if defined(CONFIG_ARCH_OMAP34XX)
> +#if defined(CONFIG_ARCH_OMAP34XX) || defined(CONFIG_ARCH_OMAP4)
>  static const int omap34xx_pins[][2] = {
>       { K21_34XX_I2C1_SCL, J21_34XX_I2C1_SDA},
>       { AF15_34XX_I2C2_SCL, AE15_34XX_I2C2_SDA},
> @@ -110,7 +117,7 @@ static void __init omap_i2c_mux_pins(int
>       } else if (cpu_is_omap24xx()) {
>               scl = omap24xx_pins[bus][0];
>               sda = omap24xx_pins[bus][1];
> -     } else if (cpu_is_omap34xx()) {
> +     } else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
>               scl = omap34xx_pins[bus][0];
>               sda = omap34xx_pins[bus][1];
>       } else {
> @@ -129,7 +136,7 @@ static int __init omap_i2c_nr_ports(void
>               ports = 1;
>       else if (cpu_is_omap24xx())
>               ports = 2;
> -     else if (cpu_is_omap34xx())
> +     else if (cpu_is_omap34xx() || cpu_is_omap44xx())
>               ports = 3;
>
>       return ports;
> @@ -151,6 +158,10 @@ static int __init omap_i2c_add_bus(int b
>                       base = OMAP2_I2C_BASE1;
>                       irq = INT_24XX_I2C1_IRQ;
>               }
> +             if (cpu_is_omap44xx()) {
> +                     base = OMAP2_I2C_BASE1;
> +                     irq = INT_44XX_I2C1_IRQ;
> +             }
>               res[0].start = base;
>               res[0].end = base + OMAP_I2C_SIZE;
>               res[1].start = irq;
> Index: omap4_dev/drivers/i2c/busses/i2c-omap.c
> ===================================================================
> --- omap4_dev.orig/drivers/i2c/busses/i2c-omap.c
> +++ omap4_dev/drivers/i2c/busses/i2c-omap.c
> @@ -27,7 +27,6 @@
>   * along with this program; if not, write to the Free Software
>   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
>   */
> -

Please separate out the multiple whitespace cleanups here into a
separate patch.

>  #include <linux/module.h>
>  #include <linux/delay.h>
>  #include <linux/i2c.h>
> @@ -48,12 +47,36 @@
>  /* timeout waiting for the controller to respond */
>  #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
>
> +#define OMAP_I2C_WE_REG                      0x0c
> +#ifdef CONFIG_ARCH_OMAP4
> +#define OMAP_I2C_REVNB_LO               0x00
> +#define OMAP_I2C_REVNB_HI               0x04
> +#define OMAP_I2C_IV_REG                 0x34
> +#define OMAP_I2C_IRQSTATUS_RAW          0x24
> +#define OMAP_I2C_STAT_REG               0x28
> +#define OMAP_I2C_IRQENABLE_SET          0x2C
> +#define OMAP_I2C_IRQENABLE_CLR          0x30
> +#define OMAP_I2C_SYSS_REG               0x90
> +#define OMAP_I2C_BUF_REG                0x94
> +#define OMAP_I2C_CNT_REG                0x98
> +#define OMAP_I2C_DATA_REG               0x9C
> +#define OMAP_I2C_SYSC_REG               0x10
> +#define OMAP_I2C_CON_REG                0xA4
> +#define OMAP_I2C_OA_REG                 0xA8
> +#define OMAP_I2C_SA_REG                 0xAC
> +#define OMAP_I2C_PSC_REG                0xB0
> +#define OMAP_I2C_SCLL_REG               0xB4
> +#define OMAP_I2C_SCLH_REG               0xB8
> +#define OMAP_I2C_SYSTEST_REG            0xBC
> +#define OMAP_I2C_BUFSTAT_REG            0xC0
> +#define OMAP_I2C_IE_REG                 OMAP_I2C_IRQENABLE_SET
> +#define OMAP_I2C_REV_REG             OMAP_I2C_REVNB_HI
> +#else

A few things are broken here:

- This will not compile for multi-omap.  You use #ifdef her and cpu_is_* below.
- use tabs instead of spaces as the rest of the code does.
- style is to use lower-case for hex values (e.g. 0xbc instead of 0xBC)

Rather than use an #ifdef here, you should define the omap4 specific
registers after the current list with an OMAP4 prefix.

>  #define OMAP_I2C_REV_REG             0x00
>  #define OMAP_I2C_IE_REG                      0x04
>  #define OMAP_I2C_STAT_REG            0x08
>  #define OMAP_I2C_IV_REG                      0x0c
>  /* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
> -#define OMAP_I2C_WE_REG                      0x0c
>  #define OMAP_I2C_SYSS_REG            0x10
>  #define OMAP_I2C_BUF_REG             0x14
>  #define OMAP_I2C_CNT_REG             0x18
> @@ -67,7 +90,8 @@
>  #define OMAP_I2C_SCLH_REG            0x38
>  #define OMAP_I2C_SYSTEST_REG         0x3c
>  #define OMAP_I2C_BUFSTAT_REG         0x40
> -
> +#define OMAP_I2C_IRQENABLE_CLR          OMAP_I2C_IE_REG

Why are you defining a new regname for !omap4?  You're only
using this reg in omap4 conditional code below.

> +#endif

>  /* I2C Interrupt Enable Register (OMAP_I2C_IE): */
>  #define OMAP_I2C_IE_XDR              (1 << 14)       /* TX Buffer drain int 
> enable */
>  #define OMAP_I2C_IE_RDR              (1 << 13)       /* RX Buffer drain int 
> enable */
> @@ -242,7 +266,10 @@ static void omap_i2c_idle(struct omap_i2
>       WARN_ON(dev->idle);
>
>       dev->iestate = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
> -     omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0);
> +     if (cpu_is_omap44xx())
> +             omap_i2c_write_reg(dev, OMAP_I2C_IRQENABLE_CLR, 1);
> +     else
> +             omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0);
>       if (dev->rev < OMAP_I2C_REV_2) {
>               iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); /* Read clears */
>       } else {
> @@ -282,10 +309,8 @@ static int omap_i2c_init(struct omap_i2c
>
>               /* SYSC register is cleared by the reset; rewrite it */
>               if (dev->rev == OMAP_I2C_REV_ON_2430) {
> -
>                       omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG,
>                                          SYSC_AUTOIDLE_MASK);
> -
>               } else if (dev->rev >= OMAP_I2C_REV_ON_3430) {
>                       u32 v;
>
> @@ -302,6 +327,7 @@ static int omap_i2c_init(struct omap_i2c
>                        * WFI instruction.
>                        * REVISIT: Some wkup sources might not be needed.
>                        */
> +                     if (!cpu_is_omap44xx())
>                       omap_i2c_write_reg(dev, OMAP_I2C_WE_REG,
>                                                       OMAP_I2C_WE_ALL);
>
> @@ -331,11 +357,14 @@ static int omap_i2c_init(struct omap_i2c
>                       psc = fclk_rate / 12000000;
>       }
>
> -     if (cpu_is_omap2430() || cpu_is_omap34xx()) {
> +     if (cpu_is_omap2430() || cpu_is_omap34xx() || cpu_is_omap44xx()) {
>
>               /* HSI2C controller internal clk rate should be 19.2 Mhz */
>               internal_clk = 19200;
> -             fclk_rate = clk_get_rate(dev->fclk) / 1000;
> +             if (cpu_is_omap44xx())
> +                     fclk_rate = 96000;

Comment this with a 'FIXME' for when the clock framework is in place.

> +             else
> +                     fclk_rate = clk_get_rate(dev->fclk) / 1000;
>
>               /* Compute prescaler divisor */
>               psc = fclk_rate / internal_clk;
> @@ -650,14 +679,12 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                       dev_warn(dev->dev, "Too much work in one IRQ\n");
>                       break;
>               }
> -
>               omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
> -

Again, whitespace changes should be separated out.

>               err = 0;
>               if (stat & OMAP_I2C_STAT_NACK) {
>                       err |= OMAP_I2C_STAT_NACK;
>                       omap_i2c_write_reg(dev, OMAP_I2C_CON_REG,
> -                                        OMAP_I2C_CON_STP);
> +                                     OMAP_I2C_CON_STP);

Ditto, although this change should just be dropped.

>               }
>               if (stat & OMAP_I2C_STAT_AL) {
>                       dev_err(dev->dev, "Arbitration lost\n");
> @@ -683,7 +710,8 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                                       dev->buf_len--;
>                                       /* Data reg from 2430 is 8 bit wide */
>                                       if (!cpu_is_omap2430() &&
> -                                                     !cpu_is_omap34xx()) {
> +                                             !cpu_is_omap34xx()
> +                                                     && !cpu_is_omap44xx()) {

Again, pay attention to whitespace and alignment.

>                                               if (dev->buf_len) {
>                                                       *dev->buf++ = w >> 8;
>                                                       dev->buf_len--;
> @@ -710,9 +738,10 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                       if (dev->fifo_size) {
>                               if (stat & OMAP_I2C_STAT_XRDY)
>                                       num_bytes = dev->fifo_size;
> -                             else
> +                             else {
>                                       num_bytes = omap_i2c_read_reg(dev,
>                                                       OMAP_I2C_BUFSTAT_REG);
> +                             }
>                       }
>                       while (num_bytes) {
>                               num_bytes--;
> @@ -722,7 +751,8 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                                       dev->buf_len--;
>                                       /* Data reg from  2430 is 8 bit wide */
>                                       if (!cpu_is_omap2430() &&
> -                                                     !cpu_is_omap34xx()) {
> +                                             !cpu_is_omap34xx() &&
> +                                                     !cpu_is_omap44xx()) {
>                                               if (dev->buf_len) {
>                                                       w |= *dev->buf++ << 8;
>                                                       dev->buf_len--;
> @@ -733,10 +763,10 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                                               dev_err(dev->dev,
>                                                       "XRDY IRQ while no "
>                                                       "data to send\n");
> -                                     if (stat & OMAP_I2C_STAT_XDR)
> -                                             dev_err(dev->dev,
> -                                                     "XDR IRQ while no "
> -                                                     "data to send\n");
> +                                             if (stat & OMAP_I2C_STAT_XDR)
> +                                                     dev_err(dev->dev,
> +                                                             "XDR IRQ while 
> no "
> +                                                             "data to 
> send\n");

Again, a whitespace only change.

>                                       break;
>                               }
>                               omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
> @@ -754,7 +784,6 @@ omap_i2c_isr(int this_irq, void *dev_id)
>                       dev->cmd_err |= OMAP_I2C_STAT_XUDF;
>               }
>       }
> -

again

>       return count ? IRQ_HANDLED : IRQ_NONE;
>  }
>
> @@ -822,7 +851,7 @@ omap_i2c_probe(struct platform_device *p
>
>       dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG) & 0xff;
>
> -     if (cpu_is_omap2430() || cpu_is_omap34xx()) {
> +     if (cpu_is_omap2430() || cpu_is_omap34xx() ||  cpu_is_omap44xx()) {
>               u16 s;
>
>               /* Set up the fifo size - Get total size */
> @@ -834,8 +863,13 @@ omap_i2c_probe(struct platform_device *p
>                * size. This is to ensure that we can handle the status on int
>                * call back latencies.
>                */
> -             dev->fifo_size = (dev->fifo_size / 2);
> -             dev->b_hw = 1; /* Enable hardware fixes */
> +             if (cpu_is_omap44xx()) {
> +                     dev->fifo_size = 0;
> +                     dev->b_hw = 0; /* Enable hardware fixes */
> +             } else {
> +                     dev->fifo_size = (dev->fifo_size / 2);
> +                     dev->b_hw = 1; /* Enable hardware fixes */
> +             }

The omap4 code added here clearly does not match the comment above.  Please
update comments or add omap4-specific comments as to what you are doing here.

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to