Re: [PATCH v1] touchscreen/88pm860x-ts: check the pm860x_set_bits return value
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2022-09-21 22:47:32
Hi, On Wed, Sep 21, 2022 at 01:37:06PM -0700, Li Zhong wrote:
pm860x_touch_close() got the return value of pm860x_set_bits() but didn't check it. However, pm860x_set_bits() could fail when writing the reg map fails.
Under what conditions would the write fail?
Since pm860x_touch_close() cannot return an error value, we retry the bit setting in the error handling.
What guarantees that the repeated write will not fail again? What is the failure mode if write does not succeed?
quoted hunk ↗ jump to hunk
Signed-off-by: Li Zhong <redacted> --- drivers/input/touchscreen/88pm860x-ts.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)diff --git a/drivers/input/touchscreen/88pm860x-ts.c b/drivers/input/touchscreen/88pm860x-ts.c index 81a3ea4b9a3d..043520d1ff26 100644 --- a/drivers/input/touchscreen/88pm860x-ts.c +++ b/drivers/input/touchscreen/88pm860x-ts.c@@ -106,10 +106,13 @@ static void pm860x_touch_close(struct input_dev *dev) { struct pm860x_touch *touch = input_get_drvdata(dev); int data; + int ret; data = MEAS_PD_EN | MEAS_TSIX_EN | MEAS_TSIY_EN | MEAS_TSIZ1_EN | MEAS_TSIZ2_EN; - pm860x_set_bits(touch->i2c, MEAS_EN3, data, 0); + ret = pm860x_set_bits(touch->i2c, MEAS_EN3, data, 0); + if (ret < 0) + pm860x_set_bits(touch->i2c, MEAS_EN3, data, 0); } #ifdef CONFIG_OF-- 2.25.1
Thanks. -- Dmitry