drivers: mentor: mi2cv: add inverted interrupt clear flag quirk
authorIcenowy Zheng <icenowy@aosc.io>
Sun, 22 Jul 2018 13:27:30 +0000 (21:27 +0800)
committerIcenowy Zheng <icenowy@aosc.io>
Fri, 7 Sep 2018 14:09:45 +0000 (22:09 +0800)
The I2C controller on Allwinner SoCs after A31 has a inverted interrupt
clear flag, which needs to be written 1 (rather than 0 on Marvell SoCs
and old Allwinner SoCs) to clear.

Add such a quirk to mi2cv driver common code.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
drivers/mentor/i2c/mi2cv.c

index 618836ba5f6825edfc1ed269fe94736146412845..1b73e6f1642db570ab645ce599c4391fd56f8d92 100644 (file)
@@ -68,7 +68,11 @@ static void mentor_i2c_interrupt_clear(void)
        uint32_t reg;
 
        reg = mmio_read_32((uintptr_t)&base->control);
+#ifndef I2C_INTERRUPT_CLEAR_INVERTED
        reg &= ~(I2C_CONTROL_IFLG);
+#else
+       reg |= I2C_CONTROL_IFLG;
+#endif
        mmio_write_32((uintptr_t)&base->control, reg);
        /* Wait for 1 us for the clear to take effect */
        udelay(1);