Merge branch 'linux-next' of git://git.infradead.org/ubifs-2.6
[pandora-kernel.git] / arch / arm / mach-omap2 / clockdomains.h
1 /*
2  * OMAP2/3 clockdomains
3  *
4  * Copyright (C) 2008 Texas Instruments, Inc.
5  * Copyright (C) 2008 Nokia Corporation
6  *
7  * Written by Paul Walmsley
8  */
9
10 #ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
11 #define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
12
13 #include <mach/clockdomain.h>
14
15 /*
16  * OMAP2/3-common clockdomains
17  */
18
19 /* This is an implicit clockdomain - it is never defined as such in TRM */
20 static struct clockdomain wkup_clkdm = {
21         .name           = "wkup_clkdm",
22         .pwrdm_name     = "wkup_pwrdm",
23         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
24 };
25
26 /*
27  * 2420-only clockdomains
28  */
29
30 #if defined(CONFIG_ARCH_OMAP2420)
31
32 static struct clockdomain mpu_2420_clkdm = {
33         .name           = "mpu_clkdm",
34         .pwrdm_name     = "mpu_pwrdm",
35         .flags          = CLKDM_CAN_HWSUP,
36         .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
37         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
38 };
39
40 static struct clockdomain iva1_2420_clkdm = {
41         .name           = "iva1_clkdm",
42         .pwrdm_name     = "dsp_pwrdm",
43         .flags          = CLKDM_CAN_HWSUP_SWSUP,
44         .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
45         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
46 };
47
48 #endif  /* CONFIG_ARCH_OMAP2420 */
49
50
51 /*
52  * 2430-only clockdomains
53  */
54
55 #if defined(CONFIG_ARCH_OMAP2430)
56
57 static struct clockdomain mpu_2430_clkdm = {
58         .name           = "mpu_clkdm",
59         .pwrdm_name     = "mpu_pwrdm",
60         .flags          = CLKDM_CAN_HWSUP_SWSUP,
61         .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
62         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
63 };
64
65 static struct clockdomain mdm_clkdm = {
66         .name           = "mdm_clkdm",
67         .pwrdm_name     = "mdm_pwrdm",
68         .flags          = CLKDM_CAN_HWSUP_SWSUP,
69         .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
70         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
71 };
72
73 #endif    /* CONFIG_ARCH_OMAP2430 */
74
75
76 /*
77  * 24XX-only clockdomains
78  */
79
80 #if defined(CONFIG_ARCH_OMAP24XX)
81
82 static struct clockdomain dsp_clkdm = {
83         .name           = "dsp_clkdm",
84         .pwrdm_name     = "dsp_pwrdm",
85         .flags          = CLKDM_CAN_HWSUP_SWSUP,
86         .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
87         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
88 };
89
90 static struct clockdomain gfx_24xx_clkdm = {
91         .name           = "gfx_clkdm",
92         .pwrdm_name     = "gfx_pwrdm",
93         .flags          = CLKDM_CAN_HWSUP_SWSUP,
94         .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
95         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
96 };
97
98 static struct clockdomain core_l3_24xx_clkdm = {
99         .name           = "core_l3_clkdm",
100         .pwrdm_name     = "core_pwrdm",
101         .flags          = CLKDM_CAN_HWSUP,
102         .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
103         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
104 };
105
106 static struct clockdomain core_l4_24xx_clkdm = {
107         .name           = "core_l4_clkdm",
108         .pwrdm_name     = "core_pwrdm",
109         .flags          = CLKDM_CAN_HWSUP,
110         .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
111         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
112 };
113
114 static struct clockdomain dss_24xx_clkdm = {
115         .name           = "dss_clkdm",
116         .pwrdm_name     = "core_pwrdm",
117         .flags          = CLKDM_CAN_HWSUP,
118         .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
119         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
120 };
121
122 #endif   /* CONFIG_ARCH_OMAP24XX */
123
124
125 /*
126  * 34xx clockdomains
127  */
128
129 #if defined(CONFIG_ARCH_OMAP34XX)
130
131 static struct clockdomain mpu_34xx_clkdm = {
132         .name           = "mpu_clkdm",
133         .pwrdm_name     = "mpu_pwrdm",
134         .flags          = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
135         .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
136         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
137 };
138
139 static struct clockdomain neon_clkdm = {
140         .name           = "neon_clkdm",
141         .pwrdm_name     = "neon_pwrdm",
142         .flags          = CLKDM_CAN_HWSUP_SWSUP,
143         .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
144         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
145 };
146
147 static struct clockdomain iva2_clkdm = {
148         .name           = "iva2_clkdm",
149         .pwrdm_name     = "iva2_pwrdm",
150         .flags          = CLKDM_CAN_HWSUP_SWSUP,
151         .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
152         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
153 };
154
155 static struct clockdomain gfx_3430es1_clkdm = {
156         .name           = "gfx_clkdm",
157         .pwrdm_name     = "gfx_pwrdm",
158         .flags          = CLKDM_CAN_HWSUP_SWSUP,
159         .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
160         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
161 };
162
163 static struct clockdomain sgx_clkdm = {
164         .name           = "sgx_clkdm",
165         .pwrdm_name     = "sgx_pwrdm",
166         .flags          = CLKDM_CAN_HWSUP_SWSUP,
167         .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
168         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
169 };
170
171 /*
172  * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
173  * then that information was removed from the 34xx ES2+ TRM.  It is
174  * unclear whether the core is still there, but the clockdomain logic
175  * is there, and must be programmed to an appropriate state if the
176  * CORE clockdomain is to become inactive.
177  */
178 static struct clockdomain d2d_clkdm = {
179         .name           = "d2d_clkdm",
180         .pwrdm_name     = "core_pwrdm",
181         .flags          = CLKDM_CAN_HWSUP,
182         .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
183         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
184 };
185
186 static struct clockdomain core_l3_34xx_clkdm = {
187         .name           = "core_l3_clkdm",
188         .pwrdm_name     = "core_pwrdm",
189         .flags          = CLKDM_CAN_HWSUP,
190         .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
191         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
192 };
193
194 static struct clockdomain core_l4_34xx_clkdm = {
195         .name           = "core_l4_clkdm",
196         .pwrdm_name     = "core_pwrdm",
197         .flags          = CLKDM_CAN_HWSUP,
198         .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
199         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
200 };
201
202 static struct clockdomain dss_34xx_clkdm = {
203         .name           = "dss_clkdm",
204         .pwrdm_name     = "dss_pwrdm",
205         .flags          = CLKDM_CAN_HWSUP_SWSUP,
206         .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK,
207         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
208 };
209
210 static struct clockdomain cam_clkdm = {
211         .name           = "cam_clkdm",
212         .pwrdm_name     = "cam_pwrdm",
213         .flags          = CLKDM_CAN_HWSUP_SWSUP,
214         .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
215         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
216 };
217
218 static struct clockdomain usbhost_clkdm = {
219         .name           = "usbhost_clkdm",
220         .pwrdm_name     = "usbhost_pwrdm",
221         .flags          = CLKDM_CAN_HWSUP_SWSUP,
222         .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
223         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
224 };
225
226 static struct clockdomain per_clkdm = {
227         .name           = "per_clkdm",
228         .pwrdm_name     = "per_pwrdm",
229         .flags          = CLKDM_CAN_HWSUP_SWSUP,
230         .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
231         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
232 };
233
234 static struct clockdomain emu_clkdm = {
235         .name           = "emu_clkdm",
236         .pwrdm_name     = "emu_pwrdm",
237         .flags          = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_SWSUP,
238         .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
239         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
240 };
241
242 #endif   /* CONFIG_ARCH_OMAP34XX */
243
244 /*
245  * Clockdomain-powerdomain hwsup dependencies (34XX only)
246  */
247
248 static struct clkdm_pwrdm_autodep clkdm_pwrdm_autodeps[] = {
249         {
250                 .pwrdm_name = "mpu_pwrdm",
251                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
252         },
253         {
254                 .pwrdm_name = "iva2_pwrdm",
255                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
256         },
257         { NULL }
258 };
259
260 /*
261  *
262  */
263
264 static struct clockdomain *clockdomains_omap[] = {
265
266         &wkup_clkdm,
267
268 #ifdef CONFIG_ARCH_OMAP2420
269         &mpu_2420_clkdm,
270         &iva1_2420_clkdm,
271 #endif
272
273 #ifdef CONFIG_ARCH_OMAP2430
274         &mpu_2430_clkdm,
275         &mdm_clkdm,
276 #endif
277
278 #ifdef CONFIG_ARCH_OMAP24XX
279         &dsp_clkdm,
280         &gfx_24xx_clkdm,
281         &core_l3_24xx_clkdm,
282         &core_l4_24xx_clkdm,
283         &dss_24xx_clkdm,
284 #endif
285
286 #ifdef CONFIG_ARCH_OMAP34XX
287         &mpu_34xx_clkdm,
288         &neon_clkdm,
289         &iva2_clkdm,
290         &gfx_3430es1_clkdm,
291         &sgx_clkdm,
292         &d2d_clkdm,
293         &core_l3_34xx_clkdm,
294         &core_l4_34xx_clkdm,
295         &dss_34xx_clkdm,
296         &cam_clkdm,
297         &usbhost_clkdm,
298         &per_clkdm,
299         &emu_clkdm,
300 #endif
301
302         NULL,
303 };
304
305 #endif