#define   HISI_I2C_FS_SPK_LEN_CNT      GENMASK(7, 0)
 #define HISI_I2C_HS_SPK_LEN            0x003c
 #define   HISI_I2C_HS_SPK_LEN_CNT      GENMASK(7, 0)
+#define HISI_I2C_TX_INT_CLR            0x0040
+#define   HISI_I2C_TX_AEMPTY_INT               BIT(0)
 #define HISI_I2C_INT_MSTAT             0x0044
 #define HISI_I2C_INT_CLR               0x0048
 #define HISI_I2C_INT_MASK              0x004C
        writel_relaxed(mask, ctlr->iobase + HISI_I2C_INT_CLR);
 }
 
+static void hisi_i2c_clear_tx_int(struct hisi_i2c_controller *ctlr, u32 mask)
+{
+       writel_relaxed(mask, ctlr->iobase + HISI_I2C_TX_INT_CLR);
+}
+
 static void hisi_i2c_handle_errors(struct hisi_i2c_controller *ctlr)
 {
        u32 int_err = ctlr->xfer_err, reg;
        writel(reg, ctlr->iobase + HISI_I2C_FIFO_CTRL);
 
        hisi_i2c_clear_int(ctlr, HISI_I2C_INT_ALL);
+       hisi_i2c_clear_tx_int(ctlr, HISI_I2C_TX_AEMPTY_INT);
        hisi_i2c_enable_int(ctlr, HISI_I2C_INT_ALL);
 
        return 0;
         */
        if (ctlr->msg_tx_idx == ctlr->msg_num)
                hisi_i2c_disable_int(ctlr, HISI_I2C_INT_TX_EMPTY);
+
+       hisi_i2c_clear_tx_int(ctlr, HISI_I2C_TX_AEMPTY_INT);
 }
 
 static irqreturn_t hisi_i2c_irq(int irq, void *context)
        if (int_stat & HISI_I2C_INT_TRANS_CPLT) {
                hisi_i2c_disable_int(ctlr, HISI_I2C_INT_ALL);
                hisi_i2c_clear_int(ctlr, HISI_I2C_INT_ALL);
+               hisi_i2c_clear_tx_int(ctlr, HISI_I2C_TX_AEMPTY_INT);
                complete(ctlr->completion);
        }