Message ID | 20240522100341.1650842-1-jkeeping@inmusicbrands.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Input: ili210x - fix ili251x_read_touch_data() return value | expand |
On Wed, May 22, 2024 at 11:03:41AM +0100, John Keeping wrote: > The caller of this function treats all non-zero values as an error, so > the return value of i2c_master_recv() cannot be returned directly. > Follow the same pattern as ili211x_read_touch_data() to return zero when > the correct number of bytes is read and a negative error code otherwise. > > This fixes touch reporting when there are more than 6 active touches. > > Signed-off-by: John Keeping <jkeeping@inmusicbrands.com> > --- > drivers/input/touchscreen/ili210x.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c > index 31ffdc2a93f35..8846c6d10fc0d 100644 > --- a/drivers/input/touchscreen/ili210x.c > +++ b/drivers/input/touchscreen/ili210x.c > @@ -255,14 +255,15 @@ static int ili251x_read_reg(struct i2c_client *client, > static int ili251x_read_touch_data(struct i2c_client *client, u8 *data) > { > int error; > + int ret; > > error = ili251x_read_reg_common(client, REG_TOUCHDATA, > data, ILI251X_DATA_SIZE1, 0); > if (!error && data[0] == 2) { > - error = i2c_master_recv(client, data + ILI251X_DATA_SIZE1, > - ILI251X_DATA_SIZE2); > - if (error >= 0 && error != ILI251X_DATA_SIZE2) > - error = -EIO; Thanks for noticing this. Can we say if (error >= 0) error = error != ILI251X_DATA_SIZE2 ? -EIO : 0; > + ret = i2c_master_recv(client, data + ILI251X_DATA_SIZE1, > + ILI251X_DATA_SIZE2); > + if (ret != ILI251X_DATA_SIZE2) > + error = ret < 0 ? ret : -EIO; > } > > return error; > -- > 2.45.1 > Thanks.
… > This fixes touch reporting when there are more than 6 active touches. Does such information indicate a need for the tag “Fixes”? … > +++ b/drivers/input/touchscreen/ili210x.c > @@ -255,14 +255,15 @@ static int ili251x_read_reg(struct i2c_client *client, > static int ili251x_read_touch_data(struct i2c_client *client, u8 *data) > { > int error; > + int ret; > > error = ili251x_read_reg_common(client, REG_TOUCHDATA, > data, ILI251X_DATA_SIZE1, 0); > if (!error && data[0] == 2) { … I suggest to define the variable “ret” in the shown if branch. Regards, Markus
diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c index 31ffdc2a93f35..8846c6d10fc0d 100644 --- a/drivers/input/touchscreen/ili210x.c +++ b/drivers/input/touchscreen/ili210x.c @@ -255,14 +255,15 @@ static int ili251x_read_reg(struct i2c_client *client, static int ili251x_read_touch_data(struct i2c_client *client, u8 *data) { int error; + int ret; error = ili251x_read_reg_common(client, REG_TOUCHDATA, data, ILI251X_DATA_SIZE1, 0); if (!error && data[0] == 2) { - error = i2c_master_recv(client, data + ILI251X_DATA_SIZE1, - ILI251X_DATA_SIZE2); - if (error >= 0 && error != ILI251X_DATA_SIZE2) - error = -EIO; + ret = i2c_master_recv(client, data + ILI251X_DATA_SIZE1, + ILI251X_DATA_SIZE2); + if (ret != ILI251X_DATA_SIZE2) + error = ret < 0 ? ret : -EIO; } return error;
The caller of this function treats all non-zero values as an error, so the return value of i2c_master_recv() cannot be returned directly. Follow the same pattern as ili211x_read_touch_data() to return zero when the correct number of bytes is read and a negative error code otherwise. This fixes touch reporting when there are more than 6 active touches. Signed-off-by: John Keeping <jkeeping@inmusicbrands.com> --- drivers/input/touchscreen/ili210x.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)