]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/include/asm/arch-mx6/clock.h
TX6 Release 2013-04-22
[karo-tx-uboot.git] / arch / arm / include / asm / arch-mx6 / clock.h
1 /*
2  * (C) Copyright 2009
3  * Stefano Babic, DENX Software Engineering, sbabic@denx.de.
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 #ifndef __ASM_ARCH_CLOCK_H
25 #define __ASM_ARCH_CLOCK_H
26
27 #include <common.h>
28
29 #ifdef CONFIG_SYS_MX6_HCLK
30 #define MXC_HCLK        CONFIG_SYS_MX6_HCLK
31 #else
32 #define MXC_HCLK        24000000
33 #endif
34
35 #ifdef CONFIG_SYS_MX6_CLK32
36 #define MXC_CLK32       CONFIG_SYS_MX6_CLK32
37 #else
38 #define MXC_CLK32       32768
39 #endif
40
41 enum mxc_clock {
42         MXC_ARM_CLK = 0,
43         MXC_PER_CLK,
44         MXC_AHB_CLK,
45         MXC_IPG_CLK,
46         MXC_IPG_PERCLK,
47         MXC_UART_CLK,
48         MXC_CSPI_CLK,
49         MXC_AXI_CLK,
50         MXC_EMI_SLOW_CLK,
51         MXC_DDR_CLK,
52         MXC_ESDHC_CLK,
53         MXC_ESDHC2_CLK,
54         MXC_ESDHC3_CLK,
55         MXC_ESDHC4_CLK,
56         MXC_SATA_CLK,
57         MXC_NFC_CLK,
58         MXC_I2C_CLK,
59 };
60
61
62 struct clk {
63         const char *name;
64         int id;
65         /* Source clock this clk depends on */
66         struct clk *parent;
67         /* Secondary clock to enable/disable with this clock */
68         struct clk *secondary;
69         /* Current clock rate */
70         unsigned long rate;
71         /* Reference count of clock enable/disable */
72         __s8 usecount;
73         /* Register bit position for clock's enable/disable control. */
74         u8 enable_shift;
75         /* Register address for clock's enable/disable control. */
76         void *enable_reg;
77         u32 flags;
78         /*
79          * Function ptr to recalculate the clock's rate based on parent
80          * clock's rate
81          */
82         void (*recalc) (struct clk *);
83         /*
84          * Function ptr to set the clock to a new rate. The rate must match a
85          * supported rate returned from round_rate. Leave blank if clock is not
86         * programmable
87          */
88         int (*set_rate) (struct clk *, unsigned long);
89         /*
90          * Function ptr to round the requested clock rate to the nearest
91          * supported rate that is less than or equal to the requested rate.
92          */
93         unsigned long (*round_rate) (struct clk *, unsigned long);
94         /*
95          * Function ptr to enable the clock. Leave blank if clock can not
96          * be gated.
97          */
98         int (*enable) (struct clk *);
99         /*
100          * Function ptr to disable the clock. Leave blank if clock can not
101          * be gated.
102          */
103         void (*disable) (struct clk *);
104         /* Function ptr to set the parent clock of the clock. */
105         int (*set_parent) (struct clk *, struct clk *);
106 };
107
108 u32 imx_get_uartclk(void);
109 u32 imx_get_fecclk(void);
110 unsigned int mxc_get_clock(enum mxc_clock clk);
111 int mxc_set_clock(u32 ref, u32 freq, enum mxc_clock clk);
112 void enable_usboh3_clk(unsigned char enable);
113 int enable_sata_clock(void);
114 int enable_i2c_clk(unsigned char enable, unsigned i2c_num);
115 void ipu_clk_enable(void);
116 void ipu_clk_disable(void);
117 void ocotp_clk_enable(void);
118 void ocotp_clk_disable(void);
119
120 #endif /* __ASM_ARCH_CLOCK_H */