Line data Source code
1 0 : /*
2 : * Copyright 2022, 2024 NXP
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_S32_PINCTRL_H_
8 : #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_S32_PINCTRL_H_
9 :
10 : #include <zephyr/dt-bindings/dt-util.h>
11 :
12 : /*
13 : * The NXP S32 pinmux configuration is encoded in a 32-bit field value as follows:
14 : *
15 : * - 0..2: Output mux Source Signal Selection (MSCR.SSS)
16 : * - 3..6: Input mux Source Signal Selection (IMCR.SSS)
17 : * - 7..15: Input Multiplexed Signal Configuration Register (IMCR) index
18 : * - 16..24: Multiplexed Signal Configuration Register (MSCR) index
19 : * - 25..27: MSCR SIUL2 instance index (0..7)
20 : * - 28..30: IMCR SIUL2 instance index (0..7)
21 : * - 31: Reserved for future use
22 : */
23 0 : #define NXP_S32_MSCR_SSS_SHIFT 0U
24 0 : #define NXP_S32_MSCR_SSS_MASK BIT_MASK(3)
25 0 : #define NXP_S32_IMCR_SSS_SHIFT 3U
26 0 : #define NXP_S32_IMCR_SSS_MASK BIT_MASK(4)
27 0 : #define NXP_S32_IMCR_IDX_SHIFT 7U
28 0 : #define NXP_S32_IMCR_IDX_MASK BIT_MASK(9)
29 0 : #define NXP_S32_MSCR_IDX_SHIFT 16U
30 0 : #define NXP_S32_MSCR_IDX_MASK BIT_MASK(9)
31 0 : #define NXP_S32_MSCR_SIUL2_IDX_SHIFT 25U
32 0 : #define NXP_S32_MSCR_SIUL2_IDX_MASK BIT_MASK(3)
33 0 : #define NXP_S32_IMCR_SIUL2_IDX_SHIFT 28U
34 0 : #define NXP_S32_IMCR_SIUL2_IDX_MASK BIT_MASK(3)
35 :
36 0 : #define NXP_S32_PINMUX_MSCR_SSS(cfg) \
37 : (((cfg) & NXP_S32_MSCR_SSS_MASK) << NXP_S32_MSCR_SSS_SHIFT)
38 :
39 0 : #define NXP_S32_PINMUX_IMCR_SSS(cfg) \
40 : (((cfg) & NXP_S32_IMCR_SSS_MASK) << NXP_S32_IMCR_SSS_SHIFT)
41 :
42 0 : #define NXP_S32_PINMUX_IMCR_IDX(cfg) \
43 : (((cfg) & NXP_S32_IMCR_IDX_MASK) << NXP_S32_IMCR_IDX_SHIFT)
44 :
45 0 : #define NXP_S32_PINMUX_MSCR_IDX(cfg) \
46 : (((cfg) & NXP_S32_MSCR_IDX_MASK) << NXP_S32_MSCR_IDX_SHIFT)
47 :
48 0 : #define NXP_S32_PINMUX_MSCR_SIUL2_IDX(cfg) \
49 : (((cfg) & NXP_S32_MSCR_SIUL2_IDX_MASK) << NXP_S32_MSCR_SIUL2_IDX_SHIFT)
50 :
51 0 : #define NXP_S32_PINMUX_IMCR_SIUL2_IDX(cfg) \
52 : (((cfg) & NXP_S32_IMCR_SIUL2_IDX_MASK) << NXP_S32_IMCR_SIUL2_IDX_SHIFT)
53 :
54 0 : #define NXP_S32_PINMUX_GET_MSCR_SSS(cfg) \
55 : (((cfg) >> NXP_S32_MSCR_SSS_SHIFT) & NXP_S32_MSCR_SSS_MASK)
56 :
57 0 : #define NXP_S32_PINMUX_GET_IMCR_SSS(cfg) \
58 : (((cfg) >> NXP_S32_IMCR_SSS_SHIFT) & NXP_S32_IMCR_SSS_MASK)
59 :
60 0 : #define NXP_S32_PINMUX_GET_IMCR_IDX(cfg) \
61 : (((cfg) >> NXP_S32_IMCR_IDX_SHIFT) & NXP_S32_IMCR_IDX_MASK)
62 :
63 0 : #define NXP_S32_PINMUX_GET_MSCR_IDX(cfg) \
64 : (((cfg) >> NXP_S32_MSCR_IDX_SHIFT) & NXP_S32_MSCR_IDX_MASK)
65 :
66 0 : #define NXP_S32_PINMUX_GET_MSCR_SIUL2_IDX(cfg) \
67 : (((cfg) >> NXP_S32_MSCR_SIUL2_IDX_SHIFT) & NXP_S32_MSCR_SIUL2_IDX_MASK)
68 :
69 0 : #define NXP_S32_PINMUX_GET_IMCR_SIUL2_IDX(cfg) \
70 : (((cfg) >> NXP_S32_IMCR_SIUL2_IDX_SHIFT) & NXP_S32_IMCR_SIUL2_IDX_MASK)
71 :
72 : /**
73 : * @brief Utility macro to build NXP S32 pinmux property for pinctrl nodes.
74 : *
75 : * @param mscr_siul2_idx MSCR SIUL2 instance index
76 : * @param imcr_siul2_idx IMCR SIUL2 instance index
77 : * @param mscr_idx Multiplexed Signal Configuration Register (MSCR) index
78 : * @param mscr_sss Output mux Source Signal Selection (MSCR.SSS)
79 : * @param imcr_idx Input Multiplexed Signal Configuration Register (IMCR) index
80 : * @param imcr_sss Input mux Source Signal Selection (IMCR.SSS)
81 : */
82 1 : #define NXP_S32_PINMUX(mscr_siul2_idx, imcr_siul2_idx, mscr_idx, mscr_sss, imcr_idx, imcr_sss) \
83 : (NXP_S32_PINMUX_MSCR_SIUL2_IDX(mscr_siul2_idx) | \
84 : NXP_S32_PINMUX_IMCR_SIUL2_IDX(imcr_siul2_idx) | \
85 : NXP_S32_PINMUX_MSCR_IDX(mscr_idx) | \
86 : NXP_S32_PINMUX_MSCR_SSS(mscr_sss) | \
87 : NXP_S32_PINMUX_IMCR_IDX(imcr_idx) | \
88 : NXP_S32_PINMUX_IMCR_SSS(imcr_sss))
89 :
90 : #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NXP_NXP_S32_PINCTRL_H_ */
|