1 /*
2  * Copyright 2023 NXP
3  * All rights reserved.
4  *
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #include "fsl_i2s_bridge.h"
10 
11 /*******************************************************************************
12  * Definitions
13  ******************************************************************************/
14 
15 /* Component ID definition, used by tools. */
16 #ifndef FSL_COMPONENT_ID
17 #define FSL_COMPONENT_ID "platform.drivers.i2s_bridge"
18 #endif
19 
20 /*******************************************************************************
21  * Prototypes
22  ******************************************************************************/
23 
24 /*******************************************************************************
25  * Variables
26  ******************************************************************************/
27 
28 /*******************************************************************************
29  * Code
30  ******************************************************************************/
I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex,i2s_bridge_signal_t signal,uint32_t set)31 void I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex, i2s_bridge_signal_t signal, uint32_t set)
32 {
33     uint32_t tempReg = SYSCTL1->FCCTRLSEL[flexCommIndex];
34 
35     tempReg &= ~((uint32_t)SYSCTL1_FCCTRLSEL_SCKINSEL_MASK << ((uint32_t)signal * 8U));
36     tempReg |= set << ((uint32_t)signal * 8U);
37 
38     SYSCTL1->FCCTRLSEL[flexCommIndex] = tempReg;
39 }
40 
I2S_BRIDGE_SetFlexcommShareSet(uint32_t flexCommIndex,uint32_t sckSet,uint32_t wsSet,uint32_t dataInSet,uint32_t dataOutSet)41 void I2S_BRIDGE_SetFlexcommShareSet(
42     uint32_t flexCommIndex, uint32_t sckSet, uint32_t wsSet, uint32_t dataInSet, uint32_t dataOutSet)
43 {
44     uint32_t tempReg = SYSCTL1->FCCTRLSEL[flexCommIndex];
45 
46     tempReg &= ~(SYSCTL1_FCCTRLSEL_SCKINSEL_MASK | SYSCTL1_FCCTRLSEL_WSINSEL_MASK | SYSCTL1_FCCTRLSEL_DATAINSEL_MASK |
47                  SYSCTL1_FCCTRLSEL_DATAOUTSEL_MASK);
48     tempReg |= SYSCTL1_FCCTRLSEL_SCKINSEL(sckSet) | SYSCTL1_FCCTRLSEL_WSINSEL(wsSet) |
49                SYSCTL1_FCCTRLSEL_DATAINSEL(dataInSet) | SYSCTL1_FCCTRLSEL_DATAOUTSEL(dataOutSet);
50 
51     SYSCTL1->FCCTRLSEL[flexCommIndex] = tempReg;
52 }
53 
I2S_BRIDGE_SetShareSetSrc(uint32_t setIndex,uint32_t sckShareSrc,uint32_t wsShareSrc,uint32_t dataInShareSrc,uint32_t dataOutShareSrc)54 void I2S_BRIDGE_SetShareSetSrc(
55     uint32_t setIndex, uint32_t sckShareSrc, uint32_t wsShareSrc, uint32_t dataInShareSrc, uint32_t dataOutShareSrc)
56 {
57     if (setIndex > 0U)
58     {
59         uint32_t tempReg = 0U;
60 
61         /* WS,SCK,DATA IN */
62         tempReg |= SYSCTL1_SHAREDCTRLSET_SHAREDSCKSEL(sckShareSrc) | SYSCTL1_SHAREDCTRLSET_SHAREDWSSEL(wsShareSrc) |
63                    SYSCTL1_SHAREDCTRLSET_SHAREDDATASEL(dataInShareSrc);
64         /* data out */
65         tempReg |= dataOutShareSrc;
66 
67         SYSCTL1->SHAREDCTRLSET[setIndex - 1U] = tempReg;
68     }
69 }
70 
I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex,i2s_bridge_signal_t signal,uint32_t shareSrc)71 void I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex, i2s_bridge_signal_t signal, uint32_t shareSrc)
72 {
73     if (setIndex > 0U)
74     {
75         uint32_t tempReg = SYSCTL1->SHAREDCTRLSET[setIndex - 1U];
76 
77         if (signal == kI2S_BRIDGE_SignalDataOut)
78         {
79             tempReg |= 1UL << (SYSCTL1_SHAREDCTRLSET_FC0DATAOUTEN_SHIFT + shareSrc);
80         }
81         else
82         {
83             tempReg &= ~((uint32_t)SYSCTL1_SHAREDCTRLSET_SHAREDSCKSEL_MASK << ((uint32_t)signal * 4U));
84             tempReg |= shareSrc << ((uint32_t)signal * 4U);
85         }
86 
87         SYSCTL1->SHAREDCTRLSET[setIndex - 1U] = tempReg;
88     }
89 }
90