/*
 * Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */

#ifndef __APB_TIMER_H__
#define __APB_TIMER_H__
#define APD_TIMER_1_LOADCOUNT		0x00
#define APB_TIMER_1_CURRENTVALUE	0x04
#define APB_TIMER_1_CONTROLREG		0x08
#define APB_TIMER_1_EOI				0x0C
#define APB_TIMER_1_INTSTATUS		0x10

#define APD_TIMER_REG_RANGE			0x14
/**********************************************************************************************
 * the offset of APB_TIMER_N_xxxx  is derived from APD_TIMER_REG_RANGE*(N-1) + APD_TIMER_xxx
 **********************************************************************************************/

#define APB_TIMERS_INTSTATUS		0xA0
#define APB_TIMERS_EOI				0xA4
#define APB_TIMERS_RAW_INTSTSTUS	0xA8
#define APB_TIMERS_COMP_VERSION		0xAC


#define bTimer_Enable			    1 /*bit*/
#define LSbTimer_Enable				0
#define bTimer_Mode					1
#define LSbTimer_Mode				1
#define bTimer_Interrupt_Mask		1
#define LSbTimer_Interrupt_Mask		2

#define TIMER_FREE_RUN_MODE			0
#define TIMER_USR_DEFINED_MODE		1
void TIMERx_SetControlReg(unsigned int timer_N, unsigned int mask, unsigned int enable, unsigned int mode);
unsigned int TIMERx_GetCurrentValue(unsigned int timer_N);
void TIMERx_SetLoadCount(unsigned int timer_N, unsigned int count_val);
void TIMERx_SetIntEn(unsigned int timer_N, unsigned int enable);
#endif // __APB_TIMER_H__

