/*
 * Copyright (c) 2016 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <errno.h>

#ifdef CONFIG_WIFI_WINC1500

#include <device.h>
#include <gpio.h>
#include <wifi/winc1500.h>

static
struct winc1500_gpio_configuration winc1500_gpios[WINC1500_GPIO_IDX_MAX] = {
	{ .dev = NULL, .pin = DT_ATMEL_WINC1500_0_ENABLE_GPIOS_PIN },
	{ .dev = NULL, .pin = DT_ATMEL_WINC1500_0_IRQ_GPIOS_PIN },
	{ .dev = NULL, .pin = DT_ATMEL_WINC1500_0_RESET_GPIOS_PIN },
};

struct winc1500_gpio_configuration *winc1500_configure_gpios(void)
{
	const int flags_int_in = (GPIO_DIR_IN | GPIO_INT |
				  GPIO_INT_ACTIVE_LOW | GPIO_INT_DEBOUNCE |
				  GPIO_INT_EDGE);
	const int flags_noint_out = GPIO_DIR_OUT;
	struct device *gpio_en, *gpio_irq, *gpio_reset;

	gpio_en = device_get_binding(DT_ATMEL_WINC1500_0_ENABLE_GPIOS_CONTROLLER);
	gpio_irq = device_get_binding(DT_ATMEL_WINC1500_0_IRQ_GPIOS_CONTROLLER);
	gpio_reset = device_get_binding(DT_ATMEL_WINC1500_0_RESET_GPIOS_CONTROLLER);

	gpio_pin_configure(gpio_en,
			   winc1500_gpios[WINC1500_GPIO_IDX_CHIP_EN].pin,
			   flags_noint_out);
	gpio_pin_configure(gpio_irq,
			   winc1500_gpios[WINC1500_GPIO_IDX_IRQN].pin,
			   flags_int_in);
	gpio_pin_configure(gpio_reset,
			   winc1500_gpios[WINC1500_GPIO_IDX_RESET_N].pin,
			   flags_noint_out);

	winc1500_gpios[WINC1500_GPIO_IDX_CHIP_EN].dev = gpio_en;
	winc1500_gpios[WINC1500_GPIO_IDX_IRQN].dev = gpio_irq;
	winc1500_gpios[WINC1500_GPIO_IDX_RESET_N].dev = gpio_reset;

	return winc1500_gpios;
}

#endif /* CONFIG_WIFI_WINC1500 */

void main(void)
{

}
