]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blob - psdk_cust/pdk_k2g_1_0_1_2_eng/packages/ti/board/src/idkAM437x/idkAM437x_pinmux.c
PASDK-319:Update PDK eng to 1.0.1.2.
[processor-sdk/performance-audio-sr.git] / psdk_cust / pdk_k2g_1_0_1_2_eng / packages / ti / board / src / idkAM437x / idkAM437x_pinmux.c
1 /**
2  *   @file  idkam437xx_pinmux.c
3  *
4  *   @brief
5  *      This is the pin configuration for IDK EVM AM437x.
6  *
7  *  \par
8  *  ============================================================================
9  *  @n   (C) Copyright 2009-2015, Texas Instruments, Inc.
10  *
11  *  Redistribution and use in source and binary forms, with or without
12  *  modification, are permitted provided that the following conditions
13  *  are met:
14  *
15  *    Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  *
18  *    Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the
21  *    distribution.
22  *
23  *    Neither the name of Texas Instruments Incorporated nor the names of
24  *    its contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  *  \par
40 */
42 #include <stdint.h>
43 #include <stdlib.h>
44 #include <stdio.h>
45 #include "board_internal.h"
46 #include "types.h"
47 #include "hw_types.h"
48 #include "chipdb.h"
49 #include "pinmux.h"
50 #include "error.h"
51 #include "am43xx_pinmux.h"
52 #include "debug.h"
54 extern uint32_t idkAM437x_icssPinMuxFlag;
56 Board_STATUS Board_pinmuxConfig (void)
57 {
58     int32_t status;
59     
60     /* UART */
61     status = PINMUXModuleConfig(CHIPDB_MOD_ID_UART, 0U, NULL);
62     
63     /* CPSW */
64     if((S_PASS == status) && (idkAM437x_icssPinMuxFlag == 0U))
65     {
66         status = PINMUXModuleConfig(CHIPDB_MOD_ID_CPSW, 0U, NULL);
67     }
69     /* I2C */
70     if(S_PASS == status)
71     {
72         status = PINMUXModuleConfig(CHIPDB_MOD_ID_I2C, 0U, NULL);
73     }
74     if(S_PASS == status)
75     {
76         status = PINMUXModuleConfig(CHIPDB_MOD_ID_I2C, 2U, NULL);
77     } 
79     /* MMCSD */
80     if((S_PASS == status) && (idkAM437x_icssPinMuxFlag == 0U))
81     {
82         status = PINMUXModuleConfig(CHIPDB_MOD_ID_MMCSD, 0U, NULL);
83     }
85     /* MCSPI */
86     if(S_PASS == status)
87     {
88         status = PINMUXModuleConfig(CHIPDB_MOD_ID_MCSPI, 0U, NULL);
89     }
90     if(S_PASS == status)
91     {
92         status = PINMUXModuleConfig(CHIPDB_MOD_ID_MCSPI, 1U, NULL);
93     }
95     /* QSPI */
96     if(S_PASS == status)
97     {
98         status = PINMUXModuleConfig(CHIPDB_MOD_ID_QSPI, 0U, NULL);
99     }
100     
101     /* VPFE */
102     if(S_PASS == status)
103     {
104         status = PINMUXModuleConfig(CHIPDB_MOD_ID_VPFE, 0U, NULL);
105     }
106     if(S_PASS == status)
107     {
108         status = PINMUXModuleConfig(CHIPDB_MOD_ID_VPFE, 1U, NULL);
109     }
111     /*GPIO*/
112     if(S_PASS == status)
113     {
114         status = PINMUXModuleConfig(CHIPDB_MOD_ID_GPIO, 0U, NULL);
115     }
116     if(S_PASS == status)
117     {
118         status = PINMUXModuleConfig(CHIPDB_MOD_ID_GPIO, 2U, NULL);
119     }
120     if(S_PASS == status)
121     {
122         status = PINMUXModuleConfig(CHIPDB_MOD_ID_GPIO, 3U, NULL);
123     }
124     if(S_PASS == status)
125     {
126         status = PINMUXModuleConfig(CHIPDB_MOD_ID_GPIO, 4U, NULL);
127     }
128     if(S_PASS == status)
129     {
130         status = PINMUXModuleConfig(CHIPDB_MOD_ID_GPIO, 5U, NULL);
131     }
133     /*PWMSS*/
134     if(S_PASS == status)
135     {
136         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 0U, NULL);
137     }
138     if(S_PASS == status)
139     {
140         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 2U, NULL);
141     }
142     if(S_PASS == status)
143     {
144         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 3U, NULL);
145     }
146     if(S_PASS == status)
147     {
148         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 4U, NULL);
149     }
150     if(S_PASS == status)
151     {
152         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PWMSS, 5U, NULL);
153     }
156     /*ADC*/
157     if(S_PASS == status)
158     {
159         status = PINMUXModuleConfig(CHIPDB_MOD_ID_ADC0, 0U, NULL);
160     }
162     /* PRU_ICSS */
163     if((S_PASS == status) && (idkAM437x_icssPinMuxFlag == 1U))
164     {
165         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PRU_ICSS, 0U, NULL);
166     }
167     if((S_PASS == status) && (idkAM437x_icssPinMuxFlag == 1U))
168     {
169         status = PINMUXModuleConfig(CHIPDB_MOD_ID_PRU_ICSS, 1U, NULL);
170     }
172     /* USB */
173     if(S_PASS == status)
174     {
175         status = PINMUXModuleConfig(CHIPDB_MOD_ID_USB, 0U, NULL);
176     }
177     if(S_PASS == status)
178     {
179         status = PINMUXModuleConfig(CHIPDB_MOD_ID_USB, 1U, NULL);
180     }
181     /* MCASP */
182     if(S_PASS == status)
183     {
184         status = PINMUXModuleConfig(CHIPDB_MOD_ID_MCASP, 0U, NULL);
185     }
190     return BOARD_SOK;
194 int32_t PINMUXModuleConfig(chipdbModuleID_t moduleId, uint32_t instNum, 
195                                                               void* pParam1)
197     pinmuxModuleCfg_t* pModuleData = NULL;
198     pinmuxPerCfg_t* pInstanceData = NULL;
199     volatile const pinmuxBoardCfg_t* pPinmuxData  = NULL;
200     uint32_t ctrlModBase = CHIPDBBaseAddress(CHIPDB_MOD_ID_CONTROL_MODULE, 0);
201     int32_t status = E_FAIL;
202     uint32_t index = 0;
203     
204     /* Get module Data */
205     pPinmuxData = gIdkevmPinmuxData; 
206  
207     ASSERT(NULL != pPinmuxData);
208         
209     status = E_INVALID_MODULE_ID;
210     for(index = 0; ((S_PASS != status) && 
211        (CHIPDB_MOD_ID_INVALID != pPinmuxData[index].moduleId)); index++)
212     {
213         if(pPinmuxData[index].moduleId == moduleId)
214         {
215             pModuleData = pPinmuxData[index].modulePinCfg;
216             ASSERT(NULL != pModuleData);
217             status = S_PASS;
218         }
219     }
221     /* Get instance Data */
222     if(S_PASS == status)
223     {
224         status = E_INST_NOT_SUPP;
225         for(index = 0; ((S_PASS != status) && 
226           (CHIPDB_INVALID_INSTANCE_NUM != pModuleData[index].modInstNum)); index++)
227         {
228             if(pModuleData[index].modInstNum == instNum)
229             {
230                 pInstanceData = pModuleData[index].instPins;
231                 ASSERT(NULL != pInstanceData)
232                 status = S_PASS;
233             }
234         }
235     }
236         
237     /* Configure Pinmux */
238     if(S_PASS == status)
239     {
240                 for(index = 0; ((uint16_t)PINMUX_INVALID_PIN != 
241                                                                           pInstanceData[index].pinOffset); index++)
242                 {
243                         if(NULL != pParam1)
244                         {
245                                 if(pInstanceData[index].optParam == *(uint16_t*)pParam1)
246                                 {
247                                         HW_WR_REG32((ctrlModBase + pInstanceData[index].pinOffset),
248                                                                 pInstanceData[index].pinSettings);
249                     status = S_PASS;
250                                         break;
251                                 }
252                         }
253                         else
254                         {
255                                 HW_WR_REG32((ctrlModBase + pInstanceData[index].pinOffset),
256                                                                 pInstanceData[index].pinSettings);
257                         }
258                 }
259                 if((NULL != pParam1) && ((uint16_t)PINMUX_INVALID_PIN == pInstanceData[index].pinOffset))
260                 {
261                         status = E_FAIL;
262                 }
263     }
264     
265     return status;