[processor-sdk/performance-audio-sr.git] / psdk_cust / pdk_k2g_1_0_1_2_eng / packages / ti / board / src / idkAM572x / idkAM572x_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 I2C_close(handle);
71 Board_obj.i2cHandle = NULL;
72 return ret;
73 }
74 info->header[BOARD_EEPROM_HEADER_LENGTH] = '\0';
76 /* Get board name */
77 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_BOARD_NAME_ADDR)>>8);
78 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_BOARD_NAME_ADDR);
79 i2cTransaction.readBuf = (uint8_t *) info->boardName;
80 i2cTransaction.readCount = BOARD_EEPROM_BOARD_NAME_LENGTH;
81 status = I2C_transfer(handle, &i2cTransaction);
82 if (status == false)
83 {
84 ret = BOARD_I2C_TRANSFER_FAIL;
85 I2C_close(handle);
86 Board_obj.i2cHandle = NULL;
87 return ret;
88 }
89 info->boardName[BOARD_EEPROM_BOARD_NAME_LENGTH] = '\0';
91 /* Get board version */
92 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_VERSION_ADDR)>>8);
93 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_VERSION_ADDR);
94 i2cTransaction.readBuf = (uint8_t *) info->version;
95 i2cTransaction.readCount = BOARD_EEPROM_VERSION_LENGTH;
96 status = I2C_transfer(handle, &i2cTransaction);
97 if (status == false)
98 {
99 ret = BOARD_I2C_TRANSFER_FAIL;
100 I2C_close(handle);
101 Board_obj.i2cHandle = NULL;
102 return ret;
103 }
104 info->version[BOARD_EEPROM_VERSION_LENGTH] = '\0';
106 /* Get header info */
107 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_SERIAL_NO_ADDR)>>8);
108 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_SERIAL_NO_ADDR);
109 i2cTransaction.readBuf = (uint8_t *) info->serialNum;
110 i2cTransaction.readCount = BOARD_EEPROM_SERIAL_NO_LENGTH;
111 status = I2C_transfer(handle, &i2cTransaction);
112 if (status == false)
113 {
114 ret = BOARD_I2C_TRANSFER_FAIL;
115 I2C_close(handle);
116 Board_obj.i2cHandle = NULL;
117 return ret;
118 }
119 info->serialNum[BOARD_EEPROM_SERIAL_NO_LENGTH] = '\0';
121 I2C_close(handle);
122 Board_obj.i2cHandle = NULL;
124 return ret;
125 }
127 /*
128 * ======== Board_writeIDInfo ========
129 */
130 Board_STATUS Board_writeIDInfo(Board_IDInfo *info) {
131 Board_STATUS ret = BOARD_SOK;
132 I2C_Transaction i2cTransaction;
133 I2C_Handle handle = NULL;
134 char txBuf[2+BOARD_EEPROM_HEADER_LENGTH+BOARD_EEPROM_BOARD_NAME_LENGTH
135 +BOARD_EEPROM_VERSION_ADDR+BOARD_EEPROM_SERIAL_NO_LENGTH];
136 bool status;
137 int i, idx;
139 /* If handle not opened yet, init i2c */
140 if (Board_obj.i2cHandle == NULL)
141 {
142 ret = Board_internalInitI2C();
143 }
144 if (ret != BOARD_SOK)
145 return ret;
147 handle = Board_obj.i2cHandle;
149 i2cTransaction.slaveAddress = BOARD_I2C_EEPROM_ADDR;
150 i2cTransaction.writeBuf = (uint8_t *)&txBuf[0];
151 i2cTransaction.writeCount = 2;
153 /* write header info */
154 txBuf[0] = (char)(((uint32_t) 0xFF00 & BOARD_EEPROM_HEADER_ADDR)>>8);
155 txBuf[1] = (char)((uint32_t) 0xFF & BOARD_EEPROM_HEADER_ADDR);
156 i2cTransaction.readCount = 0;
157 idx = 2;
158 for (i = 0; i<BOARD_EEPROM_HEADER_LENGTH; i++) txBuf[idx++] = info->header[i];
159 for (i = 0; i<BOARD_EEPROM_BOARD_NAME_LENGTH; i++) txBuf[idx++] = info->boardName[i];
160 for (i = 0; i<BOARD_EEPROM_VERSION_ADDR; i++) txBuf[idx++] = info->version[i];
161 for (i = 0; i<BOARD_EEPROM_SERIAL_NO_LENGTH; i++) txBuf[idx++] = info->serialNum[i];
162 status = I2C_transfer(handle, &i2cTransaction);
163 if (status == false)
164 {
165 ret = BOARD_I2C_TRANSFER_FAIL;
166 I2C_close(handle);
167 Board_obj.i2cHandle = NULL;
168 return ret;
169 }
170 info->header[BOARD_EEPROM_HEADER_LENGTH] = '\0';
172 I2C_close(handle);
173 Board_obj.i2cHandle = NULL;
175 return ret;
176 }