/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <drivers/pinctrl.h>

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 - 1U]) {
		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 */
