/* * Copyright 2024 NXP * * SPDX-License-Identifier: Apache-2.0 */ #include DT_SCMI_PROTOCOL_DEFINE_NODEV(DT_INST(0, arm_scmi_pinctrl), NULL); int scmi_pinctrl_settings_configure(struct scmi_pinctrl_settings *settings) { struct scmi_protocol *proto; struct scmi_message msg, reply; uint32_t config_num; int32_t status, ret; proto = &SCMI_PROTOCOL_NAME(SCMI_PROTOCOL_PINCTRL); /* sanity checks */ if (!settings) { return -EINVAL; } if (!proto) { return -EINVAL; } if (proto->id != SCMI_PROTOCOL_PINCTRL) { return -EINVAL; } config_num = SCMI_PINCTRL_ATTRIBUTES_CONFIG_NUM(settings->attributes); if (!config_num) { return -EINVAL; } if ((config_num * 2) > ARM_SCMI_PINCTRL_MAX_CONFIG_SIZE) { return -EINVAL; } msg.hdr = SCMI_MESSAGE_HDR_MAKE(SCMI_PINCTRL_MSG_PINCTRL_SETTINGS_CONFIGURE, SCMI_COMMAND, proto->id, 0x0); msg.len = sizeof(*settings) - (ARM_SCMI_PINCTRL_MAX_CONFIG_SIZE - config_num * 2) * 4; msg.content = settings; reply.hdr = msg.hdr; reply.len = sizeof(status); reply.content = &status; ret = scmi_send_message(proto, &msg, &reply); if (ret < 0) { return ret; } if (status != SCMI_SUCCESS) { return scmi_status_to_errno(status); } return 0; }