diff options
Diffstat (limited to 'drivers/mfd/wm8350-i2c.c')
| -rw-r--r-- | drivers/mfd/wm8350-i2c.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c index 8dfe21bb3bd..3e0ce0e50ea 100644 --- a/drivers/mfd/wm8350-i2c.c +++ b/drivers/mfd/wm8350-i2c.c @@ -30,7 +30,12 @@ static int wm8350_i2c_read_device(struct wm8350 *wm8350, char reg,  	ret = i2c_master_send(wm8350->i2c_client, ®, 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,  |