66
77/*
88 * @file
9- * NXP Kinetis SOC specific helpers for pinctrl driver
9+ * NXP PORT SOC specific helpers for pinctrl driver
1010 */
1111
1212
13- #ifndef ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_
14- #define ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_
13+ #ifndef ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_
14+ #define ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_
1515
1616/** @cond INTERNAL_HIDDEN */
1717
1818#include <zephyr/devicetree.h>
1919#include <zephyr/types.h>
2020
21+ /* Include SOC headers, so we get definitions for PCR bitmasks */
22+ #include <soc.h>
23+
2124#ifdef __cplusplus
2225extern "C" {
2326#endif
2427
25-
26- typedef uint32_t pinctrl_soc_pin_t ;
27-
28- /* Kinetis KW/KL/KE series does not support open drain. Define macros to have no effect
29- * Note: KW22 and KW24 do support open drain, rest of KW series does not
28+ /*
29+ * Some PORT IP instantiations lack certain features, include input buffers,
30+ * open drain, and slew rate. If masks aren't defined for these bitfields,
31+ * define them to have no effect
3032 */
31- /* clang-format off */
32- #if (defined(CONFIG_SOC_SERIES_KINETIS_KWX ) && \
33- !(defined(CONFIG_SOC_MKW24D5 ) || defined(CONFIG_SOC_MKW22D5 ))) || \
34- defined(CONFIG_SOC_SERIES_KINETIS_KL2X ) || defined(CONFIG_SOC_SERIES_KINETIS_KE1XF ) || \
35- defined(CONFIG_SOC_SERIES_KE1XZ )
36- #define PORT_PCR_ODE (x ) 0x0
37- #define PORT_PCR_ODE_MASK 0x0
33+ #ifndef PORT_PCR_IBE_MASK /* Input buffer enable */
34+ #define PORT_PCR_IBE_MASK 0x0
35+ #define PORT_PCR_IBE (x ) 0x0
3836#endif
39- /* clang-format on */
4037
41- /* Kinetis KE series does not support slew rate. Define macros to have no effect */
42- #if defined(CONFIG_SOC_SERIES_KINETIS_KE1XF ) || defined(CONFIG_SOC_SERIES_KE1XZ )
43- #define PORT_PCR_SRE (x ) 0x0
38+ #ifndef PORT_PCR_SRE_MASK /* Slew rate */
4439#define PORT_PCR_SRE_MASK 0x0
40+ #define PORT_PCR_SRE (x ) 0x0
4541#endif
4642
47- #if !(defined( CONFIG_SOC_SERIES_MCXA ))
48- #define PORT_PCR_IBE ( x ) 0x0
49- #define PORT_PCR_IBE_MASK 0x0
43+ #ifndef PORT_PCR_ODE_MASK /* Open drain */
44+ #define PORT_PCR_ODE_MASK 0x0
45+ #define PORT_PCR_ODE ( x ) 0x0
5046#endif
5147
52- #define Z_PINCTRL_KINETIS_PINCFG (node_id ) \
48+
49+ typedef uint32_t pinctrl_soc_pin_t ;
50+
51+ #define Z_PINCTRL_NXP_PORT_PINCFG (node_id ) \
5352 (PORT_PCR_DSE(DT_ENUM_IDX(node_id, drive_strength)) | \
5453 PORT_PCR_PS(DT_PROP(node_id, bias_pull_up)) | \
5554 PORT_PCR_PE(DT_PROP(node_id, bias_pull_up)) | \
@@ -59,12 +58,12 @@ typedef uint32_t pinctrl_soc_pin_t;
5958 PORT_PCR_IBE(DT_PROP(node_id, input_enable)) | \
6059 PORT_PCR_PFE(DT_PROP(node_id, nxp_passive_filter)))
6160
62- #define Z_PINCTRL_KINETIS_PCR_MASK \
61+ #define Z_PINCTRL_NXP_PORT_PCR_MASK \
6362 (PORT_PCR_MUX_MASK | PORT_PCR_DSE_MASK | PORT_PCR_ODE_MASK | PORT_PCR_PFE_MASK | \
6463 PORT_PCR_IBE_MASK | PORT_PCR_SRE_MASK | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK)
6564
6665#define Z_PINCTRL_STATE_PIN_INIT (group , pin_prop , idx ) \
67- DT_PROP_BY_IDX(group, pin_prop, idx) | Z_PINCTRL_KINETIS_PINCFG (group),
66+ DT_PROP_BY_IDX(group, pin_prop, idx) | Z_PINCTRL_NXP_PORT_PINCFG (group),
6867
6968#define Z_PINCTRL_STATE_PINS_INIT (node_id , prop ) \
7069 {DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), DT_FOREACH_PROP_ELEM, pinmux, \
@@ -76,4 +75,4 @@ typedef uint32_t pinctrl_soc_pin_t;
7675
7776/** @endcond */
7877
79- #endif /* ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_ */
78+ #endif /* ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_ */
0 commit comments