]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
I2C: Add back the zero size hack
authorTony Lindgren <tony@atomide.com>
Tue, 2 Jan 2007 20:25:40 +0000 (12:25 -0800)
committerTony Lindgren <tony@atomide.com>
Tue, 2 Jan 2007 20:25:40 +0000 (12:25 -0800)
This is needed to probe I2C chips until we can get the chips
from board-*.c files.

Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/i2c/busses/i2c-omap.c

index da897a48c6a18be4da8f357641d558cd8e1f3de7..a059a3adc2ec627a3ce3f786234f8e078b2b065d 100644 (file)
@@ -285,12 +285,14 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
                             struct i2c_msg *msg, int stop)
 {
        struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
+       u8 zero_byte = 0;
        int r;
        u16 w;
 
        dev_dbg(dev->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
                msg->addr, msg->len, msg->flags, stop);
 
+#if 0
        if (msg->len == 0)
                return -EINVAL;
 
@@ -300,6 +302,27 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
        dev->buf = msg->buf;
        dev->buf_len = msg->len;
 
+#else
+
+       omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr);
+       /* REVISIT: Remove this hack when we can get I2C chips from board-*.c
+        *          files
+        * Sigh, seems we can't do zero length transactions. Thus, we
+        * can't probe for devices w/o actually sending/receiving at least
+        * a single byte. So we'll set count to 1 for the zero length
+        * transaction case and hope we don't cause grief for some
+        * arbitrary device due to random byte write/read during
+        * probes.
+        */
+       if (msg->len == 0) {
+               dev->buf = &zero_byte;
+               dev->buf_len = 1;
+       } else {
+               dev->buf = msg->buf;
+               dev->buf_len = msg->len;
+       }
+#endif
+
        omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len);
 
        init_completion(&dev->cmd_complete);