blob: dd2f733649df79833e81219cc5a100c938c7ae4e [file] [log] [blame]
Benoit Cousson55d2cb02010-05-12 17:54:36 +02001/*
2 * Hardware modules present on the OMAP44xx chips
3 *
Benoit Coussond63bd742011-01-27 11:17:03 +00004 * Copyright (C) 2009-2011 Texas Instruments, Inc.
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 * Benoit Cousson
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21#include <linux/io.h>
22
23#include <plat/omap_hwmod.h>
24#include <plat/cpu.h>
Avinash.H.M6d3c55f2011-07-10 05:27:16 -060025#include <plat/i2c.h>
Benoit Cousson9780a9c2010-12-07 16:26:57 -080026#include <plat/gpio.h>
Benoit Cousson531ce0d2010-12-20 18:27:19 -080027#include <plat/dma.h>
Benoit Cousson905a74d2011-02-18 14:01:06 +010028#include <plat/mcspi.h>
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +053029#include <plat/mcbsp.h>
Kishore Kadiyala6ab89462011-03-01 13:12:56 -080030#include <plat/mmc.h>
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +053031#include <plat/dmtimer.h>
Tomi Valkeinen13662dc2011-11-08 03:16:13 -070032#include <plat/common.h>
Benoit Cousson55d2cb02010-05-12 17:54:36 +020033
34#include "omap_hwmod_common_data.h"
35
Shweta Gulaticea6b942012-02-29 23:33:37 +010036#include "smartreflex.h"
Paul Walmsleyd198b512010-12-21 15:30:54 -070037#include "cm1_44xx.h"
38#include "cm2_44xx.h"
39#include "prm44xx.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020040#include "prm-regbits-44xx.h"
Paul Walmsleyff2516f2010-12-21 15:39:15 -070041#include "wd_timer.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020042
43/* Base offset for all OMAP4 interrupts external to MPUSS */
44#define OMAP44XX_IRQ_GIC_START 32
45
46/* Base offset for all OMAP4 dma requests */
47#define OMAP44XX_DMA_REQ_START 1
48
49/* Backward references (IPs with Bus Master capability) */
Benoit Cousson407a6882011-02-15 22:39:48 +010050static struct omap_hwmod omap44xx_aess_hwmod;
Benoit Cousson531ce0d2010-12-20 18:27:19 -080051static struct omap_hwmod omap44xx_dma_system_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020052static struct omap_hwmod omap44xx_dmm_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070053static struct omap_hwmod omap44xx_dsp_hwmod;
Benoit Coussond63bd742011-01-27 11:17:03 +000054static struct omap_hwmod omap44xx_dss_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020055static struct omap_hwmod omap44xx_emif_fw_hwmod;
Benoit Cousson407a6882011-02-15 22:39:48 +010056static struct omap_hwmod omap44xx_hsi_hwmod;
57static struct omap_hwmod omap44xx_ipu_hwmod;
58static struct omap_hwmod omap44xx_iss_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070059static struct omap_hwmod omap44xx_iva_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020060static struct omap_hwmod omap44xx_l3_instr_hwmod;
61static struct omap_hwmod omap44xx_l3_main_1_hwmod;
62static struct omap_hwmod omap44xx_l3_main_2_hwmod;
63static struct omap_hwmod omap44xx_l3_main_3_hwmod;
64static struct omap_hwmod omap44xx_l4_abe_hwmod;
65static struct omap_hwmod omap44xx_l4_cfg_hwmod;
66static struct omap_hwmod omap44xx_l4_per_hwmod;
67static struct omap_hwmod omap44xx_l4_wkup_hwmod;
Benoit Cousson407a6882011-02-15 22:39:48 +010068static struct omap_hwmod omap44xx_mmc1_hwmod;
69static struct omap_hwmod omap44xx_mmc2_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020070static struct omap_hwmod omap44xx_mpu_hwmod;
71static struct omap_hwmod omap44xx_mpu_private_hwmod;
Benoit Cousson5844c4e2011-02-17 12:41:05 +000072static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
Benoit Coussonaf88fa92011-12-15 23:15:18 -070073static struct omap_hwmod omap44xx_usb_host_hs_hwmod;
74static struct omap_hwmod omap44xx_usb_tll_hs_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020075
76/*
77 * Interconnects omap_hwmod structures
78 * hwmods that compose the global OMAP interconnect
79 */
80
81/*
82 * 'dmm' class
83 * instance(s): dmm
84 */
85static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +000086 .name = "dmm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +020087};
88
Benoit Cousson7e69ed92011-07-09 19:14:28 -060089/* dmm */
90static struct omap_hwmod_irq_info omap44xx_dmm_irqs[] = {
91 { .irq = 113 + OMAP44XX_IRQ_GIC_START },
92 { .irq = -1 }
93};
94
Benoit Cousson55d2cb02010-05-12 17:54:36 +020095/* l3_main_1 -> dmm */
96static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
97 .master = &omap44xx_l3_main_1_hwmod,
98 .slave = &omap44xx_dmm_hwmod,
99 .clk = "l3_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700100 .user = OCP_USER_SDMA,
101};
102
103static struct omap_hwmod_addr_space omap44xx_dmm_addrs[] = {
104 {
105 .pa_start = 0x4e000000,
106 .pa_end = 0x4e0007ff,
107 .flags = ADDR_TYPE_RT
108 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600109 { }
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200110};
111
112/* mpu -> dmm */
113static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
114 .master = &omap44xx_mpu_hwmod,
115 .slave = &omap44xx_dmm_hwmod,
116 .clk = "l3_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700117 .addr = omap44xx_dmm_addrs,
Benoit Cousson659fa822010-12-21 21:08:34 -0700118 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200119};
120
121/* dmm slave ports */
122static struct omap_hwmod_ocp_if *omap44xx_dmm_slaves[] = {
123 &omap44xx_l3_main_1__dmm,
124 &omap44xx_mpu__dmm,
125};
126
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200127static struct omap_hwmod omap44xx_dmm_hwmod = {
128 .name = "dmm",
129 .class = &omap44xx_dmm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600130 .clkdm_name = "l3_emif_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600131 .prcm = {
132 .omap4 = {
133 .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600134 .context_offs = OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600135 },
136 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200137 .slaves = omap44xx_dmm_slaves,
138 .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves),
Benoit Coussona5322c62011-07-10 05:56:29 -0600139 .mpu_irqs = omap44xx_dmm_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200140};
141
142/*
143 * 'emif_fw' class
144 * instance(s): emif_fw
145 */
146static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000147 .name = "emif_fw",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200148};
149
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600150/* emif_fw */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200151/* dmm -> emif_fw */
152static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
153 .master = &omap44xx_dmm_hwmod,
154 .slave = &omap44xx_emif_fw_hwmod,
155 .clk = "l3_div_ck",
156 .user = OCP_USER_MPU | OCP_USER_SDMA,
157};
158
Benoit Cousson659fa822010-12-21 21:08:34 -0700159static struct omap_hwmod_addr_space omap44xx_emif_fw_addrs[] = {
160 {
161 .pa_start = 0x4a20c000,
162 .pa_end = 0x4a20c0ff,
163 .flags = ADDR_TYPE_RT
164 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600165 { }
Benoit Cousson659fa822010-12-21 21:08:34 -0700166};
167
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200168/* l4_cfg -> emif_fw */
169static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = {
170 .master = &omap44xx_l4_cfg_hwmod,
171 .slave = &omap44xx_emif_fw_hwmod,
172 .clk = "l4_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700173 .addr = omap44xx_emif_fw_addrs,
Benoit Cousson659fa822010-12-21 21:08:34 -0700174 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200175};
176
177/* emif_fw slave ports */
178static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = {
179 &omap44xx_dmm__emif_fw,
180 &omap44xx_l4_cfg__emif_fw,
181};
182
183static struct omap_hwmod omap44xx_emif_fw_hwmod = {
184 .name = "emif_fw",
185 .class = &omap44xx_emif_fw_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600186 .clkdm_name = "l3_emif_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600187 .prcm = {
188 .omap4 = {
189 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600190 .context_offs = OMAP4_RM_MEMIF_EMIF_FW_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600191 },
192 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200193 .slaves = omap44xx_emif_fw_slaves,
194 .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200195};
196
197/*
198 * 'l3' class
199 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
200 */
201static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000202 .name = "l3",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200203};
204
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600205/* l3_instr */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700206/* iva -> l3_instr */
207static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
208 .master = &omap44xx_iva_hwmod,
209 .slave = &omap44xx_l3_instr_hwmod,
210 .clk = "l3_div_ck",
211 .user = OCP_USER_MPU | OCP_USER_SDMA,
212};
213
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200214/* l3_main_3 -> l3_instr */
215static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
216 .master = &omap44xx_l3_main_3_hwmod,
217 .slave = &omap44xx_l3_instr_hwmod,
218 .clk = "l3_div_ck",
219 .user = OCP_USER_MPU | OCP_USER_SDMA,
220};
221
222/* l3_instr slave ports */
223static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700224 &omap44xx_iva__l3_instr,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200225 &omap44xx_l3_main_3__l3_instr,
226};
227
228static struct omap_hwmod omap44xx_l3_instr_hwmod = {
229 .name = "l3_instr",
230 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600231 .clkdm_name = "l3_instr_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600232 .prcm = {
233 .omap4 = {
234 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600235 .context_offs = OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -0600236 .modulemode = MODULEMODE_HWCTRL,
Benoit Coussond0f06312011-07-10 05:56:30 -0600237 },
238 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200239 .slaves = omap44xx_l3_instr_slaves,
240 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200241};
242
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600243/* l3_main_1 */
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600244static struct omap_hwmod_irq_info omap44xx_l3_main_1_irqs[] = {
245 { .name = "dbg_err", .irq = 9 + OMAP44XX_IRQ_GIC_START },
246 { .name = "app_err", .irq = 10 + OMAP44XX_IRQ_GIC_START },
247 { .irq = -1 }
248};
249
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700250/* dsp -> l3_main_1 */
251static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
252 .master = &omap44xx_dsp_hwmod,
253 .slave = &omap44xx_l3_main_1_hwmod,
254 .clk = "l3_div_ck",
255 .user = OCP_USER_MPU | OCP_USER_SDMA,
256};
257
Benoit Coussond63bd742011-01-27 11:17:03 +0000258/* dss -> l3_main_1 */
259static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
260 .master = &omap44xx_dss_hwmod,
261 .slave = &omap44xx_l3_main_1_hwmod,
262 .clk = "l3_div_ck",
263 .user = OCP_USER_MPU | OCP_USER_SDMA,
264};
265
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200266/* l3_main_2 -> l3_main_1 */
267static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
268 .master = &omap44xx_l3_main_2_hwmod,
269 .slave = &omap44xx_l3_main_1_hwmod,
270 .clk = "l3_div_ck",
271 .user = OCP_USER_MPU | OCP_USER_SDMA,
272};
273
274/* l4_cfg -> l3_main_1 */
275static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
276 .master = &omap44xx_l4_cfg_hwmod,
277 .slave = &omap44xx_l3_main_1_hwmod,
278 .clk = "l4_div_ck",
279 .user = OCP_USER_MPU | OCP_USER_SDMA,
280};
281
Benoit Cousson407a6882011-02-15 22:39:48 +0100282/* mmc1 -> l3_main_1 */
283static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
284 .master = &omap44xx_mmc1_hwmod,
285 .slave = &omap44xx_l3_main_1_hwmod,
286 .clk = "l3_div_ck",
287 .user = OCP_USER_MPU | OCP_USER_SDMA,
288};
289
290/* mmc2 -> l3_main_1 */
291static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
292 .master = &omap44xx_mmc2_hwmod,
293 .slave = &omap44xx_l3_main_1_hwmod,
294 .clk = "l3_div_ck",
295 .user = OCP_USER_MPU | OCP_USER_SDMA,
296};
297
sricharanc4645232011-02-07 21:12:11 +0530298static struct omap_hwmod_addr_space omap44xx_l3_main_1_addrs[] = {
299 {
300 .pa_start = 0x44000000,
301 .pa_end = 0x44000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600302 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530303 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600304 { }
sricharanc4645232011-02-07 21:12:11 +0530305};
306
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200307/* mpu -> l3_main_1 */
308static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
309 .master = &omap44xx_mpu_hwmod,
310 .slave = &omap44xx_l3_main_1_hwmod,
311 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530312 .addr = omap44xx_l3_main_1_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600313 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200314};
315
316/* l3_main_1 slave ports */
317static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700318 &omap44xx_dsp__l3_main_1,
Benoit Coussond63bd742011-01-27 11:17:03 +0000319 &omap44xx_dss__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200320 &omap44xx_l3_main_2__l3_main_1,
321 &omap44xx_l4_cfg__l3_main_1,
Benoit Cousson407a6882011-02-15 22:39:48 +0100322 &omap44xx_mmc1__l3_main_1,
323 &omap44xx_mmc2__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200324 &omap44xx_mpu__l3_main_1,
325};
326
327static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
328 .name = "l3_main_1",
329 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600330 .clkdm_name = "l3_1_clkdm",
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600331 .mpu_irqs = omap44xx_l3_main_1_irqs,
Benoit Coussond0f06312011-07-10 05:56:30 -0600332 .prcm = {
333 .omap4 = {
334 .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600335 .context_offs = OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600336 },
337 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200338 .slaves = omap44xx_l3_main_1_slaves,
339 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200340};
341
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600342/* l3_main_2 */
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000343/* dma_system -> l3_main_2 */
344static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
345 .master = &omap44xx_dma_system_hwmod,
346 .slave = &omap44xx_l3_main_2_hwmod,
347 .clk = "l3_div_ck",
348 .user = OCP_USER_MPU | OCP_USER_SDMA,
349};
350
Benoit Cousson407a6882011-02-15 22:39:48 +0100351/* hsi -> l3_main_2 */
352static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
353 .master = &omap44xx_hsi_hwmod,
354 .slave = &omap44xx_l3_main_2_hwmod,
355 .clk = "l3_div_ck",
356 .user = OCP_USER_MPU | OCP_USER_SDMA,
357};
358
359/* ipu -> l3_main_2 */
360static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
361 .master = &omap44xx_ipu_hwmod,
362 .slave = &omap44xx_l3_main_2_hwmod,
363 .clk = "l3_div_ck",
364 .user = OCP_USER_MPU | OCP_USER_SDMA,
365};
366
367/* iss -> l3_main_2 */
368static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
369 .master = &omap44xx_iss_hwmod,
370 .slave = &omap44xx_l3_main_2_hwmod,
371 .clk = "l3_div_ck",
372 .user = OCP_USER_MPU | OCP_USER_SDMA,
373};
374
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700375/* iva -> l3_main_2 */
376static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
377 .master = &omap44xx_iva_hwmod,
378 .slave = &omap44xx_l3_main_2_hwmod,
379 .clk = "l3_div_ck",
380 .user = OCP_USER_MPU | OCP_USER_SDMA,
381};
382
sricharanc4645232011-02-07 21:12:11 +0530383static struct omap_hwmod_addr_space omap44xx_l3_main_2_addrs[] = {
384 {
385 .pa_start = 0x44800000,
386 .pa_end = 0x44801fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600387 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530388 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600389 { }
sricharanc4645232011-02-07 21:12:11 +0530390};
391
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200392/* l3_main_1 -> l3_main_2 */
393static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
394 .master = &omap44xx_l3_main_1_hwmod,
395 .slave = &omap44xx_l3_main_2_hwmod,
396 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530397 .addr = omap44xx_l3_main_2_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600398 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200399};
400
401/* l4_cfg -> l3_main_2 */
402static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
403 .master = &omap44xx_l4_cfg_hwmod,
404 .slave = &omap44xx_l3_main_2_hwmod,
405 .clk = "l4_div_ck",
406 .user = OCP_USER_MPU | OCP_USER_SDMA,
407};
408
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000409/* usb_otg_hs -> l3_main_2 */
410static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
411 .master = &omap44xx_usb_otg_hs_hwmod,
412 .slave = &omap44xx_l3_main_2_hwmod,
413 .clk = "l3_div_ck",
414 .user = OCP_USER_MPU | OCP_USER_SDMA,
415};
416
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200417/* l3_main_2 slave ports */
418static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
Benoit Cousson531ce0d2010-12-20 18:27:19 -0800419 &omap44xx_dma_system__l3_main_2,
Benoit Cousson407a6882011-02-15 22:39:48 +0100420 &omap44xx_hsi__l3_main_2,
421 &omap44xx_ipu__l3_main_2,
422 &omap44xx_iss__l3_main_2,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700423 &omap44xx_iva__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200424 &omap44xx_l3_main_1__l3_main_2,
425 &omap44xx_l4_cfg__l3_main_2,
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000426 &omap44xx_usb_otg_hs__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200427};
428
429static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
430 .name = "l3_main_2",
431 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600432 .clkdm_name = "l3_2_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600433 .prcm = {
434 .omap4 = {
435 .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600436 .context_offs = OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600437 },
438 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200439 .slaves = omap44xx_l3_main_2_slaves,
440 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200441};
442
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600443/* l3_main_3 */
sricharanc4645232011-02-07 21:12:11 +0530444static struct omap_hwmod_addr_space omap44xx_l3_main_3_addrs[] = {
445 {
446 .pa_start = 0x45000000,
447 .pa_end = 0x45000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600448 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530449 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600450 { }
sricharanc4645232011-02-07 21:12:11 +0530451};
452
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200453/* l3_main_1 -> l3_main_3 */
454static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
455 .master = &omap44xx_l3_main_1_hwmod,
456 .slave = &omap44xx_l3_main_3_hwmod,
457 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530458 .addr = omap44xx_l3_main_3_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600459 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200460};
461
462/* l3_main_2 -> l3_main_3 */
463static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
464 .master = &omap44xx_l3_main_2_hwmod,
465 .slave = &omap44xx_l3_main_3_hwmod,
466 .clk = "l3_div_ck",
467 .user = OCP_USER_MPU | OCP_USER_SDMA,
468};
469
470/* l4_cfg -> l3_main_3 */
471static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
472 .master = &omap44xx_l4_cfg_hwmod,
473 .slave = &omap44xx_l3_main_3_hwmod,
474 .clk = "l4_div_ck",
475 .user = OCP_USER_MPU | OCP_USER_SDMA,
476};
477
478/* l3_main_3 slave ports */
479static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = {
480 &omap44xx_l3_main_1__l3_main_3,
481 &omap44xx_l3_main_2__l3_main_3,
482 &omap44xx_l4_cfg__l3_main_3,
483};
484
485static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
486 .name = "l3_main_3",
487 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600488 .clkdm_name = "l3_instr_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600489 .prcm = {
490 .omap4 = {
491 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600492 .context_offs = OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -0600493 .modulemode = MODULEMODE_HWCTRL,
Benoit Coussond0f06312011-07-10 05:56:30 -0600494 },
495 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200496 .slaves = omap44xx_l3_main_3_slaves,
497 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200498};
499
500/*
501 * 'l4' class
502 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
503 */
504static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000505 .name = "l4",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200506};
507
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600508/* l4_abe */
Benoit Cousson407a6882011-02-15 22:39:48 +0100509/* aess -> l4_abe */
510static struct omap_hwmod_ocp_if omap44xx_aess__l4_abe = {
511 .master = &omap44xx_aess_hwmod,
512 .slave = &omap44xx_l4_abe_hwmod,
513 .clk = "ocp_abe_iclk",
514 .user = OCP_USER_MPU | OCP_USER_SDMA,
515};
516
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700517/* dsp -> l4_abe */
518static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
519 .master = &omap44xx_dsp_hwmod,
520 .slave = &omap44xx_l4_abe_hwmod,
521 .clk = "ocp_abe_iclk",
522 .user = OCP_USER_MPU | OCP_USER_SDMA,
523};
524
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200525/* l3_main_1 -> l4_abe */
526static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
527 .master = &omap44xx_l3_main_1_hwmod,
528 .slave = &omap44xx_l4_abe_hwmod,
529 .clk = "l3_div_ck",
530 .user = OCP_USER_MPU | OCP_USER_SDMA,
531};
532
533/* mpu -> l4_abe */
534static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
535 .master = &omap44xx_mpu_hwmod,
536 .slave = &omap44xx_l4_abe_hwmod,
537 .clk = "ocp_abe_iclk",
538 .user = OCP_USER_MPU | OCP_USER_SDMA,
539};
540
541/* l4_abe slave ports */
542static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100543 &omap44xx_aess__l4_abe,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700544 &omap44xx_dsp__l4_abe,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200545 &omap44xx_l3_main_1__l4_abe,
546 &omap44xx_mpu__l4_abe,
547};
548
549static struct omap_hwmod omap44xx_l4_abe_hwmod = {
550 .name = "l4_abe",
551 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600552 .clkdm_name = "abe_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600553 .prcm = {
554 .omap4 = {
555 .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
556 },
557 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200558 .slaves = omap44xx_l4_abe_slaves,
559 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200560};
561
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600562/* l4_cfg */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200563/* l3_main_1 -> l4_cfg */
564static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
565 .master = &omap44xx_l3_main_1_hwmod,
566 .slave = &omap44xx_l4_cfg_hwmod,
567 .clk = "l3_div_ck",
568 .user = OCP_USER_MPU | OCP_USER_SDMA,
569};
570
571/* l4_cfg slave ports */
572static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = {
573 &omap44xx_l3_main_1__l4_cfg,
574};
575
576static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
577 .name = "l4_cfg",
578 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600579 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600580 .prcm = {
581 .omap4 = {
582 .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600583 .context_offs = OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600584 },
585 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200586 .slaves = omap44xx_l4_cfg_slaves,
587 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200588};
589
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600590/* l4_per */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200591/* l3_main_2 -> l4_per */
592static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
593 .master = &omap44xx_l3_main_2_hwmod,
594 .slave = &omap44xx_l4_per_hwmod,
595 .clk = "l3_div_ck",
596 .user = OCP_USER_MPU | OCP_USER_SDMA,
597};
598
599/* l4_per slave ports */
600static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = {
601 &omap44xx_l3_main_2__l4_per,
602};
603
604static struct omap_hwmod omap44xx_l4_per_hwmod = {
605 .name = "l4_per",
606 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600607 .clkdm_name = "l4_per_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600608 .prcm = {
609 .omap4 = {
610 .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600611 .context_offs = OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600612 },
613 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200614 .slaves = omap44xx_l4_per_slaves,
615 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200616};
617
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600618/* l4_wkup */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200619/* l4_cfg -> l4_wkup */
620static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
621 .master = &omap44xx_l4_cfg_hwmod,
622 .slave = &omap44xx_l4_wkup_hwmod,
623 .clk = "l4_div_ck",
624 .user = OCP_USER_MPU | OCP_USER_SDMA,
625};
626
627/* l4_wkup slave ports */
628static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = {
629 &omap44xx_l4_cfg__l4_wkup,
630};
631
632static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
633 .name = "l4_wkup",
634 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600635 .clkdm_name = "l4_wkup_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600636 .prcm = {
637 .omap4 = {
638 .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600639 .context_offs = OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600640 },
641 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200642 .slaves = omap44xx_l4_wkup_slaves,
643 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200644};
645
646/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700647 * 'mpu_bus' class
648 * instance(s): mpu_private
649 */
650static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000651 .name = "mpu_bus",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700652};
653
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600654/* mpu_private */
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700655/* mpu -> mpu_private */
656static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
657 .master = &omap44xx_mpu_hwmod,
658 .slave = &omap44xx_mpu_private_hwmod,
659 .clk = "l3_div_ck",
660 .user = OCP_USER_MPU | OCP_USER_SDMA,
661};
662
663/* mpu_private slave ports */
664static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = {
665 &omap44xx_mpu__mpu_private,
666};
667
668static struct omap_hwmod omap44xx_mpu_private_hwmod = {
669 .name = "mpu_private",
670 .class = &omap44xx_mpu_bus_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600671 .clkdm_name = "mpuss_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700672 .slaves = omap44xx_mpu_private_slaves,
673 .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700674};
675
676/*
677 * Modules omap_hwmod structures
678 *
679 * The following IPs are excluded for the moment because:
680 * - They do not need an explicit SW control using omap_hwmod API.
681 * - They still need to be validated with the driver
682 * properly adapted to omap_hwmod / omap_device
683 *
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700684 * c2c
685 * c2c_target_fw
686 * cm_core
687 * cm_core_aon
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700688 * ctrl_module_core
689 * ctrl_module_pad_core
690 * ctrl_module_pad_wkup
691 * ctrl_module_wkup
692 * debugss
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700693 * efuse_ctrl_cust
694 * efuse_ctrl_std
695 * elm
696 * emif1
697 * emif2
698 * fdif
699 * gpmc
700 * gpu
701 * hdq1w
Benoit Cousson00fe6102011-07-09 19:14:28 -0600702 * mcasp
703 * mpu_c0
704 * mpu_c1
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700705 * ocmc_ram
706 * ocp2scp_usb_phy
707 * ocp_wp_noc
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700708 * prcm_mpu
709 * prm
710 * scrm
711 * sl2if
712 * slimbus1
713 * slimbus2
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700714 * usb_host_fs
715 * usb_host_hs
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700716 * usb_phy_cm
717 * usb_tll_hs
718 * usim
719 */
720
721/*
Benoit Cousson407a6882011-02-15 22:39:48 +0100722 * 'aess' class
723 * audio engine sub system
724 */
725
726static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
727 .rev_offs = 0x0000,
728 .sysc_offs = 0x0010,
729 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
730 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
Benoit Coussonc614ebf2011-07-01 22:54:01 +0200731 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART |
732 MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +0100733 .sysc_fields = &omap_hwmod_sysc_type2,
734};
735
736static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
737 .name = "aess",
738 .sysc = &omap44xx_aess_sysc,
739};
740
741/* aess */
742static struct omap_hwmod_irq_info omap44xx_aess_irqs[] = {
743 { .irq = 99 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600744 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100745};
746
747static struct omap_hwmod_dma_info omap44xx_aess_sdma_reqs[] = {
748 { .name = "fifo0", .dma_req = 100 + OMAP44XX_DMA_REQ_START },
749 { .name = "fifo1", .dma_req = 101 + OMAP44XX_DMA_REQ_START },
750 { .name = "fifo2", .dma_req = 102 + OMAP44XX_DMA_REQ_START },
751 { .name = "fifo3", .dma_req = 103 + OMAP44XX_DMA_REQ_START },
752 { .name = "fifo4", .dma_req = 104 + OMAP44XX_DMA_REQ_START },
753 { .name = "fifo5", .dma_req = 105 + OMAP44XX_DMA_REQ_START },
754 { .name = "fifo6", .dma_req = 106 + OMAP44XX_DMA_REQ_START },
755 { .name = "fifo7", .dma_req = 107 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -0600756 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100757};
758
759/* aess master ports */
760static struct omap_hwmod_ocp_if *omap44xx_aess_masters[] = {
761 &omap44xx_aess__l4_abe,
762};
763
764static struct omap_hwmod_addr_space omap44xx_aess_addrs[] = {
765 {
766 .pa_start = 0x401f1000,
767 .pa_end = 0x401f13ff,
768 .flags = ADDR_TYPE_RT
769 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600770 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100771};
772
773/* l4_abe -> aess */
774static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess = {
775 .master = &omap44xx_l4_abe_hwmod,
776 .slave = &omap44xx_aess_hwmod,
777 .clk = "ocp_abe_iclk",
778 .addr = omap44xx_aess_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100779 .user = OCP_USER_MPU,
780};
781
782static struct omap_hwmod_addr_space omap44xx_aess_dma_addrs[] = {
783 {
784 .pa_start = 0x490f1000,
785 .pa_end = 0x490f13ff,
786 .flags = ADDR_TYPE_RT
787 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600788 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100789};
790
791/* l4_abe -> aess (dma) */
792static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess_dma = {
793 .master = &omap44xx_l4_abe_hwmod,
794 .slave = &omap44xx_aess_hwmod,
795 .clk = "ocp_abe_iclk",
796 .addr = omap44xx_aess_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100797 .user = OCP_USER_SDMA,
798};
799
800/* aess slave ports */
801static struct omap_hwmod_ocp_if *omap44xx_aess_slaves[] = {
802 &omap44xx_l4_abe__aess,
803 &omap44xx_l4_abe__aess_dma,
804};
805
806static struct omap_hwmod omap44xx_aess_hwmod = {
807 .name = "aess",
808 .class = &omap44xx_aess_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600809 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100810 .mpu_irqs = omap44xx_aess_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100811 .sdma_reqs = omap44xx_aess_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100812 .main_clk = "aess_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600813 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100814 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600815 .clkctrl_offs = OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600816 .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -0600817 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +0100818 },
819 },
820 .slaves = omap44xx_aess_slaves,
821 .slaves_cnt = ARRAY_SIZE(omap44xx_aess_slaves),
822 .masters = omap44xx_aess_masters,
823 .masters_cnt = ARRAY_SIZE(omap44xx_aess_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +0100824};
825
826/*
827 * 'bandgap' class
828 * bangap reference for ldo regulators
829 */
830
831static struct omap_hwmod_class omap44xx_bandgap_hwmod_class = {
832 .name = "bandgap",
833};
834
835/* bandgap */
836static struct omap_hwmod_opt_clk bandgap_opt_clks[] = {
837 { .role = "fclk", .clk = "bandgap_fclk" },
838};
839
840static struct omap_hwmod omap44xx_bandgap_hwmod = {
841 .name = "bandgap",
842 .class = &omap44xx_bandgap_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600843 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600844 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100845 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600846 .clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +0100847 },
848 },
849 .opt_clks = bandgap_opt_clks,
850 .opt_clks_cnt = ARRAY_SIZE(bandgap_opt_clks),
Benoit Cousson407a6882011-02-15 22:39:48 +0100851};
852
853/*
854 * 'counter' class
855 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
856 */
857
858static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
859 .rev_offs = 0x0000,
860 .sysc_offs = 0x0004,
861 .sysc_flags = SYSC_HAS_SIDLEMODE,
862 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
863 SIDLE_SMART_WKUP),
864 .sysc_fields = &omap_hwmod_sysc_type1,
865};
866
867static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
868 .name = "counter",
869 .sysc = &omap44xx_counter_sysc,
870};
871
872/* counter_32k */
873static struct omap_hwmod omap44xx_counter_32k_hwmod;
874static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = {
875 {
876 .pa_start = 0x4a304000,
877 .pa_end = 0x4a30401f,
878 .flags = ADDR_TYPE_RT
879 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600880 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100881};
882
883/* l4_wkup -> counter_32k */
884static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
885 .master = &omap44xx_l4_wkup_hwmod,
886 .slave = &omap44xx_counter_32k_hwmod,
887 .clk = "l4_wkup_clk_mux_ck",
888 .addr = omap44xx_counter_32k_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100889 .user = OCP_USER_MPU | OCP_USER_SDMA,
890};
891
892/* counter_32k slave ports */
893static struct omap_hwmod_ocp_if *omap44xx_counter_32k_slaves[] = {
894 &omap44xx_l4_wkup__counter_32k,
895};
896
897static struct omap_hwmod omap44xx_counter_32k_hwmod = {
898 .name = "counter_32k",
899 .class = &omap44xx_counter_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600900 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100901 .flags = HWMOD_SWSUP_SIDLE,
902 .main_clk = "sys_32k_ck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600903 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100904 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600905 .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600906 .context_offs = OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +0100907 },
908 },
909 .slaves = omap44xx_counter_32k_slaves,
910 .slaves_cnt = ARRAY_SIZE(omap44xx_counter_32k_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +0100911};
912
913/*
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000914 * 'dma' class
915 * dma controller for data exchange between memory to memory (i.e. internal or
916 * external memory) and gp peripherals to memory or memory to gp peripherals
917 */
918
919static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
920 .rev_offs = 0x0000,
921 .sysc_offs = 0x002c,
922 .syss_offs = 0x0028,
923 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
924 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
925 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
926 SYSS_HAS_RESET_STATUS),
927 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
928 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
929 .sysc_fields = &omap_hwmod_sysc_type1,
930};
931
932static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
933 .name = "dma",
934 .sysc = &omap44xx_dma_sysc,
935};
936
937/* dma dev_attr */
938static struct omap_dma_dev_attr dma_dev_attr = {
939 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
940 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
941 .lch_count = 32,
942};
943
944/* dma_system */
945static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
946 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
947 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
948 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
949 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600950 { .irq = -1 }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000951};
952
953/* dma_system master ports */
954static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
955 &omap44xx_dma_system__l3_main_2,
956};
957
958static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
959 {
960 .pa_start = 0x4a056000,
Benoit Cousson1286eeb2011-04-19 10:15:36 -0600961 .pa_end = 0x4a056fff,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000962 .flags = ADDR_TYPE_RT
963 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600964 { }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000965};
966
967/* l4_cfg -> dma_system */
968static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
969 .master = &omap44xx_l4_cfg_hwmod,
970 .slave = &omap44xx_dma_system_hwmod,
971 .clk = "l4_div_ck",
972 .addr = omap44xx_dma_system_addrs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000973 .user = OCP_USER_MPU | OCP_USER_SDMA,
974};
975
976/* dma_system slave ports */
977static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
978 &omap44xx_l4_cfg__dma_system,
979};
980
981static struct omap_hwmod omap44xx_dma_system_hwmod = {
982 .name = "dma_system",
983 .class = &omap44xx_dma_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600984 .clkdm_name = "l3_dma_clkdm",
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000985 .mpu_irqs = omap44xx_dma_system_irqs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000986 .main_clk = "l3_div_ck",
987 .prcm = {
988 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600989 .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600990 .context_offs = OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000991 },
992 },
993 .dev_attr = &dma_dev_attr,
994 .slaves = omap44xx_dma_system_slaves,
995 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
996 .masters = omap44xx_dma_system_masters,
997 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000998};
999
1000/*
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001001 * 'dmic' class
1002 * digital microphone controller
1003 */
1004
1005static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
1006 .rev_offs = 0x0000,
1007 .sysc_offs = 0x0010,
1008 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1009 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1010 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1011 SIDLE_SMART_WKUP),
1012 .sysc_fields = &omap_hwmod_sysc_type2,
1013};
1014
1015static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
1016 .name = "dmic",
1017 .sysc = &omap44xx_dmic_sysc,
1018};
1019
1020/* dmic */
1021static struct omap_hwmod omap44xx_dmic_hwmod;
1022static struct omap_hwmod_irq_info omap44xx_dmic_irqs[] = {
1023 { .irq = 114 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001024 { .irq = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001025};
1026
1027static struct omap_hwmod_dma_info omap44xx_dmic_sdma_reqs[] = {
1028 { .dma_req = 66 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001029 { .dma_req = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001030};
1031
1032static struct omap_hwmod_addr_space omap44xx_dmic_addrs[] = {
1033 {
Peter Ujfalusi6af486e2011-11-28 15:45:39 +02001034 .name = "mpu",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001035 .pa_start = 0x4012e000,
1036 .pa_end = 0x4012e07f,
1037 .flags = ADDR_TYPE_RT
1038 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001039 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001040};
1041
1042/* l4_abe -> dmic */
1043static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
1044 .master = &omap44xx_l4_abe_hwmod,
1045 .slave = &omap44xx_dmic_hwmod,
1046 .clk = "ocp_abe_iclk",
1047 .addr = omap44xx_dmic_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001048 .user = OCP_USER_MPU,
1049};
1050
1051static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
1052 {
Peter Ujfalusi6af486e2011-11-28 15:45:39 +02001053 .name = "dma",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001054 .pa_start = 0x4902e000,
1055 .pa_end = 0x4902e07f,
1056 .flags = ADDR_TYPE_RT
1057 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001058 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001059};
1060
1061/* l4_abe -> dmic (dma) */
1062static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
1063 .master = &omap44xx_l4_abe_hwmod,
1064 .slave = &omap44xx_dmic_hwmod,
1065 .clk = "ocp_abe_iclk",
1066 .addr = omap44xx_dmic_dma_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001067 .user = OCP_USER_SDMA,
1068};
1069
1070/* dmic slave ports */
1071static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
1072 &omap44xx_l4_abe__dmic,
1073 &omap44xx_l4_abe__dmic_dma,
1074};
1075
1076static struct omap_hwmod omap44xx_dmic_hwmod = {
1077 .name = "dmic",
1078 .class = &omap44xx_dmic_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001079 .clkdm_name = "abe_clkdm",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001080 .mpu_irqs = omap44xx_dmic_irqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001081 .sdma_reqs = omap44xx_dmic_sdma_reqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001082 .main_clk = "dmic_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06001083 .prcm = {
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001084 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001085 .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001086 .context_offs = OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001087 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001088 },
1089 },
1090 .slaves = omap44xx_dmic_slaves,
1091 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001092};
1093
1094/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001095 * 'dsp' class
1096 * dsp sub-system
1097 */
1098
1099static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001100 .name = "dsp",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001101};
1102
1103/* dsp */
1104static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
1105 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001106 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001107};
1108
1109static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001110 { .name = "dsp", .rst_shift = 0 },
Paul Walmsleyf2f57362012-04-18 19:10:02 -06001111 { .name = "mmu_cache", .rst_shift = 1 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001112};
1113
1114/* dsp -> iva */
1115static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1116 .master = &omap44xx_dsp_hwmod,
1117 .slave = &omap44xx_iva_hwmod,
1118 .clk = "dpll_iva_m5x2_ck",
1119};
1120
1121/* dsp master ports */
1122static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
1123 &omap44xx_dsp__l3_main_1,
1124 &omap44xx_dsp__l4_abe,
1125 &omap44xx_dsp__iva,
1126};
1127
1128/* l4_cfg -> dsp */
1129static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1130 .master = &omap44xx_l4_cfg_hwmod,
1131 .slave = &omap44xx_dsp_hwmod,
1132 .clk = "l4_div_ck",
1133 .user = OCP_USER_MPU | OCP_USER_SDMA,
1134};
1135
1136/* dsp slave ports */
1137static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
1138 &omap44xx_l4_cfg__dsp,
1139};
1140
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001141static struct omap_hwmod omap44xx_dsp_hwmod = {
1142 .name = "dsp",
1143 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001144 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001145 .mpu_irqs = omap44xx_dsp_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001146 .rst_lines = omap44xx_dsp_resets,
1147 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
1148 .main_clk = "dsp_fck",
1149 .prcm = {
1150 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001151 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06001152 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001153 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001154 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001155 },
1156 },
1157 .slaves = omap44xx_dsp_slaves,
1158 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
1159 .masters = omap44xx_dsp_masters,
1160 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001161};
1162
1163/*
Benoit Coussond63bd742011-01-27 11:17:03 +00001164 * 'dss' class
1165 * display sub-system
1166 */
1167
1168static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
1169 .rev_offs = 0x0000,
1170 .syss_offs = 0x0014,
1171 .sysc_flags = SYSS_HAS_RESET_STATUS,
1172};
1173
1174static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
1175 .name = "dss",
1176 .sysc = &omap44xx_dss_sysc,
Tomi Valkeinen13662dc2011-11-08 03:16:13 -07001177 .reset = omap_dss_reset,
Benoit Coussond63bd742011-01-27 11:17:03 +00001178};
1179
1180/* dss */
1181/* dss master ports */
1182static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
1183 &omap44xx_dss__l3_main_1,
1184};
1185
1186static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
1187 {
1188 .pa_start = 0x58000000,
1189 .pa_end = 0x5800007f,
1190 .flags = ADDR_TYPE_RT
1191 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001192 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001193};
1194
1195/* l3_main_2 -> dss */
1196static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1197 .master = &omap44xx_l3_main_2_hwmod,
1198 .slave = &omap44xx_dss_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001199 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001200 .addr = omap44xx_dss_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001201 .user = OCP_USER_SDMA,
1202};
1203
1204static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
1205 {
1206 .pa_start = 0x48040000,
1207 .pa_end = 0x4804007f,
1208 .flags = ADDR_TYPE_RT
1209 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001210 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001211};
1212
1213/* l4_per -> dss */
1214static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1215 .master = &omap44xx_l4_per_hwmod,
1216 .slave = &omap44xx_dss_hwmod,
1217 .clk = "l4_div_ck",
1218 .addr = omap44xx_dss_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001219 .user = OCP_USER_MPU,
1220};
1221
1222/* dss slave ports */
1223static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
1224 &omap44xx_l3_main_2__dss,
1225 &omap44xx_l4_per__dss,
1226};
1227
1228static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1229 { .role = "sys_clk", .clk = "dss_sys_clk" },
1230 { .role = "tv_clk", .clk = "dss_tv_clk" },
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001231 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
Benoit Coussond63bd742011-01-27 11:17:03 +00001232};
1233
1234static struct omap_hwmod omap44xx_dss_hwmod = {
1235 .name = "dss_core",
Tomi Valkeinen37ad0852011-11-08 03:16:11 -07001236 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001237 .class = &omap44xx_dss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001238 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001239 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001240 .prcm = {
1241 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001242 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001243 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001244 },
1245 },
1246 .opt_clks = dss_opt_clks,
1247 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1248 .slaves = omap44xx_dss_slaves,
1249 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
1250 .masters = omap44xx_dss_masters,
1251 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
Benoit Coussond63bd742011-01-27 11:17:03 +00001252};
1253
1254/*
1255 * 'dispc' class
1256 * display controller
1257 */
1258
1259static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
1260 .rev_offs = 0x0000,
1261 .sysc_offs = 0x0010,
1262 .syss_offs = 0x0014,
1263 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1264 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
1265 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1266 SYSS_HAS_RESET_STATUS),
1267 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1268 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1269 .sysc_fields = &omap_hwmod_sysc_type1,
1270};
1271
1272static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
1273 .name = "dispc",
1274 .sysc = &omap44xx_dispc_sysc,
1275};
1276
1277/* dss_dispc */
1278static struct omap_hwmod omap44xx_dss_dispc_hwmod;
1279static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
1280 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001281 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001282};
1283
1284static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
1285 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001286 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001287};
1288
1289static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
1290 {
1291 .pa_start = 0x58001000,
1292 .pa_end = 0x58001fff,
1293 .flags = ADDR_TYPE_RT
1294 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001295 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001296};
1297
1298/* l3_main_2 -> dss_dispc */
1299static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1300 .master = &omap44xx_l3_main_2_hwmod,
1301 .slave = &omap44xx_dss_dispc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001302 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001303 .addr = omap44xx_dss_dispc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001304 .user = OCP_USER_SDMA,
1305};
1306
1307static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
1308 {
1309 .pa_start = 0x48041000,
1310 .pa_end = 0x48041fff,
1311 .flags = ADDR_TYPE_RT
1312 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001313 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001314};
1315
Archit Tanejab923d402011-10-06 18:04:08 -06001316static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
1317 .manager_count = 3,
1318 .has_framedonetv_irq = 1
1319};
1320
Benoit Coussond63bd742011-01-27 11:17:03 +00001321/* l4_per -> dss_dispc */
1322static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1323 .master = &omap44xx_l4_per_hwmod,
1324 .slave = &omap44xx_dss_dispc_hwmod,
1325 .clk = "l4_div_ck",
1326 .addr = omap44xx_dss_dispc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001327 .user = OCP_USER_MPU,
1328};
1329
1330/* dss_dispc slave ports */
1331static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
1332 &omap44xx_l3_main_2__dss_dispc,
1333 &omap44xx_l4_per__dss_dispc,
1334};
1335
1336static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
1337 .name = "dss_dispc",
1338 .class = &omap44xx_dispc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001339 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001340 .mpu_irqs = omap44xx_dss_dispc_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001341 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001342 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001343 .prcm = {
1344 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001345 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001346 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001347 },
1348 },
1349 .slaves = omap44xx_dss_dispc_slaves,
1350 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
Archit Tanejab923d402011-10-06 18:04:08 -06001351 .dev_attr = &omap44xx_dss_dispc_dev_attr
Benoit Coussond63bd742011-01-27 11:17:03 +00001352};
1353
1354/*
1355 * 'dsi' class
1356 * display serial interface controller
1357 */
1358
1359static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1360 .rev_offs = 0x0000,
1361 .sysc_offs = 0x0010,
1362 .syss_offs = 0x0014,
1363 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1364 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1365 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1366 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1367 .sysc_fields = &omap_hwmod_sysc_type1,
1368};
1369
1370static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1371 .name = "dsi",
1372 .sysc = &omap44xx_dsi_sysc,
1373};
1374
1375/* dss_dsi1 */
1376static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1377static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1378 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001379 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001380};
1381
1382static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1383 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001384 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001385};
1386
1387static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1388 {
1389 .pa_start = 0x58004000,
1390 .pa_end = 0x580041ff,
1391 .flags = ADDR_TYPE_RT
1392 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001393 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001394};
1395
1396/* l3_main_2 -> dss_dsi1 */
1397static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1398 .master = &omap44xx_l3_main_2_hwmod,
1399 .slave = &omap44xx_dss_dsi1_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001400 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001401 .addr = omap44xx_dss_dsi1_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001402 .user = OCP_USER_SDMA,
1403};
1404
1405static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1406 {
1407 .pa_start = 0x48044000,
1408 .pa_end = 0x480441ff,
1409 .flags = ADDR_TYPE_RT
1410 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001411 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001412};
1413
1414/* l4_per -> dss_dsi1 */
1415static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1416 .master = &omap44xx_l4_per_hwmod,
1417 .slave = &omap44xx_dss_dsi1_hwmod,
1418 .clk = "l4_div_ck",
1419 .addr = omap44xx_dss_dsi1_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001420 .user = OCP_USER_MPU,
1421};
1422
1423/* dss_dsi1 slave ports */
1424static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1425 &omap44xx_l3_main_2__dss_dsi1,
1426 &omap44xx_l4_per__dss_dsi1,
1427};
1428
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001429static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
1430 { .role = "sys_clk", .clk = "dss_sys_clk" },
1431};
1432
Benoit Coussond63bd742011-01-27 11:17:03 +00001433static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1434 .name = "dss_dsi1",
1435 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001436 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001437 .mpu_irqs = omap44xx_dss_dsi1_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001438 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001439 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001440 .prcm = {
1441 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001442 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001443 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001444 },
1445 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001446 .opt_clks = dss_dsi1_opt_clks,
1447 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001448 .slaves = omap44xx_dss_dsi1_slaves,
1449 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001450};
1451
1452/* dss_dsi2 */
1453static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1454static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1455 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001456 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001457};
1458
1459static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1460 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001461 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001462};
1463
1464static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1465 {
1466 .pa_start = 0x58005000,
1467 .pa_end = 0x580051ff,
1468 .flags = ADDR_TYPE_RT
1469 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001470 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001471};
1472
1473/* l3_main_2 -> dss_dsi2 */
1474static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1475 .master = &omap44xx_l3_main_2_hwmod,
1476 .slave = &omap44xx_dss_dsi2_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001477 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001478 .addr = omap44xx_dss_dsi2_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001479 .user = OCP_USER_SDMA,
1480};
1481
1482static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1483 {
1484 .pa_start = 0x48045000,
1485 .pa_end = 0x480451ff,
1486 .flags = ADDR_TYPE_RT
1487 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001488 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001489};
1490
1491/* l4_per -> dss_dsi2 */
1492static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1493 .master = &omap44xx_l4_per_hwmod,
1494 .slave = &omap44xx_dss_dsi2_hwmod,
1495 .clk = "l4_div_ck",
1496 .addr = omap44xx_dss_dsi2_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001497 .user = OCP_USER_MPU,
1498};
1499
1500/* dss_dsi2 slave ports */
1501static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1502 &omap44xx_l3_main_2__dss_dsi2,
1503 &omap44xx_l4_per__dss_dsi2,
1504};
1505
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001506static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
1507 { .role = "sys_clk", .clk = "dss_sys_clk" },
1508};
1509
Benoit Coussond63bd742011-01-27 11:17:03 +00001510static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1511 .name = "dss_dsi2",
1512 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001513 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001514 .mpu_irqs = omap44xx_dss_dsi2_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001515 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001516 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001517 .prcm = {
1518 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001519 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001520 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001521 },
1522 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001523 .opt_clks = dss_dsi2_opt_clks,
1524 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001525 .slaves = omap44xx_dss_dsi2_slaves,
1526 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001527};
1528
1529/*
1530 * 'hdmi' class
1531 * hdmi controller
1532 */
1533
1534static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1535 .rev_offs = 0x0000,
1536 .sysc_offs = 0x0010,
1537 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1538 SYSC_HAS_SOFTRESET),
1539 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1540 SIDLE_SMART_WKUP),
1541 .sysc_fields = &omap_hwmod_sysc_type2,
1542};
1543
1544static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1545 .name = "hdmi",
1546 .sysc = &omap44xx_hdmi_sysc,
1547};
1548
1549/* dss_hdmi */
1550static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1551static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1552 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001553 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001554};
1555
1556static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1557 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001558 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001559};
1560
1561static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1562 {
1563 .pa_start = 0x58006000,
1564 .pa_end = 0x58006fff,
1565 .flags = ADDR_TYPE_RT
1566 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001567 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001568};
1569
1570/* l3_main_2 -> dss_hdmi */
1571static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1572 .master = &omap44xx_l3_main_2_hwmod,
1573 .slave = &omap44xx_dss_hdmi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001574 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001575 .addr = omap44xx_dss_hdmi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001576 .user = OCP_USER_SDMA,
1577};
1578
1579static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1580 {
1581 .pa_start = 0x48046000,
1582 .pa_end = 0x48046fff,
1583 .flags = ADDR_TYPE_RT
1584 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001585 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001586};
1587
1588/* l4_per -> dss_hdmi */
1589static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1590 .master = &omap44xx_l4_per_hwmod,
1591 .slave = &omap44xx_dss_hdmi_hwmod,
1592 .clk = "l4_div_ck",
1593 .addr = omap44xx_dss_hdmi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001594 .user = OCP_USER_MPU,
1595};
1596
1597/* dss_hdmi slave ports */
1598static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1599 &omap44xx_l3_main_2__dss_hdmi,
1600 &omap44xx_l4_per__dss_hdmi,
1601};
1602
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001603static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
1604 { .role = "sys_clk", .clk = "dss_sys_clk" },
1605};
1606
Benoit Coussond63bd742011-01-27 11:17:03 +00001607static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1608 .name = "dss_hdmi",
1609 .class = &omap44xx_hdmi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001610 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001611 .mpu_irqs = omap44xx_dss_hdmi_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001612 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001613 .main_clk = "dss_48mhz_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001614 .prcm = {
1615 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001616 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001617 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001618 },
1619 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001620 .opt_clks = dss_hdmi_opt_clks,
1621 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001622 .slaves = omap44xx_dss_hdmi_slaves,
1623 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001624};
1625
1626/*
1627 * 'rfbi' class
1628 * remote frame buffer interface
1629 */
1630
1631static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1632 .rev_offs = 0x0000,
1633 .sysc_offs = 0x0010,
1634 .syss_offs = 0x0014,
1635 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1636 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1637 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1638 .sysc_fields = &omap_hwmod_sysc_type1,
1639};
1640
1641static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1642 .name = "rfbi",
1643 .sysc = &omap44xx_rfbi_sysc,
1644};
1645
1646/* dss_rfbi */
1647static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1648static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1649 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001650 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001651};
1652
1653static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1654 {
1655 .pa_start = 0x58002000,
1656 .pa_end = 0x580020ff,
1657 .flags = ADDR_TYPE_RT
1658 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001659 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001660};
1661
1662/* l3_main_2 -> dss_rfbi */
1663static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1664 .master = &omap44xx_l3_main_2_hwmod,
1665 .slave = &omap44xx_dss_rfbi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001666 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001667 .addr = omap44xx_dss_rfbi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001668 .user = OCP_USER_SDMA,
1669};
1670
1671static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1672 {
1673 .pa_start = 0x48042000,
1674 .pa_end = 0x480420ff,
1675 .flags = ADDR_TYPE_RT
1676 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001677 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001678};
1679
1680/* l4_per -> dss_rfbi */
1681static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1682 .master = &omap44xx_l4_per_hwmod,
1683 .slave = &omap44xx_dss_rfbi_hwmod,
1684 .clk = "l4_div_ck",
1685 .addr = omap44xx_dss_rfbi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001686 .user = OCP_USER_MPU,
1687};
1688
1689/* dss_rfbi slave ports */
1690static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1691 &omap44xx_l3_main_2__dss_rfbi,
1692 &omap44xx_l4_per__dss_rfbi,
1693};
1694
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001695static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
1696 { .role = "ick", .clk = "dss_fck" },
1697};
1698
Benoit Coussond63bd742011-01-27 11:17:03 +00001699static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1700 .name = "dss_rfbi",
1701 .class = &omap44xx_rfbi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001702 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001703 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001704 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001705 .prcm = {
1706 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001707 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001708 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001709 },
1710 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001711 .opt_clks = dss_rfbi_opt_clks,
1712 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001713 .slaves = omap44xx_dss_rfbi_slaves,
1714 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001715};
1716
1717/*
1718 * 'venc' class
1719 * video encoder
1720 */
1721
1722static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1723 .name = "venc",
1724};
1725
1726/* dss_venc */
1727static struct omap_hwmod omap44xx_dss_venc_hwmod;
1728static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1729 {
1730 .pa_start = 0x58003000,
1731 .pa_end = 0x580030ff,
1732 .flags = ADDR_TYPE_RT
1733 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001734 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001735};
1736
1737/* l3_main_2 -> dss_venc */
1738static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1739 .master = &omap44xx_l3_main_2_hwmod,
1740 .slave = &omap44xx_dss_venc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001741 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001742 .addr = omap44xx_dss_venc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001743 .user = OCP_USER_SDMA,
1744};
1745
1746static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1747 {
1748 .pa_start = 0x48043000,
1749 .pa_end = 0x480430ff,
1750 .flags = ADDR_TYPE_RT
1751 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001752 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001753};
1754
1755/* l4_per -> dss_venc */
1756static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1757 .master = &omap44xx_l4_per_hwmod,
1758 .slave = &omap44xx_dss_venc_hwmod,
1759 .clk = "l4_div_ck",
1760 .addr = omap44xx_dss_venc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001761 .user = OCP_USER_MPU,
1762};
1763
1764/* dss_venc slave ports */
1765static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1766 &omap44xx_l3_main_2__dss_venc,
1767 &omap44xx_l4_per__dss_venc,
1768};
1769
1770static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1771 .name = "dss_venc",
1772 .class = &omap44xx_venc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001773 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001774 .main_clk = "dss_tv_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001775 .prcm = {
1776 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001777 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001778 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001779 },
1780 },
1781 .slaves = omap44xx_dss_venc_slaves,
1782 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001783};
1784
1785/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001786 * 'gpio' class
1787 * general purpose io module
1788 */
1789
1790static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1791 .rev_offs = 0x0000,
1792 .sysc_offs = 0x0010,
1793 .syss_offs = 0x0114,
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001794 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1795 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1796 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001797 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1798 SIDLE_SMART_WKUP),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001799 .sysc_fields = &omap_hwmod_sysc_type1,
1800};
1801
1802static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001803 .name = "gpio",
1804 .sysc = &omap44xx_gpio_sysc,
1805 .rev = 2,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001806};
1807
1808/* gpio dev_attr */
1809static struct omap_gpio_dev_attr gpio_dev_attr = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001810 .bank_width = 32,
1811 .dbck_flag = true,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001812};
1813
1814/* gpio1 */
1815static struct omap_hwmod omap44xx_gpio1_hwmod;
1816static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1817 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001818 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001819};
1820
1821static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1822 {
1823 .pa_start = 0x4a310000,
1824 .pa_end = 0x4a3101ff,
1825 .flags = ADDR_TYPE_RT
1826 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001827 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001828};
1829
1830/* l4_wkup -> gpio1 */
1831static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1832 .master = &omap44xx_l4_wkup_hwmod,
1833 .slave = &omap44xx_gpio1_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001834 .clk = "l4_wkup_clk_mux_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001835 .addr = omap44xx_gpio1_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001836 .user = OCP_USER_MPU | OCP_USER_SDMA,
1837};
1838
1839/* gpio1 slave ports */
1840static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1841 &omap44xx_l4_wkup__gpio1,
1842};
1843
1844static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001845 { .role = "dbclk", .clk = "gpio1_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001846};
1847
1848static struct omap_hwmod omap44xx_gpio1_hwmod = {
1849 .name = "gpio1",
1850 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001851 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001852 .mpu_irqs = omap44xx_gpio1_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001853 .main_clk = "gpio1_ick",
1854 .prcm = {
1855 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001856 .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001857 .context_offs = OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001858 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001859 },
1860 },
1861 .opt_clks = gpio1_opt_clks,
1862 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1863 .dev_attr = &gpio_dev_attr,
1864 .slaves = omap44xx_gpio1_slaves,
1865 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001866};
1867
1868/* gpio2 */
1869static struct omap_hwmod omap44xx_gpio2_hwmod;
1870static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1871 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001872 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001873};
1874
1875static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1876 {
1877 .pa_start = 0x48055000,
1878 .pa_end = 0x480551ff,
1879 .flags = ADDR_TYPE_RT
1880 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001881 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001882};
1883
1884/* l4_per -> gpio2 */
1885static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1886 .master = &omap44xx_l4_per_hwmod,
1887 .slave = &omap44xx_gpio2_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001888 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001889 .addr = omap44xx_gpio2_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001890 .user = OCP_USER_MPU | OCP_USER_SDMA,
1891};
1892
1893/* gpio2 slave ports */
1894static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1895 &omap44xx_l4_per__gpio2,
1896};
1897
1898static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001899 { .role = "dbclk", .clk = "gpio2_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001900};
1901
1902static struct omap_hwmod omap44xx_gpio2_hwmod = {
1903 .name = "gpio2",
1904 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001905 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001906 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001907 .mpu_irqs = omap44xx_gpio2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001908 .main_clk = "gpio2_ick",
1909 .prcm = {
1910 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001911 .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001912 .context_offs = OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001913 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001914 },
1915 },
1916 .opt_clks = gpio2_opt_clks,
1917 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1918 .dev_attr = &gpio_dev_attr,
1919 .slaves = omap44xx_gpio2_slaves,
1920 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001921};
1922
1923/* gpio3 */
1924static struct omap_hwmod omap44xx_gpio3_hwmod;
1925static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1926 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001927 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001928};
1929
1930static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1931 {
1932 .pa_start = 0x48057000,
1933 .pa_end = 0x480571ff,
1934 .flags = ADDR_TYPE_RT
1935 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001936 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001937};
1938
1939/* l4_per -> gpio3 */
1940static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1941 .master = &omap44xx_l4_per_hwmod,
1942 .slave = &omap44xx_gpio3_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001943 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001944 .addr = omap44xx_gpio3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001945 .user = OCP_USER_MPU | OCP_USER_SDMA,
1946};
1947
1948/* gpio3 slave ports */
1949static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1950 &omap44xx_l4_per__gpio3,
1951};
1952
1953static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001954 { .role = "dbclk", .clk = "gpio3_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001955};
1956
1957static struct omap_hwmod omap44xx_gpio3_hwmod = {
1958 .name = "gpio3",
1959 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001960 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001961 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001962 .mpu_irqs = omap44xx_gpio3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001963 .main_clk = "gpio3_ick",
1964 .prcm = {
1965 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001966 .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001967 .context_offs = OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001968 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001969 },
1970 },
1971 .opt_clks = gpio3_opt_clks,
1972 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1973 .dev_attr = &gpio_dev_attr,
1974 .slaves = omap44xx_gpio3_slaves,
1975 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001976};
1977
1978/* gpio4 */
1979static struct omap_hwmod omap44xx_gpio4_hwmod;
1980static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1981 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001982 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001983};
1984
1985static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
1986 {
1987 .pa_start = 0x48059000,
1988 .pa_end = 0x480591ff,
1989 .flags = ADDR_TYPE_RT
1990 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001991 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001992};
1993
1994/* l4_per -> gpio4 */
1995static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
1996 .master = &omap44xx_l4_per_hwmod,
1997 .slave = &omap44xx_gpio4_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001998 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001999 .addr = omap44xx_gpio4_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002000 .user = OCP_USER_MPU | OCP_USER_SDMA,
2001};
2002
2003/* gpio4 slave ports */
2004static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
2005 &omap44xx_l4_per__gpio4,
2006};
2007
2008static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002009 { .role = "dbclk", .clk = "gpio4_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002010};
2011
2012static struct omap_hwmod omap44xx_gpio4_hwmod = {
2013 .name = "gpio4",
2014 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002015 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002016 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002017 .mpu_irqs = omap44xx_gpio4_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002018 .main_clk = "gpio4_ick",
2019 .prcm = {
2020 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002021 .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002022 .context_offs = OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002023 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002024 },
2025 },
2026 .opt_clks = gpio4_opt_clks,
2027 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
2028 .dev_attr = &gpio_dev_attr,
2029 .slaves = omap44xx_gpio4_slaves,
2030 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002031};
2032
2033/* gpio5 */
2034static struct omap_hwmod omap44xx_gpio5_hwmod;
2035static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
2036 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002037 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002038};
2039
2040static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
2041 {
2042 .pa_start = 0x4805b000,
2043 .pa_end = 0x4805b1ff,
2044 .flags = ADDR_TYPE_RT
2045 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002046 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002047};
2048
2049/* l4_per -> gpio5 */
2050static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
2051 .master = &omap44xx_l4_per_hwmod,
2052 .slave = &omap44xx_gpio5_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002053 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002054 .addr = omap44xx_gpio5_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002055 .user = OCP_USER_MPU | OCP_USER_SDMA,
2056};
2057
2058/* gpio5 slave ports */
2059static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
2060 &omap44xx_l4_per__gpio5,
2061};
2062
2063static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002064 { .role = "dbclk", .clk = "gpio5_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002065};
2066
2067static struct omap_hwmod omap44xx_gpio5_hwmod = {
2068 .name = "gpio5",
2069 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002070 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002071 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002072 .mpu_irqs = omap44xx_gpio5_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002073 .main_clk = "gpio5_ick",
2074 .prcm = {
2075 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002076 .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002077 .context_offs = OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002078 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002079 },
2080 },
2081 .opt_clks = gpio5_opt_clks,
2082 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2083 .dev_attr = &gpio_dev_attr,
2084 .slaves = omap44xx_gpio5_slaves,
2085 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002086};
2087
2088/* gpio6 */
2089static struct omap_hwmod omap44xx_gpio6_hwmod;
2090static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
2091 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002092 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002093};
2094
2095static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
2096 {
2097 .pa_start = 0x4805d000,
2098 .pa_end = 0x4805d1ff,
2099 .flags = ADDR_TYPE_RT
2100 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002101 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002102};
2103
2104/* l4_per -> gpio6 */
2105static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
2106 .master = &omap44xx_l4_per_hwmod,
2107 .slave = &omap44xx_gpio6_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002108 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002109 .addr = omap44xx_gpio6_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002110 .user = OCP_USER_MPU | OCP_USER_SDMA,
2111};
2112
2113/* gpio6 slave ports */
2114static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
2115 &omap44xx_l4_per__gpio6,
2116};
2117
2118static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002119 { .role = "dbclk", .clk = "gpio6_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002120};
2121
2122static struct omap_hwmod omap44xx_gpio6_hwmod = {
2123 .name = "gpio6",
2124 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002125 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002126 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002127 .mpu_irqs = omap44xx_gpio6_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002128 .main_clk = "gpio6_ick",
2129 .prcm = {
2130 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002131 .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002132 .context_offs = OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002133 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002134 },
2135 },
2136 .opt_clks = gpio6_opt_clks,
2137 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2138 .dev_attr = &gpio_dev_attr,
2139 .slaves = omap44xx_gpio6_slaves,
2140 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002141};
2142
2143/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002144 * 'hsi' class
2145 * mipi high-speed synchronous serial interface (multichannel and full-duplex
2146 * serial if)
2147 */
2148
2149static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
2150 .rev_offs = 0x0000,
2151 .sysc_offs = 0x0010,
2152 .syss_offs = 0x0014,
2153 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
2154 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2155 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2156 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2157 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002158 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002159 .sysc_fields = &omap_hwmod_sysc_type1,
2160};
2161
2162static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
2163 .name = "hsi",
2164 .sysc = &omap44xx_hsi_sysc,
2165};
2166
2167/* hsi */
2168static struct omap_hwmod_irq_info omap44xx_hsi_irqs[] = {
2169 { .name = "mpu_p1", .irq = 67 + OMAP44XX_IRQ_GIC_START },
2170 { .name = "mpu_p2", .irq = 68 + OMAP44XX_IRQ_GIC_START },
2171 { .name = "mpu_dma", .irq = 71 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002172 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002173};
2174
2175/* hsi master ports */
2176static struct omap_hwmod_ocp_if *omap44xx_hsi_masters[] = {
2177 &omap44xx_hsi__l3_main_2,
2178};
2179
2180static struct omap_hwmod_addr_space omap44xx_hsi_addrs[] = {
2181 {
2182 .pa_start = 0x4a058000,
2183 .pa_end = 0x4a05bfff,
2184 .flags = ADDR_TYPE_RT
2185 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002186 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002187};
2188
2189/* l4_cfg -> hsi */
2190static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
2191 .master = &omap44xx_l4_cfg_hwmod,
2192 .slave = &omap44xx_hsi_hwmod,
2193 .clk = "l4_div_ck",
2194 .addr = omap44xx_hsi_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002195 .user = OCP_USER_MPU | OCP_USER_SDMA,
2196};
2197
2198/* hsi slave ports */
2199static struct omap_hwmod_ocp_if *omap44xx_hsi_slaves[] = {
2200 &omap44xx_l4_cfg__hsi,
2201};
2202
2203static struct omap_hwmod omap44xx_hsi_hwmod = {
2204 .name = "hsi",
2205 .class = &omap44xx_hsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002206 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002207 .mpu_irqs = omap44xx_hsi_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002208 .main_clk = "hsi_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002209 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002210 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002211 .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002212 .context_offs = OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002213 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002214 },
2215 },
2216 .slaves = omap44xx_hsi_slaves,
2217 .slaves_cnt = ARRAY_SIZE(omap44xx_hsi_slaves),
2218 .masters = omap44xx_hsi_masters,
2219 .masters_cnt = ARRAY_SIZE(omap44xx_hsi_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002220};
2221
2222/*
Benoit Coussonf7764712010-09-21 19:37:14 +05302223 * 'i2c' class
2224 * multimaster high-speed i2c controller
2225 */
2226
2227static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
2228 .sysc_offs = 0x0010,
2229 .syss_offs = 0x0090,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002230 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2231 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07002232 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07002233 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2234 SIDLE_SMART_WKUP),
Shubhrajyoti D3e47dc62011-12-13 16:25:54 +05302235 .clockact = CLOCKACT_TEST_ICLK,
Benoit Coussonf7764712010-09-21 19:37:14 +05302236 .sysc_fields = &omap_hwmod_sysc_type1,
2237};
2238
2239static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002240 .name = "i2c",
2241 .sysc = &omap44xx_i2c_sysc,
Andy Greendb791a72011-07-10 05:27:15 -06002242 .rev = OMAP_I2C_IP_VERSION_2,
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002243 .reset = &omap_i2c_reset,
Benoit Coussonf7764712010-09-21 19:37:14 +05302244};
2245
Andy Green4d4441a2011-07-10 05:27:16 -06002246static struct omap_i2c_dev_attr i2c_dev_attr = {
2247 .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
2248};
2249
Benoit Coussonf7764712010-09-21 19:37:14 +05302250/* i2c1 */
2251static struct omap_hwmod omap44xx_i2c1_hwmod;
2252static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
2253 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002254 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302255};
2256
2257static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
2258 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
2259 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002260 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302261};
2262
2263static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
2264 {
2265 .pa_start = 0x48070000,
2266 .pa_end = 0x480700ff,
2267 .flags = ADDR_TYPE_RT
2268 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002269 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302270};
2271
2272/* l4_per -> i2c1 */
2273static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
2274 .master = &omap44xx_l4_per_hwmod,
2275 .slave = &omap44xx_i2c1_hwmod,
2276 .clk = "l4_div_ck",
2277 .addr = omap44xx_i2c1_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302278 .user = OCP_USER_MPU | OCP_USER_SDMA,
2279};
2280
2281/* i2c1 slave ports */
2282static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
2283 &omap44xx_l4_per__i2c1,
2284};
2285
2286static struct omap_hwmod omap44xx_i2c1_hwmod = {
2287 .name = "i2c1",
2288 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002289 .clkdm_name = "l4_per_clkdm",
Shubhrajyoti D3e47dc62011-12-13 16:25:54 +05302290 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
Benoit Coussonf7764712010-09-21 19:37:14 +05302291 .mpu_irqs = omap44xx_i2c1_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302292 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302293 .main_clk = "i2c1_fck",
2294 .prcm = {
2295 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002296 .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002297 .context_offs = OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002298 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302299 },
2300 },
2301 .slaves = omap44xx_i2c1_slaves,
2302 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002303 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302304};
2305
2306/* i2c2 */
2307static struct omap_hwmod omap44xx_i2c2_hwmod;
2308static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
2309 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002310 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302311};
2312
2313static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
2314 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
2315 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002316 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302317};
2318
2319static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
2320 {
2321 .pa_start = 0x48072000,
2322 .pa_end = 0x480720ff,
2323 .flags = ADDR_TYPE_RT
2324 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002325 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302326};
2327
2328/* l4_per -> i2c2 */
2329static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
2330 .master = &omap44xx_l4_per_hwmod,
2331 .slave = &omap44xx_i2c2_hwmod,
2332 .clk = "l4_div_ck",
2333 .addr = omap44xx_i2c2_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302334 .user = OCP_USER_MPU | OCP_USER_SDMA,
2335};
2336
2337/* i2c2 slave ports */
2338static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
2339 &omap44xx_l4_per__i2c2,
2340};
2341
2342static struct omap_hwmod omap44xx_i2c2_hwmod = {
2343 .name = "i2c2",
2344 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002345 .clkdm_name = "l4_per_clkdm",
Shubhrajyoti D3e47dc62011-12-13 16:25:54 +05302346 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
Benoit Coussonf7764712010-09-21 19:37:14 +05302347 .mpu_irqs = omap44xx_i2c2_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302348 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302349 .main_clk = "i2c2_fck",
2350 .prcm = {
2351 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002352 .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002353 .context_offs = OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002354 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302355 },
2356 },
2357 .slaves = omap44xx_i2c2_slaves,
2358 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002359 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302360};
2361
2362/* i2c3 */
2363static struct omap_hwmod omap44xx_i2c3_hwmod;
2364static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
2365 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002366 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302367};
2368
2369static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
2370 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
2371 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002372 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302373};
2374
2375static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
2376 {
2377 .pa_start = 0x48060000,
2378 .pa_end = 0x480600ff,
2379 .flags = ADDR_TYPE_RT
2380 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002381 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302382};
2383
2384/* l4_per -> i2c3 */
2385static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
2386 .master = &omap44xx_l4_per_hwmod,
2387 .slave = &omap44xx_i2c3_hwmod,
2388 .clk = "l4_div_ck",
2389 .addr = omap44xx_i2c3_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302390 .user = OCP_USER_MPU | OCP_USER_SDMA,
2391};
2392
2393/* i2c3 slave ports */
2394static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
2395 &omap44xx_l4_per__i2c3,
2396};
2397
2398static struct omap_hwmod omap44xx_i2c3_hwmod = {
2399 .name = "i2c3",
2400 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002401 .clkdm_name = "l4_per_clkdm",
Shubhrajyoti D3e47dc62011-12-13 16:25:54 +05302402 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
Benoit Coussonf7764712010-09-21 19:37:14 +05302403 .mpu_irqs = omap44xx_i2c3_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302404 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302405 .main_clk = "i2c3_fck",
2406 .prcm = {
2407 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002408 .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002409 .context_offs = OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002410 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302411 },
2412 },
2413 .slaves = omap44xx_i2c3_slaves,
2414 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002415 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302416};
2417
2418/* i2c4 */
2419static struct omap_hwmod omap44xx_i2c4_hwmod;
2420static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
2421 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002422 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302423};
2424
2425static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
2426 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
2427 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002428 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302429};
2430
2431static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
2432 {
2433 .pa_start = 0x48350000,
2434 .pa_end = 0x483500ff,
2435 .flags = ADDR_TYPE_RT
2436 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002437 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302438};
2439
2440/* l4_per -> i2c4 */
2441static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
2442 .master = &omap44xx_l4_per_hwmod,
2443 .slave = &omap44xx_i2c4_hwmod,
2444 .clk = "l4_div_ck",
2445 .addr = omap44xx_i2c4_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302446 .user = OCP_USER_MPU | OCP_USER_SDMA,
2447};
2448
2449/* i2c4 slave ports */
2450static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
2451 &omap44xx_l4_per__i2c4,
2452};
2453
2454static struct omap_hwmod omap44xx_i2c4_hwmod = {
2455 .name = "i2c4",
2456 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002457 .clkdm_name = "l4_per_clkdm",
Shubhrajyoti D3e47dc62011-12-13 16:25:54 +05302458 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
Benoit Coussonf7764712010-09-21 19:37:14 +05302459 .mpu_irqs = omap44xx_i2c4_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302460 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302461 .main_clk = "i2c4_fck",
2462 .prcm = {
2463 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002464 .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002465 .context_offs = OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002466 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302467 },
2468 },
2469 .slaves = omap44xx_i2c4_slaves,
2470 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002471 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302472};
2473
2474/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002475 * 'ipu' class
2476 * imaging processor unit
2477 */
2478
2479static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
2480 .name = "ipu",
2481};
2482
2483/* ipu */
2484static struct omap_hwmod_irq_info omap44xx_ipu_irqs[] = {
2485 { .irq = 100 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002486 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002487};
2488
Benoit Cousson407a6882011-02-15 22:39:48 +01002489static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
Paul Walmsleyf2f57362012-04-18 19:10:02 -06002490 { .name = "cpu0", .rst_shift = 0 },
2491 { .name = "cpu1", .rst_shift = 1 },
Benoit Cousson407a6882011-02-15 22:39:48 +01002492 { .name = "mmu_cache", .rst_shift = 2 },
2493};
2494
2495/* ipu master ports */
2496static struct omap_hwmod_ocp_if *omap44xx_ipu_masters[] = {
2497 &omap44xx_ipu__l3_main_2,
2498};
2499
2500/* l3_main_2 -> ipu */
2501static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
2502 .master = &omap44xx_l3_main_2_hwmod,
2503 .slave = &omap44xx_ipu_hwmod,
2504 .clk = "l3_div_ck",
2505 .user = OCP_USER_MPU | OCP_USER_SDMA,
2506};
2507
2508/* ipu slave ports */
2509static struct omap_hwmod_ocp_if *omap44xx_ipu_slaves[] = {
2510 &omap44xx_l3_main_2__ipu,
2511};
2512
Benoit Cousson407a6882011-02-15 22:39:48 +01002513static struct omap_hwmod omap44xx_ipu_hwmod = {
2514 .name = "ipu",
2515 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002516 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002517 .mpu_irqs = omap44xx_ipu_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002518 .rst_lines = omap44xx_ipu_resets,
2519 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
2520 .main_clk = "ipu_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002521 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002522 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002523 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002524 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002525 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002526 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002527 },
2528 },
2529 .slaves = omap44xx_ipu_slaves,
2530 .slaves_cnt = ARRAY_SIZE(omap44xx_ipu_slaves),
2531 .masters = omap44xx_ipu_masters,
2532 .masters_cnt = ARRAY_SIZE(omap44xx_ipu_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002533};
2534
2535/*
2536 * 'iss' class
2537 * external images sensor pixel data processor
2538 */
2539
2540static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
2541 .rev_offs = 0x0000,
2542 .sysc_offs = 0x0010,
Fernando Guzman Lugod99de7f2012-04-13 05:08:03 -06002543 /*
2544 * ISS needs 100 OCP clk cycles delay after a softreset before
2545 * accessing sysconfig again.
2546 * The lowest frequency at the moment for L3 bus is 100 MHz, so
2547 * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
2548 *
2549 * TODO: Indicate errata when available.
2550 */
2551 .srst_udelay = 2,
Benoit Cousson407a6882011-02-15 22:39:48 +01002552 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
2553 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2554 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2555 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002556 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002557 .sysc_fields = &omap_hwmod_sysc_type2,
2558};
2559
2560static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
2561 .name = "iss",
2562 .sysc = &omap44xx_iss_sysc,
2563};
2564
2565/* iss */
2566static struct omap_hwmod_irq_info omap44xx_iss_irqs[] = {
2567 { .irq = 24 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002568 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002569};
2570
2571static struct omap_hwmod_dma_info omap44xx_iss_sdma_reqs[] = {
2572 { .name = "1", .dma_req = 8 + OMAP44XX_DMA_REQ_START },
2573 { .name = "2", .dma_req = 9 + OMAP44XX_DMA_REQ_START },
2574 { .name = "3", .dma_req = 11 + OMAP44XX_DMA_REQ_START },
2575 { .name = "4", .dma_req = 12 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002576 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002577};
2578
2579/* iss master ports */
2580static struct omap_hwmod_ocp_if *omap44xx_iss_masters[] = {
2581 &omap44xx_iss__l3_main_2,
2582};
2583
2584static struct omap_hwmod_addr_space omap44xx_iss_addrs[] = {
2585 {
2586 .pa_start = 0x52000000,
2587 .pa_end = 0x520000ff,
2588 .flags = ADDR_TYPE_RT
2589 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002590 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002591};
2592
2593/* l3_main_2 -> iss */
2594static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
2595 .master = &omap44xx_l3_main_2_hwmod,
2596 .slave = &omap44xx_iss_hwmod,
2597 .clk = "l3_div_ck",
2598 .addr = omap44xx_iss_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002599 .user = OCP_USER_MPU | OCP_USER_SDMA,
2600};
2601
2602/* iss slave ports */
2603static struct omap_hwmod_ocp_if *omap44xx_iss_slaves[] = {
2604 &omap44xx_l3_main_2__iss,
2605};
2606
2607static struct omap_hwmod_opt_clk iss_opt_clks[] = {
2608 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
2609};
2610
2611static struct omap_hwmod omap44xx_iss_hwmod = {
2612 .name = "iss",
2613 .class = &omap44xx_iss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002614 .clkdm_name = "iss_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002615 .mpu_irqs = omap44xx_iss_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002616 .sdma_reqs = omap44xx_iss_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002617 .main_clk = "iss_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002618 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002619 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002620 .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002621 .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002622 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002623 },
2624 },
2625 .opt_clks = iss_opt_clks,
2626 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
2627 .slaves = omap44xx_iss_slaves,
2628 .slaves_cnt = ARRAY_SIZE(omap44xx_iss_slaves),
2629 .masters = omap44xx_iss_masters,
2630 .masters_cnt = ARRAY_SIZE(omap44xx_iss_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002631};
2632
2633/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002634 * 'iva' class
2635 * multi-standard video encoder/decoder hardware accelerator
2636 */
2637
2638static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002639 .name = "iva",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002640};
2641
2642/* iva */
2643static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
2644 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
2645 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
2646 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002647 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002648};
2649
2650static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002651 { .name = "seq0", .rst_shift = 0 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002652 { .name = "seq1", .rst_shift = 1 },
Paul Walmsleyf2f57362012-04-18 19:10:02 -06002653 { .name = "logic", .rst_shift = 2 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002654};
2655
2656/* iva master ports */
2657static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2658 &omap44xx_iva__l3_main_2,
2659 &omap44xx_iva__l3_instr,
2660};
2661
2662static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2663 {
2664 .pa_start = 0x5a000000,
2665 .pa_end = 0x5a07ffff,
2666 .flags = ADDR_TYPE_RT
2667 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002668 { }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002669};
2670
2671/* l3_main_2 -> iva */
2672static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2673 .master = &omap44xx_l3_main_2_hwmod,
2674 .slave = &omap44xx_iva_hwmod,
2675 .clk = "l3_div_ck",
2676 .addr = omap44xx_iva_addrs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002677 .user = OCP_USER_MPU,
2678};
2679
2680/* iva slave ports */
2681static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2682 &omap44xx_dsp__iva,
2683 &omap44xx_l3_main_2__iva,
2684};
2685
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002686static struct omap_hwmod omap44xx_iva_hwmod = {
2687 .name = "iva",
2688 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002689 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002690 .mpu_irqs = omap44xx_iva_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002691 .rst_lines = omap44xx_iva_resets,
2692 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2693 .main_clk = "iva_fck",
2694 .prcm = {
2695 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002696 .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002697 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002698 .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002699 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002700 },
2701 },
2702 .slaves = omap44xx_iva_slaves,
2703 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2704 .masters = omap44xx_iva_masters,
2705 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002706};
2707
2708/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002709 * 'kbd' class
2710 * keyboard controller
2711 */
2712
2713static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
2714 .rev_offs = 0x0000,
2715 .sysc_offs = 0x0010,
2716 .syss_offs = 0x0014,
2717 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2718 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2719 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2720 SYSS_HAS_RESET_STATUS),
2721 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2722 .sysc_fields = &omap_hwmod_sysc_type1,
2723};
2724
2725static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
2726 .name = "kbd",
2727 .sysc = &omap44xx_kbd_sysc,
2728};
2729
2730/* kbd */
2731static struct omap_hwmod omap44xx_kbd_hwmod;
2732static struct omap_hwmod_irq_info omap44xx_kbd_irqs[] = {
2733 { .irq = 120 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002734 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002735};
2736
2737static struct omap_hwmod_addr_space omap44xx_kbd_addrs[] = {
2738 {
2739 .pa_start = 0x4a31c000,
2740 .pa_end = 0x4a31c07f,
2741 .flags = ADDR_TYPE_RT
2742 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002743 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002744};
2745
2746/* l4_wkup -> kbd */
2747static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
2748 .master = &omap44xx_l4_wkup_hwmod,
2749 .slave = &omap44xx_kbd_hwmod,
2750 .clk = "l4_wkup_clk_mux_ck",
2751 .addr = omap44xx_kbd_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002752 .user = OCP_USER_MPU | OCP_USER_SDMA,
2753};
2754
2755/* kbd slave ports */
2756static struct omap_hwmod_ocp_if *omap44xx_kbd_slaves[] = {
2757 &omap44xx_l4_wkup__kbd,
2758};
2759
2760static struct omap_hwmod omap44xx_kbd_hwmod = {
2761 .name = "kbd",
2762 .class = &omap44xx_kbd_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002763 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002764 .mpu_irqs = omap44xx_kbd_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002765 .main_clk = "kbd_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002766 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002767 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002768 .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002769 .context_offs = OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002770 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002771 },
2772 },
2773 .slaves = omap44xx_kbd_slaves,
2774 .slaves_cnt = ARRAY_SIZE(omap44xx_kbd_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01002775};
2776
2777/*
Benoit Coussonec5df922011-02-02 19:27:21 +00002778 * 'mailbox' class
2779 * mailbox module allowing communication between the on-chip processors using a
2780 * queued mailbox-interrupt mechanism.
2781 */
2782
2783static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2784 .rev_offs = 0x0000,
2785 .sysc_offs = 0x0010,
2786 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2787 SYSC_HAS_SOFTRESET),
2788 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2789 .sysc_fields = &omap_hwmod_sysc_type2,
2790};
2791
2792static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2793 .name = "mailbox",
2794 .sysc = &omap44xx_mailbox_sysc,
2795};
2796
2797/* mailbox */
2798static struct omap_hwmod omap44xx_mailbox_hwmod;
2799static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2800 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002801 { .irq = -1 }
Benoit Coussonec5df922011-02-02 19:27:21 +00002802};
2803
2804static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2805 {
2806 .pa_start = 0x4a0f4000,
2807 .pa_end = 0x4a0f41ff,
2808 .flags = ADDR_TYPE_RT
2809 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002810 { }
Benoit Coussonec5df922011-02-02 19:27:21 +00002811};
2812
2813/* l4_cfg -> mailbox */
2814static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2815 .master = &omap44xx_l4_cfg_hwmod,
2816 .slave = &omap44xx_mailbox_hwmod,
2817 .clk = "l4_div_ck",
2818 .addr = omap44xx_mailbox_addrs,
Benoit Coussonec5df922011-02-02 19:27:21 +00002819 .user = OCP_USER_MPU | OCP_USER_SDMA,
2820};
2821
2822/* mailbox slave ports */
2823static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2824 &omap44xx_l4_cfg__mailbox,
2825};
2826
2827static struct omap_hwmod omap44xx_mailbox_hwmod = {
2828 .name = "mailbox",
2829 .class = &omap44xx_mailbox_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002830 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussonec5df922011-02-02 19:27:21 +00002831 .mpu_irqs = omap44xx_mailbox_irqs,
Benoit Cousson00fe6102011-07-09 19:14:28 -06002832 .prcm = {
Benoit Coussonec5df922011-02-02 19:27:21 +00002833 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002834 .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002835 .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
Benoit Coussonec5df922011-02-02 19:27:21 +00002836 },
2837 },
2838 .slaves = omap44xx_mailbox_slaves,
2839 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
Benoit Coussonec5df922011-02-02 19:27:21 +00002840};
2841
2842/*
Benoit Cousson4ddff492011-01-31 14:50:30 +00002843 * 'mcbsp' class
2844 * multi channel buffered serial port controller
2845 */
2846
2847static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2848 .sysc_offs = 0x008c,
2849 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2850 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2851 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2852 .sysc_fields = &omap_hwmod_sysc_type1,
2853};
2854
2855static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2856 .name = "mcbsp",
2857 .sysc = &omap44xx_mcbsp_sysc,
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302858 .rev = MCBSP_CONFIG_TYPE4,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002859};
2860
2861/* mcbsp1 */
2862static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2863static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2864 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002865 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002866};
2867
2868static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2869 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2870 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002871 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002872};
2873
2874static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2875 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302876 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002877 .pa_start = 0x40122000,
2878 .pa_end = 0x401220ff,
2879 .flags = ADDR_TYPE_RT
2880 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002881 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002882};
2883
2884/* l4_abe -> mcbsp1 */
2885static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2886 .master = &omap44xx_l4_abe_hwmod,
2887 .slave = &omap44xx_mcbsp1_hwmod,
2888 .clk = "ocp_abe_iclk",
2889 .addr = omap44xx_mcbsp1_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002890 .user = OCP_USER_MPU,
2891};
2892
2893static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2894 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302895 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002896 .pa_start = 0x49022000,
2897 .pa_end = 0x490220ff,
2898 .flags = ADDR_TYPE_RT
2899 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002900 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002901};
2902
2903/* l4_abe -> mcbsp1 (dma) */
2904static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
2905 .master = &omap44xx_l4_abe_hwmod,
2906 .slave = &omap44xx_mcbsp1_hwmod,
2907 .clk = "ocp_abe_iclk",
2908 .addr = omap44xx_mcbsp1_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002909 .user = OCP_USER_SDMA,
2910};
2911
2912/* mcbsp1 slave ports */
2913static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
2914 &omap44xx_l4_abe__mcbsp1,
2915 &omap44xx_l4_abe__mcbsp1_dma,
2916};
2917
Paul Walmsley503d0ea2012-04-04 09:11:48 -06002918static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
2919 { .role = "pad_fck", .clk = "pad_clks_ck" },
2920 { .role = "prcm_clk", .clk = "mcbsp1_sync_mux_ck" },
2921};
2922
Benoit Cousson4ddff492011-01-31 14:50:30 +00002923static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
2924 .name = "mcbsp1",
2925 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002926 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002927 .mpu_irqs = omap44xx_mcbsp1_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002928 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002929 .main_clk = "mcbsp1_fck",
2930 .prcm = {
2931 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002932 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002933 .context_offs = OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002934 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002935 },
2936 },
2937 .slaves = omap44xx_mcbsp1_slaves,
2938 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
Paul Walmsley503d0ea2012-04-04 09:11:48 -06002939 .opt_clks = mcbsp1_opt_clks,
2940 .opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
Benoit Cousson4ddff492011-01-31 14:50:30 +00002941};
2942
2943/* mcbsp2 */
2944static struct omap_hwmod omap44xx_mcbsp2_hwmod;
2945static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
2946 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002947 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002948};
2949
2950static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
2951 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
2952 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002953 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002954};
2955
2956static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
2957 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302958 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002959 .pa_start = 0x40124000,
2960 .pa_end = 0x401240ff,
2961 .flags = ADDR_TYPE_RT
2962 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002963 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002964};
2965
2966/* l4_abe -> mcbsp2 */
2967static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
2968 .master = &omap44xx_l4_abe_hwmod,
2969 .slave = &omap44xx_mcbsp2_hwmod,
2970 .clk = "ocp_abe_iclk",
2971 .addr = omap44xx_mcbsp2_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002972 .user = OCP_USER_MPU,
2973};
2974
2975static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
2976 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302977 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002978 .pa_start = 0x49024000,
2979 .pa_end = 0x490240ff,
2980 .flags = ADDR_TYPE_RT
2981 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002982 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002983};
2984
2985/* l4_abe -> mcbsp2 (dma) */
2986static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
2987 .master = &omap44xx_l4_abe_hwmod,
2988 .slave = &omap44xx_mcbsp2_hwmod,
2989 .clk = "ocp_abe_iclk",
2990 .addr = omap44xx_mcbsp2_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002991 .user = OCP_USER_SDMA,
2992};
2993
2994/* mcbsp2 slave ports */
2995static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
2996 &omap44xx_l4_abe__mcbsp2,
2997 &omap44xx_l4_abe__mcbsp2_dma,
2998};
2999
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003000static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
3001 { .role = "pad_fck", .clk = "pad_clks_ck" },
3002 { .role = "prcm_clk", .clk = "mcbsp2_sync_mux_ck" },
3003};
3004
Benoit Cousson4ddff492011-01-31 14:50:30 +00003005static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
3006 .name = "mcbsp2",
3007 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003008 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003009 .mpu_irqs = omap44xx_mcbsp2_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003010 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003011 .main_clk = "mcbsp2_fck",
3012 .prcm = {
3013 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003014 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003015 .context_offs = OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003016 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003017 },
3018 },
3019 .slaves = omap44xx_mcbsp2_slaves,
3020 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003021 .opt_clks = mcbsp2_opt_clks,
3022 .opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003023};
3024
3025/* mcbsp3 */
3026static struct omap_hwmod omap44xx_mcbsp3_hwmod;
3027static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
3028 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003029 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003030};
3031
3032static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
3033 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
3034 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003035 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003036};
3037
3038static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
3039 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303040 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003041 .pa_start = 0x40126000,
3042 .pa_end = 0x401260ff,
3043 .flags = ADDR_TYPE_RT
3044 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003045 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003046};
3047
3048/* l4_abe -> mcbsp3 */
3049static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3050 .master = &omap44xx_l4_abe_hwmod,
3051 .slave = &omap44xx_mcbsp3_hwmod,
3052 .clk = "ocp_abe_iclk",
3053 .addr = omap44xx_mcbsp3_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003054 .user = OCP_USER_MPU,
3055};
3056
3057static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
3058 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303059 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003060 .pa_start = 0x49026000,
3061 .pa_end = 0x490260ff,
3062 .flags = ADDR_TYPE_RT
3063 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003064 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003065};
3066
3067/* l4_abe -> mcbsp3 (dma) */
3068static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
3069 .master = &omap44xx_l4_abe_hwmod,
3070 .slave = &omap44xx_mcbsp3_hwmod,
3071 .clk = "ocp_abe_iclk",
3072 .addr = omap44xx_mcbsp3_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003073 .user = OCP_USER_SDMA,
3074};
3075
3076/* mcbsp3 slave ports */
3077static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
3078 &omap44xx_l4_abe__mcbsp3,
3079 &omap44xx_l4_abe__mcbsp3_dma,
3080};
3081
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003082static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
3083 { .role = "pad_fck", .clk = "pad_clks_ck" },
3084 { .role = "prcm_clk", .clk = "mcbsp3_sync_mux_ck" },
3085};
3086
Benoit Cousson4ddff492011-01-31 14:50:30 +00003087static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
3088 .name = "mcbsp3",
3089 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003090 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003091 .mpu_irqs = omap44xx_mcbsp3_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003092 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003093 .main_clk = "mcbsp3_fck",
3094 .prcm = {
3095 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003096 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003097 .context_offs = OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003098 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003099 },
3100 },
3101 .slaves = omap44xx_mcbsp3_slaves,
3102 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003103 .opt_clks = mcbsp3_opt_clks,
3104 .opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003105};
3106
3107/* mcbsp4 */
3108static struct omap_hwmod omap44xx_mcbsp4_hwmod;
3109static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
3110 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003111 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003112};
3113
3114static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
3115 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
3116 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003117 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003118};
3119
3120static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
3121 {
3122 .pa_start = 0x48096000,
3123 .pa_end = 0x480960ff,
3124 .flags = ADDR_TYPE_RT
3125 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003126 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003127};
3128
3129/* l4_per -> mcbsp4 */
3130static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3131 .master = &omap44xx_l4_per_hwmod,
3132 .slave = &omap44xx_mcbsp4_hwmod,
3133 .clk = "l4_div_ck",
3134 .addr = omap44xx_mcbsp4_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003135 .user = OCP_USER_MPU | OCP_USER_SDMA,
3136};
3137
3138/* mcbsp4 slave ports */
3139static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
3140 &omap44xx_l4_per__mcbsp4,
3141};
3142
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003143static struct omap_hwmod_opt_clk mcbsp4_opt_clks[] = {
3144 { .role = "pad_fck", .clk = "pad_clks_ck" },
3145 { .role = "prcm_clk", .clk = "mcbsp4_sync_mux_ck" },
3146};
3147
Benoit Cousson4ddff492011-01-31 14:50:30 +00003148static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
3149 .name = "mcbsp4",
3150 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003151 .clkdm_name = "l4_per_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003152 .mpu_irqs = omap44xx_mcbsp4_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003153 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003154 .main_clk = "mcbsp4_fck",
3155 .prcm = {
3156 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003157 .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003158 .context_offs = OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003159 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003160 },
3161 },
3162 .slaves = omap44xx_mcbsp4_slaves,
3163 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
Paul Walmsley503d0ea2012-04-04 09:11:48 -06003164 .opt_clks = mcbsp4_opt_clks,
3165 .opt_clks_cnt = ARRAY_SIZE(mcbsp4_opt_clks),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003166};
3167
3168/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003169 * 'mcpdm' class
3170 * multi channel pdm controller (proprietary interface with phoenix power
3171 * ic)
3172 */
3173
3174static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
3175 .rev_offs = 0x0000,
3176 .sysc_offs = 0x0010,
3177 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3178 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3179 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3180 SIDLE_SMART_WKUP),
3181 .sysc_fields = &omap_hwmod_sysc_type2,
3182};
3183
3184static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
3185 .name = "mcpdm",
3186 .sysc = &omap44xx_mcpdm_sysc,
3187};
3188
3189/* mcpdm */
3190static struct omap_hwmod omap44xx_mcpdm_hwmod;
3191static struct omap_hwmod_irq_info omap44xx_mcpdm_irqs[] = {
3192 { .irq = 112 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003193 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003194};
3195
3196static struct omap_hwmod_dma_info omap44xx_mcpdm_sdma_reqs[] = {
3197 { .name = "up_link", .dma_req = 64 + OMAP44XX_DMA_REQ_START },
3198 { .name = "dn_link", .dma_req = 65 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003199 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003200};
3201
3202static struct omap_hwmod_addr_space omap44xx_mcpdm_addrs[] = {
3203 {
3204 .pa_start = 0x40132000,
3205 .pa_end = 0x4013207f,
3206 .flags = ADDR_TYPE_RT
3207 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003208 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003209};
3210
3211/* l4_abe -> mcpdm */
3212static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3213 .master = &omap44xx_l4_abe_hwmod,
3214 .slave = &omap44xx_mcpdm_hwmod,
3215 .clk = "ocp_abe_iclk",
3216 .addr = omap44xx_mcpdm_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003217 .user = OCP_USER_MPU,
3218};
3219
3220static struct omap_hwmod_addr_space omap44xx_mcpdm_dma_addrs[] = {
3221 {
3222 .pa_start = 0x49032000,
3223 .pa_end = 0x4903207f,
3224 .flags = ADDR_TYPE_RT
3225 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003226 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003227};
3228
3229/* l4_abe -> mcpdm (dma) */
3230static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
3231 .master = &omap44xx_l4_abe_hwmod,
3232 .slave = &omap44xx_mcpdm_hwmod,
3233 .clk = "ocp_abe_iclk",
3234 .addr = omap44xx_mcpdm_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003235 .user = OCP_USER_SDMA,
3236};
3237
3238/* mcpdm slave ports */
3239static struct omap_hwmod_ocp_if *omap44xx_mcpdm_slaves[] = {
3240 &omap44xx_l4_abe__mcpdm,
3241 &omap44xx_l4_abe__mcpdm_dma,
3242};
3243
3244static struct omap_hwmod omap44xx_mcpdm_hwmod = {
3245 .name = "mcpdm",
3246 .class = &omap44xx_mcpdm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003247 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003248 .mpu_irqs = omap44xx_mcpdm_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003249 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003250 .main_clk = "mcpdm_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003251 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003252 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003253 .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003254 .context_offs = OMAP4_RM_ABE_PDM_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003255 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003256 },
3257 },
3258 .slaves = omap44xx_mcpdm_slaves,
3259 .slaves_cnt = ARRAY_SIZE(omap44xx_mcpdm_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003260};
3261
3262/*
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303263 * 'mcspi' class
3264 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3265 * bus
3266 */
3267
3268static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
3269 .rev_offs = 0x0000,
3270 .sysc_offs = 0x0010,
3271 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3272 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3273 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3274 SIDLE_SMART_WKUP),
3275 .sysc_fields = &omap_hwmod_sysc_type2,
3276};
3277
3278static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
3279 .name = "mcspi",
3280 .sysc = &omap44xx_mcspi_sysc,
Benoit Cousson905a74d2011-02-18 14:01:06 +01003281 .rev = OMAP4_MCSPI_REV,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303282};
3283
3284/* mcspi1 */
3285static struct omap_hwmod omap44xx_mcspi1_hwmod;
3286static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
3287 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003288 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303289};
3290
3291static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
3292 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
3293 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
3294 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
3295 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
3296 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
3297 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
3298 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
3299 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003300 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303301};
3302
3303static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
3304 {
3305 .pa_start = 0x48098000,
3306 .pa_end = 0x480981ff,
3307 .flags = ADDR_TYPE_RT
3308 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003309 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303310};
3311
3312/* l4_per -> mcspi1 */
3313static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3314 .master = &omap44xx_l4_per_hwmod,
3315 .slave = &omap44xx_mcspi1_hwmod,
3316 .clk = "l4_div_ck",
3317 .addr = omap44xx_mcspi1_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303318 .user = OCP_USER_MPU | OCP_USER_SDMA,
3319};
3320
3321/* mcspi1 slave ports */
3322static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
3323 &omap44xx_l4_per__mcspi1,
3324};
3325
Benoit Cousson905a74d2011-02-18 14:01:06 +01003326/* mcspi1 dev_attr */
3327static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
3328 .num_chipselect = 4,
3329};
3330
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303331static struct omap_hwmod omap44xx_mcspi1_hwmod = {
3332 .name = "mcspi1",
3333 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003334 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303335 .mpu_irqs = omap44xx_mcspi1_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303336 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303337 .main_clk = "mcspi1_fck",
3338 .prcm = {
3339 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003340 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003341 .context_offs = OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003342 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303343 },
3344 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003345 .dev_attr = &mcspi1_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303346 .slaves = omap44xx_mcspi1_slaves,
3347 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303348};
3349
3350/* mcspi2 */
3351static struct omap_hwmod omap44xx_mcspi2_hwmod;
3352static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
3353 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003354 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303355};
3356
3357static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
3358 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
3359 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
3360 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
3361 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003362 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303363};
3364
3365static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
3366 {
3367 .pa_start = 0x4809a000,
3368 .pa_end = 0x4809a1ff,
3369 .flags = ADDR_TYPE_RT
3370 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003371 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303372};
3373
3374/* l4_per -> mcspi2 */
3375static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3376 .master = &omap44xx_l4_per_hwmod,
3377 .slave = &omap44xx_mcspi2_hwmod,
3378 .clk = "l4_div_ck",
3379 .addr = omap44xx_mcspi2_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303380 .user = OCP_USER_MPU | OCP_USER_SDMA,
3381};
3382
3383/* mcspi2 slave ports */
3384static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
3385 &omap44xx_l4_per__mcspi2,
3386};
3387
Benoit Cousson905a74d2011-02-18 14:01:06 +01003388/* mcspi2 dev_attr */
3389static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
3390 .num_chipselect = 2,
3391};
3392
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303393static struct omap_hwmod omap44xx_mcspi2_hwmod = {
3394 .name = "mcspi2",
3395 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003396 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303397 .mpu_irqs = omap44xx_mcspi2_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303398 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303399 .main_clk = "mcspi2_fck",
3400 .prcm = {
3401 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003402 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003403 .context_offs = OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003404 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303405 },
3406 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003407 .dev_attr = &mcspi2_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303408 .slaves = omap44xx_mcspi2_slaves,
3409 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303410};
3411
3412/* mcspi3 */
3413static struct omap_hwmod omap44xx_mcspi3_hwmod;
3414static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
3415 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003416 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303417};
3418
3419static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
3420 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
3421 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
3422 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
3423 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003424 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303425};
3426
3427static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
3428 {
3429 .pa_start = 0x480b8000,
3430 .pa_end = 0x480b81ff,
3431 .flags = ADDR_TYPE_RT
3432 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003433 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303434};
3435
3436/* l4_per -> mcspi3 */
3437static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3438 .master = &omap44xx_l4_per_hwmod,
3439 .slave = &omap44xx_mcspi3_hwmod,
3440 .clk = "l4_div_ck",
3441 .addr = omap44xx_mcspi3_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303442 .user = OCP_USER_MPU | OCP_USER_SDMA,
3443};
3444
3445/* mcspi3 slave ports */
3446static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
3447 &omap44xx_l4_per__mcspi3,
3448};
3449
Benoit Cousson905a74d2011-02-18 14:01:06 +01003450/* mcspi3 dev_attr */
3451static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
3452 .num_chipselect = 2,
3453};
3454
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303455static struct omap_hwmod omap44xx_mcspi3_hwmod = {
3456 .name = "mcspi3",
3457 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003458 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303459 .mpu_irqs = omap44xx_mcspi3_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303460 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303461 .main_clk = "mcspi3_fck",
3462 .prcm = {
3463 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003464 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003465 .context_offs = OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003466 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303467 },
3468 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003469 .dev_attr = &mcspi3_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303470 .slaves = omap44xx_mcspi3_slaves,
3471 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303472};
3473
3474/* mcspi4 */
3475static struct omap_hwmod omap44xx_mcspi4_hwmod;
3476static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
3477 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003478 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303479};
3480
3481static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
3482 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
3483 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003484 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303485};
3486
3487static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
3488 {
3489 .pa_start = 0x480ba000,
3490 .pa_end = 0x480ba1ff,
3491 .flags = ADDR_TYPE_RT
3492 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003493 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303494};
3495
3496/* l4_per -> mcspi4 */
3497static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3498 .master = &omap44xx_l4_per_hwmod,
3499 .slave = &omap44xx_mcspi4_hwmod,
3500 .clk = "l4_div_ck",
3501 .addr = omap44xx_mcspi4_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303502 .user = OCP_USER_MPU | OCP_USER_SDMA,
3503};
3504
3505/* mcspi4 slave ports */
3506static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
3507 &omap44xx_l4_per__mcspi4,
3508};
3509
Benoit Cousson905a74d2011-02-18 14:01:06 +01003510/* mcspi4 dev_attr */
3511static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
3512 .num_chipselect = 1,
3513};
3514
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303515static struct omap_hwmod omap44xx_mcspi4_hwmod = {
3516 .name = "mcspi4",
3517 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003518 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303519 .mpu_irqs = omap44xx_mcspi4_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303520 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303521 .main_clk = "mcspi4_fck",
3522 .prcm = {
3523 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003524 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003525 .context_offs = OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003526 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303527 },
3528 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003529 .dev_attr = &mcspi4_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303530 .slaves = omap44xx_mcspi4_slaves,
3531 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303532};
3533
3534/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003535 * 'mmc' class
3536 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
3537 */
3538
3539static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
3540 .rev_offs = 0x0000,
3541 .sysc_offs = 0x0010,
3542 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
3543 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
3544 SYSC_HAS_SOFTRESET),
3545 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3546 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02003547 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01003548 .sysc_fields = &omap_hwmod_sysc_type2,
3549};
3550
3551static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
3552 .name = "mmc",
3553 .sysc = &omap44xx_mmc_sysc,
3554};
3555
3556/* mmc1 */
3557static struct omap_hwmod_irq_info omap44xx_mmc1_irqs[] = {
3558 { .irq = 83 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003559 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003560};
3561
3562static struct omap_hwmod_dma_info omap44xx_mmc1_sdma_reqs[] = {
3563 { .name = "tx", .dma_req = 60 + OMAP44XX_DMA_REQ_START },
3564 { .name = "rx", .dma_req = 61 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003565 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003566};
3567
3568/* mmc1 master ports */
3569static struct omap_hwmod_ocp_if *omap44xx_mmc1_masters[] = {
3570 &omap44xx_mmc1__l3_main_1,
3571};
3572
3573static struct omap_hwmod_addr_space omap44xx_mmc1_addrs[] = {
3574 {
3575 .pa_start = 0x4809c000,
3576 .pa_end = 0x4809c3ff,
3577 .flags = ADDR_TYPE_RT
3578 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003579 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003580};
3581
3582/* l4_per -> mmc1 */
3583static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3584 .master = &omap44xx_l4_per_hwmod,
3585 .slave = &omap44xx_mmc1_hwmod,
3586 .clk = "l4_div_ck",
3587 .addr = omap44xx_mmc1_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003588 .user = OCP_USER_MPU | OCP_USER_SDMA,
3589};
3590
3591/* mmc1 slave ports */
3592static struct omap_hwmod_ocp_if *omap44xx_mmc1_slaves[] = {
3593 &omap44xx_l4_per__mmc1,
3594};
3595
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003596/* mmc1 dev_attr */
3597static struct omap_mmc_dev_attr mmc1_dev_attr = {
3598 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3599};
3600
Benoit Cousson407a6882011-02-15 22:39:48 +01003601static struct omap_hwmod omap44xx_mmc1_hwmod = {
3602 .name = "mmc1",
3603 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003604 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003605 .mpu_irqs = omap44xx_mmc1_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003606 .sdma_reqs = omap44xx_mmc1_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003607 .main_clk = "mmc1_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003608 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003609 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003610 .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003611 .context_offs = OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003612 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003613 },
3614 },
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003615 .dev_attr = &mmc1_dev_attr,
Benoit Cousson407a6882011-02-15 22:39:48 +01003616 .slaves = omap44xx_mmc1_slaves,
3617 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc1_slaves),
3618 .masters = omap44xx_mmc1_masters,
3619 .masters_cnt = ARRAY_SIZE(omap44xx_mmc1_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01003620};
3621
3622/* mmc2 */
3623static struct omap_hwmod_irq_info omap44xx_mmc2_irqs[] = {
3624 { .irq = 86 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003625 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003626};
3627
3628static struct omap_hwmod_dma_info omap44xx_mmc2_sdma_reqs[] = {
3629 { .name = "tx", .dma_req = 46 + OMAP44XX_DMA_REQ_START },
3630 { .name = "rx", .dma_req = 47 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003631 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003632};
3633
3634/* mmc2 master ports */
3635static struct omap_hwmod_ocp_if *omap44xx_mmc2_masters[] = {
3636 &omap44xx_mmc2__l3_main_1,
3637};
3638
3639static struct omap_hwmod_addr_space omap44xx_mmc2_addrs[] = {
3640 {
3641 .pa_start = 0x480b4000,
3642 .pa_end = 0x480b43ff,
3643 .flags = ADDR_TYPE_RT
3644 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003645 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003646};
3647
3648/* l4_per -> mmc2 */
3649static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3650 .master = &omap44xx_l4_per_hwmod,
3651 .slave = &omap44xx_mmc2_hwmod,
3652 .clk = "l4_div_ck",
3653 .addr = omap44xx_mmc2_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003654 .user = OCP_USER_MPU | OCP_USER_SDMA,
3655};
3656
3657/* mmc2 slave ports */
3658static struct omap_hwmod_ocp_if *omap44xx_mmc2_slaves[] = {
3659 &omap44xx_l4_per__mmc2,
3660};
3661
3662static struct omap_hwmod omap44xx_mmc2_hwmod = {
3663 .name = "mmc2",
3664 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003665 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003666 .mpu_irqs = omap44xx_mmc2_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003667 .sdma_reqs = omap44xx_mmc2_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003668 .main_clk = "mmc2_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003669 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003670 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003671 .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003672 .context_offs = OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003673 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003674 },
3675 },
3676 .slaves = omap44xx_mmc2_slaves,
3677 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc2_slaves),
3678 .masters = omap44xx_mmc2_masters,
3679 .masters_cnt = ARRAY_SIZE(omap44xx_mmc2_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01003680};
3681
3682/* mmc3 */
3683static struct omap_hwmod omap44xx_mmc3_hwmod;
3684static struct omap_hwmod_irq_info omap44xx_mmc3_irqs[] = {
3685 { .irq = 94 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003686 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003687};
3688
3689static struct omap_hwmod_dma_info omap44xx_mmc3_sdma_reqs[] = {
3690 { .name = "tx", .dma_req = 76 + OMAP44XX_DMA_REQ_START },
3691 { .name = "rx", .dma_req = 77 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003692 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003693};
3694
3695static struct omap_hwmod_addr_space omap44xx_mmc3_addrs[] = {
3696 {
3697 .pa_start = 0x480ad000,
3698 .pa_end = 0x480ad3ff,
3699 .flags = ADDR_TYPE_RT
3700 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003701 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003702};
3703
3704/* l4_per -> mmc3 */
3705static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3706 .master = &omap44xx_l4_per_hwmod,
3707 .slave = &omap44xx_mmc3_hwmod,
3708 .clk = "l4_div_ck",
3709 .addr = omap44xx_mmc3_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003710 .user = OCP_USER_MPU | OCP_USER_SDMA,
3711};
3712
3713/* mmc3 slave ports */
3714static struct omap_hwmod_ocp_if *omap44xx_mmc3_slaves[] = {
3715 &omap44xx_l4_per__mmc3,
3716};
3717
3718static struct omap_hwmod omap44xx_mmc3_hwmod = {
3719 .name = "mmc3",
3720 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003721 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003722 .mpu_irqs = omap44xx_mmc3_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003723 .sdma_reqs = omap44xx_mmc3_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003724 .main_clk = "mmc3_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003725 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003726 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003727 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003728 .context_offs = OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003729 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003730 },
3731 },
3732 .slaves = omap44xx_mmc3_slaves,
3733 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc3_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003734};
3735
3736/* mmc4 */
3737static struct omap_hwmod omap44xx_mmc4_hwmod;
3738static struct omap_hwmod_irq_info omap44xx_mmc4_irqs[] = {
3739 { .irq = 96 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003740 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003741};
3742
3743static struct omap_hwmod_dma_info omap44xx_mmc4_sdma_reqs[] = {
3744 { .name = "tx", .dma_req = 56 + OMAP44XX_DMA_REQ_START },
3745 { .name = "rx", .dma_req = 57 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003746 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003747};
3748
3749static struct omap_hwmod_addr_space omap44xx_mmc4_addrs[] = {
3750 {
3751 .pa_start = 0x480d1000,
3752 .pa_end = 0x480d13ff,
3753 .flags = ADDR_TYPE_RT
3754 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003755 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003756};
3757
3758/* l4_per -> mmc4 */
3759static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3760 .master = &omap44xx_l4_per_hwmod,
3761 .slave = &omap44xx_mmc4_hwmod,
3762 .clk = "l4_div_ck",
3763 .addr = omap44xx_mmc4_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003764 .user = OCP_USER_MPU | OCP_USER_SDMA,
3765};
3766
3767/* mmc4 slave ports */
3768static struct omap_hwmod_ocp_if *omap44xx_mmc4_slaves[] = {
3769 &omap44xx_l4_per__mmc4,
3770};
3771
3772static struct omap_hwmod omap44xx_mmc4_hwmod = {
3773 .name = "mmc4",
3774 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003775 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003776 .mpu_irqs = omap44xx_mmc4_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003777
Benoit Cousson407a6882011-02-15 22:39:48 +01003778 .sdma_reqs = omap44xx_mmc4_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003779 .main_clk = "mmc4_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003780 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003781 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003782 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003783 .context_offs = OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003784 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003785 },
3786 },
3787 .slaves = omap44xx_mmc4_slaves,
3788 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc4_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003789};
3790
3791/* mmc5 */
3792static struct omap_hwmod omap44xx_mmc5_hwmod;
3793static struct omap_hwmod_irq_info omap44xx_mmc5_irqs[] = {
3794 { .irq = 59 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003795 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003796};
3797
3798static struct omap_hwmod_dma_info omap44xx_mmc5_sdma_reqs[] = {
3799 { .name = "tx", .dma_req = 58 + OMAP44XX_DMA_REQ_START },
3800 { .name = "rx", .dma_req = 59 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003801 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003802};
3803
3804static struct omap_hwmod_addr_space omap44xx_mmc5_addrs[] = {
3805 {
3806 .pa_start = 0x480d5000,
3807 .pa_end = 0x480d53ff,
3808 .flags = ADDR_TYPE_RT
3809 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003810 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003811};
3812
3813/* l4_per -> mmc5 */
3814static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3815 .master = &omap44xx_l4_per_hwmod,
3816 .slave = &omap44xx_mmc5_hwmod,
3817 .clk = "l4_div_ck",
3818 .addr = omap44xx_mmc5_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003819 .user = OCP_USER_MPU | OCP_USER_SDMA,
3820};
3821
3822/* mmc5 slave ports */
3823static struct omap_hwmod_ocp_if *omap44xx_mmc5_slaves[] = {
3824 &omap44xx_l4_per__mmc5,
3825};
3826
3827static struct omap_hwmod omap44xx_mmc5_hwmod = {
3828 .name = "mmc5",
3829 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003830 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003831 .mpu_irqs = omap44xx_mmc5_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003832 .sdma_reqs = omap44xx_mmc5_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003833 .main_clk = "mmc5_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003834 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003835 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003836 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003837 .context_offs = OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003838 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003839 },
3840 },
3841 .slaves = omap44xx_mmc5_slaves,
3842 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc5_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003843};
3844
3845/*
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003846 * 'mpu' class
3847 * mpu sub-system
3848 */
3849
3850static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003851 .name = "mpu",
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003852};
3853
3854/* mpu */
3855static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
3856 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
3857 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
3858 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003859 { .irq = -1 }
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003860};
3861
3862/* mpu master ports */
3863static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
3864 &omap44xx_mpu__l3_main_1,
3865 &omap44xx_mpu__l4_abe,
3866 &omap44xx_mpu__dmm,
3867};
3868
3869static struct omap_hwmod omap44xx_mpu_hwmod = {
3870 .name = "mpu",
3871 .class = &omap44xx_mpu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003872 .clkdm_name = "mpuss_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06003873 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003874 .mpu_irqs = omap44xx_mpu_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003875 .main_clk = "dpll_mpu_m2_ck",
3876 .prcm = {
3877 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003878 .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003879 .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003880 },
3881 },
3882 .masters = omap44xx_mpu_masters,
3883 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003884};
3885
Benoit Cousson92b18d12010-09-23 20:02:41 +05303886/*
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003887 * 'smartreflex' class
3888 * smartreflex module (monitor silicon performance and outputs a measure of
3889 * performance error)
3890 */
3891
3892/* The IP is not compliant to type1 / type2 scheme */
3893static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
3894 .sidle_shift = 24,
3895 .enwkup_shift = 26,
3896};
3897
3898static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
3899 .sysc_offs = 0x0038,
3900 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
3901 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3902 SIDLE_SMART_WKUP),
3903 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
3904};
3905
3906static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003907 .name = "smartreflex",
3908 .sysc = &omap44xx_smartreflex_sysc,
3909 .rev = 2,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003910};
3911
3912/* smartreflex_core */
Shweta Gulaticea6b942012-02-29 23:33:37 +01003913static struct omap_smartreflex_dev_attr smartreflex_core_dev_attr = {
3914 .sensor_voltdm_name = "core",
3915};
3916
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003917static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
3918static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
3919 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003920 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003921};
3922
3923static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
3924 {
3925 .pa_start = 0x4a0dd000,
3926 .pa_end = 0x4a0dd03f,
3927 .flags = ADDR_TYPE_RT
3928 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003929 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003930};
3931
3932/* l4_cfg -> smartreflex_core */
3933static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3934 .master = &omap44xx_l4_cfg_hwmod,
3935 .slave = &omap44xx_smartreflex_core_hwmod,
3936 .clk = "l4_div_ck",
3937 .addr = omap44xx_smartreflex_core_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003938 .user = OCP_USER_MPU | OCP_USER_SDMA,
3939};
3940
3941/* smartreflex_core slave ports */
3942static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
3943 &omap44xx_l4_cfg__smartreflex_core,
3944};
3945
3946static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
3947 .name = "smartreflex_core",
3948 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003949 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003950 .mpu_irqs = omap44xx_smartreflex_core_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003951
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003952 .main_clk = "smartreflex_core_fck",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003953 .prcm = {
3954 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003955 .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003956 .context_offs = OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003957 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003958 },
3959 },
3960 .slaves = omap44xx_smartreflex_core_slaves,
3961 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
Shweta Gulaticea6b942012-02-29 23:33:37 +01003962 .dev_attr = &smartreflex_core_dev_attr,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003963};
3964
3965/* smartreflex_iva */
Shweta Gulaticea6b942012-02-29 23:33:37 +01003966static struct omap_smartreflex_dev_attr smartreflex_iva_dev_attr = {
3967 .sensor_voltdm_name = "iva",
3968};
3969
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003970static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
3971static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
3972 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003973 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003974};
3975
3976static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
3977 {
3978 .pa_start = 0x4a0db000,
3979 .pa_end = 0x4a0db03f,
3980 .flags = ADDR_TYPE_RT
3981 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003982 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003983};
3984
3985/* l4_cfg -> smartreflex_iva */
3986static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
3987 .master = &omap44xx_l4_cfg_hwmod,
3988 .slave = &omap44xx_smartreflex_iva_hwmod,
3989 .clk = "l4_div_ck",
3990 .addr = omap44xx_smartreflex_iva_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003991 .user = OCP_USER_MPU | OCP_USER_SDMA,
3992};
3993
3994/* smartreflex_iva slave ports */
3995static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
3996 &omap44xx_l4_cfg__smartreflex_iva,
3997};
3998
3999static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
4000 .name = "smartreflex_iva",
4001 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004002 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004003 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004004 .main_clk = "smartreflex_iva_fck",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004005 .prcm = {
4006 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004007 .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004008 .context_offs = OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004009 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004010 },
4011 },
4012 .slaves = omap44xx_smartreflex_iva_slaves,
4013 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
Shweta Gulaticea6b942012-02-29 23:33:37 +01004014 .dev_attr = &smartreflex_iva_dev_attr,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004015};
4016
4017/* smartreflex_mpu */
Shweta Gulaticea6b942012-02-29 23:33:37 +01004018static struct omap_smartreflex_dev_attr smartreflex_mpu_dev_attr = {
4019 .sensor_voltdm_name = "mpu",
4020};
4021
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004022static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
4023static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
4024 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004025 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004026};
4027
4028static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
4029 {
4030 .pa_start = 0x4a0d9000,
4031 .pa_end = 0x4a0d903f,
4032 .flags = ADDR_TYPE_RT
4033 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004034 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004035};
4036
4037/* l4_cfg -> smartreflex_mpu */
4038static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
4039 .master = &omap44xx_l4_cfg_hwmod,
4040 .slave = &omap44xx_smartreflex_mpu_hwmod,
4041 .clk = "l4_div_ck",
4042 .addr = omap44xx_smartreflex_mpu_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004043 .user = OCP_USER_MPU | OCP_USER_SDMA,
4044};
4045
4046/* smartreflex_mpu slave ports */
4047static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
4048 &omap44xx_l4_cfg__smartreflex_mpu,
4049};
4050
4051static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
4052 .name = "smartreflex_mpu",
4053 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004054 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004055 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004056 .main_clk = "smartreflex_mpu_fck",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004057 .prcm = {
4058 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004059 .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004060 .context_offs = OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004061 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004062 },
4063 },
4064 .slaves = omap44xx_smartreflex_mpu_slaves,
4065 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
Shweta Gulaticea6b942012-02-29 23:33:37 +01004066 .dev_attr = &smartreflex_mpu_dev_attr,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004067};
4068
4069/*
Benoit Coussond11c2172011-02-02 12:04:36 +00004070 * 'spinlock' class
4071 * spinlock provides hardware assistance for synchronizing the processes
4072 * running on multiple processors
4073 */
4074
4075static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
4076 .rev_offs = 0x0000,
4077 .sysc_offs = 0x0010,
4078 .syss_offs = 0x0014,
4079 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4080 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
4081 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4082 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4083 SIDLE_SMART_WKUP),
4084 .sysc_fields = &omap_hwmod_sysc_type1,
4085};
4086
4087static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
4088 .name = "spinlock",
4089 .sysc = &omap44xx_spinlock_sysc,
4090};
4091
4092/* spinlock */
4093static struct omap_hwmod omap44xx_spinlock_hwmod;
4094static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
4095 {
4096 .pa_start = 0x4a0f6000,
4097 .pa_end = 0x4a0f6fff,
4098 .flags = ADDR_TYPE_RT
4099 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004100 { }
Benoit Coussond11c2172011-02-02 12:04:36 +00004101};
4102
4103/* l4_cfg -> spinlock */
4104static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
4105 .master = &omap44xx_l4_cfg_hwmod,
4106 .slave = &omap44xx_spinlock_hwmod,
4107 .clk = "l4_div_ck",
4108 .addr = omap44xx_spinlock_addrs,
Benoit Coussond11c2172011-02-02 12:04:36 +00004109 .user = OCP_USER_MPU | OCP_USER_SDMA,
4110};
4111
4112/* spinlock slave ports */
4113static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
4114 &omap44xx_l4_cfg__spinlock,
4115};
4116
4117static struct omap_hwmod omap44xx_spinlock_hwmod = {
4118 .name = "spinlock",
4119 .class = &omap44xx_spinlock_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004120 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond11c2172011-02-02 12:04:36 +00004121 .prcm = {
4122 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004123 .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004124 .context_offs = OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET,
Benoit Coussond11c2172011-02-02 12:04:36 +00004125 },
4126 },
4127 .slaves = omap44xx_spinlock_slaves,
4128 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
Benoit Coussond11c2172011-02-02 12:04:36 +00004129};
4130
4131/*
Benoit Cousson35d1a662011-02-11 11:17:14 +00004132 * 'timer' class
4133 * general purpose timer module with accurate 1ms tick
4134 * This class contains several variants: ['timer_1ms', 'timer']
4135 */
4136
4137static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
4138 .rev_offs = 0x0000,
4139 .sysc_offs = 0x0010,
4140 .syss_offs = 0x0014,
4141 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4142 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
4143 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4144 SYSS_HAS_RESET_STATUS),
4145 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
4146 .sysc_fields = &omap_hwmod_sysc_type1,
4147};
4148
4149static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
4150 .name = "timer",
4151 .sysc = &omap44xx_timer_1ms_sysc,
4152};
4153
4154static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
4155 .rev_offs = 0x0000,
4156 .sysc_offs = 0x0010,
4157 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
4158 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
4159 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4160 SIDLE_SMART_WKUP),
4161 .sysc_fields = &omap_hwmod_sysc_type2,
4162};
4163
4164static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
4165 .name = "timer",
4166 .sysc = &omap44xx_timer_sysc,
4167};
4168
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304169/* always-on timers dev attribute */
4170static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
4171 .timer_capability = OMAP_TIMER_ALWON,
4172};
4173
4174/* pwm timers dev attribute */
4175static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
4176 .timer_capability = OMAP_TIMER_HAS_PWM,
4177};
4178
Benoit Cousson35d1a662011-02-11 11:17:14 +00004179/* timer1 */
4180static struct omap_hwmod omap44xx_timer1_hwmod;
4181static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
4182 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004183 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004184};
4185
4186static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
4187 {
4188 .pa_start = 0x4a318000,
4189 .pa_end = 0x4a31807f,
4190 .flags = ADDR_TYPE_RT
4191 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004192 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004193};
4194
4195/* l4_wkup -> timer1 */
4196static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
4197 .master = &omap44xx_l4_wkup_hwmod,
4198 .slave = &omap44xx_timer1_hwmod,
4199 .clk = "l4_wkup_clk_mux_ck",
4200 .addr = omap44xx_timer1_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004201 .user = OCP_USER_MPU | OCP_USER_SDMA,
4202};
4203
4204/* timer1 slave ports */
4205static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
4206 &omap44xx_l4_wkup__timer1,
4207};
4208
4209static struct omap_hwmod omap44xx_timer1_hwmod = {
4210 .name = "timer1",
4211 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004212 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004213 .mpu_irqs = omap44xx_timer1_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004214 .main_clk = "timer1_fck",
4215 .prcm = {
4216 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004217 .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004218 .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004219 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004220 },
4221 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304222 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004223 .slaves = omap44xx_timer1_slaves,
4224 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004225};
4226
4227/* timer2 */
4228static struct omap_hwmod omap44xx_timer2_hwmod;
4229static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
4230 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004231 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004232};
4233
4234static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
4235 {
4236 .pa_start = 0x48032000,
4237 .pa_end = 0x4803207f,
4238 .flags = ADDR_TYPE_RT
4239 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004240 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004241};
4242
4243/* l4_per -> timer2 */
4244static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
4245 .master = &omap44xx_l4_per_hwmod,
4246 .slave = &omap44xx_timer2_hwmod,
4247 .clk = "l4_div_ck",
4248 .addr = omap44xx_timer2_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004249 .user = OCP_USER_MPU | OCP_USER_SDMA,
4250};
4251
4252/* timer2 slave ports */
4253static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
4254 &omap44xx_l4_per__timer2,
4255};
4256
4257static struct omap_hwmod omap44xx_timer2_hwmod = {
4258 .name = "timer2",
4259 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004260 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004261 .mpu_irqs = omap44xx_timer2_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004262 .main_clk = "timer2_fck",
4263 .prcm = {
4264 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004265 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004266 .context_offs = OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004267 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004268 },
4269 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304270 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004271 .slaves = omap44xx_timer2_slaves,
4272 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004273};
4274
4275/* timer3 */
4276static struct omap_hwmod omap44xx_timer3_hwmod;
4277static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
4278 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004279 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004280};
4281
4282static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
4283 {
4284 .pa_start = 0x48034000,
4285 .pa_end = 0x4803407f,
4286 .flags = ADDR_TYPE_RT
4287 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004288 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004289};
4290
4291/* l4_per -> timer3 */
4292static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
4293 .master = &omap44xx_l4_per_hwmod,
4294 .slave = &omap44xx_timer3_hwmod,
4295 .clk = "l4_div_ck",
4296 .addr = omap44xx_timer3_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004297 .user = OCP_USER_MPU | OCP_USER_SDMA,
4298};
4299
4300/* timer3 slave ports */
4301static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
4302 &omap44xx_l4_per__timer3,
4303};
4304
4305static struct omap_hwmod omap44xx_timer3_hwmod = {
4306 .name = "timer3",
4307 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004308 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004309 .mpu_irqs = omap44xx_timer3_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004310 .main_clk = "timer3_fck",
4311 .prcm = {
4312 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004313 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004314 .context_offs = OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004315 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004316 },
4317 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304318 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004319 .slaves = omap44xx_timer3_slaves,
4320 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004321};
4322
4323/* timer4 */
4324static struct omap_hwmod omap44xx_timer4_hwmod;
4325static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
4326 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004327 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004328};
4329
4330static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
4331 {
4332 .pa_start = 0x48036000,
4333 .pa_end = 0x4803607f,
4334 .flags = ADDR_TYPE_RT
4335 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004336 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004337};
4338
4339/* l4_per -> timer4 */
4340static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
4341 .master = &omap44xx_l4_per_hwmod,
4342 .slave = &omap44xx_timer4_hwmod,
4343 .clk = "l4_div_ck",
4344 .addr = omap44xx_timer4_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004345 .user = OCP_USER_MPU | OCP_USER_SDMA,
4346};
4347
4348/* timer4 slave ports */
4349static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
4350 &omap44xx_l4_per__timer4,
4351};
4352
4353static struct omap_hwmod omap44xx_timer4_hwmod = {
4354 .name = "timer4",
4355 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004356 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004357 .mpu_irqs = omap44xx_timer4_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004358 .main_clk = "timer4_fck",
4359 .prcm = {
4360 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004361 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004362 .context_offs = OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004363 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004364 },
4365 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304366 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004367 .slaves = omap44xx_timer4_slaves,
4368 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004369};
4370
4371/* timer5 */
4372static struct omap_hwmod omap44xx_timer5_hwmod;
4373static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
4374 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004375 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004376};
4377
4378static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
4379 {
4380 .pa_start = 0x40138000,
4381 .pa_end = 0x4013807f,
4382 .flags = ADDR_TYPE_RT
4383 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004384 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004385};
4386
4387/* l4_abe -> timer5 */
4388static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
4389 .master = &omap44xx_l4_abe_hwmod,
4390 .slave = &omap44xx_timer5_hwmod,
4391 .clk = "ocp_abe_iclk",
4392 .addr = omap44xx_timer5_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004393 .user = OCP_USER_MPU,
4394};
4395
4396static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
4397 {
4398 .pa_start = 0x49038000,
4399 .pa_end = 0x4903807f,
4400 .flags = ADDR_TYPE_RT
4401 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004402 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004403};
4404
4405/* l4_abe -> timer5 (dma) */
4406static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
4407 .master = &omap44xx_l4_abe_hwmod,
4408 .slave = &omap44xx_timer5_hwmod,
4409 .clk = "ocp_abe_iclk",
4410 .addr = omap44xx_timer5_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004411 .user = OCP_USER_SDMA,
4412};
4413
4414/* timer5 slave ports */
4415static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
4416 &omap44xx_l4_abe__timer5,
4417 &omap44xx_l4_abe__timer5_dma,
4418};
4419
4420static struct omap_hwmod omap44xx_timer5_hwmod = {
4421 .name = "timer5",
4422 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004423 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004424 .mpu_irqs = omap44xx_timer5_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004425 .main_clk = "timer5_fck",
4426 .prcm = {
4427 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004428 .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004429 .context_offs = OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004430 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004431 },
4432 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304433 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004434 .slaves = omap44xx_timer5_slaves,
4435 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004436};
4437
4438/* timer6 */
4439static struct omap_hwmod omap44xx_timer6_hwmod;
4440static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
4441 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004442 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004443};
4444
4445static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
4446 {
4447 .pa_start = 0x4013a000,
4448 .pa_end = 0x4013a07f,
4449 .flags = ADDR_TYPE_RT
4450 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004451 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004452};
4453
4454/* l4_abe -> timer6 */
4455static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4456 .master = &omap44xx_l4_abe_hwmod,
4457 .slave = &omap44xx_timer6_hwmod,
4458 .clk = "ocp_abe_iclk",
4459 .addr = omap44xx_timer6_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004460 .user = OCP_USER_MPU,
4461};
4462
4463static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
4464 {
4465 .pa_start = 0x4903a000,
4466 .pa_end = 0x4903a07f,
4467 .flags = ADDR_TYPE_RT
4468 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004469 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004470};
4471
4472/* l4_abe -> timer6 (dma) */
4473static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
4474 .master = &omap44xx_l4_abe_hwmod,
4475 .slave = &omap44xx_timer6_hwmod,
4476 .clk = "ocp_abe_iclk",
4477 .addr = omap44xx_timer6_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004478 .user = OCP_USER_SDMA,
4479};
4480
4481/* timer6 slave ports */
4482static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
4483 &omap44xx_l4_abe__timer6,
4484 &omap44xx_l4_abe__timer6_dma,
4485};
4486
4487static struct omap_hwmod omap44xx_timer6_hwmod = {
4488 .name = "timer6",
4489 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004490 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004491 .mpu_irqs = omap44xx_timer6_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06004492
Benoit Cousson35d1a662011-02-11 11:17:14 +00004493 .main_clk = "timer6_fck",
4494 .prcm = {
4495 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004496 .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004497 .context_offs = OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004498 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004499 },
4500 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304501 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004502 .slaves = omap44xx_timer6_slaves,
4503 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004504};
4505
4506/* timer7 */
4507static struct omap_hwmod omap44xx_timer7_hwmod;
4508static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
4509 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004510 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004511};
4512
4513static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
4514 {
4515 .pa_start = 0x4013c000,
4516 .pa_end = 0x4013c07f,
4517 .flags = ADDR_TYPE_RT
4518 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004519 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004520};
4521
4522/* l4_abe -> timer7 */
4523static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4524 .master = &omap44xx_l4_abe_hwmod,
4525 .slave = &omap44xx_timer7_hwmod,
4526 .clk = "ocp_abe_iclk",
4527 .addr = omap44xx_timer7_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004528 .user = OCP_USER_MPU,
4529};
4530
4531static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
4532 {
4533 .pa_start = 0x4903c000,
4534 .pa_end = 0x4903c07f,
4535 .flags = ADDR_TYPE_RT
4536 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004537 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004538};
4539
4540/* l4_abe -> timer7 (dma) */
4541static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
4542 .master = &omap44xx_l4_abe_hwmod,
4543 .slave = &omap44xx_timer7_hwmod,
4544 .clk = "ocp_abe_iclk",
4545 .addr = omap44xx_timer7_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004546 .user = OCP_USER_SDMA,
4547};
4548
4549/* timer7 slave ports */
4550static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
4551 &omap44xx_l4_abe__timer7,
4552 &omap44xx_l4_abe__timer7_dma,
4553};
4554
4555static struct omap_hwmod omap44xx_timer7_hwmod = {
4556 .name = "timer7",
4557 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004558 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004559 .mpu_irqs = omap44xx_timer7_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004560 .main_clk = "timer7_fck",
4561 .prcm = {
4562 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004563 .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004564 .context_offs = OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004565 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004566 },
4567 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304568 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004569 .slaves = omap44xx_timer7_slaves,
4570 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004571};
4572
4573/* timer8 */
4574static struct omap_hwmod omap44xx_timer8_hwmod;
4575static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
4576 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004577 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004578};
4579
4580static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
4581 {
4582 .pa_start = 0x4013e000,
4583 .pa_end = 0x4013e07f,
4584 .flags = ADDR_TYPE_RT
4585 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004586 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004587};
4588
4589/* l4_abe -> timer8 */
4590static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4591 .master = &omap44xx_l4_abe_hwmod,
4592 .slave = &omap44xx_timer8_hwmod,
4593 .clk = "ocp_abe_iclk",
4594 .addr = omap44xx_timer8_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004595 .user = OCP_USER_MPU,
4596};
4597
4598static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
4599 {
4600 .pa_start = 0x4903e000,
4601 .pa_end = 0x4903e07f,
4602 .flags = ADDR_TYPE_RT
4603 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004604 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004605};
4606
4607/* l4_abe -> timer8 (dma) */
4608static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
4609 .master = &omap44xx_l4_abe_hwmod,
4610 .slave = &omap44xx_timer8_hwmod,
4611 .clk = "ocp_abe_iclk",
4612 .addr = omap44xx_timer8_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004613 .user = OCP_USER_SDMA,
4614};
4615
4616/* timer8 slave ports */
4617static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
4618 &omap44xx_l4_abe__timer8,
4619 &omap44xx_l4_abe__timer8_dma,
4620};
4621
4622static struct omap_hwmod omap44xx_timer8_hwmod = {
4623 .name = "timer8",
4624 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004625 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004626 .mpu_irqs = omap44xx_timer8_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004627 .main_clk = "timer8_fck",
4628 .prcm = {
4629 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004630 .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004631 .context_offs = OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004632 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004633 },
4634 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304635 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004636 .slaves = omap44xx_timer8_slaves,
4637 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004638};
4639
4640/* timer9 */
4641static struct omap_hwmod omap44xx_timer9_hwmod;
4642static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
4643 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004644 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004645};
4646
4647static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
4648 {
4649 .pa_start = 0x4803e000,
4650 .pa_end = 0x4803e07f,
4651 .flags = ADDR_TYPE_RT
4652 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004653 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004654};
4655
4656/* l4_per -> timer9 */
4657static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4658 .master = &omap44xx_l4_per_hwmod,
4659 .slave = &omap44xx_timer9_hwmod,
4660 .clk = "l4_div_ck",
4661 .addr = omap44xx_timer9_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004662 .user = OCP_USER_MPU | OCP_USER_SDMA,
4663};
4664
4665/* timer9 slave ports */
4666static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
4667 &omap44xx_l4_per__timer9,
4668};
4669
4670static struct omap_hwmod omap44xx_timer9_hwmod = {
4671 .name = "timer9",
4672 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004673 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004674 .mpu_irqs = omap44xx_timer9_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004675 .main_clk = "timer9_fck",
4676 .prcm = {
4677 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004678 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004679 .context_offs = OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004680 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004681 },
4682 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304683 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004684 .slaves = omap44xx_timer9_slaves,
4685 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004686};
4687
4688/* timer10 */
4689static struct omap_hwmod omap44xx_timer10_hwmod;
4690static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
4691 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004692 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004693};
4694
4695static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
4696 {
4697 .pa_start = 0x48086000,
4698 .pa_end = 0x4808607f,
4699 .flags = ADDR_TYPE_RT
4700 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004701 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004702};
4703
4704/* l4_per -> timer10 */
4705static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4706 .master = &omap44xx_l4_per_hwmod,
4707 .slave = &omap44xx_timer10_hwmod,
4708 .clk = "l4_div_ck",
4709 .addr = omap44xx_timer10_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004710 .user = OCP_USER_MPU | OCP_USER_SDMA,
4711};
4712
4713/* timer10 slave ports */
4714static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
4715 &omap44xx_l4_per__timer10,
4716};
4717
4718static struct omap_hwmod omap44xx_timer10_hwmod = {
4719 .name = "timer10",
4720 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004721 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004722 .mpu_irqs = omap44xx_timer10_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004723 .main_clk = "timer10_fck",
4724 .prcm = {
4725 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004726 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004727 .context_offs = OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004728 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004729 },
4730 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304731 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004732 .slaves = omap44xx_timer10_slaves,
4733 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004734};
4735
4736/* timer11 */
4737static struct omap_hwmod omap44xx_timer11_hwmod;
4738static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
4739 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004740 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004741};
4742
4743static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
4744 {
4745 .pa_start = 0x48088000,
4746 .pa_end = 0x4808807f,
4747 .flags = ADDR_TYPE_RT
4748 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004749 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004750};
4751
4752/* l4_per -> timer11 */
4753static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4754 .master = &omap44xx_l4_per_hwmod,
4755 .slave = &omap44xx_timer11_hwmod,
4756 .clk = "l4_div_ck",
4757 .addr = omap44xx_timer11_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004758 .user = OCP_USER_MPU | OCP_USER_SDMA,
4759};
4760
4761/* timer11 slave ports */
4762static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
4763 &omap44xx_l4_per__timer11,
4764};
4765
4766static struct omap_hwmod omap44xx_timer11_hwmod = {
4767 .name = "timer11",
4768 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004769 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004770 .mpu_irqs = omap44xx_timer11_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004771 .main_clk = "timer11_fck",
4772 .prcm = {
4773 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004774 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004775 .context_offs = OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004776 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004777 },
4778 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304779 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004780 .slaves = omap44xx_timer11_slaves,
4781 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004782};
4783
4784/*
Benoit Coussondb12ba52010-09-27 20:19:19 +05304785 * 'uart' class
4786 * universal asynchronous receiver/transmitter (uart)
4787 */
4788
4789static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
4790 .rev_offs = 0x0050,
4791 .sysc_offs = 0x0054,
4792 .syss_offs = 0x0058,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07004793 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07004794 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4795 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07004796 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4797 SIDLE_SMART_WKUP),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304798 .sysc_fields = &omap_hwmod_sysc_type1,
4799};
4800
4801static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00004802 .name = "uart",
4803 .sysc = &omap44xx_uart_sysc,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304804};
4805
4806/* uart1 */
4807static struct omap_hwmod omap44xx_uart1_hwmod;
4808static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
4809 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004810 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304811};
4812
4813static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
4814 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
4815 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004816 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304817};
4818
4819static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
4820 {
4821 .pa_start = 0x4806a000,
4822 .pa_end = 0x4806a0ff,
4823 .flags = ADDR_TYPE_RT
4824 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004825 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304826};
4827
4828/* l4_per -> uart1 */
4829static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4830 .master = &omap44xx_l4_per_hwmod,
4831 .slave = &omap44xx_uart1_hwmod,
4832 .clk = "l4_div_ck",
4833 .addr = omap44xx_uart1_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304834 .user = OCP_USER_MPU | OCP_USER_SDMA,
4835};
4836
4837/* uart1 slave ports */
4838static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
4839 &omap44xx_l4_per__uart1,
4840};
4841
4842static struct omap_hwmod omap44xx_uart1_hwmod = {
4843 .name = "uart1",
4844 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004845 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304846 .mpu_irqs = omap44xx_uart1_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304847 .sdma_reqs = omap44xx_uart1_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304848 .main_clk = "uart1_fck",
4849 .prcm = {
4850 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004851 .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004852 .context_offs = OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004853 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304854 },
4855 },
4856 .slaves = omap44xx_uart1_slaves,
4857 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304858};
4859
4860/* uart2 */
4861static struct omap_hwmod omap44xx_uart2_hwmod;
4862static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
4863 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004864 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304865};
4866
4867static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
4868 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
4869 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004870 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304871};
4872
4873static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
4874 {
4875 .pa_start = 0x4806c000,
4876 .pa_end = 0x4806c0ff,
4877 .flags = ADDR_TYPE_RT
4878 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004879 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304880};
4881
4882/* l4_per -> uart2 */
4883static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4884 .master = &omap44xx_l4_per_hwmod,
4885 .slave = &omap44xx_uart2_hwmod,
4886 .clk = "l4_div_ck",
4887 .addr = omap44xx_uart2_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304888 .user = OCP_USER_MPU | OCP_USER_SDMA,
4889};
4890
4891/* uart2 slave ports */
4892static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
4893 &omap44xx_l4_per__uart2,
4894};
4895
4896static struct omap_hwmod omap44xx_uart2_hwmod = {
4897 .name = "uart2",
4898 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004899 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304900 .mpu_irqs = omap44xx_uart2_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304901 .sdma_reqs = omap44xx_uart2_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304902 .main_clk = "uart2_fck",
4903 .prcm = {
4904 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004905 .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004906 .context_offs = OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004907 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304908 },
4909 },
4910 .slaves = omap44xx_uart2_slaves,
4911 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304912};
4913
4914/* uart3 */
4915static struct omap_hwmod omap44xx_uart3_hwmod;
4916static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
4917 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004918 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304919};
4920
4921static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
4922 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
4923 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004924 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304925};
4926
4927static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
4928 {
4929 .pa_start = 0x48020000,
4930 .pa_end = 0x480200ff,
4931 .flags = ADDR_TYPE_RT
4932 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004933 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304934};
4935
4936/* l4_per -> uart3 */
4937static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4938 .master = &omap44xx_l4_per_hwmod,
4939 .slave = &omap44xx_uart3_hwmod,
4940 .clk = "l4_div_ck",
4941 .addr = omap44xx_uart3_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304942 .user = OCP_USER_MPU | OCP_USER_SDMA,
4943};
4944
4945/* uart3 slave ports */
4946static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
4947 &omap44xx_l4_per__uart3,
4948};
4949
4950static struct omap_hwmod omap44xx_uart3_hwmod = {
4951 .name = "uart3",
4952 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004953 .clkdm_name = "l4_per_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06004954 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304955 .mpu_irqs = omap44xx_uart3_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304956 .sdma_reqs = omap44xx_uart3_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304957 .main_clk = "uart3_fck",
4958 .prcm = {
4959 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004960 .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004961 .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004962 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304963 },
4964 },
4965 .slaves = omap44xx_uart3_slaves,
4966 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304967};
4968
4969/* uart4 */
4970static struct omap_hwmod omap44xx_uart4_hwmod;
4971static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
4972 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004973 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304974};
4975
4976static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
4977 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
4978 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004979 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304980};
4981
4982static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
4983 {
4984 .pa_start = 0x4806e000,
4985 .pa_end = 0x4806e0ff,
4986 .flags = ADDR_TYPE_RT
4987 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004988 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304989};
4990
4991/* l4_per -> uart4 */
4992static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
4993 .master = &omap44xx_l4_per_hwmod,
4994 .slave = &omap44xx_uart4_hwmod,
4995 .clk = "l4_div_ck",
4996 .addr = omap44xx_uart4_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304997 .user = OCP_USER_MPU | OCP_USER_SDMA,
4998};
4999
5000/* uart4 slave ports */
5001static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
5002 &omap44xx_l4_per__uart4,
5003};
5004
5005static struct omap_hwmod omap44xx_uart4_hwmod = {
5006 .name = "uart4",
5007 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005008 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05305009 .mpu_irqs = omap44xx_uart4_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305010 .sdma_reqs = omap44xx_uart4_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305011 .main_clk = "uart4_fck",
5012 .prcm = {
5013 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005014 .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005015 .context_offs = OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005016 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305017 },
5018 },
5019 .slaves = omap44xx_uart4_slaves,
5020 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05305021};
5022
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005023/*
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005024 * 'usb_otg_hs' class
5025 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
5026 */
5027
5028static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
5029 .rev_offs = 0x0400,
5030 .sysc_offs = 0x0404,
5031 .syss_offs = 0x0408,
5032 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
5033 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
5034 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
5035 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5036 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
5037 MSTANDBY_SMART),
5038 .sysc_fields = &omap_hwmod_sysc_type1,
5039};
5040
5041static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
Benoit Cousson00fe6102011-07-09 19:14:28 -06005042 .name = "usb_otg_hs",
5043 .sysc = &omap44xx_usb_otg_hs_sysc,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005044};
5045
5046/* usb_otg_hs */
5047static struct omap_hwmod_irq_info omap44xx_usb_otg_hs_irqs[] = {
5048 { .name = "mc", .irq = 92 + OMAP44XX_IRQ_GIC_START },
5049 { .name = "dma", .irq = 93 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005050 { .irq = -1 }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005051};
5052
5053/* usb_otg_hs master ports */
5054static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_masters[] = {
5055 &omap44xx_usb_otg_hs__l3_main_2,
5056};
5057
5058static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = {
5059 {
5060 .pa_start = 0x4a0ab000,
5061 .pa_end = 0x4a0ab003,
5062 .flags = ADDR_TYPE_RT
5063 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005064 { }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005065};
5066
5067/* l4_cfg -> usb_otg_hs */
5068static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
5069 .master = &omap44xx_l4_cfg_hwmod,
5070 .slave = &omap44xx_usb_otg_hs_hwmod,
5071 .clk = "l4_div_ck",
5072 .addr = omap44xx_usb_otg_hs_addrs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005073 .user = OCP_USER_MPU | OCP_USER_SDMA,
5074};
5075
5076/* usb_otg_hs slave ports */
5077static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_slaves[] = {
5078 &omap44xx_l4_cfg__usb_otg_hs,
5079};
5080
5081static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
5082 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
5083};
5084
5085static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
5086 .name = "usb_otg_hs",
5087 .class = &omap44xx_usb_otg_hs_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005088 .clkdm_name = "l3_init_clkdm",
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005089 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
5090 .mpu_irqs = omap44xx_usb_otg_hs_irqs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005091 .main_clk = "usb_otg_hs_ick",
5092 .prcm = {
5093 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005094 .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005095 .context_offs = OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005096 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005097 },
5098 },
5099 .opt_clks = usb_otg_hs_opt_clks,
Benoit Cousson00fe6102011-07-09 19:14:28 -06005100 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005101 .slaves = omap44xx_usb_otg_hs_slaves,
5102 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_slaves),
5103 .masters = omap44xx_usb_otg_hs_masters,
5104 .masters_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_masters),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005105};
5106
5107/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005108 * 'wd_timer' class
5109 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
5110 * overflow condition
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005111 */
5112
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005113static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005114 .rev_offs = 0x0000,
5115 .sysc_offs = 0x0010,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005116 .syss_offs = 0x0014,
5117 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07005118 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07005119 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5120 SIDLE_SMART_WKUP),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005121 .sysc_fields = &omap_hwmod_sysc_type1,
5122};
5123
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005124static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
5125 .name = "wd_timer",
5126 .sysc = &omap44xx_wd_timer_sysc,
Benoit Coussonfe134712010-12-23 22:30:32 +00005127 .pre_shutdown = &omap2_wd_timer_disable,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005128};
5129
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005130/* wd_timer2 */
5131static struct omap_hwmod omap44xx_wd_timer2_hwmod;
5132static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
5133 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005134 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005135};
5136
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005137static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005138 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005139 .pa_start = 0x4a314000,
5140 .pa_end = 0x4a31407f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005141 .flags = ADDR_TYPE_RT
5142 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005143 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005144};
5145
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005146/* l4_wkup -> wd_timer2 */
5147static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005148 .master = &omap44xx_l4_wkup_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005149 .slave = &omap44xx_wd_timer2_hwmod,
5150 .clk = "l4_wkup_clk_mux_ck",
5151 .addr = omap44xx_wd_timer2_addrs,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005152 .user = OCP_USER_MPU | OCP_USER_SDMA,
5153};
5154
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005155/* wd_timer2 slave ports */
5156static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
5157 &omap44xx_l4_wkup__wd_timer2,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005158};
5159
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005160static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
5161 .name = "wd_timer2",
5162 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005163 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005164 .mpu_irqs = omap44xx_wd_timer2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005165 .main_clk = "wd_timer2_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005166 .prcm = {
5167 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005168 .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005169 .context_offs = OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005170 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005171 },
5172 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005173 .slaves = omap44xx_wd_timer2_slaves,
5174 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005175};
5176
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005177/* wd_timer3 */
5178static struct omap_hwmod omap44xx_wd_timer3_hwmod;
5179static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
5180 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005181 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005182};
5183
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005184static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005185 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005186 .pa_start = 0x40130000,
5187 .pa_end = 0x4013007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005188 .flags = ADDR_TYPE_RT
5189 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005190 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005191};
5192
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005193/* l4_abe -> wd_timer3 */
5194static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
5195 .master = &omap44xx_l4_abe_hwmod,
5196 .slave = &omap44xx_wd_timer3_hwmod,
5197 .clk = "ocp_abe_iclk",
5198 .addr = omap44xx_wd_timer3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005199 .user = OCP_USER_MPU,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005200};
5201
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005202static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005203 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005204 .pa_start = 0x49030000,
5205 .pa_end = 0x4903007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005206 .flags = ADDR_TYPE_RT
5207 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005208 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005209};
5210
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005211/* l4_abe -> wd_timer3 (dma) */
5212static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5213 .master = &omap44xx_l4_abe_hwmod,
5214 .slave = &omap44xx_wd_timer3_hwmod,
5215 .clk = "ocp_abe_iclk",
5216 .addr = omap44xx_wd_timer3_dma_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005217 .user = OCP_USER_SDMA,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005218};
5219
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005220/* wd_timer3 slave ports */
5221static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
5222 &omap44xx_l4_abe__wd_timer3,
5223 &omap44xx_l4_abe__wd_timer3_dma,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005224};
5225
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005226static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
5227 .name = "wd_timer3",
5228 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005229 .clkdm_name = "abe_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005230 .mpu_irqs = omap44xx_wd_timer3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005231 .main_clk = "wd_timer3_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005232 .prcm = {
5233 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005234 .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005235 .context_offs = OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005236 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005237 },
5238 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005239 .slaves = omap44xx_wd_timer3_slaves,
5240 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005241};
5242
Benoit Coussonaf88fa92011-12-15 23:15:18 -07005243/*
5244 * 'usb_host_hs' class
5245 * high-speed multi-port usb host controller
5246 */
5247static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
5248 .master = &omap44xx_usb_host_hs_hwmod,
5249 .slave = &omap44xx_l3_main_2_hwmod,
5250 .clk = "l3_div_ck",
5251 .user = OCP_USER_MPU | OCP_USER_SDMA,
5252};
5253
5254static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
5255 .rev_offs = 0x0000,
5256 .sysc_offs = 0x0010,
5257 .syss_offs = 0x0014,
5258 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
5259 SYSC_HAS_SOFTRESET),
5260 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5261 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
5262 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
5263 .sysc_fields = &omap_hwmod_sysc_type2,
5264};
5265
5266static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
5267 .name = "usb_host_hs",
5268 .sysc = &omap44xx_usb_host_hs_sysc,
5269};
5270
5271static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = {
5272 &omap44xx_usb_host_hs__l3_main_2,
5273};
5274
5275static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = {
5276 {
5277 .name = "uhh",
5278 .pa_start = 0x4a064000,
5279 .pa_end = 0x4a0647ff,
5280 .flags = ADDR_TYPE_RT
5281 },
5282 {
5283 .name = "ohci",
5284 .pa_start = 0x4a064800,
5285 .pa_end = 0x4a064bff,
5286 },
5287 {
5288 .name = "ehci",
5289 .pa_start = 0x4a064c00,
5290 .pa_end = 0x4a064fff,
5291 },
5292 {}
5293};
5294
5295static struct omap_hwmod_irq_info omap44xx_usb_host_hs_irqs[] = {
5296 { .name = "ohci-irq", .irq = 76 + OMAP44XX_IRQ_GIC_START },
5297 { .name = "ehci-irq", .irq = 77 + OMAP44XX_IRQ_GIC_START },
5298 { .irq = -1 }
5299};
5300
5301static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
5302 .master = &omap44xx_l4_cfg_hwmod,
5303 .slave = &omap44xx_usb_host_hs_hwmod,
5304 .clk = "l4_div_ck",
5305 .addr = omap44xx_usb_host_hs_addrs,
5306 .user = OCP_USER_MPU | OCP_USER_SDMA,
5307};
5308
5309static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_slaves[] = {
5310 &omap44xx_l4_cfg__usb_host_hs,
5311};
5312
5313static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
5314 .name = "usb_host_hs",
5315 .class = &omap44xx_usb_host_hs_hwmod_class,
5316 .clkdm_name = "l3_init_clkdm",
5317 .main_clk = "usb_host_hs_fck",
5318 .prcm = {
5319 .omap4 = {
5320 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
5321 .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
5322 .modulemode = MODULEMODE_SWCTRL,
5323 },
5324 },
5325 .mpu_irqs = omap44xx_usb_host_hs_irqs,
5326 .slaves = omap44xx_usb_host_hs_slaves,
5327 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_slaves),
5328 .masters = omap44xx_usb_host_hs_masters,
5329 .masters_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_masters),
5330
5331 /*
5332 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
5333 * id: i660
5334 *
5335 * Description:
5336 * In the following configuration :
5337 * - USBHOST module is set to smart-idle mode
5338 * - PRCM asserts idle_req to the USBHOST module ( This typically
5339 * happens when the system is going to a low power mode : all ports
5340 * have been suspended, the master part of the USBHOST module has
5341 * entered the standby state, and SW has cut the functional clocks)
5342 * - an USBHOST interrupt occurs before the module is able to answer
5343 * idle_ack, typically a remote wakeup IRQ.
5344 * Then the USB HOST module will enter a deadlock situation where it
5345 * is no more accessible nor functional.
5346 *
5347 * Workaround:
5348 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
5349 */
5350
5351 /*
5352 * Errata: USB host EHCI may stall when entering smart-standby mode
5353 * Id: i571
5354 *
5355 * Description:
5356 * When the USBHOST module is set to smart-standby mode, and when it is
5357 * ready to enter the standby state (i.e. all ports are suspended and
5358 * all attached devices are in suspend mode), then it can wrongly assert
5359 * the Mstandby signal too early while there are still some residual OCP
5360 * transactions ongoing. If this condition occurs, the internal state
5361 * machine may go to an undefined state and the USB link may be stuck
5362 * upon the next resume.
5363 *
5364 * Workaround:
5365 * Don't use smart standby; use only force standby,
5366 * hence HWMOD_SWSUP_MSTANDBY
5367 */
5368
5369 /*
5370 * During system boot; If the hwmod framework resets the module
5371 * the module will have smart idle settings; which can lead to deadlock
5372 * (above Errata Id:i660); so, dont reset the module during boot;
5373 * Use HWMOD_INIT_NO_RESET.
5374 */
5375
5376 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
5377 HWMOD_INIT_NO_RESET,
5378};
5379
5380/*
5381 * 'usb_tll_hs' class
5382 * usb_tll_hs module is the adapter on the usb_host_hs ports
5383 */
5384static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
5385 .rev_offs = 0x0000,
5386 .sysc_offs = 0x0010,
5387 .syss_offs = 0x0014,
5388 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
5389 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
5390 SYSC_HAS_AUTOIDLE),
5391 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
5392 .sysc_fields = &omap_hwmod_sysc_type1,
5393};
5394
5395static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
5396 .name = "usb_tll_hs",
5397 .sysc = &omap44xx_usb_tll_hs_sysc,
5398};
5399
5400static struct omap_hwmod_irq_info omap44xx_usb_tll_hs_irqs[] = {
5401 { .name = "tll-irq", .irq = 78 + OMAP44XX_IRQ_GIC_START },
5402 { .irq = -1 }
5403};
5404
5405static struct omap_hwmod_addr_space omap44xx_usb_tll_hs_addrs[] = {
5406 {
5407 .name = "tll",
5408 .pa_start = 0x4a062000,
5409 .pa_end = 0x4a063fff,
5410 .flags = ADDR_TYPE_RT
5411 },
5412 {}
5413};
5414
5415static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
5416 .master = &omap44xx_l4_cfg_hwmod,
5417 .slave = &omap44xx_usb_tll_hs_hwmod,
5418 .clk = "l4_div_ck",
5419 .addr = omap44xx_usb_tll_hs_addrs,
5420 .user = OCP_USER_MPU | OCP_USER_SDMA,
5421};
5422
5423static struct omap_hwmod_ocp_if *omap44xx_usb_tll_hs_slaves[] = {
5424 &omap44xx_l4_cfg__usb_tll_hs,
5425};
5426
5427static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
5428 .name = "usb_tll_hs",
5429 .class = &omap44xx_usb_tll_hs_hwmod_class,
5430 .clkdm_name = "l3_init_clkdm",
5431 .main_clk = "usb_tll_hs_ick",
5432 .prcm = {
5433 .omap4 = {
5434 .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
5435 .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
5436 .modulemode = MODULEMODE_HWCTRL,
5437 },
5438 },
5439 .mpu_irqs = omap44xx_usb_tll_hs_irqs,
5440 .slaves = omap44xx_usb_tll_hs_slaves,
5441 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_slaves),
5442};
5443
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005444static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
Benoit Coussonfe134712010-12-23 22:30:32 +00005445
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005446 /* dmm class */
5447 &omap44xx_dmm_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005448
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005449 /* emif_fw class */
5450 &omap44xx_emif_fw_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005451
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005452 /* l3 class */
5453 &omap44xx_l3_instr_hwmod,
5454 &omap44xx_l3_main_1_hwmod,
5455 &omap44xx_l3_main_2_hwmod,
5456 &omap44xx_l3_main_3_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005457
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005458 /* l4 class */
5459 &omap44xx_l4_abe_hwmod,
5460 &omap44xx_l4_cfg_hwmod,
5461 &omap44xx_l4_per_hwmod,
5462 &omap44xx_l4_wkup_hwmod,
Benoit Cousson531ce0d2010-12-20 18:27:19 -08005463
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005464 /* mpu_bus class */
5465 &omap44xx_mpu_private_hwmod,
5466
Benoit Cousson407a6882011-02-15 22:39:48 +01005467 /* aess class */
5468/* &omap44xx_aess_hwmod, */
5469
5470 /* bandgap class */
5471 &omap44xx_bandgap_hwmod,
5472
5473 /* counter class */
5474/* &omap44xx_counter_32k_hwmod, */
5475
Benoit Coussond7cf5f32010-12-23 22:30:31 +00005476 /* dma class */
5477 &omap44xx_dma_system_hwmod,
5478
Benoit Cousson8ca476d2011-01-25 22:01:00 +00005479 /* dmic class */
5480 &omap44xx_dmic_hwmod,
5481
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005482 /* dsp class */
5483 &omap44xx_dsp_hwmod,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005484
Benoit Coussond63bd742011-01-27 11:17:03 +00005485 /* dss class */
5486 &omap44xx_dss_hwmod,
5487 &omap44xx_dss_dispc_hwmod,
5488 &omap44xx_dss_dsi1_hwmod,
5489 &omap44xx_dss_dsi2_hwmod,
5490 &omap44xx_dss_hdmi_hwmod,
5491 &omap44xx_dss_rfbi_hwmod,
5492 &omap44xx_dss_venc_hwmod,
5493
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005494 /* gpio class */
5495 &omap44xx_gpio1_hwmod,
5496 &omap44xx_gpio2_hwmod,
5497 &omap44xx_gpio3_hwmod,
5498 &omap44xx_gpio4_hwmod,
5499 &omap44xx_gpio5_hwmod,
5500 &omap44xx_gpio6_hwmod,
5501
Benoit Cousson407a6882011-02-15 22:39:48 +01005502 /* hsi class */
5503/* &omap44xx_hsi_hwmod, */
5504
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005505 /* i2c class */
5506 &omap44xx_i2c1_hwmod,
5507 &omap44xx_i2c2_hwmod,
5508 &omap44xx_i2c3_hwmod,
5509 &omap44xx_i2c4_hwmod,
5510
Benoit Cousson407a6882011-02-15 22:39:48 +01005511 /* ipu class */
5512 &omap44xx_ipu_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005513
5514 /* iss class */
5515/* &omap44xx_iss_hwmod, */
5516
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005517 /* iva class */
5518 &omap44xx_iva_hwmod,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005519
Benoit Cousson407a6882011-02-15 22:39:48 +01005520 /* kbd class */
Shubhrajyoti D4998b2452011-05-04 14:57:44 -07005521 &omap44xx_kbd_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005522
Benoit Coussonec5df922011-02-02 19:27:21 +00005523 /* mailbox class */
5524 &omap44xx_mailbox_hwmod,
5525
Benoit Cousson4ddff492011-01-31 14:50:30 +00005526 /* mcbsp class */
5527 &omap44xx_mcbsp1_hwmod,
5528 &omap44xx_mcbsp2_hwmod,
5529 &omap44xx_mcbsp3_hwmod,
5530 &omap44xx_mcbsp4_hwmod,
5531
Benoit Cousson407a6882011-02-15 22:39:48 +01005532 /* mcpdm class */
Peter Ujfalusid05e2ea2011-05-01 19:33:15 +01005533 &omap44xx_mcpdm_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005534
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05305535 /* mcspi class */
5536 &omap44xx_mcspi1_hwmod,
5537 &omap44xx_mcspi2_hwmod,
5538 &omap44xx_mcspi3_hwmod,
5539 &omap44xx_mcspi4_hwmod,
5540
Benoit Cousson407a6882011-02-15 22:39:48 +01005541 /* mmc class */
Anand Gadiyar17203bd2011-03-01 13:12:56 -08005542 &omap44xx_mmc1_hwmod,
5543 &omap44xx_mmc2_hwmod,
5544 &omap44xx_mmc3_hwmod,
5545 &omap44xx_mmc4_hwmod,
5546 &omap44xx_mmc5_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005547
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005548 /* mpu class */
5549 &omap44xx_mpu_hwmod,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305550
Benoit Cousson1f6a7172010-12-23 22:30:30 +00005551 /* smartreflex class */
5552 &omap44xx_smartreflex_core_hwmod,
5553 &omap44xx_smartreflex_iva_hwmod,
5554 &omap44xx_smartreflex_mpu_hwmod,
5555
Benoit Coussond11c2172011-02-02 12:04:36 +00005556 /* spinlock class */
5557 &omap44xx_spinlock_hwmod,
5558
Benoit Cousson35d1a662011-02-11 11:17:14 +00005559 /* timer class */
5560 &omap44xx_timer1_hwmod,
5561 &omap44xx_timer2_hwmod,
5562 &omap44xx_timer3_hwmod,
5563 &omap44xx_timer4_hwmod,
5564 &omap44xx_timer5_hwmod,
5565 &omap44xx_timer6_hwmod,
5566 &omap44xx_timer7_hwmod,
5567 &omap44xx_timer8_hwmod,
5568 &omap44xx_timer9_hwmod,
5569 &omap44xx_timer10_hwmod,
5570 &omap44xx_timer11_hwmod,
5571
Benoit Coussondb12ba52010-09-27 20:19:19 +05305572 /* uart class */
5573 &omap44xx_uart1_hwmod,
5574 &omap44xx_uart2_hwmod,
5575 &omap44xx_uart3_hwmod,
5576 &omap44xx_uart4_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005577
Benoit Coussonaf88fa92011-12-15 23:15:18 -07005578 /* usb host class */
5579 &omap44xx_usb_host_hs_hwmod,
5580 &omap44xx_usb_tll_hs_hwmod,
5581
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005582 /* usb_otg_hs class */
5583 &omap44xx_usb_otg_hs_hwmod,
5584
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005585 /* wd_timer class */
5586 &omap44xx_wd_timer2_hwmod,
5587 &omap44xx_wd_timer3_hwmod,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005588 NULL,
5589};
5590
5591int __init omap44xx_hwmod_init(void)
5592{
Paul Walmsley550c8092011-02-28 11:58:14 -07005593 return omap_hwmod_register(omap44xx_hwmods);
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005594}
5595