Exemplo n.º 1
0
/*
 * waits for a completion of an I2C transfer
 *
 * returns	0:	success, transfer completes
 *			1:	error,	 transfer does not complete, I2C transfer
 *						 killed, wait loop terminated.
 */
int	SkI2cWait(
    SK_AC	*pAC,	/* Adapter Context */
    SK_IOC	IoC,	/* I/O Context */
    int		Event)	/* complete event to wait for (I2C_READ or I2C_WRITE) */
{
    SK_U64	StartTime;
    SK_U32	I2cCtrl;

    StartTime = SkOsGetTime(pAC);
    do {
        if (SkOsGetTime(pAC) - StartTime > SK_TICKS_PER_SEC / 8) {
            SK_I2C_STOP(IoC);
#ifndef SK_DIAG
            SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E002, SKERR_I2C_E002MSG);
#endif	/* !SK_DIAG */
            return(1);
        }
        SK_I2C_GET_CTL(IoC, &I2cCtrl);
    } while ((I2cCtrl & I2C_FLAG) == (SK_U32)Event << 31);

    return(0);
}	/* SkI2cWait */
Exemplo n.º 2
0
/*
 * waits for a completion of a TWSI transfer
 *
 * returns	0:	success, transfer completes
 *			1:	error,	 transfer does not complete, TWSI transfer
 *						 killed, wait loop terminated.
 */
int SkI2cWait(
SK_AC	*pAC,	/* Adapter Context */
SK_IOC	IoC,	/* I/O Context */
int		Event)	/* complete event to wait for (I2C_READ or I2C_WRITE) */
{
	SK_U64	StartTime;
	SK_U64	CurrentTime;
	SK_U32	I2cCtrl;

	StartTime = SkOsGetTime(pAC);

	do {
		CurrentTime = SkOsGetTime(pAC);

		if (CurrentTime - StartTime > SK_TICKS_PER_SEC / 8) {

			SK_I2C_STOP(IoC);
#ifndef SK_DIAG
			if (pAC->I2c.InitLevel > SK_INIT_DATA) {
				SK_ERR_LOG(pAC, SK_ERRCL_SW, SKERR_I2C_E002, SKERR_I2C_E002MSG);
			}
#endif /* !SK_DIAG */
			return(1);
		}

		SK_I2C_GET_CTL(IoC, &I2cCtrl);

#ifdef xYUKON_DBG
		printf("StartTime=%lu, CurrentTime=%lu\n",
			StartTime, CurrentTime);
		if (kbhit()) {
			return(1);
		}
#endif /* YUKON_DBG */

	} while ((I2cCtrl & I2C_FLAG) == (SK_U32)Event << 31);

	return(0);
}	/* SkI2cWait */