From 8452ef80dfa76986ac5d08006bfe33e4aebc771e Mon Sep 17 00:00:00 2001 From: David Plowman Date: Wed, 15 Jan 2020 13:40:38 +0000 Subject: [PATCH 0283/1085] media: ov5647: Fix return codes from ov5647_write/ov5647_read functions. Previously they were returning positive non-zero codes for success, which were getting passed up the call stack. Since release 4.19, do_dentry_open (fs/open.c) has been catching these and flagging an error. (So this driver has been broken since that date.) Fixes: 3c2472a [media] media: i2c: Add support for OV5647 sensor Signed-off-by: David Plowman Signed-off-by: Naushir Patuck --- drivers/media/i2c/ov5647.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c @@ -602,7 +602,13 @@ static int ov5647_write16(struct v4l2_su int ret; ret = i2c_master_send(client, data, 4); - if (ret < 0) { + /* + * Writing the wrong number of bytes also needs to be flagged as an + * error. Success needs to produce a 0 return code. + */ + if (ret == 4) { + ret = 0; + } else { dev_dbg(&client->dev, "%s: i2c write error, reg: %x\n", __func__, reg); return ret; @@ -618,10 +624,17 @@ static int ov5647_write(struct v4l2_subd int ret; ret = i2c_master_send(client, data, 3); - if (ret < 0) { + /* + * Writing the wrong number of bytes also needs to be flagged as an + * error. Success needs to produce a 0 return code. + */ + if (ret == 3) { + ret = 0; + } else { dev_dbg(&client->dev, "%s: i2c write error, reg: %x\n", __func__, reg); - return ret; + if (ret >= 0) + ret = -EINVAL; } return 0;