1 /* 2 * Copyright 2022 NXP 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_SOC_ARM_NXP_LPC_11U6X_PINCTRL_SOC_H_ 8 #define ZEPHYR_SOC_ARM_NXP_LPC_11U6X_PINCTRL_SOC_H_ 9 10 #include <zephyr/devicetree.h> 11 #include <zephyr/types.h> 12 #include <soc.h> 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 /** @cond INTERNAL_HIDDEN */ 19 20 typedef uint32_t pinctrl_soc_pin_t; 21 22 #define Z_PINCTRL_IOCON_PINCFG(node_id) \ 23 (IF_ENABLED(DT_PROP(node_id, bias_pull_down), (IOCON_PIO_MODE(0x1) |)) \ 24 IF_ENABLED(DT_PROP(node_id, bias_pull_up), (IOCON_PIO_MODE(0x2) |)) \ 25 IF_ENABLED(DT_PROP(node_id, drive_push_pull), (IOCON_PIO_MODE(0x3) |)) \ 26 IOCON_PIO_HYS(DT_PROP(node_id, input_schmitt_enable)) | \ 27 IOCON_PIO_INVERT(DT_PROP(node_id, nxp_invert)) | \ 28 IOCON_PIO_OD(DT_PROP(node_id, drive_open_drain)) | \ 29 IOCON_PIO_SMODE(DT_ENUM_IDX(node_id, nxp_digital_filter)) | \ 30 IOCON_PIO_CLKDIV(DT_ENUM_IDX(node_id, nxp_filter_clock_div)) | \ 31 IOCON_PIO_ADMODE(!DT_PROP(node_id, nxp_analog_mode)) | \ 32 IOCON_PIO_FILTER(DT_PROP(node_id, nxp_disable_analog_filter)) | \ 33 IOCON_PIO_I2CMODE(!DT_PROP(node_id, nxp_i2c_mode)) | \ 34 IOCON_PIO_I2CMODE((DT_ENUM_IDX_OR(node_id, nxp_i2c_filter, 0) << 1))) 35 36 /* Mask for digital type pin configuration register */ 37 #define Z_PINCTRL_IOCON_D_PIN_MASK (IOCON_PIO_FUNC_MASK | \ 38 IOCON_PIO_MODE_MASK | IOCON_PIO_HYS_MASK | IOCON_PIO_INVERT_MASK | \ 39 IOCON_PIO_OD_MASK | IOCON_PIO_SMODE_MASK | IOCON_PIO_CLKDIV_MASK) 40 41 /* Mask for analog type pin configuration register */ 42 #define Z_PINCTRL_IOCON_A_PIN_MASK \ 43 (Z_PINCTRL_IOCON_D_PIN_MASK | IOCON_PIO_ADMODE_MASK | \ 44 IOCON_PIO_FILTER_MASK) 45 46 /* Mask for i2c type pin configuration register */ 47 #define Z_PINCTRL_IOCON_I_PIN_MASK (IOCON_PIO_FUNC_MASK | \ 48 IOCON_PIO_I2CMODE_MASK | IOCON_PIO_SMODE_MASK | IOCON_PIO_CLKDIV_MASK) 49 50 #define Z_PINCTRL_STATE_PIN_INIT(group, pin_prop, idx) \ 51 DT_PROP_BY_IDX(group, pin_prop, idx) | Z_PINCTRL_IOCON_PINCFG(group), 52 53 /** 54 * @brief Utility macro to initialize state pins contained in a given property. 55 * 56 * @param node_id Node identifier. 57 * @param prop Property name describing state pins. 58 */ 59 #define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \ 60 {DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), \ 61 DT_FOREACH_PROP_ELEM, pinmux, \ 62 Z_PINCTRL_STATE_PIN_INIT)} 63 64 #ifdef __cplusplus 65 } 66 #endif 67 68 #endif /* ZEPHYR_SOC_ARM_NXP_LPC_11U6X_PINCTRL_SOC_H_ */ 69