]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/wm8350-i2c.c
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[karo-tx-linux.git] / drivers / mfd / wm8350-i2c.c
index 245b790961aa2a79e1a3d40d30d857b65425e821..3e0ce0e50ea2263edcec7fcb3300ac20d693c866 100644 (file)
@@ -30,7 +30,12 @@ static int wm8350_i2c_read_device(struct wm8350 *wm8350, char reg,
        ret = i2c_master_send(wm8350->i2c_client, &reg, 1);
        if (ret < 0)
                return ret;
-       return i2c_master_recv(wm8350->i2c_client, dest, bytes);
+       ret = i2c_master_recv(wm8350->i2c_client, dest, bytes);
+       if (ret < 0)
+               return ret;
+       if (ret != bytes)
+               return -EIO;
+       return 0;
 }
 
 static int wm8350_i2c_write_device(struct wm8350 *wm8350, char reg,
@@ -38,13 +43,19 @@ static int wm8350_i2c_write_device(struct wm8350 *wm8350, char reg,
 {
        /* we add 1 byte for device register */
        u8 msg[(WM8350_MAX_REGISTER << 1) + 1];
+       int ret;
 
        if (bytes > ((WM8350_MAX_REGISTER << 1) + 1))
                return -EINVAL;
 
        msg[0] = reg;
        memcpy(&msg[1], src, bytes);
-       return i2c_master_send(wm8350->i2c_client, msg, bytes + 1);
+       ret = i2c_master_send(wm8350->i2c_client, msg, bytes + 1);
+       if (ret < 0)
+               return ret;
+       if (ret != bytes + 1)
+               return -EIO;
+       return 0;
 }
 
 static int wm8350_i2c_probe(struct i2c_client *i2c,
@@ -65,7 +76,7 @@ static int wm8350_i2c_probe(struct i2c_client *i2c,
        wm8350->read_dev = wm8350_i2c_read_device;
        wm8350->write_dev = wm8350_i2c_write_device;
 
-       ret = wm8350_device_init(wm8350, i2c->dev.platform_data);
+       ret = wm8350_device_init(wm8350, i2c->irq, i2c->dev.platform_data);
        if (ret < 0)
                goto err;