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; }
/******************************************************************************* * 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); }
/******************************************************************************* * 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; }
/* * 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); }
/******************************************************************************* * 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; }