drm/panel/raspberrypi-touchscreen: Handle I2C errors.
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Wed, 8 Sep 2021 13:21:38 +0000 (14:21 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:33:12 +0000 (11:33 +0000)
rpi_touchscreen_i2c_read returns any errors from i2c_transfer,
or the 8 bit received value.
Check for error values before trying to process the data as
valid.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c

index dae2ec2..12f6961 100644 (file)
@@ -295,13 +295,14 @@ static int rpi_touchscreen_noop(struct drm_panel *panel)
 static int rpi_touchscreen_prepare(struct drm_panel *panel)
 {
        struct rpi_touchscreen *ts = panel_to_ts(panel);
-       int i;
+       int i, data;
 
        rpi_touchscreen_i2c_write(ts, REG_POWERON, 1);
        usleep_range(20000, 25000);
        /* Wait for nPWRDWN to go low to indicate poweron is done. */
        for (i = 0; i < 100; i++) {
-               if (rpi_touchscreen_i2c_read(ts, REG_PORTB) & 1)
+               data = rpi_touchscreen_i2c_read(ts, REG_PORTB);
+               if (data >= 0 && (data & 1))
                        break;
        }