drivers/misc/hmc6352.c: fix wrong return value checking for i2c_master_recv()
authorAxel Lin <axel.lin@gmail.com>
Tue, 22 Mar 2011 23:34:00 +0000 (16:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Mar 2011 00:44:10 +0000 (17:44 -0700)
i2c_master_recv() returns negative errno, or else the number of bytes
read.  Thus i2c_master_recv(client, i2c_data, 2) returns 2 instead of 1 in
success case.

[akpm@linux-foundation.org: make `ret' signed]
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Cc: Kalhan Trisal <kalhan.trisal@intel.com>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/misc/hmc6352.c

index 234bfca..ca938fc 100644 (file)
@@ -75,7 +75,7 @@ static ssize_t compass_heading_data_show(struct device *dev,
 {
        struct i2c_client *client = to_i2c_client(dev);
        unsigned char i2c_data[2];
-       unsigned int ret;
+       int ret;
 
        mutex_lock(&compass_mutex);
        ret = compass_command(client, 'A');
@@ -86,7 +86,7 @@ static ssize_t compass_heading_data_show(struct device *dev,
        msleep(10); /* sending 'A' cmd we need to wait for 7-10 millisecs */
        ret = i2c_master_recv(client, i2c_data, 2);
        mutex_unlock(&compass_mutex);
-       if (ret != 1) {
+       if (ret < 0) {
                dev_warn(dev, "i2c read data cmd failed\n");
                return ret;
        }