/* * Copyright 2024 NXP * * SPDX-License-Identifier: Apache-2.0 */ #include #include static int scmi_pinctrl_configure_pin(const pinctrl_soc_pin_t *pin) { struct scmi_pinctrl_settings settings; int ret, config_num; config_num = 0; /* set mux value, and daisy */ settings.id = (pin->pinmux.mux_register - IOMUXC_MUXREG) / 4; settings.config[0] = PIN_CONFIG_TYPE_MUX; settings.config[1] = IOMUXC_INPUT_ENABLE(pin->pin_ctrl_flags) ? (pin->pinmux.mux_mode | IOMUXC_SION(1)) : pin->pinmux.mux_mode; config_num++; if (pin->pinmux.input_register) { settings.config[2] = PIN_CONFIG_TYPE_DAISY_ID; settings.config[3] = (pin->pinmux.input_register - IOMUXC_DAISYREG) / 4; config_num++; settings.config[4] = PIN_CONFIG_TYPE_DAISY_CFG; settings.config[5] = pin->pinmux.input_daisy; config_num++; } settings.attributes = SCMI_PINCTRL_CONFIG_ATTRIBUTES(0x0, config_num, SCMI_PINCTRL_SELECTOR_PIN); ret = scmi_pinctrl_settings_configure(&settings); if (ret < 0) { return ret; } /* set config value */ settings.attributes = SCMI_PINCTRL_CONFIG_ATTRIBUTES(0x0, 0x1, SCMI_PINCTRL_SELECTOR_PIN); settings.id = (pin->pinmux.config_register - IOMUXC_CFGREG) / 4; settings.config[0] = PIN_CONFIG_TYPE_CONFIG; settings.config[1] = pin->pin_ctrl_flags & (~(1 << IOMUXC_INPUT_ENABLE_SHIFT)); ret = scmi_pinctrl_settings_configure(&settings); if (ret < 0) { return ret; } return 0; } int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg) { int ret; /* configure all pins */ for (uint8_t i = 0U; i < pin_cnt; i++) { ret = scmi_pinctrl_configure_pin(&pins[i]); if (ret < 0) { return ret; } } return 0; }