/*
 * Copyright (c) 2020 Linaro Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/** @file
 * @brief Atmel SAM MCU family devicetree helper macros
 */

#ifndef _ATMEL_SAM_DT_H_
#define _ATMEL_SAM_DT_H_

#include <devicetree.h>

/* Devicetree related macros to construct pin mux config data */

/* Get PIN associated with pinctrl-0 pin at index 'i' */
#define ATMEL_SAM_PIN(node_id, i) \
	DT_PHA(DT_PINCTRL_0(node_id, i), atmel_pins, pin)

/* Get PIO register address associated with pinctrl-0 pin at index 'i' */
#define ATMEL_SAM_PIN_TO_PIO_REG_ADDR(node_id, i) \
	DT_REG_ADDR(DT_PHANDLE(DT_PINCTRL_0(node_id, i), atmel_pins))

/* Get peripheral id for PIO associated with pinctrl-0 pin at index 'i' */
#define ATMEL_SAM_PIN_2_PIO_PERIPH_ID(node_id, i) \
	DT_PROP_BY_PHANDLE(DT_PINCTRL_0(node_id, i),\
			   atmel_pins, peripheral_id)

/* Get peripheral cfg associated wiith pinctrl-0 pin at index 'i' */
#define ATMEL_SAM_PIN_PERIPH(node_id, i) \
	DT_PHA(DT_PINCTRL_0(node_id, i), atmel_pins, peripheral)

/* Helper function for ATMEL_SAM_PIN_FLAGS */
#define ATMEL_SAM_PIN_FLAG(node_id, i, flag) \
	DT_PROP(DT_PINCTRL_0(node_id, i), flag)

/* Convert DT flags to SoC flags */
#define ATMEL_SAM_PIN_FLAGS(node_id, i) \
	(ATMEL_SAM_PIN_FLAG(node_id, i, bias_pull_up) << SOC_GPIO_PULLUP_POS | \
	 ATMEL_SAM_PIN_FLAG(node_id, i, bias_pull_down) << SOC_GPIO_PULLUP_POS | \
	 ATMEL_SAM_PIN_FLAG(node_id, i, drive_open_drain) << SOC_GPIO_OPENDRAIN_POS)

#if defined(CONFIG_SOC_SERIES_SAM4L)
/* Construct a soc_gpio_pin element for pin cfg */
#define ATMEL_SAM_DT_GPIO(node_id, idx)					\
	{								\
		1 << ATMEL_SAM_PIN(node_id, idx),			\
		(Gpio *)ATMEL_SAM_PIN_TO_PIO_REG_ADDR(node_id, idx),	\
		ATMEL_SAM_PIN_2_PIO_PERIPH_ID(node_id, idx),		\
		ATMEL_SAM_PIN_PERIPH(node_id, idx) << SOC_GPIO_FUNC_POS | \
		ATMEL_SAM_PIN_FLAGS(node_id, idx)			\
	}

#define ATMEL_SAM_DT_INST_GPIO(inst, idx) \
	ATMEL_SAM_DT_GPIO(DT_DRV_INST(inst), idx)

#define ATMEL_SAM_DT_PIN ATMEL_SAM_DT_GPIO
#define ATMEL_SAM_DT_INST_PIN ATMEL_SAM_DT_INST_GPIO
#else
/* Construct a soc_pio_pin element for pin cfg */
#define ATMEL_SAM_DT_PIO(node_id, idx)					\
	{								\
		1 << ATMEL_SAM_PIN(node_id, idx),			\
		(Pio *)ATMEL_SAM_PIN_TO_PIO_REG_ADDR(node_id, idx),	\
		ATMEL_SAM_PIN_2_PIO_PERIPH_ID(node_id, idx),		\
		ATMEL_SAM_PIN_PERIPH(node_id, idx) << SOC_GPIO_FUNC_POS | \
		ATMEL_SAM_PIN_FLAGS(node_id, idx)			\
	}

#define ATMEL_SAM_DT_INST_PIO(inst, idx) \
	ATMEL_SAM_DT_PIO(DT_DRV_INST(inst), idx)

#define ATMEL_SAM_DT_PIN ATMEL_SAM_DT_PIO
#define ATMEL_SAM_DT_INST_PIN ATMEL_SAM_DT_INST_PIO
#endif

/* Get the number of pins for pinctrl-0 */
#define ATMEL_SAM_DT_NUM_PINS(node_id) DT_NUM_PINCTRLS_BY_IDX(node_id, 0)

#define ATMEL_SAM_DT_INST_NUM_PINS(inst) \
	ATMEL_SAM_DT_NUM_PINS(DT_DRV_INST(inst))

/* internal macro to structure things for use with UTIL_LISTIFY */
#define ATMEL_SAM_DT_PIN_ELEM(idx, node_id) ATMEL_SAM_DT_PIN(node_id, idx),

/* Construct an array intializer for soc_gpio_pin for a device instance */
#define ATMEL_SAM_DT_PINS(node_id)				\
	{ UTIL_LISTIFY(ATMEL_SAM_DT_NUM_PINS(node_id),		\
		       ATMEL_SAM_DT_PIN_ELEM, node_id)		\
	}

#define ATMEL_SAM_DT_INST_PINS(inst) \
	ATMEL_SAM_DT_PINS(DT_DRV_INST(inst))

/* Devicetree macros related to clock */

#define ATMEL_SAM_DT_CPU_CLK_FREQ_HZ \
		DT_PROP(DT_PATH(cpus, cpu_0), clock_frequency)

#endif /* _ATMEL_SAM_SOC_DT_H_ */
