@ -125,10 +125,10 @@ I2C_Status I2C_Initialize (unsigned char addr,
* len is the length of data to send or receive
* buffer is the address of the data buffer
* stop = I2C_NO_STOP , don ' t signal STOP at end of transaction
* I2C_STOP , signal STOP at end of transaction
* I2C_STOP , signal STOP at end of transaction
* retry is the timeout retry value , currently ignored
* rsta = I2C_NO_RESTART , this is not continuation of existing transaction
* I2C_RESTART , this is a continuation of existing transaction
* I2C_RESTART , this is a continuation of existing transaction
*/
I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int ,
I2C_TRANSACTION_MODE act ,
@ -191,12 +191,12 @@ I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int,
}
/*
* We first have to contact the slave device and transmit the
* data address . Be careful about the STOP and restart stuff .
* We don ' t want to signal STOP after sending the data
* address , but this could be a continuation if the
* application didn ' t release the bus after the previous
* transaction , by not sending a STOP after it .
* We first have to contact the slave device and transmit the
* data address . Be careful about the STOP and restart stuff .
* We don ' t want to signal STOP after sending the data
* address , but this could be a continuation if the
* application didn ' t release the bus after the previous
* transaction , by not sending a STOP after it .
*/
status = I2C_do_buffer ( en_int , I2C_MASTER_XMIT , i2c_addr , 1 ,
data_addr_buffer , I2C_NO_STOP , retry , rsta ) ;
@ -231,10 +231,10 @@ I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int,
* len is the length of data to send or receive
* buffer is the address of the data buffer
* stop = I2C_NO_STOP , don ' t signal STOP at end of transaction
* I2C_STOP , signal STOP at end of transaction
* I2C_STOP , signal STOP at end of transaction
* retry is the timeout retry value , currently ignored
* rsta = I2C_NO_RESTART , this is not continuation of existing transaction
* I2C_RESTART , this is a continuation of existing transaction
* I2C_RESTART , this is a continuation of existing transaction
*/
static I2C_Status I2C_do_buffer ( I2C_INTERRUPT_MODE en_int ,
I2C_TRANSACTION_MODE act ,
@ -518,9 +518,9 @@ static I2CStatus I2C_Timer_Event (unsigned int eumbbar,
* function : I2C_Start
*
* description : Generate a START signal in the desired mode .
* I2C is the master .
* I2C is the master .
*
* Return I2CSUCCESS if no error .
* Return I2CSUCCESS if no error .
*
* note :
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@ -594,8 +594,8 @@ static I2CStatus I2C_Start (unsigned int eumbbar, unsigned char slave_addr, /* a
* function : I2c_Stop
*
* description : Generate a STOP signal to terminate the master
* transaction .
* return I2CSUCCESS
* transaction .
* return I2CSUCCESS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static I2CStatus I2C_Stop ( unsigned int eumbbar )
@ -621,10 +621,10 @@ static I2CStatus I2C_Stop (unsigned int eumbbar)
* function : I2C_Master_Xmit
*
* description : Master sends one byte of data to
* slave target
* slave target
*
* return I2CSUCCESS if the byte transmitted .
* Otherwise no - zero
* return I2CSUCCESS if the byte transmitted .
* Otherwise no - zero
*
* Note : condition must meet when this function is called :
* I2CSR ( MIF ) = = 1 & & I2CSR ( MCF ) = = 1 & & I2CSR ( RXAK ) = = 0
@ -669,9 +669,9 @@ static I2CStatus I2C_Master_Xmit (unsigned int eumbbar)
* function : I2C_Master_Rcv
*
* description : master reads one byte data
* from slave source
* from slave source
*
* return I2CSUCCESS if no error
* return I2CSUCCESS if no error
*
* Note : condition must meet when this function is called :
* I2CSR ( MIF ) = = 1 & & I2CSR ( MCF ) = = 1 & &
@ -736,10 +736,10 @@ static I2CStatus I2C_Master_Rcv (unsigned int eumbbar)
* function : I2C_Slave_Xmit
*
* description : Slave sends one byte of data to
* requesting destination
* requesting destination
*
* return SUCCESS if the byte transmitted . Otherwise
* No - zero
* return SUCCESS if the byte transmitted . Otherwise
* No - zero
*
* Note : condition must meet when this function is called :
* I2CSR ( MIF ) = = 1 & & I2CSR ( MCF ) = = 1 & & I2CSR ( RXAK ) = 0
@ -757,12 +757,12 @@ static I2CStatus I2C_Slave_Xmit (unsigned int eumbbar)
ByteToXmit = 0 ;
/*
* do not toggle I2CCR ( MTX ) . Doing so will
* cause bus - hung since current Kahlua design
* does not give master a way to detect slave
* stop . It is always a good idea for master
* to use timer to prevent the long long
* delays
* do not toggle I2CCR ( MTX ) . Doing so will
* cause bus - hung since current Kahlua design
* does not give master a way to detect slave
* stop . It is always a good idea for master
* to use timer to prevent the long long
* delays
*/
return I2CBUFFEMPTY ;
@ -787,9 +787,9 @@ static I2CStatus I2C_Slave_Xmit (unsigned int eumbbar)
* function : I2C_Slave_Rcv
*
* description : slave reads one byte data
* from master source
* from master source
*
* return I2CSUCCESS if no error otherwise non - zero
* return I2CSUCCESS if no error otherwise non - zero
*
* Note : condition must meet when this function is called :
* I2CSR ( MIF ) = = 1 & & I2CSR ( MCF ) = = 1 & &
@ -834,8 +834,8 @@ static I2CStatus I2C_Slave_Rcv (unsigned int eumbbar)
* function : I2C_Init
*
* description : Initialize I2C unit with desired frequency divider ,
* master ' s listening address , with interrupt enabled
* or disabled .
* master ' s listening address , with interrupt enabled
* or disabled .
*
* note :
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@ -912,7 +912,7 @@ static I2C_STAT I2C_Get_Stat (unsigned int eumbbar)
* function : I2c_Set_Ctrl
*
* description : Change I2C Control bits ,
* i . e . , write to I2CCR
* i . e . , write to I2CCR
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void I2C_Set_Ctrl ( unsigned int eumbbar , I2C_CTRL ctrl )
@ -937,7 +937,7 @@ static void I2C_Set_Ctrl (unsigned int eumbbar, I2C_CTRL ctrl)
* function : I2C_Get_Ctrl
*
* description : Query I2C Control bits ,
* i . e . , read I2CCR
* i . e . , read I2CCR
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static I2C_CTRL I2C_Get_Ctrl ( unsigned int eumbbar )
{
@ -959,7 +959,7 @@ static I2C_CTRL I2C_Get_Ctrl (unsigned int eumbbar)
* function : I2C_Slave_Addr
*
* description : Process slave address phase .
* return I2CSUCCESS if no error
* return I2CSUCCESS if no error
*
* note : Precondition for calling this function :
* I2CSR ( MIF ) = = 1 & &
@ -1193,14 +1193,17 @@ int i2c_read (uchar chip, uint addr, int alen, uchar * buffer, int len)
int i2c_write ( uchar chip , uint addr , int alen , uchar * buffer , int len )
{
I2CStatus status ;
unsigned char dummy_buffer [ I2C_RXTX_LEN + 2 ] ;
uchar dummy_buffer [ I2C_RXTX_LEN + 2 ] ;
uchar * p ;
int i ;
dummy_buffer [ 0 ] = addr & 0xFF ;
if ( alen = = 2 )
dummy_buffer [ 1 ] = ( addr > > 8 ) & 0xFF ;
for ( i = 0 ; i < len ; i + + )
dummy_buffer [ i + alen ] = buffer [ i ] ;
p = dummy_buffer ;
/* fill in address in big endian order */
for ( i = 0 ; i < alen ; + + i )
* p + + = ( addr > > ( i * 8 ) ) & 0xFF ;
/* fill in data */
for ( i = 0 ; i < len ; + + i )
* p + + = * buffer ;
status = I2C_do_buffer ( 0 , I2C_MASTER_XMIT , chip , alen + len ,
dummy_buffer , I2C_STOP , 1 , I2C_NO_RESTART ) ;