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

#include <drivers/pinctrl.h>
#include <ztest.h>

/* pin configuration for test device */
#define TEST_DEVICE DT_NODELABEL(test_device)
PINCTRL_DT_DEV_CONFIG_DECLARE(TEST_DEVICE);
static const struct pinctrl_dev_config *pcfg = PINCTRL_DT_DEV_CONFIG_GET(TEST_DEVICE);

static void test_dt_extract(void)
{
	const struct pinctrl_state *scfg;

	zassert_equal(pcfg->reg, 0x0U, NULL);
	zassert_equal(pcfg->state_cnt, 1U, NULL);

	scfg = &pcfg->states[0];

	zassert_equal(scfg->id, PINCTRL_STATE_DEFAULT, NULL);
	zassert_equal(scfg->pin_cnt, 6U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[0]), NRF_FUN_UART_TX, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[0]), NRF_LP_DISABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[0]), NRF_DRIVE_S0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[0]), NRF_PULL_NONE, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[0]), 1U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[1]), NRF_FUN_UART_RTS, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[1]), NRF_LP_DISABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[1]), NRF_DRIVE_S0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[1]), NRF_PULL_NONE, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[1]), 2U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[2]), NRF_FUN_UART_RX, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[2]), NRF_LP_DISABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[2]), NRF_DRIVE_H0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[2]), NRF_PULL_NONE, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[2]), 3U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[3]), NRF_FUN_UART_RX, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[3]), NRF_LP_DISABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[3]), NRF_DRIVE_S0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[3]), NRF_PULL_UP, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[3]), 4U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[4]), NRF_FUN_UART_RX, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[4]), NRF_LP_DISABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[4]), NRF_DRIVE_S0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[4]), NRF_PULL_DOWN, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[4]), 5U, NULL);

	zassert_equal(NRF_GET_FUN(scfg->pins[5]), NRF_FUN_UART_CTS, NULL);
	zassert_equal(NRF_GET_LP(scfg->pins[5]), NRF_LP_ENABLE, NULL);
	zassert_equal(NRF_GET_DRIVE(scfg->pins[5]), NRF_DRIVE_S0S1, NULL);
	zassert_equal(NRF_GET_PULL(scfg->pins[5]), NRF_PULL_NONE, NULL);
	zassert_equal(NRF_GET_PIN(scfg->pins[5]), 38U, NULL);
}

void test_main(void)
{
	ztest_test_suite(pinctrl_nrf,
			 ztest_unit_test(test_dt_extract));
	ztest_run_test_suite(pinctrl_nrf);
}
