/*
 * 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	__TIMER__
#define	__TIMER__

#define ASIC_PLATFORM 1
#define BERLIN_PLATFORM 1

#define GALOIS_CPU0_TIMER 0
#define GALOIS_UBOOT_TIMER	(GALOIS_CPU0_TIMER)
#define TIMER_LOAD_VAL 0xffffffff

#if 0
#define GALOIS_TIMER_CLOCK (ASIC_PLATFORM == 1? \
		(BERLIN_PLATFORM == 1? 75000000 : 100000000) : \
		(BERLIN_PLATFORM == 1? 4500000 : 1500000))
#endif

#define GALOIS_TIMER_CLOCK 100000000
#ifndef CONFIG_SYS_HZ
#define CONFIG_SYS_HZ			(GALOIS_TIMER_CLOCK)
#endif

extern unsigned int timer_clk_freq;

unsigned long get_timer (unsigned long base);
void reset_timer (void);
void set_timer (unsigned long t);
void udelay(unsigned long usec);
void delay_us(unsigned int us);
void delay_ms(unsigned int ms);
int timer_init (void);
int timer_stop(void);
#endif

