1 /*
2  * Copyright 2023 NXP
3  * All rights reserved.
4  *
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #ifndef _FSL_I2S_BRIDGE_H_
10 #define _FSL_I2S_BRIDGE_H_
11 
12 #include "fsl_common.h"
13 /*******************************************************************************
14  * Definitions
15  ******************************************************************************/
16 
17 /*!
18  * @addtogroup i2s_bridge
19  * @{
20  */
21 
22 /*******************************************************************************
23  * Definitions
24  ******************************************************************************/
25 
26 /*! @name Driver version */
27 /*@{*/
28 /*! @brief Group I2S Bridge driver version for SDK */
29 #define FSL_I2S_BRIDGE_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
30 /*@}*/
31 
32 /*! @brief I2S Bridge share set */
33 enum _i2s_bridge_share_set_index
34 {
35     kI2S_BRIDGE_OriginalSignal = 0U, /*!< Original FLEXCOMM I2S signals */
36     kI2S_BRIDGE_ShareSet0      = 1U, /*!< share set 0 signals */
37     kI2S_BRIDGE_ShareSet1      = 2U, /*!< share set 1 signals */
38 };
39 
40 /*! @brief I2S signal */
41 typedef enum _i2s_bridge_signal
42 {
43     kI2S_BRIDGE_SignalSCK     = 0U, /*!< SCK signal */
44     kI2S_BRIDGE_SignalWS      = 1U, /*!< WS signal */
45     kI2S_BRIDGE_SignalDataIn  = 2U, /*!< Data in signal */
46     kI2S_BRIDGE_SignalDataOut = 3U, /*!< Data out signal */
47 } i2s_bridge_signal_t;
48 
49 /*! @brief I2S signal source */
50 enum _i2s_bridge_share_src
51 {
52     kI2S_BRIDGE_Flexcomm0 = 0U, /*!< Shared signal comes from FLEXCOMM0 */
53     kI2S_BRIDGE_Flexcomm1 = 1U, /*!< Shared signal comes from FLEXCOMM1 */
54     kI2S_BRIDGE_Flexcomm2 = 2U, /*!< Shared signal comes from FLEXCOMM2 */
55     kI2S_BRIDGE_Flexcomm3 = 3U, /*!< Shared signal comes from FLEXCOMM3 */
56     kI2S_BRIDGE_Flexcomm4 = 4U, /*!< Shared signal comes from FLEXCOMM4 */
57     kI2S_BRIDGE_Flexcomm5 = 5U, /*!< Shared signal comes from FLEXCOMM5 */
58     kI2S_BRIDGE_Flexcomm6 = 6U, /*!< Shared signal comes from FLEXCOMM6 */
59     kI2S_BRIDGE_Flexcomm7 = 7U, /*!< Shared signal comes from FLEXCOMM7 */
60 };
61 
62 /*! @brief I2S Bridge shared data out mask */
63 enum _i2s_bridge_dataout_mask
64 {
65     kI2S_BRIDGE_Flexcomm0DataOut = SYSCTL1_SHAREDCTRLSET_FC0DATAOUTEN_MASK, /*!< FLEXCOMM0 DATAOUT Output Enable */
66     kI2S_BRIDGE_Flexcomm1DataOut = SYSCTL1_SHAREDCTRLSET_FC1DATAOUTEN_MASK, /*!< FLEXCOMM1 DATAOUT Output Enable */
67     kI2S_BRIDGE_Flexcomm2DataOut = SYSCTL1_SHAREDCTRLSET_F20DATAOUTEN_MASK, /*!< FLEXCOMM2 DATAOUT Output Enable */
68     kI2S_BRIDGE_Flexcomm3DataOut = SYSCTL1_SHAREDCTRLSET_FC3DATAOUTEN_MASK, /*!< FLEXCOMM3 DATAOUT Output Enable */
69     kI2S_BRIDGE_Flexcomm4DataOut = SYSCTL1_SHAREDCTRLSET_FC4DATAOUTEN_MASK, /*!< FLEXCOMM4 DATAOUT Output Enable */
70     kI2S_BRIDGE_Flexcomm5DataOut = SYSCTL1_SHAREDCTRLSET_FC5DATAOUTEN_MASK, /*!< FLEXCOMM5 DATAOUT Output Enable */
71     kI2S_BRIDGE_Flexcomm6DataOut = SYSCTL1_SHAREDCTRLSET_FC6DATAOUTEN_MASK, /*!< FLEXCOMM6 DATAOUT Output Enable */
72     kI2S_BRIDGE_Flexcomm7DataOut = SYSCTL1_SHAREDCTRLSET_FC7DATAOUTEN_MASK, /*!< FLEXCOMM7 DATAOUT Output Enable */
73 };
74 /*******************************************************************************
75  * API
76  ******************************************************************************/
77 
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81 
82 /*!
83  * @name I2S Bridge share signal configure
84  * @{
85  */
86 
87 /*!
88  * @brief I2S Bridge share set selection for flexcomm instance.
89  *
90 
91  * @param flexCommIndex index of flexcomm, refer to RM for supported FLEXCOMM instances.
92  * @param sckSet share set for sck, refer to _i2s_bridge_share_set_index
93  * @param wsSet share set for ws, refer to _i2s_bridge_share_set_index
94  * @param dataInSet share set for data in, refer to _i2s_bridge_share_set_index
95  * @param dataOutSet share set for data out, refer to _i2s_bridge_share_set_index
96  *
97  */
98 void I2S_BRIDGE_SetFlexcommShareSet(
99     uint32_t flexCommIndex, uint32_t sckSet, uint32_t wsSet, uint32_t dataInSet, uint32_t dataOutSet);
100 
101 /*!
102  * @brief I2S Bridge share set selection for a separate signal
103  *
104  * @param flexCommIndex index of flexcomm, refer to RM for supported FLEXCOMM instances.
105  * @param signal The signal need to be configured.
106  * @param set share set for the signal, refer to  #_i2s_bridge_share_set_index
107  *
108  */
109 void I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex, i2s_bridge_signal_t signal, uint32_t set);
110 
111 /*!
112  * @brief I2S Bridge share set source configure
113  *
114  * @param setIndex index of share set, refer #_i2s_bridge_share_set_index
115  * @param sckShareSrc sck source for this share set, refer to _i2s_bridge_share_src
116  * @param wsShareSrc ws source for this share set, refer to _i2s_bridge_share_src
117  * @param dataInShareSrc data in source for this share set, refer to _i2s_bridge_share_src
118  * @param dataOutShareSrc data out source for this share set, refer to _i2s_bridge_dataout_mask
119  *
120  */
121 void I2S_BRIDGE_SetShareSetSrc(
122     uint32_t setIndex, uint32_t sckShareSrc, uint32_t wsShareSrc, uint32_t dataInShareSrc, uint32_t dataOutShareSrc);
123 
124 /*!
125  * @brief I2S Bridge shared signal source selection for a share set.
126  *
127  * @param setIndex index of share set, refer to _i2s_bridge_share_set_index
128  * @param signal the shared signal to be configured
129  * @param shareSrc the signal selection, refer to _i2s_bridge_share_src.
130  *
131  */
132 void I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex, i2s_bridge_signal_t signal, uint32_t shareSrc);
133 
134 /* @} */
135 
136 #ifdef __cplusplus
137 }
138 #endif
139 
140 /*@}*/
141 
142 #endif /* _FSL_I2S_BRIDGE_H_ */
143