Re: [PATCH v1] Input: elants_i2c - fix division by zero if firmware reports zero phys size
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2021-03-28 04:44:47
Also in:
linux-input, lkml
Hi Dmitry, On Tue, Mar 02, 2021 at 01:08:24PM +0300, Dmitry Osipenko wrote:
quoted hunk ↗ jump to hunk
Touchscreen firmware of ASUS Transformer TF700T reports zeros for the phys size. Hence check whether the size is zero and don't set the resolution in this case. Reported-by: Jasper Korten <redacted> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- Please note that ASUS TF700T isn't yet supported by upstream kernel, hence this is not a critical fix. drivers/input/touchscreen/elants_i2c.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)diff --git a/drivers/input/touchscreen/elants_i2c.c b/drivers/input/touchscreen/elants_i2c.c index 4c2b579f6c8b..a2e1cc4192b0 100644 --- a/drivers/input/touchscreen/elants_i2c.c +++ b/drivers/input/touchscreen/elants_i2c.c@@ -1441,14 +1441,16 @@ static int elants_i2c_probe(struct i2c_client *client, touchscreen_parse_properties(ts->input, true, &ts->prop); - if (ts->chip_id == EKTF3624) { + if (ts->chip_id == EKTF3624 && ts->phy_x && ts->phy_y) { /* calculate resolution from size */ ts->x_res = DIV_ROUND_CLOSEST(ts->prop.max_x, ts->phy_x); ts->y_res = DIV_ROUND_CLOSEST(ts->prop.max_y, ts->phy_y); } - input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res); - input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res); + if (ts->x_res > 0) + input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res);
There is absolutely no difference between setting respluton to 0 vs not setting it at all, so I dropped the conditionals and applied.
+ if (ts->y_res > 0) + input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res); if (ts->major_res > 0)
We could drop this condition as well.
input_abs_set_res(ts->input, ABS_MT_TOUCH_MAJOR, ts->major_res); -- 2.29.2
Thanks. -- Dmitry