1/* 2 * Support for Intel Camera Imaging ISP subsystem. 3 * Copyright (c) 2010-2015, Intel Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms and conditions of the GNU General Public License, 7 * version 2, as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 */ 14 15#include <type_support.h> /*uint32_t */ 16#include "gp_timer.h" /*system_local.h, 17 gp_timer_public.h*/ 18 19#ifndef __INLINE_GP_TIMER__ 20#include "gp_timer_private.h" /*device_access.h*/ 21#endif /* __INLINE_GP_TIMER__ */ 22#include "system_local.h" 23 24/* FIXME: not sure if reg_load(), reg_store() should be API. 25 */ 26static uint32_t 27gp_timer_reg_load(uint32_t reg); 28 29static void 30gp_timer_reg_store(uint32_t reg, uint32_t value); 31 32static uint32_t 33gp_timer_reg_load(uint32_t reg) 34{ 35 return ia_css_device_load_uint32( 36 GP_TIMER_BASE + 37 (reg * sizeof(uint32_t))); 38} 39 40static void 41gp_timer_reg_store(uint32_t reg, uint32_t value) 42{ 43 ia_css_device_store_uint32((GP_TIMER_BASE + 44 (reg * sizeof(uint32_t))), 45 value); 46} 47 48void gp_timer_init(gp_timer_ID_t ID) 49{ 50 /* set_overall_enable*/ 51 gp_timer_reg_store(_REG_GP_TIMER_OVERALL_ENABLE, 1); 52 53 /*set enable*/ 54 gp_timer_reg_store(_REG_GP_TIMER_ENABLE_ID(ID), 1); 55 56 /* set signal select */ 57 gp_timer_reg_store(_REG_GP_TIMER_SIGNAL_SELECT_ID(ID), GP_TIMER_SIGNAL_SELECT); 58 59 /*set count type */ 60 gp_timer_reg_store(_REG_GP_TIMER_COUNT_TYPE_ID(ID), GP_TIMER_COUNT_TYPE_LOW); 61 62 /*reset gp timer */ 63 gp_timer_reg_store(_REG_GP_TIMER_RESET_REG, 0xFF); 64} 65 66uint32_t 67gp_timer_read(gp_timer_ID_t ID) 68{ 69 return gp_timer_reg_load(_REG_GP_TIMER_VALUE_ID(ID)); 70} 71