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 };
57 
58 /*! @brief I2S Bridge shared data out mask */
59 enum _i2s_bridge_dataout_mask
60 {
61     kI2S_BRIDGE_Flexcomm0DataOut = SYSCTL1_SHAREDCTRLSET_FC0DATAOUTEN_MASK, /*!< FLEXCOMM0 DATAOUT Output Enable */
62     kI2S_BRIDGE_Flexcomm1DataOut = SYSCTL1_SHAREDCTRLSET_FC1DATAOUTEN_MASK, /*!< FLEXCOMM1 DATAOUT Output Enable */
63     kI2S_BRIDGE_Flexcomm2DataOut = SYSCTL1_SHAREDCTRLSET_FC2DATAOUTEN_MASK, /*!< FLEXCOMM2 DATAOUT Output Enable */
64     kI2S_BRIDGE_Flexcomm3DataOut = SYSCTL1_SHAREDCTRLSET_FC3DATAOUTEN_MASK, /*!< FLEXCOMM3 DATAOUT Output Enable */
65 };
66 /*******************************************************************************
67  * API
68  ******************************************************************************/
69 
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73 
74 /*!
75  * @name I2S Bridge share signal configure
76  * @{
77  */
78 
79 /*!
80  * @brief I2S Bridge share set selection for flexcomm instance.
81  *
82 
83  * @param flexCommIndex index of flexcomm, refer to RM for supported FLEXCOMM instances.
84  * @param sckSet share set for sck, refer to _i2s_bridge_share_set_index
85  * @param wsSet share set for ws, refer to _i2s_bridge_share_set_index
86  * @param dataInSet share set for data in, refer to _i2s_bridge_share_set_index
87  * @param dataOutSet share set for data out, refer to _i2s_bridge_share_set_index
88  *
89  */
90 void I2S_BRIDGE_SetFlexcommShareSet(
91     uint32_t flexCommIndex, uint32_t sckSet, uint32_t wsSet, uint32_t dataInSet, uint32_t dataOutSet);
92 
93 /*!
94  * @brief I2S Bridge share set selection for a separate signal
95  *
96  * @param flexCommIndex index of flexcomm, refer to RM for supported FLEXCOMM instances.
97  * @param signal The signal need to be configured.
98  * @param set share set for the signal, refer to  #_i2s_bridge_share_set_index
99  *
100  */
101 void I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex, i2s_bridge_signal_t signal, uint32_t set);
102 
103 /*!
104  * @brief I2S Bridge share set source configure
105  *
106  * @param setIndex index of share set, refer #_i2s_bridge_share_set_index
107  * @param sckShareSrc sck source for this share set, refer to _i2s_bridge_share_src
108  * @param wsShareSrc ws source for this share set, refer to _i2s_bridge_share_src
109  * @param dataInShareSrc data in source for this share set, refer to _i2s_bridge_share_src
110  * @param dataOutShareSrc data out source for this share set, refer to _i2s_bridge_dataout_mask
111  *
112  */
113 void I2S_BRIDGE_SetShareSetSrc(
114     uint32_t setIndex, uint32_t sckShareSrc, uint32_t wsShareSrc, uint32_t dataInShareSrc, uint32_t dataOutShareSrc);
115 
116 /*!
117  * @brief I2S Bridge shared signal source selection for a share set.
118  *
119  * @param setIndex index of share set, refer to _i2s_bridge_share_set_index
120  * @param signal the shared signal to be configured
121  * @param shareSrc the signal selection, refer to _i2s_bridge_share_src.
122  *
123  */
124 void I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex, i2s_bridge_signal_t signal, uint32_t shareSrc);
125 
126 /* @} */
127 
128 #ifdef __cplusplus
129 }
130 #endif
131 
132 /*@}*/
133 
134 #endif /* _FSL_I2S_BRIDGE_H_ */
135