]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
i2c: i2c-omap: Fix BUFSTAT_REG reading
authorEero Nurkkala <ext-eero.nurkkala@nokia.com>
Tue, 25 Nov 2008 11:03:46 +0000 (13:03 +0200)
committerTony Lindgren <tony@atomide.com>
Thu, 8 Jan 2009 13:35:22 +0000 (15:35 +0200)
The number of bytes to be received is read from wrong
place with all OMAPs with highspeed I2C support,
which involves a FIFO and BUFSTAT_REG. It is the 6
bits starting from the bit 8 in the BUFSTAT_REG
that indicate this amount of bytes to be read.
Moreover, only the 6 LSB:s are relevant for the
TXSTAT field.

Signed-off-by: Eero Nurkkala <ext-eero.nurkkala@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/i2c/busses/i2c-omap.c

index 96f3bedb27991208edabadcf1c008acbae527ba4..71b37ed4b72c1b246b600390cb3db94ed01b76ca 100644 (file)
@@ -675,8 +675,9 @@ omap_i2c_isr(int this_irq, void *dev_id)
                                if (stat & OMAP_I2C_STAT_RRDY)
                                        num_bytes = dev->fifo_size;
                                else
-                                       num_bytes = omap_i2c_read_reg(dev,
-                                                       OMAP_I2C_BUFSTAT_REG);
+                                       num_bytes = (omap_i2c_read_reg(dev,
+                                                       OMAP_I2C_BUFSTAT_REG)
+                                                       >> 8) & 0x3F;
                        }
                        while (num_bytes) {
                                num_bytes--;
@@ -714,8 +715,9 @@ omap_i2c_isr(int this_irq, void *dev_id)
                                if (stat & OMAP_I2C_STAT_XRDY)
                                        num_bytes = dev->fifo_size;
                                else
-                                       num_bytes = omap_i2c_read_reg(dev,
-                                                       OMAP_I2C_BUFSTAT_REG);
+                                       num_bytes = (omap_i2c_read_reg(dev,
+                                                       OMAP_I2C_BUFSTAT_REG))
+                                                       & 0x3F;
                        }
                        while (num_bytes) {
                                num_bytes--;