MV_STATUS mvHwsSerdesUpdateTopology (SERDES_MAP* SerdesTopologyArr)
{
	MV_TWSI_SLAVE	twsiSlave;
	MV_U8 oobConfig = 0;
	MV_U8 port;
	/* Initializing twsiSlave in order to read from the TWSI address */
	twsiSlave.slaveAddr.address = 0x4c;
	twsiSlave.slaveAddr.type = ADDR7_BIT;
	twsiSlave.validOffset = MV_TRUE;
	twsiSlave.offset = 1;
	twsiSlave.moreThen256 = MV_FALSE;

	if (MV_ERROR == mvTwsiRead(0, &twsiSlave, &oobConfig, 1))
		return MV_FAIL;

	for (port = 0; port < MAX_NUMBER_OF_OOB_PORTS; port++) {
		switch ((oobConfig >> (2 * port)) & 0x3)
		{
		case 0:
			SerdesTopologyArr[port + 1].serdesNum = 20 + port;
			break;
		case 1:
			SerdesTopologyArr[port + 1].serdesNum = port;
			break;
		case 2:
			SerdesTopologyArr[port + 1].serdesType = DEFAULT_SERDES;
			break;
		default:
			mvPrintf("mvHwsSerdesUpdateTopology: Unsupported value for OOB%d \n", port);
			return MV_FAIL;
		}
	}
	return MV_OK;
}
Exemplo n.º 2
0
/*******************************************************************************
* mvSysAudioCodecRegRead
*
* DESCRIPTION:
*	System interface for reading an Audio codec register.
*
* INPUT:
*       codecHandle: Handle passed by OS glue by which an audio codec is
*		     identified.
*       regOffset:   Offset of codec register to be read.
*
* OUTPUT:
*       regData:     Register data
*
* RETURN:
*	MV_OK on success,
*	MV_ERROR otherwise.
*
*******************************************************************************/
MV_STATUS mvSysAudioCodecRegRead(MV_VOID *codecHandle, MV_U32  regOffset, MV_U32 *regData)
{
	MV_TWSI_SLAVE slave;

	slave.slaveAddr.address = mvBoardA2DTwsiAddrGet(0);
	slave.slaveAddr.type = mvBoardA2DTwsiAddrTypeGet(0);
    	slave.validOffset = MV_TRUE;
    	slave.offset = regOffset;
    	slave.moreThen256 = MV_FALSE;	

	return mvTwsiRead(mvBoardA2DTwsiChanNumGet(0), &slave, (MV_U8*)regData, 1);
}
Exemplo n.º 3
0
/*******************************************************************************
* mvRtcCharRead - Read a char from the RTC.
*
* DESCRIPTION:
*       This function reads a char from the RTC offset.
*
* INPUT:
*       offset - offset
*
* OUTPUT:
*       data - char read from offset offset.
*
* RETURN:
*       None.
*
*******************************************************************************/
static MV_VOID	mvRtcCharRead(MV_U32 offset, MV_U8 *data)
{
	MV_TWSI_SLAVE   twsiSlave;
	
	twsiSlave.slaveAddr.type = mvBoardRtcTwsiAddrTypeGet();
	twsiSlave.slaveAddr.address = mvBoardRtcTwsiAddrGet();
	twsiSlave.validOffset = MV_TRUE;
	twsiSlave.offset = offset;
	twsiSlave.moreThen256 = MV_FALSE;
	mvTwsiRead (MV_BOARD_RTC_I2C_CHANNEL, &twsiSlave, data, 1);
	return;
}
Exemplo n.º 4
0
/*
 * Read/Write interface:
 *   chip:    I2C chip address, range 0..127
 *   addr:    Memory (register) address within the chip
 *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
 *              memories, 0 for register type devices with only one
 *              register)
 *   buffer:  Where to read/write the data
 *   len:     How many bytes to read/write
 *
 *   Returns: 0 on success, not 0 on failure
 */
int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
{
	MV_TWSI_SLAVE twsiSlave;
	DP(puts("i2c_read\n"));

	twsiSlave.slaveAddr.type = ADDR7_BIT;
	twsiSlave.slaveAddr.address = chip;
	if(alen != 0){
		twsiSlave.validOffset = MV_TRUE;
		twsiSlave.offset = addr;
		if(alen == 2)
		{
			twsiSlave.moreThen256 = MV_TRUE;
		}
		else
		{
			twsiSlave.moreThen256 = MV_FALSE;
		}
	}
	i2c_init(CONFIG_SYS_I2C_SPEED,0); /* set the i2c frequency */
	return mvTwsiRead (i2c_current_bus, &twsiSlave, buffer, len);
}
Exemplo n.º 5
0
/*******************************************************************************
* boardEepromGet - Get board identification from the EEPROM
*
* DESCRIPTION:
*
* INPUT:
*
* OUTPUT:
*       None.
*
* RETURN:
*
*******************************************************************************/
MV_STATUS boardEepromGet(BOARD_DATA    *boardData)
{
 	MV_TWSI_SLAVE twsiSlave;
        MV_TWSI_ADDR slave;

	MV_U32 tclk;

	tclk = mvBoardTclkGet();
	
	/* Init TWSI first */
	slave.type = ADDR7_BIT;
	slave.address = 0x0;
	mvTwsiInit(100000, tclk, &slave, 0);

   	twsiSlave.slaveAddr.address = MV_BOARD_ID_EEPROM;
	twsiSlave.slaveAddr.type = ADDR7_BIT;
	twsiSlave.validOffset = MV_TRUE;
   	twsiSlave.offset = MV_BOARD_ID_EEPROM_OFFSET0;
	twsiSlave.moreThen256 = MV_FALSE;

	if(MV_OK != mvTwsiRead (&twsiSlave, (MV_U8*)boardData, sizeof(BOARD_DATA)))
    {
		/*mvOsOutput("Fail to read Board EEPROM from offset0");*/
       	return MV_FAIL;
   	}

#if defined(MV_CPU_LE)
	boardData->magic = MV_BYTE_SWAP_32BIT(boardData->magic);
	boardData->boardId = MV_BYTE_SWAP_16BIT(boardData->boardId);
	boardData->reserved1 = MV_BYTE_SWAP_32BIT(boardData->reserved1);
	boardData->reserved2 = MV_BYTE_SWAP_32BIT(boardData->reserved2);
#endif

	if(boardData->magic == MV_BOARD_I2C_MAGIC)
	{
    	return MV_OK;
    }

   	twsiSlave.offset = MV_BOARD_ID_EEPROM_OFFSET1;
	twsiSlave.moreThen256 = MV_TRUE;

	if(MV_OK != mvTwsiRead (&twsiSlave, (MV_U8*)boardData, sizeof(BOARD_DATA)))
    {
		/*mvOsOutput("Fail to read Board EEPROM from offset1");*/
       	return MV_FAIL;
   	}


	
#if defined(MV_CPU_LE)
	boardData->magic = MV_BYTE_SWAP_32BIT(boardData->magic);
	boardData->boardId = MV_BYTE_SWAP_16BIT(boardData->boardId);
	boardData->reserved1 = MV_BYTE_SWAP_32BIT(boardData->reserved1);
	boardData->reserved2 = MV_BYTE_SWAP_32BIT(boardData->reserved2);
#endif
	
    if(boardData->magic == MV_BOARD_I2C_MAGIC)
	{
    	return MV_OK;
    }

	return MV_FAIL;
}