]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/arm/ti/ti_prcm.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / arm / ti / ti_prcm.h
1 /*
2  * Copyright (c) 2010
3  *      Ben Gray <ben.r.gray@gmail.com>.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *      This product includes software developed by Ben Gray.
17  * 4. The name of the company nor the name of the author may be used to
18  *    endorse or promote products derived from this software without specific
19  *    prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY BEN GRAY ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL BEN GRAY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * $FreeBSD$
33  */
34
35
36 /*
37  * Texas Instruments - OMAP3xxx series processors
38  *
39  * Reference:
40  *  OMAP35x Applications Processor
41  *   Technical Reference Manual
42  *  (omap35xx_techref.pdf)
43  */
44 #ifndef _TI_PRCM_H_
45 #define _TI_PRCM_H_
46
47 typedef enum {
48
49         /* System clocks, typically you can only call ti_prcm_clk_get_source_freq()
50          * on these clocks as they are enabled by default.
51          */
52         SYS_CLK = 1,
53
54         /* The MPU (ARM) core clock */
55         MPU_CLK = 20,
56
57         /* MMC modules */
58         MMC0_CLK = 100,
59         MMC1_CLK,
60         MMC2_CLK,
61         MMC3_CLK,
62         MMC4_CLK,
63         MMC5_CLK,
64
65         /* I2C modules */
66         I2C0_CLK = 200,
67         I2C1_CLK,
68         I2C2_CLK,
69         I2C3_CLK,
70         I2C4_CLK,
71
72         /* USB module(s) */
73         USBTLL_CLK = 300,
74         USBHSHOST_CLK,
75         USBFSHOST_CLK,
76         USBP1_PHY_CLK,
77         USBP2_PHY_CLK,
78         USBP1_UTMI_CLK,
79         USBP2_UTMI_CLK,
80         USBP1_HSIC_CLK,
81         USBP2_HSIC_CLK,
82
83         /* UART modules */
84         UART0_CLK = 400,
85         UART1_CLK,
86         UART2_CLK,
87         UART3_CLK,
88         UART4_CLK,
89         UART5_CLK,
90         UART6_CLK,
91         UART7_CLK,
92         UART8_CLK,
93
94         /* General purpose timer modules */
95         GPTIMER1_CLK = 500,
96         GPTIMER2_CLK,
97         GPTIMER3_CLK,
98         GPTIMER4_CLK,
99         GPTIMER5_CLK,
100         GPTIMER6_CLK,
101         GPTIMER7_CLK,
102         GPTIMER8_CLK,
103         GPTIMER9_CLK,
104         GPTIMER10_CLK,
105         GPTIMER11_CLK,
106         GPTIMER12_CLK,
107
108         /* McBSP module(s) */
109         MCBSP1_CLK = 600,
110         MCBSP2_CLK,
111         MCBSP3_CLK,
112         MCBSP4_CLK,
113         MCBSP5_CLK,
114
115         /* General purpose I/O modules */
116         GPIO0_CLK = 700,
117         GPIO1_CLK,
118         GPIO2_CLK,
119         GPIO3_CLK,
120         GPIO4_CLK,
121         GPIO5_CLK,
122         GPIO6_CLK,
123
124         /* sDMA module */
125         SDMA_CLK = 800,
126
127         /* DMTimer modules */
128         DMTIMER0_CLK = 900,
129         DMTIMER1_CLK,
130         DMTIMER2_CLK,
131         DMTIMER3_CLK,
132         DMTIMER4_CLK,
133         DMTIMER5_CLK,
134         DMTIMER6_CLK,
135         DMTIMER7_CLK,
136
137         /* CPSW modules */
138         CPSW_CLK = 1000,
139
140         /* Mentor USB modules */
141         MUSB0_CLK = 1100,
142
143         /* EDMA module */
144         EDMA_TPCC_CLK = 1200,
145         EDMA_TPTC0_CLK,
146         EDMA_TPTC1_CLK,
147         EDMA_TPTC2_CLK,
148
149         /* LCD controller module */
150         LCDC_CLK = 1300,
151
152         /* PWM modules */
153         PWMSS0_CLK = 1400,
154         PWMSS1_CLK,
155         PWMSS2_CLK,
156
157         /* Mailbox modules */
158         MAILBOX0_CLK = 1500,
159
160         /* Spinlock modules */
161         SPINLOCK0_CLK = 1600,
162
163         PRUSS_CLK = 1700,
164
165         INVALID_CLK_IDENT
166
167 } clk_ident_t;
168
169 /*
170  *
171  */
172 typedef enum {
173         SYSCLK_CLK,   /* System clock */
174         EXT_CLK,
175
176         F32KHZ_CLK,   /* 32KHz clock */
177         F48MHZ_CLK,   /* 48MHz clock */
178         F64MHZ_CLK,   /* 64MHz clock */
179         F96MHZ_CLK,   /* 96MHz clock */
180
181 } clk_src_t;
182
183 struct ti_clock_dev {
184         /* The profile of the timer */
185         clk_ident_t  id;
186
187         /* A bunch of callbacks associated with the clock device */
188         int (*clk_activate)(struct ti_clock_dev *clkdev);
189         int (*clk_deactivate)(struct ti_clock_dev *clkdev);
190         int (*clk_set_source)(struct ti_clock_dev *clkdev,
191             clk_src_t clksrc);
192         int (*clk_accessible)(struct ti_clock_dev *clkdev);
193         int (*clk_get_source_freq)(struct ti_clock_dev *clkdev,
194             unsigned int *freq);
195 };
196
197 int ti_prcm_clk_valid(clk_ident_t clk);
198 int ti_prcm_clk_enable(clk_ident_t clk);
199 int ti_prcm_clk_disable(clk_ident_t clk);
200 int ti_prcm_clk_accessible(clk_ident_t clk);
201 int ti_prcm_clk_disable_autoidle(clk_ident_t clk);
202 int ti_prcm_clk_set_source(clk_ident_t clk, clk_src_t clksrc);
203 int ti_prcm_clk_get_source_freq(clk_ident_t clk, unsigned int *freq);
204 void ti_prcm_reset(void);
205
206 #endif   /* _TI_PRCM_H_ */