
#include <stdbool.h>
#include <stdint.h>
#include "handler.h"
#include "kernel_api.h"

#include "gpio-ese-platform.h"

#if defined(CONFIG_EXYNOS9820)
ese_tzpc_config ese_tzpc_configs1[ESE_TZPC_CONFIG_COUNT] = {
	{	/* TZPC10 USI6_I_MODE */
		.tzpc_type = ESE_SPI_PROTECTION,
		.base_pa = TZPC0_SFR_PERIC0,
		.decprotx_clr = TZPC0_SRF_CLR,
		.decprotx_stat = TZPC0_SRF_STAT,
		.decprotx_bit = USI06_I_MODE,
	},
	{	/* TZPC10 USI6_SW_CONF*/
		.tzpc_type = ESE_SPI_PROTECTION,
		.base_pa = TZPC0_SFR_PERIC0,
		.decprotx_clr = TZPC0_SRF_CLR,
		.decprotx_stat = TZPC0_SRF_STAT,
		.decprotx_bit = USI06_SW_CONF,
	},
	{	/* TZPC_PERIC1_3 */
		.tzpc_type = ESE_GPIO_PERI_PROTECTION,
		.base_pa = TZPC_PERIC1_0_BASE,
		.decprotx_clr = 0,
		.decprotx_bit = GPIO_PERI_PROTECION_BIT,
	},
};

ese_gpio_config ese_gpio_configs1[ESE_GPIO_CONFIG_COUNT] = {
	{ /* ESE_SPI_CONFIG */
		.base_pa = GPIO_PERIC1_BASE,
		.gpio_cfg[ESE_GPIO_CFG_CON] = {GPIOCON, ESE_GPIOCON_ACTIVE, ESE_GPIOCON_SLEEP, ESE_GPIOCON_MASK},
		.gpio_cfg[ESE_GPIO_CFG_DAT] = {GPIODAT, ESE_GPIODATA_ACTIVE, ESE_GPIODATA_SLEEP, ESE_GPIODATA_MASK},
		.gpio_cfg[ESE_GPIO_CFG_PUD] = {GPIOPUD, ESE_GPIOPUD_ACTIVE, ESE_GPIOPUD_SLEEP, ESE_GPIOPUD_MASK},
		.gpio_cfg[ESE_GPIO_CFG_DRV] = {GPIODRV, ESE_GPIODRV_ACTIVE, ESE_GPIODRV_SLEEP, ESE_GPIODRV_MASK},
	},
};

#elif defined (CONFIG_EXYNOS9630) | defined (CONFIG_EXYNOS980)
ese_tzpc_config ese_tzpc_configs1[ESE_TZPC_CONFIG_COUNT] = {
	{	/* TZPC0 USI_I_MODE */
		.tzpc_type = ESE_SPI_PROTECTION,
		.base_pa = TZPC0_SFR_PERIC0,
		.decprotx_clr = TZPC0_SRF_CLR,
		.decprotx_stat = TZPC0_SRF_STAT,
		.decprotx_bit = USI_I_MODE,
	},
	{	/* TZPC0 USI_I_MODE*/
		.tzpc_type = ESE_SPI_PROTECTION,
		.base_pa = TZPC0_SFR_USI_MODE,
		.decprotx_clr = TZPC0_SRF_USI_CLR,
		.decprotx_stat = TZPC0_SRF_USI_STAT,
		.decprotx_bit = USI_I_MODE,
	},
	{	/* TZPC_PERIC */
		.tzpc_type = ESE_GPIO_PERI_PROTECTION,
		.base_pa = TZPC_PERIC1_0_BASE,
		.decprotx_clr = 0,
		.decprotx_bit = GPIO_PERI_PROTECION_BIT,
	},
};

ese_gpio_config ese_gpio_configs1[ESE_GPIO_CONFIG_COUNT] = {
	{ /* ESE_SPI_CONFIG */
		.base_pa = GPIO_PERIC1_BASE,
		.gpio_cfg[ESE_GPIO_CFG_CON] = {GPIOCON, ESE_GPIOCON_ACTIVE, ESE_GPIOCON_SLEEP, ESE_GPIOCON_MASK},
		.gpio_cfg[ESE_GPIO_CFG_DAT] = {GPIODAT, ESE_GPIODATA_ACTIVE, ESE_GPIODATA_SLEEP, ESE_GPIODATA_MASK},
		.gpio_cfg[ESE_GPIO_CFG_PUD] = {GPIOPUD, ESE_GPIOPUD_ACTIVE, ESE_GPIOPUD_SLEEP, ESE_GPIOPUD_MASK},
		.gpio_cfg[ESE_GPIO_CFG_DRV] = {GPIODRV, ESE_GPIODRV_ACTIVE, ESE_GPIODRV_SLEEP, ESE_GPIODRV_MASK},
	},
};
#else
ese_tzpc_config *ese_tzpc_configs1;
ese_gpio_config *ese_gpio_configs1;
#endif

ese_tzpc_config* get_ese_tzpc_config(int index)
{
	switch (index) {
	case 0:
		return ese_tzpc_configs1;
	/* in case of different spi port, you can use below logic. */
	/*
#if defined(CONFIG_EXYNOSXXXX)
	case 1:
		return ese_tzpc_configs2;
#endif
	*/
	default :
		return NULL;
	}
	return NULL;
}

ese_gpio_config* get_ese_gpio_config(int index)
{
	switch (index) {
	case 0:
		return ese_gpio_configs1;
	/* in case of different spi port, you can use below logic. */
	/*
#if defined(CONFIG_EXYNOSXXXX)
	case 1:
		return ese_gpio_configs2;
#endif
	*/
	default :
		return NULL;
	}
	return	NULL; 
}
