1 /*\r
2 * Copyright (c) 2015, Texas Instruments Incorporated\r
3 * All rights reserved.\r
4 *\r
5 * Redistribution and use in source and binary forms, with or without\r
6 * modification, are permitted provided that the following conditions\r
7 * are met:\r
8 *\r
9 * * Redistributions of source code must retain the above copyright\r
10 * notice, this list of conditions and the following disclaimer.\r
11 *\r
12 * * Redistributions in binary form must reproduce the above copyright\r
13 * notice, this list of conditions and the following disclaimer in the\r
14 * documentation and/or other materials provided with the distribution.\r
15 *\r
16 * * Neither the name of Texas Instruments Incorporated nor the names of\r
17 * its contributors may be used to endorse or promote products derived\r
18 * from this software without specific prior written permission.\r
19 *\r
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31 *\r
32 */\r
33 \r
34 /**\r
35 * \file audio_dc_config.c\r
36 *\r
37 * \brief Configures Audio daughter card HW modules\r
38 *\r
39 */\r
40 \r
41 #include "audio_dc_cfg.h"\r
42 \r
43 /**\r
44 * \brief Initializes ADC module\r
45 *\r
46 * This function initializes and configures the ADC modules\r
47 * on audio daughter card\r
48 *\r
49 * \param devId [IN] ADC Device Id\r
50 * \param config [IN] ADC configuration parameters\r
51 *\r
52 * \return Cmbk2g_EOK on Success or error code\r
53 */\r
54 Cmbk2g_STATUS audioAdcConfig(Cmbk2gAdcDevId devId, Cmbk2gAdcConfig *config)\r
55 {\r
56 Cmbk2g_STATUS status;\r
57 \r
58 if(config == NULL)\r
59 {\r
60 IFPRINT(cmbk2g_write("Invalid Inputs\n"));\r
61 return (Cmbk2g_EINVALID);\r
62 }\r
63 \r
64 /* Initialize all the HW instances of ADC */\r
65 //status = platformAudioAdcInit(devId);\r
66 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcInit((Cmbk2gAdcDevId)devId);\r
67 if(status != Cmbk2g_EOK)\r
68 {\r
69 IFPRINT(cmbk2g_write("audioAdcConfig : platformaudioAdcConfig Failed\n"));\r
70 return (status);\r
71 }\r
72 \r
73 /* Set ADC channel gain */\r
74 //status = platformAudioAdcSetGain(devId, ADC_CH_ALL, config->gain);\r
75 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcSetGain((Cmbk2gAdcDevId)devId, (Cmbk2gAdcChanId)CMBK2G_ADC_CH_ALL, config->gain);\r
76 if(status != Cmbk2g_EOK)\r
77 {\r
78 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcSetGain Failed\n"));\r
79 return (status);\r
80 }\r
81 \r
82 /* Configure Left input mux for ADC1L */\r
83 //status = platformAudioAdcSetLeftInputMux(devId, ADC_CH1_LEFT, config->adc1LMux);\r
84 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcSetLeftInputMux((Cmbk2gAdcDevId)devId, (Cmbk2gAdcChanId)CMBK2G_ADC_CH1_LEFT, (Cmbk2gAdcLeftInputMux)(config->adc1LMux));\r
85 if(status != Cmbk2g_EOK)\r
86 {\r
87 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcSetLeftInputMux Failed\n"));\r
88 return (status);\r
89 }\r
90 \r
91 /* Configure Left input mux for ADC2L*/\r
92 //status = platformAudioAdcSetLeftInputMux(devId, ADC_CH2_LEFT, config->adc2LMux);\r
93 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcSetLeftInputMux((Cmbk2gAdcDevId)devId, (Cmbk2gAdcChanId)CMBK2G_ADC_CH2_LEFT, (Cmbk2gAdcLeftInputMux)(config->adc2LMux));\r
94 if(status != Cmbk2g_EOK)\r
95 {\r
96 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcSetLeftInputMux Failed\n"));\r
97 return (status);\r
98 }\r
99 \r
100 /* Configure Right input mux for ADC1R */\r
101 //status = platformAudioAdcSetRightInputMux(devId, ADC_CH1_RIGHT, config->adc1RMux);\r
102 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcSetRightInputMux((Cmbk2gAdcDevId)devId, (Cmbk2gAdcChanId)CMBK2G_ADC_CH1_RIGHT, (Cmbk2gAdcRightInputMux)(config->adc1RMux));\r
103 if(status != Cmbk2g_EOK)\r
104 {\r
105 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcSetRightInputMux Failed\n"));\r
106 return (status);\r
107 }\r
108 \r
109 /* Configure Right input mux for ADC2R */\r
110 //status = platformAudioAdcSetRightInputMux(devId, ADC_CH2_RIGHT, config->adc2RMux);\r
111 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcSetRightInputMux((Cmbk2gAdcDevId)devId, (Cmbk2gAdcChanId)CMBK2G_ADC_CH2_RIGHT, (Cmbk2gAdcRightInputMux)(config->adc2RMux));\r
112 if(status != Cmbk2g_EOK)\r
113 {\r
114 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcSetRightInputMux Failed\n"));\r
115 return (status);\r
116 }\r
117 \r
118 /* Configure audio data format */\r
119 //status = platformAudioAdcDataConfig(devId, config->wlen, config->format);\r
120 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcDataConfig((Cmbk2gAdcDevId)devId, (Cmbk2gAdcRxWordLen)(config->wlen), (Cmbk2gAdcDataFormat)(config->format));\r
121 if(status != Cmbk2g_EOK)\r
122 {\r
123 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcDataConfig Failed\n"));\r
124 return (status);\r
125 }\r
126 \r
127 /* Configure all the interrupts */\r
128 //status = platformAudioAdcConfigIntr(devId, ADC_INTR_ALL, config->intEnable);\r
129 status = (Cmbk2g_STATUS)cmbk2g_AudioAdcConfigIntr((Cmbk2gAdcDevId)devId, (Cmbk2gAdcIntr)CMBK2G_ADC_INTR_ALL, config->intEnable);\r
130 if(status != Cmbk2g_EOK)\r
131 {\r
132 IFPRINT(cmbk2g_write("audioAdcConfig : platformAudioAdcConfigIntr Failed\n"));\r
133 return (status);\r
134 }\r
135 \r
136 return (status);\r
137 }\r
138 \r
139 /**\r
140 * \brief Initializes DAC module\r
141 *\r
142 * This function initializes and configures the DAC modules\r
143 * on audio daughter card\r
144 *\r
145 * \param devId [IN] DAC Device Id\r
146 * \param config [IN] DAC configuration parameters\r
147 *\r
148 * \return Cmbk2g_EOK on Success or error code\r
149 */\r
150 #if CMBK2G_AUDIO_DAC\r
151 Cmbk2g_STATUS audioDacConfig(Cmbk2gDacDevId devId, Cmbk2gDacConfig *config)\r
152 {\r
153 Cmbk2g_STATUS status;\r
154 \r
155 if(config == NULL)\r
156 {\r
157 IFPRINT(cmbk2g_write("Invalid Inputs\n"));\r
158 return (Cmbk2g_EINVALID);\r
159 }\r
160 \r
161 /* Initialize Audio DAC */\r
162 //status = platformAudioDacInit(devId);\r
163 status = (Cmbk2g_STATUS)cmbk2g_AudioDacInit((Cmbk2gDacDevId)devId);\r
164 if(status != Cmbk2g_EOK)\r
165 {\r
166 IFPRINT(cmbk2g_write("audioDacConfig : platformaudioDacConfig Failed\n"));\r
167 return (status);\r
168 }\r
169 \r
170 #if 0\r
171 /* Configure AMUTE control event */\r
172 //status = platformAudioDacAmuteCtrl(devId, config->amuteCtrl, config->amuteEnable);\r
173 status = (Cmbk2g_STATUS)cmbk2g_AudioDacAmuteCtrl((Cmbk2gDacDevId)devId, (Cmbk2gDacAmuteCtrl)(config->amuteCtrl), config->amuteEnable);\r
174 if(status != Cmbk2g_EOK)\r
175 {\r
176 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacAmuteCtrl Failed\n"));\r
177 return (status);\r
178 }\r
179 \r
180 /* Set sampling mode */\r
181 //status = platformAudioDacSetSamplingMode(devId, config->samplingMode);\r
182 status = (Cmbk2g_STATUS)cmbk2g_AudioDacSetSamplingMode((Cmbk2gDacDevId)devId, (Cmbk2gDacSamplingMode)(config->samplingMode));\r
183 if(status != Cmbk2g_EOK)\r
184 {\r
185 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacSetSamplingMode Failed\n"));\r
186 return (status);\r
187 }\r
188 \r
189 /* Set data format */\r
190 //status = platformAudioDacSetDataFormat(devId, config->dataFormat);\r
191 status = (Cmbk2g_STATUS)cmbk2g_AudioDacSetDataFormat((Cmbk2gDacDevId)devId, (Cmbk2gDacDataFormat)(config->dataFormat));\r
192 if(status != Cmbk2g_EOK)\r
193 {\r
194 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacSetDataFormat Failed\n"));\r
195 return (status);\r
196 }\r
197 \r
198 /* Enable soft mute control */\r
199 //status = platformAudioDacSoftMuteCtrl(devId, DAC_CHAN_ALL, config->softMuteEnable);\r
200 status = (Cmbk2g_STATUS)cmbk2g_AudioDacSoftMuteCtrl((Cmbk2gDacDevId)devId, (Cmbk2gDacChanId)CMBK2G_DAC_CHAN_ALL, config->softMuteEnable);\r
201 if(status != Cmbk2g_EOK)\r
202 {\r
203 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacSoftMuteCtrl Failed\n"));\r
204 return (status);\r
205 }\r
206 \r
207 /* Set attenuation mode */\r
208 //status = platformAudioDacSetAttnMode(devId, config->attnMode);\r
209 status = (Cmbk2g_STATUS)cmbk2g_AudioDacSetAttnMode((Cmbk2gDacDevId)devId, (Cmbk2gDacAttnMode)(config->attnMode));\r
210 if(status != Cmbk2g_EOK)\r
211 {\r
212 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacSetAttnMode Failed\n"));\r
213 return (status);\r
214 }\r
215 \r
216 /* Set De-emphasis control */\r
217 //status = platformAudioDacDeempCtrl(devId, config->deempCtrl);\r
218 status = (Cmbk2g_STATUS)cmbk2g_AudioDacDeempCtrl((Cmbk2gDacDevId)devId, (Cmbk2gDacDeempCtrl)(config->deempCtrl));\r
219 if(status != Cmbk2g_EOK)\r
220 {\r
221 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacDeempCtrl Failed\n"));\r
222 return (status);\r
223 }\r
224 \r
225 /* Set DAC volume */\r
226 //status = platformAudioDacSetVolume(devId, DAC_CHAN_ALL, config->volume);\r
227 status = (Cmbk2g_STATUS)cmbk2g_AudioDacSetVolume((Cmbk2gDacDevId)devId, (Cmbk2gDacChanId)CMBK2G_DAC_CHAN_ALL, config->volume);\r
228 if(status != Cmbk2g_EOK)\r
229 {\r
230 IFPRINT(cmbk2g_write("audioDacConfig : platformAudioDacSetVolume Failed\n"));\r
231 return (status);\r
232 }\r
233 #endif\r
234 return (status);\r
235 }\r
236 #endif\r
237 /* Nothing past this point */\r