/* * Copyright (c) 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include int pinctrl_lookup_state(const struct pinctrl_dev_config *config, uint8_t id, const struct pinctrl_state **state) { *state = &config->states[0]; while (*state < &config->states[config->state_cnt]) { if (id == (*state)->id) { return 0; } (*state)++; } return -ENOENT; } #ifdef CONFIG_PINCTRL_DYNAMIC int pinctrl_update_states(struct pinctrl_dev_config *config, const struct pinctrl_state *states, uint8_t state_cnt) { uint8_t equal = 0U; /* check we are inserting same number of states */ if (config->state_cnt != state_cnt) { return -EINVAL; } /* check we have the same states */ for (uint8_t i = 0U; i < state_cnt; i++) { for (uint8_t j = 0U; j < config->state_cnt; j++) { if (states[i].id == config->states[j].id) { equal++; break; } } } if (equal != state_cnt) { return -EINVAL; } /* replace current states */ config->states = states; return 0; } #endif /* CONFIG_PINCTRL_DYNAMIC */