When reading the interrupt status registers fails, the negative error
codes end up in int_status[], where it6505_test_bit() sees almost all
bits set: every interrupt sub-handler runs on garbage and the error
values are even written back to the status registers. Return IRQ_NONE
instead.
Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
v6: no changes
v5: new patch
drivers/gpu/drm/bridge/ite-it6505.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
index fb6030a2c18c..3806b0b96637 100644
--- a/drivers/gpu/drm/bridge/ite-it6505.c
+++ b/drivers/gpu/drm/bridge/ite-it6505.c
@@ -2714,6 +2714,11 @@ static irqreturn_t it6505_int_threaded_handler(int unused, void *data)
int_status[1] = it6505_read(it6505, INT_STATUS_02);
int_status[2] = it6505_read(it6505, INT_STATUS_03);
+ if (int_status[0] < 0 || int_status[1] < 0 || int_status[2] < 0) {
+ pm_runtime_put_sync(dev);
+ return IRQ_NONE;
+ }
+
it6505_write(it6505, INT_STATUS_01, int_status[0]);
it6505_write(it6505, INT_STATUS_02, int_status[1]);
it6505_write(it6505, INT_STATUS_03, int_status[2]);--
2.55.0