Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2501c1bb authored by Chris Brandt's avatar Chris Brandt Committed by Wolfram Sang
Browse files

i2c: riic: fix restart condition



While modifying the driver to use the STOP interrupt, the completion of the
intermediate transfers need to wake the driver back up in order to initiate
the next transfer (restart condition). Otherwise you get never ending
interrupts and only the first transfer sent.

Fixes: 71ccea09 ("i2c: riic: correctly finish transfers")
Reported-by: default avatarSimon Horman <horms@verge.net.au>
Signed-off-by: default avatarChris Brandt <chris.brandt@renesas.com>
Tested-by: default avatarSimon Horman <horms+renesas@verge.net.au>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent c1ae3cfa
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -218,8 +218,12 @@ static irqreturn_t riic_tend_isr(int irq, void *data)
	}

	if (riic->is_last || riic->err) {
		riic_clear_set_bit(riic, 0, ICIER_SPIE, RIIC_ICIER);
		riic_clear_set_bit(riic, ICIER_TEIE, ICIER_SPIE, RIIC_ICIER);
		writeb(ICCR2_SP, riic->base + RIIC_ICCR2);
	} else {
		/* Transfer is complete, but do not send STOP */
		riic_clear_set_bit(riic, ICIER_TEIE, 0, RIIC_ICIER);
		complete(&riic->msg_done);
	}

	return IRQ_HANDLED;