/*
 * Copyright (c) 2021 Yonatan Schachter
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <drivers/pinctrl.h>

/* pico-sdk includes */
#include <hardware/gpio.h>

static void pinctrl_configure_pin(const pinctrl_soc_pin_t *pin)
{
	gpio_init(pin->pin_num);
	gpio_set_function(pin->pin_num, pin->alt_func);
	gpio_set_pulls(pin->pin_num, pin->pullup, pin->pulldown);
	gpio_set_drive_strength(pin->pin_num, pin->drive_strength);
	gpio_set_slew_rate(pin->pin_num, (pin->slew_rate ?
				GPIO_SLEW_RATE_FAST : GPIO_SLEW_RATE_SLOW));
	gpio_set_input_hysteresis_enabled(pin->pin_num, pin->schmitt_enable);
	gpio_set_input_enabled(pin->pin_num, pin->input_enable);
}

int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt,
			   uintptr_t reg)
{
	ARG_UNUSED(reg);

	for (uint8_t i = 0U; i < pin_cnt; i++) {
		pinctrl_configure_pin(pins++);
	}

	return 0;
}
