1 /*
2  * Copyright (c) 2015, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #include "fsl_dmamux.h"
10 
11 /*******************************************************************************
12  * Definitions
13  ******************************************************************************/
14 
15 /*******************************************************************************
16  * Prototypes
17  ******************************************************************************/
18 
19 /*!
20  * @brief Get instance number for DMAMUX.
21  *
22  * @param base DMAMUX peripheral base address.
23  */
24 static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base);
25 
26 /*******************************************************************************
27  * Variables
28  ******************************************************************************/
29 
30 /*! @brief Array to map DMAMUX instance number to base pointer. */
31 static DMAMUX_Type *const s_dmamuxBases[] = DMAMUX_BASE_PTRS;
32 
33 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
34 /*! @brief Array to map DMAMUX instance number to clock name. */
35 static const clock_ip_name_t s_dmamuxClockName[] = DMAMUX_CLOCKS;
36 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
37 
38 /*******************************************************************************
39  * Code
40  ******************************************************************************/
DMAMUX_GetInstance(DMAMUX_Type * base)41 static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base)
42 {
43     uint32_t instance;
44 
45     /* Find the instance index from base address mappings. */
46     for (instance = 0; instance < ARRAY_SIZE(s_dmamuxBases); instance++)
47     {
48         if (s_dmamuxBases[instance] == base)
49         {
50             break;
51         }
52     }
53 
54     assert(instance < ARRAY_SIZE(s_dmamuxBases));
55 
56     return instance;
57 }
58 
DMAMUX_Init(DMAMUX_Type * base)59 void DMAMUX_Init(DMAMUX_Type *base)
60 {
61 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
62     CLOCK_EnableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]);
63 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
64 }
65 
DMAMUX_Deinit(DMAMUX_Type * base)66 void DMAMUX_Deinit(DMAMUX_Type *base)
67 {
68 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
69     CLOCK_DisableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]);
70 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
71 }
72