1 /* 2 * Copyright 2022, 2024 NXP 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 /* 8 * @file 9 * NXP PORT SOC specific helpers for pinctrl driver 10 */ 11 12 13 #ifndef ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_ 14 #define ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_ 15 16 /** @cond INTERNAL_HIDDEN */ 17 18 #include <zephyr/devicetree.h> 19 #include <zephyr/types.h> 20 21 /* Include SOC headers, so we get definitions for PCR bitmasks */ 22 #include <soc.h> 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 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 32 */ 33 #ifndef PORT_PCR_IBE_MASK /* Input buffer enable */ 34 #define PORT_PCR_IBE_MASK 0x0 35 #define PORT_PCR_IBE(x) 0x0 36 #endif 37 38 #ifndef PORT_PCR_SRE_MASK /* Slew rate */ 39 #define PORT_PCR_SRE_MASK 0x0 40 #define PORT_PCR_SRE(x) 0x0 41 #endif 42 43 #ifndef PORT_PCR_ODE_MASK /* Open drain */ 44 #define PORT_PCR_ODE_MASK 0x0 45 #define PORT_PCR_ODE(x) 0x0 46 #endif 47 48 49 typedef uint32_t pinctrl_soc_pin_t; 50 51 #define Z_PINCTRL_NXP_PORT_PINCFG(node_id) \ 52 (PORT_PCR_DSE(DT_ENUM_IDX(node_id, drive_strength)) | \ 53 PORT_PCR_PS(DT_PROP(node_id, bias_pull_up)) | \ 54 PORT_PCR_PE(DT_PROP(node_id, bias_pull_up)) | \ 55 PORT_PCR_PE(DT_PROP(node_id, bias_pull_down)) | \ 56 PORT_PCR_ODE(DT_PROP(node_id, drive_open_drain)) | \ 57 PORT_PCR_SRE(DT_ENUM_IDX(node_id, slew_rate)) | \ 58 PORT_PCR_IBE(DT_PROP(node_id, input_enable)) | \ 59 PORT_PCR_PFE(DT_PROP(node_id, nxp_passive_filter))) 60 61 #define Z_PINCTRL_NXP_PORT_PCR_MASK \ 62 (PORT_PCR_MUX_MASK | PORT_PCR_DSE_MASK | PORT_PCR_ODE_MASK | PORT_PCR_PFE_MASK | \ 63 PORT_PCR_IBE_MASK | PORT_PCR_SRE_MASK | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK) 64 65 #define Z_PINCTRL_STATE_PIN_INIT(group, pin_prop, idx) \ 66 DT_PROP_BY_IDX(group, pin_prop, idx) | Z_PINCTRL_NXP_PORT_PINCFG(group), 67 68 #define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \ 69 {DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), DT_FOREACH_PROP_ELEM, pinmux, \ 70 Z_PINCTRL_STATE_PIN_INIT)}; 71 72 #ifdef __cplusplus 73 } 74 #endif 75 76 /** @endcond */ 77 78 #endif /* ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_NXP_PORT_COMMON_H_ */ 79