/*
 * Copyright (c) 2020 ITE Corporation. All Rights Reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 */

#include <init.h>
#include <drivers/pinmux.h>
#include <dt-bindings/pinctrl/it8xxx2-pinctrl.h>

static int it8xxx2_evb_pinmux_init(const struct device *dev)
{
	ARG_UNUSED(dev);

#if DT_NODE_HAS_STATUS(DT_NODELABEL(pinmuxb), okay)
	const struct device *portb = DEVICE_DT_GET(DT_NODELABEL(pinmuxb));

	__ASSERT_NO_MSG(device_is_ready(portb));
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(pinmuxh), okay)
	const struct device *porth = DEVICE_DT_GET(DT_NODELABEL(pinmuxh));

	__ASSERT_NO_MSG(device_is_ready(porth));
#endif

#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart1), okay)
	/* SIN0 */
	pinmux_pin_set(portb, 0, IT8XXX2_PINMUX_FUNC_3);
	/* SOUT0 */
	pinmux_pin_set(portb, 1, IT8XXX2_PINMUX_FUNC_3);
	/* Pullup SIN0 to received data */
	pinmux_pin_pullup(portb, 0, PINMUX_PULLUP_ENABLE);
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(uart1), okay) */

#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart2), okay)
	/* SIN1 */
	pinmux_pin_set(porth, 1, IT8XXX2_PINMUX_FUNC_4);
	/* SOUT1 */
	pinmux_pin_set(porth, 2, IT8XXX2_PINMUX_FUNC_4);
	/* Pullup SIN1 to received data */
	pinmux_pin_pullup(porth, 1, PINMUX_PULLUP_ENABLE);
#endif /* DT_NODE_HAS_STATUS(DT_NODELABEL(uart2), okay) */

	return 0;
}
SYS_INIT(it8xxx2_evb_pinmux_init, PRE_KERNEL_1, CONFIG_PINMUX_INIT_PRIORITY);
