imxrt:lpi2c end only on stop with end of packet

This commit is contained in:
David Sidrane 2023-10-23 08:14:40 -07:00 committed by Petro Karashchenko
parent 962d46186d
commit 119bf660a4

View File

@ -1599,31 +1599,39 @@ static int imxrt_lpi2c_isr_process(struct imxrt_lpi2c_priv_s *priv)
LPI2C_MSR_FEF | LPI2C_MSR_EPF)));
}
/* Check for endof packet */
/* Check for endof packet or Stop */
if ((status & (LPI2C_MSR_EPF | LPI2C_MSR_SDF)) != 0)
{
/* Reset either or both */
imxrt_lpi2c_putreg(priv, IMXRT_LPI2C_MSR_OFFSET, status &
(LPI2C_MSR_EPF | LPI2C_MSR_SDF));
#ifndef CONFIG_I2C_POLLED
if (priv->intstate == INTSTATE_WAITING)
/* Was it both End of packet and Stop */
if ((status & (LPI2C_MSR_EPF | LPI2C_MSR_SDF)) ==
(LPI2C_MSR_EPF | LPI2C_MSR_SDF))
{
/* inform the thread that transfer is complete
* and wake it up
*/
#ifndef CONFIG_I2C_POLLED
if (priv->intstate == INTSTATE_WAITING)
{
/* inform the thread that transfer is complete
* and wake it up
*/
priv->intstate = INTSTATE_DONE;
priv->intstate = INTSTATE_DONE;
imxrt_lpi2c_modifyreg(priv, IMXRT_LPI2C_MIER_OFFSET,
LPI2C_MIER_TDIE | LPI2C_MIER_RDIE |
LPI2C_MIER_NDIE | LPI2C_MIER_ALIE |
LPI2C_MIER_SDIE | LPI2C_MIER_EPIE, 0);
nxsem_post(&priv->sem_isr);
}
imxrt_lpi2c_modifyreg(priv, IMXRT_LPI2C_MIER_OFFSET,
LPI2C_MIER_TDIE | LPI2C_MIER_RDIE |
LPI2C_MIER_NDIE | LPI2C_MIER_ALIE |
LPI2C_MIER_SDIE | LPI2C_MIER_EPIE, 0);
nxsem_post(&priv->sem_isr);
}
#else
priv->intstate = INTSTATE_DONE;
priv->intstate = INTSTATE_DONE;
#endif
}
}
return OK;