Merge branch 'for-linus' of git://android.git.kernel.org/kernel/tegra
[pandora-kernel.git] / arch / arm / plat-omap / include / plat / dmtimer.h
1 /*
2  * arch/arm/plat-omap/include/mach/dmtimer.h
3  *
4  * OMAP Dual-Mode Timers
5  *
6  * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
7  * Tarun Kanti DebBarma <tarun.kanti@ti.com>
8  * Thara Gopinath <thara@ti.com>
9  *
10  * Platform device conversion and hwmod support.
11  *
12  * Copyright (C) 2005 Nokia Corporation
13  * Author: Lauri Leukkunen <lauri.leukkunen@nokia.com>
14  * PWM and clock framwork support by Timo Teras.
15  *
16  * This program is free software; you can redistribute it and/or modify it
17  * under the terms of the GNU General Public License as published by the
18  * Free Software Foundation; either version 2 of the License, or (at your
19  * option) any later version.
20  *
21  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
22  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
24  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * You should have received a copy of the  GNU General Public License along
31  * with this program; if not, write  to the Free Software Foundation, Inc.,
32  * 675 Mass Ave, Cambridge, MA 02139, USA.
33  */
34
35 #ifndef __ASM_ARCH_DMTIMER_H
36 #define __ASM_ARCH_DMTIMER_H
37
38 /* clock sources */
39 #define OMAP_TIMER_SRC_SYS_CLK                  0x00
40 #define OMAP_TIMER_SRC_32_KHZ                   0x01
41 #define OMAP_TIMER_SRC_EXT_CLK                  0x02
42
43 /* timer interrupt enable bits */
44 #define OMAP_TIMER_INT_CAPTURE                  (1 << 2)
45 #define OMAP_TIMER_INT_OVERFLOW                 (1 << 1)
46 #define OMAP_TIMER_INT_MATCH                    (1 << 0)
47
48 /* trigger types */
49 #define OMAP_TIMER_TRIGGER_NONE                 0x00
50 #define OMAP_TIMER_TRIGGER_OVERFLOW             0x01
51 #define OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE 0x02
52
53 /*
54  * IP revision identifier so that Highlander IP
55  * in OMAP4 can be distinguished.
56  */
57 #define OMAP_TIMER_IP_VERSION_1                        0x1
58 struct omap_dm_timer;
59 extern struct omap_dm_timer *gptimer_wakeup;
60 extern struct sys_timer omap_timer;
61 struct clk;
62
63 int omap_dm_timer_init(void);
64
65 struct omap_dm_timer *omap_dm_timer_request(void);
66 struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id);
67 void omap_dm_timer_free(struct omap_dm_timer *timer);
68 void omap_dm_timer_enable(struct omap_dm_timer *timer);
69 void omap_dm_timer_disable(struct omap_dm_timer *timer);
70
71 int omap_dm_timer_get_irq(struct omap_dm_timer *timer);
72
73 u32 omap_dm_timer_modify_idlect_mask(u32 inputmask);
74 struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer);
75
76 void omap_dm_timer_trigger(struct omap_dm_timer *timer);
77 void omap_dm_timer_start(struct omap_dm_timer *timer);
78 void omap_dm_timer_stop(struct omap_dm_timer *timer);
79
80 int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source);
81 void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value);
82 void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, unsigned int value);
83 void omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match);
84 void omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger);
85 void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);
86
87 void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value);
88
89 unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);
90 void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value);
91 unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer);
92 void omap_dm_timer_write_counter(struct omap_dm_timer *timer, unsigned int value);
93
94 int omap_dm_timers_active(void);
95
96
97 #endif /* __ASM_ARCH_DMTIMER_H */