Hi Kimriver, On Fri, Sep 13, 2024 at 11:31:46AM GMT, Kimriver Liu wrote: > It was observed that issuing the ABORT bit (IC_ENABLE[1]) will not > work when IC_ENABLE is already disabled. > > Check if the ENABLE bit (IC_ENABLE[0]) is disabled when the controller > is holding SCL low. If the ENABLE bit is disabled, the software needs > to enable it before trying to issue the ABORT bit. otherwise, > the controller ignores any write to ABORT bit. > > These kernel logs show up whenever an I2C transaction is > attempted after this failure. > i2c_designware e95e0000.i2c: timeout waiting for bus ready > i2c_designware e95e0000.i2c: timeout in disabling adapter > > The patch fixes the issue where the controller cannot be disabled > while SCL is held low if the ENABLE bit is already disabled. > > Fixes: 2409205acd3c ("i2c: designware: fix __i2c_dw_disable() in case master is holding SCL low") > Signed-off-by: Kimriver Liu <kimriver.liu@xxxxxxxxxxxx> > Reviewed-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> > Acked-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx> > Reviewed-by: Andy Shevchenko <andy@xxxxxxxxxx> I'm sorry for the delay, but I needed to wait for the previous batch of fixes to be merged. [...] > +/* > + * This function waits controller idling before disabling I2C > + * When the controller is not in the IDLE state, > + * MST_ACTIVITY bit (IC_STATUS[5]) is set. > + * Values: > + * 0x1 (ACTIVE): Controller not idle > + * 0x0 (IDLE): Controller is idle > + * The function is called after returning the end of the current transfer > + * Returns: > + * False when controller is in IDLE state. > + * True when controller is in ACTIVE state. > + */ I took the liberty of making some small changes to the comment: +/* + * This function waits for the controller to be idle before disabling I2C + * When the controller is not in the IDLE state, the MST_ACTIVITY bit + * (IC_STATUS[5]) is set. + * + * Values: + * 0x1 (ACTIVE): Controller not idle + * 0x0 (IDLE): Controller is idle + * + * The function is called after completing the current transfer. + * + * Returns: + * False when the controller is in the IDLE state. + * True when the controller is in the ACTIVE state. + */ for an improved clarity and address a few grammatical issues. Please verify that it's correct. I merged your patch to i2c/i2c-host-fixes along with the latest changes proposed by Andy. Thanks for your work, Andi