const void *val, size_t val_len)
 {
        struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
+       bool ack = UCSI_COMMAND(*(u64 *)val) == UCSI_ACK_CC_CI;
        int ret;
 
-       set_bit(COMMAND_PENDING, &ua->flags);
+       if (ack)
+               set_bit(ACK_PENDING, &ua->flags);
+       else
+               set_bit(COMMAND_PENDING, &ua->flags);
 
        ret = ucsi_acpi_async_write(ucsi, offset, val, val_len);
        if (ret)
                ret = -ETIMEDOUT;
 
 out_clear_bit:
-       clear_bit(COMMAND_PENDING, &ua->flags);
+       if (ack)
+               clear_bit(ACK_PENDING, &ua->flags);
+       else
+               clear_bit(COMMAND_PENDING, &ua->flags);
 
        return ret;
 }
        if (UCSI_CCI_CONNECTOR(cci))
                ucsi_connector_change(ua->ucsi, UCSI_CCI_CONNECTOR(cci));
 
-       if (test_bit(COMMAND_PENDING, &ua->flags) &&
-           cci & (UCSI_CCI_ACK_COMPLETE | UCSI_CCI_COMMAND_COMPLETE))
+       if (cci & UCSI_CCI_ACK_COMPLETE && test_bit(ACK_PENDING, &ua->flags))
+               complete(&ua->complete);
+       if (cci & UCSI_CCI_COMMAND_COMPLETE &&
+           test_bit(COMMAND_PENDING, &ua->flags))
                complete(&ua->complete);
 }