Skip to content

Commit 6be3085

Browse files
hakehuangdleach02
authored andcommitted
soc: add pinctrl header file definition for RT series
Pinctrl requires header file with Z_PINCTRL_STATE_PINS_INIT macro defined. Add header file for mcux RT pinctrl implementation. Signed-off-by: Hake Huang <[email protected]> Signed-off-by: Daniel DeGrasse <[email protected]>
1 parent c93689d commit 6be3085

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

soc/arm/nxp_imx/rt/pinctrl_soc.h

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
* Copyright (c) 2022, NXP
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef ZEPHYR_SOC_ARM_NXP_IMX_RT_PINCTRL_SOC_H_
8+
#define ZEPHYR_SOC_ARM_NXP_IMX_RT_PINCTRL_SOC_H_
9+
10+
#include <devicetree.h>
11+
#include <zephyr/types.h>
12+
#include "fsl_common.h"
13+
14+
#ifdef __cplusplus
15+
extern "C" {
16+
#endif
17+
18+
struct pinctrl_soc_pinmux {
19+
uint32_t mux_register;
20+
uint32_t mux_mode;
21+
uint32_t input_register;
22+
uint32_t input_daisy;
23+
uint32_t config_register;
24+
};
25+
26+
struct pinctrl_soc_pin {
27+
struct pinctrl_soc_pinmux pinmux;
28+
uint32_t pin_ctrl_flags;
29+
};
30+
31+
typedef struct pinctrl_soc_pin pinctrl_soc_pin_t;
32+
33+
#define MCUX_RT_INPUT_SCHMITT_ENABLE_SHIFT IOMUXC_SW_PAD_CTL_PAD_HYS_SHIFT
34+
#define MCUX_RT_BIAS_PULL_DOWN_SHIFT IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT
35+
#define MCUX_RT_BIAS_PULL_UP_SHIFT IOMUXC_SW_PAD_CTL_PAD_PUS_SHIFT
36+
#define MCUX_RT_BIAS_BUS_HOLD_SHIFT IOMUXC_SW_PAD_CTL_PAD_PUE_SHIFT
37+
#define MCUX_RT_PULL_ENABLE_SHIFT IOMUXC_SW_PAD_CTL_PAD_PKE_SHIFT
38+
#define MCUX_RT_DRIVE_OPEN_DRAIN_SHIFT IOMUXC_SW_PAD_CTL_PAD_ODE_SHIFT
39+
#define MCUX_RT_SPEED_SHIFT IOMUXC_SW_PAD_CTL_PAD_SPEED_SHIFT
40+
#define MCUX_RT_DRIVE_STRENGTH_SHIFT IOMUXC_SW_PAD_CTL_PAD_DSE_SHIFT
41+
#define MCUX_RT_SLEW_RATE_SHIFT IOMUXC_SW_PAD_CTL_PAD_SRE_SHIFT
42+
#define MCUX_RT_INPUT_ENABLE_SHIFT 31 /* Shift to a bit not used by IOMUXC_SW_PAD_CTL */
43+
#define MCUX_RT_INPUT_ENABLE(x) ((x >> MCUX_RT_INPUT_ENABLE_SHIFT) & 0x1)
44+
45+
#define Z_PINCTRL_MCUX_RT_PINCFG_INIT(node_id) \
46+
((DT_PROP(node_id, input_schmitt_enable) << MCUX_RT_INPUT_SCHMITT_ENABLE_SHIFT) | \
47+
IF_ENABLED(DT_PROP(node_id, bias_pull_up), (DT_ENUM_IDX(node_id, bias_pull_up_value) \
48+
<< MCUX_RT_BIAS_PULL_UP_SHIFT) |) \
49+
IF_ENABLED(DT_PROP(node_id, bias_pull_down), (DT_ENUM_IDX(node_id, bias_pull_down_value)\
50+
<< MCUX_RT_BIAS_PULL_DOWN_SHIFT) |) \
51+
((DT_PROP(node_id, bias_pull_down) | DT_PROP(node_id, bias_pull_up)) \
52+
<< MCUX_RT_BIAS_BUS_HOLD_SHIFT) | \
53+
((!DT_PROP(node_id, bias_disable)) << MCUX_RT_PULL_ENABLE_SHIFT) | \
54+
(DT_PROP(node_id, drive_open_drain) << MCUX_RT_DRIVE_OPEN_DRAIN_SHIFT) | \
55+
(DT_ENUM_IDX(node_id, nxp_speed) << MCUX_RT_SPEED_SHIFT) | \
56+
(DT_ENUM_IDX(node_id, drive_strength) << MCUX_RT_DRIVE_STRENGTH_SHIFT) | \
57+
(DT_ENUM_IDX(node_id, slew_rate) << MCUX_RT_SLEW_RATE_SHIFT) | \
58+
(DT_PROP(node_id, input_enable) << MCUX_RT_INPUT_ENABLE_SHIFT))
59+
60+
61+
#define Z_PINCTRL_PINMUX(group_id, pin_prop, idx, pinmux_idx) \
62+
DT_PROP_BY_IDX(DT_PHANDLE_BY_IDX(group_id, pin_prop, idx), pinmux, pinmux_idx)
63+
64+
#define Z_PINCTRL_STATE_PIN_INIT(group_id, pin_prop, idx) \
65+
{ \
66+
.pinmux.mux_register = Z_PINCTRL_PINMUX(group_id, pin_prop, idx, 0), \
67+
.pinmux.mux_mode = Z_PINCTRL_PINMUX(group_id, pin_prop, idx, 1), \
68+
.pinmux.input_register = Z_PINCTRL_PINMUX(group_id, pin_prop, idx, 2), \
69+
.pinmux.input_daisy = Z_PINCTRL_PINMUX(group_id, pin_prop, idx, 3), \
70+
.pinmux.config_register = Z_PINCTRL_PINMUX(group_id, pin_prop, idx, 4), \
71+
.pin_ctrl_flags = Z_PINCTRL_MCUX_RT_PINCFG_INIT(group_id), \
72+
},
73+
74+
75+
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \
76+
{DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), \
77+
DT_FOREACH_PROP_ELEM, pinmux, Z_PINCTRL_STATE_PIN_INIT)}; \
78+
79+
80+
#ifdef __cplusplus
81+
}
82+
#endif
83+
84+
#endif /* ZEPHYR_SOC_ARM_NXP_IMX_RT_PINCTRL_SOC_H_ */

0 commit comments

Comments
 (0)