blob: 0dd48b4ca2101dbc17a0b7af2ce2a25cc896d25d [file] [log] [blame]
/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_SOC_NXP_IMX_IMX8ULP_PINCTR_SOC_H_
#define ZEPHYR_SOC_NXP_IMX_IMX8ULP_PINCTR_SOC_H_
#include <zephyr/devicetree.h>
#include "fsl_iomuxc.h"
#ifdef __cplusplus
extern "C" {
#endif
struct pinctrl_soc_pinmux {
uint32_t mux_register;
uint8_t mux_mode;
uint32_t input_register;
uint32_t input_daisy;
uint32_t config_register;
};
struct pinctrl_soc_pin {
struct pinctrl_soc_pinmux pinmux;
uint32_t pin_ctrl_flags;
};
typedef struct pinctrl_soc_pin pinctrl_soc_pin_t;
#define _PULL_IS_ENABLED(node_id)\
(DT_PROP(node_id, bias_pull_up) || DT_PROP(node_id, bias_pull_down))
#define _IMX8ULP_PIN_FLAGS(node_id) \
((DT_ENUM_IDX_OR(node_id, drive_strength, 0) << IOMUXC_PCR_DSE_SHIFT) | \
(DT_PROP(node_id, drive_open_drain) << IOMUXC_PCR_ODE_SHIFT) | \
(DT_ENUM_IDX_OR(node_id, slew_rate, 0) << IOMUXC_PCR_SRE_SHIFT) | \
(DT_PROP(node_id, bias_pull_up) << IOMUXC_PCR_PS_SHIFT) | \
(_PULL_IS_ENABLED(node_id) << IOMUXC_PCR_PE_SHIFT))
#define _IMX8ULP_PINMUX(node_id) \
{ \
.mux_register = DT_PROP_BY_IDX(node_id, pinmux, 0), \
.config_register = DT_PROP_BY_IDX(node_id, pinmux, 4), \
.input_register = DT_PROP_BY_IDX(node_id, pinmux, 2), \
.mux_mode = DT_PROP_BY_IDX(node_id, pinmux, 1), \
.input_daisy = DT_PROP_BY_IDX(node_id, pinmux, 3), \
}
#define Z_PINCTRL_PINMUX(group_id, pin_prop, idx)\
_IMX8ULP_PINMUX(DT_PHANDLE_BY_IDX(group_id, pin_prop, idx))
#define Z_PINCTRL_STATE_PIN_INIT(group_id, pin_prop, idx) \
{ \
.pinmux = Z_PINCTRL_PINMUX(group_id, pin_prop, idx), \
.pin_ctrl_flags = _IMX8ULP_PIN_FLAGS(group_id), \
},
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop)\
{ DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop),\
DT_FOREACH_PROP_ELEM, pinmux, Z_PINCTRL_STATE_PIN_INIT) };
#ifdef __cplusplus
{
#endif
#endif /* ZEPHYR_SOC_NXP_IMX_IMX8ULP_PINCTR_SOC_H_ */