Commit f84a97d4 authored by Russell King's avatar Russell King
Browse files

drm/i2c: tda998x: report whether we actually handled the IRQ



Rather than always reporting that the interrupt was handled, we should
report whether we did handle the interrupt.  Arrange to report IRQ_NONE
for cases where we found nothing to do.

This allows us to (eventually) recover from stuck-IRQ problems, rather
than causing the kernel to solidly lock up.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 3f3d0d00
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -569,6 +569,7 @@ static irqreturn_t tda998x_irq_thread(int irq, void *data)
{
	struct tda998x_priv *priv = data;
	u8 sta, cec, lvl, flag0, flag1, flag2;
	bool handled = false;

	sta = cec_read(priv, REG_CEC_INTSTATUS);
	cec = cec_read(priv, REG_CEC_RXSHPDINT);
@@ -582,10 +583,12 @@ static irqreturn_t tda998x_irq_thread(int irq, void *data)
	if ((flag2 & INT_FLAGS_2_EDID_BLK_RD) && priv->wq_edid_wait) {
		priv->wq_edid_wait = 0;
		wake_up(&priv->wq_edid);
		handled = true;
	} else if (cec != 0) {			/* HPD change */
		schedule_delayed_work(&priv->dwork, HZ/10);
		handled = true;
	}
	return IRQ_HANDLED;
	return IRQ_RETVAL(handled);
}

static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes)