/**
 * @file  gpio-fp.h
 * @brief GPIO API for Fastcall driver(Fingerprint)
 *
 * Copyright (c) 2014-2015 Samsung Electronics Co., Ltd.
 *
 * This software is proprietary of Samsung Electronics.
 * No part of this software, either material or conceptual may be copied
 * or distributed, transmitted, transcribed, stored in a retrieval system
 * or translated into any human or computer language in any form by any means,
 * electronic, mechanical, manual or otherwise, or disclosed to third parties
 * without the express written permission of Samsung Electronics.
 */

#ifndef __FP_REGISTER_H__
#define __FP_REGISTER_H__

#ifdef __cplusplus
extern "C" {
#endif

/************************************************************************/
/* TZPC control                                                         */
/************************************************************************/
#define FP_TZPC_SECURE	0x0
#define FP_TZPC_SET_ENABLE 0x7 /* USI:0x1, USI_MODE:0x2, GPIO:0x4 */

/* USI */
#define FP_TZPC_USI_SFR_BASE	0x10010000
#define FP_TZPC_DECPROTSTAT		0x200
#define FP_TZPC_DECPROTSET		0x204
#define FP_TZPC_DECPROTCLR		0x208
#define FP_TZPC_USI_CH0_M		(0x1 << 18)

/* USI_MODE */
#define FP_TZPC_USI_MODE_SFR_BASE	0x10010000
#define FP_TZPC_USI_MODE_DECPROTSTAT		0x210
#define FP_TZPC_USI_MODE_DECPROTSET		0x214
#define FP_TZPC_USI_MODE_DECPROTCLR		0x218
#define FP_TZPC_USI_MODE_M	(0x1 << 1)

/* GPIO */
#define FP_TZPC_PERIC0_0_SFR_BASE	0x139B2004
#define FP_TZPC_GPIO_DECPROT_NUM		0x0000
#define FP_TZPC_GPIO_DECSTAT_NUM		0x0000
#define FP_TZPC_GPIO_PERIC0_M		(0xFF00FFFF) // [23:16 set to 0]

/************************************************************************/
/* GPIO control                                                         */
/* 3830 : MOSI(gpp2[3]),MISO(gpp2[2]),CS(gpp2[1]),CLK(gpp2[0])			*/
/************************************************************************/

#define FP_GPIO_PERIC0_SFR_BASE	0x139B0000 			/* GPIO_PERI GPP2 */
#define FP_GPIOCON_INIT_VALUE		0x1011 			// OUTPUT|INPUT|OUTPUT|OUTPUT
#define FP_GPIODAT_INIT_VALUE		0x0 			// undef|undef|undef|undef
#define FP_GPIOPUD_INIT_VALUE		0x0100 			// NP|PD|NP|NP
#define FP_GPIODRV_INIT_VALUE		0x2222 			// 3x|3x|3x|3x
#define FP_GPIOCONPDN_POWEROFF_VALUE		0x20 	// out0|input|out0|out0
#define FP_GPIOPUDPDN_POWEROFF_VALUE		0x0100 	// NP|PD|NP|NP

#define FP_GPIOCON_POWERON_INACTIVE_VALUE	0x1011 	// OUTPUT|INPUT|OUTPUT|OUTPUT
#define FP_GPIODAT_POWERON_INACTIVE_VALUE	0x2 	// undef|undef|high|undef
#define FP_GPIOPUD_POWERON_INACTIVE_VALUE	0x0100 	// NP|PD|NP|NP
#define FP_GPIODRV_POWERON_INACTIVE_VALUE	0x2222 	// 3x|3x|3x|3x
#define FP_GPIOCONPDN_POWERON_INACTIVE_VALUE	0x24 // out0|input|out1|out0
#define FP_GPIOPUDPDN_POWERON_INACTIVE_VALUE	0x0100 // NP|PD|NP|NP

#define FP_GPIOCON		0x0060
#define FP_GPIODAT		0x0064
#define FP_GPIOPUD		0x0068
#define FP_GPIODRV		0x006C
#define FP_GPIOCONPDN	0x0070
#define FP_GPIOPUDPDN	0x0074

#define FP_GPIOCON_MASK				0x0000FFFF // [15:0]
#define FP_GPIODAT_MASK				0x0000000F // [3:0]
#define FP_GPIOPUD_MASK				0x0000FFFF // [15:0]
#define FP_GPIODRV_MASK				0x0000FFFF // [15:0]
#define FP_GPIOCONPDN_MASK			0x000000FF // [7:0]
#define FP_GPIOPUDPDN_MASK			0x0000FFFF // [15:0]

#ifdef __cplusplus
}
#endif

#endif
