Line data Source code
1 0 : /* 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_ */