[processor-sdk/performance-audio-sr.git] / pdk_k2g_1_0_1 / packages / ti / board / src / evmAM571x / evmAM571x_info.c
1 /******************************************************************************
2 * Copyright (c) 2010-2015 Texas Instruments Incorporated - http://www.ti.com
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the
14 * distribution.
15 *
16 * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 *****************************************************************************/
34 #include "board_internal.h"
35 #include "board_cfg.h"
37 /*
38 * ======== Board_getIDInfo ========
39 */
40 Board_STATUS Board_getIDInfo(Board_IDInfo *info) {
41 Board_STATUS ret = BOARD_SOK;
42 I2C_Transaction i2cTransaction;
43 I2C_Handle handle = NULL;
44 char txBuf[2] = {0x00, 0x00};
45 bool status;
47 /* If handle not opened yet, init i2c */
48 if (Board_obj.i2cHandle == NULL)
49 {
50 ret = Board_internalInitI2C();
51 }
52 if (ret != BOARD_SOK)
53 return ret;
55 handle = Board_obj.i2cHandle;
57 i2cTransaction.slaveAddress = BOARD_I2C_EEPROM_ADDR;
58 i2cTransaction.writeBuf = (uint8_t *)&txBuf[0];
59 i2cTransaction.writeCount = 2;
61 /* Get header info */
62 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_HEADER_ADDR)>>8);
63 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_HEADER_ADDR);
64 i2cTransaction.readBuf = (uint8_t *) info->header;
65 i2cTransaction.readCount = BOARD_EEPROM_HEADER_LENGTH;
66 status = I2C_transfer(handle, &i2cTransaction);
67 if (status == false)
68 {
69 ret = BOARD_I2C_TRANSFER_FAIL;
70 return ret;
71 }
72 info->header[BOARD_EEPROM_HEADER_LENGTH] = '\0';
74 /* Get board name */
75 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_BOARD_NAME_ADDR)>>8);
76 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_BOARD_NAME_ADDR);
77 i2cTransaction.readBuf = (uint8_t *) info->boardName;
78 i2cTransaction.readCount = BOARD_EEPROM_BOARD_NAME_LENGTH;
79 status = I2C_transfer(handle, &i2cTransaction);
80 if (status == false)
81 {
82 ret = BOARD_I2C_TRANSFER_FAIL;
83 return ret;
84 }
85 info->boardName[BOARD_EEPROM_BOARD_NAME_LENGTH] = '\0';
87 /* Get board version */
88 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_VERSION_ADDR)>>8);
89 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_VERSION_ADDR);
90 i2cTransaction.readBuf = (uint8_t *) info->version;
91 i2cTransaction.readCount = BOARD_EEPROM_VERSION_LENGTH;
92 status = I2C_transfer(handle, &i2cTransaction);
93 if (status == false)
94 {
95 ret = BOARD_I2C_TRANSFER_FAIL;
96 return ret;
97 }
98 info->version[BOARD_EEPROM_VERSION_LENGTH] = '\0';
100 /* Get header info */
101 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_SERIAL_NO_ADDR)>>8);
102 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_SERIAL_NO_ADDR);
103 i2cTransaction.readBuf = (uint8_t *) info->serialNum;
104 i2cTransaction.readCount = BOARD_EEPROM_SERIAL_NO_LENGTH;
105 status = I2C_transfer(handle, &i2cTransaction);
106 if (status == false)
107 {
108 ret = BOARD_I2C_TRANSFER_FAIL;
109 return ret;
110 }
111 info->serialNum[BOARD_EEPROM_SERIAL_NO_LENGTH] = '\0';
113 return ret;
114 }
116 /*
117 * ======== Board_writeIDInfo ========
118 */
119 Board_STATUS Board_writeIDInfo(Board_IDInfo *info) {
120 Board_STATUS ret = BOARD_SOK;
121 I2C_Transaction i2cTransaction;
122 I2C_Handle handle = NULL;
123 char txBuf[2+BOARD_EEPROM_HEADER_LENGTH+BOARD_EEPROM_BOARD_NAME_LENGTH
124 +BOARD_EEPROM_VERSION_ADDR+BOARD_EEPROM_SERIAL_NO_LENGTH];
125 bool status;
126 int i, idx;
128 /* If handle not opened yet, init i2c */
129 if (Board_obj.i2cHandle == NULL)
130 {
131 ret = Board_internalInitI2C();
132 }
133 if (ret != BOARD_SOK)
134 return ret;
136 handle = Board_obj.i2cHandle;
138 i2cTransaction.slaveAddress = BOARD_I2C_EEPROM_ADDR;
139 i2cTransaction.writeBuf = (uint8_t *)&txBuf[0];
140 i2cTransaction.writeCount = 2;
142 /* write header info */
143 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_HEADER_ADDR)>>8);
144 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_HEADER_ADDR);
145 i2cTransaction.readCount = 0;
146 idx = 2;
147 for (i = 0; i<BOARD_EEPROM_HEADER_LENGTH; i++) txBuf[idx++] = info->header[i];
148 for (i = 0; i<BOARD_EEPROM_BOARD_NAME_LENGTH; i++) txBuf[idx++] = info->boardName[i];
149 for (i = 0; i<BOARD_EEPROM_VERSION_ADDR; i++) txBuf[idx++] = info->version[i];
150 for (i = 0; i<BOARD_EEPROM_SERIAL_NO_LENGTH; i++) txBuf[idx++] = info->serialNum[i];
151 status = I2C_transfer(handle, &i2cTransaction);
152 if (status == false)
153 {
154 ret = BOARD_I2C_TRANSFER_FAIL;
155 return ret;
156 }
157 info->header[BOARD_EEPROM_HEADER_LENGTH] = '\0';
159 return ret;
160 }