modify spi_i2c for return value
authorswj <swj@rock-chips.com>
Fri, 30 Jul 2010 08:24:05 +0000 (01:24 -0700)
committerswj <swj@rock-chips.com>
Fri, 30 Jul 2010 08:24:05 +0000 (01:24 -0700)
drivers/fpga/spi_i2c.c

index ea1261aa48e0b68a726422005c3394d27afa66f0..e80854cbb94173291d0379709d25cc31889a973e 100755 (executable)
@@ -108,6 +108,7 @@ int spi_i2c_readbuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
        unsigned int speed;\r
        unsigned int channel = 0 ;\r
        unsigned int result;\r
+       int ret = 0;\r
        \r
        slaveaddr = pmsg->addr<<1;\r
        len = pmsg->len;        \r
@@ -155,6 +156,7 @@ int spi_i2c_readbuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
                        spin_lock(&port->i2c.i2c_lock);\r
                        port->i2c.interrupt &= INT_I2C_READ_MASK;\r
                        spin_unlock(&port->i2c.i2c_lock);\r
+                       ret = pmsg->len;\r
                        break;\r
                }\r
                else\r
@@ -162,7 +164,7 @@ int spi_i2c_readbuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
        }\r
        //for(i = 0;i<len;i++)\r
                //printk("pmsg->buf[%d] = 0x%x \n",i,pmsg->buf[i]);     \r
-       return pmsg->len;\r
+       return ret>0 ? ret:-1;\r
        \r
 }\r
 \r
@@ -174,6 +176,7 @@ int spi_i2c_writebuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
        unsigned int slaveaddr;\r
        unsigned int speed;\r
        unsigned int channel = 0;\r
+       int ret = 0;\r
        \r
        slaveaddr = pmsg->addr;\r
        len = pmsg->len;        \r
@@ -217,6 +220,7 @@ int spi_i2c_writebuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
                                spin_lock(&port->i2c.i2c_lock);\r
                                port->i2c.interrupt &= INT_I2C_WRITE_MASK;\r
                                spin_unlock(&port->i2c.i2c_lock);\r
+                               ret =  pmsg->len;\r
                                break;\r
                        }\r
                        else\r
@@ -227,6 +231,7 @@ int spi_i2c_writebuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
                else if(i==len-1 &&  pmsg->read_type == I2C_NO_STOP)\r
                {                                       \r
                        spi_out(port,reg,pmsg->buf[i],SEL_I2C);\r
+                       ret =  pmsg->len;\r
                }\r
                else\r
                {                       \r
@@ -235,7 +240,7 @@ int spi_i2c_writebuf(struct spi_fpga_port *port ,struct i2c_msg *pmsg,int ch)
        }       \r
        \r
        \r
-       return pmsg->len;\r
+       return ret>0? ret:-1;\r
        \r
        \r
 }\r
@@ -274,7 +279,7 @@ int spi_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
        {\r
                //i2c->msg_idx = i;\r
                ret = spi_xfer_msg(adapter,&msgs[i],(i == (num - 1)));  \r
-               if(ret == 0)\r
+               if(ret <= 0)\r
                {\r
                        num = ret;\r
                        printk("spi_xfer_msg error .ret = %d\n",ret);\r
@@ -513,7 +518,6 @@ int spi_i2c_unregister(struct spi_fpga_port *port)
        return 0;\r
 }\r
 \r
-\r
 MODULE_DESCRIPTION("Driver for spi2i2c.");\r
 MODULE_AUTHOR("swj <swj@rock-chips.com>");\r
 MODULE_LICENSE("GPL");\r