mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
Input: resistive-adc-touch - fix division by zero error on z1 == 0
For proper pressure calculation we need at least x and z1 to be non
zero. Even worse, in case z1 we may run in to division by zero
error.
Fixes: 60b7db914d
("Input: resistive-adc-touch - rework mapping of channels")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20211007095727.29579-1-o.rempel@pengutronix.de
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
d997cc1715
commit
fe0a7e3d01
@ -71,19 +71,22 @@ static int grts_cb(const void *data, void *private)
|
||||
unsigned int z2 = touch_info[st->ch_map[GRTS_CH_Z2]];
|
||||
unsigned int Rt;
|
||||
|
||||
Rt = z2;
|
||||
Rt -= z1;
|
||||
Rt *= st->x_plate_ohms;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 16);
|
||||
Rt *= x;
|
||||
Rt /= z1;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 256);
|
||||
/*
|
||||
* On increased pressure the resistance (Rt) is decreasing
|
||||
* so, convert values to make it looks as real pressure.
|
||||
*/
|
||||
if (Rt < GRTS_DEFAULT_PRESSURE_MAX)
|
||||
press = GRTS_DEFAULT_PRESSURE_MAX - Rt;
|
||||
if (likely(x && z1)) {
|
||||
Rt = z2;
|
||||
Rt -= z1;
|
||||
Rt *= st->x_plate_ohms;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 16);
|
||||
Rt *= x;
|
||||
Rt /= z1;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 256);
|
||||
/*
|
||||
* On increased pressure the resistance (Rt) is
|
||||
* decreasing so, convert values to make it looks as
|
||||
* real pressure.
|
||||
*/
|
||||
if (Rt < GRTS_DEFAULT_PRESSURE_MAX)
|
||||
press = GRTS_DEFAULT_PRESSURE_MAX - Rt;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!x && !y) || (st->pressure && (press < st->pressure_min))) {
|
||||
|
Loading…
Reference in New Issue
Block a user