blob: dcbf973c1603877eec5fbbb320ccd441dbc3e927 [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>
Andy Green4d4441a2011-07-10 05:27:16 -060031#include <plat/i2c.h>
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +053032#include <plat/dmtimer.h>
Tomi Valkeinen13662dc2011-11-08 03:16:13 -070033#include <plat/common.h>
Benoit Cousson55d2cb02010-05-12 17:54:36 +020034
35#include "omap_hwmod_common_data.h"
36
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 {
1034 .pa_start = 0x4012e000,
1035 .pa_end = 0x4012e07f,
1036 .flags = ADDR_TYPE_RT
1037 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001038 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001039};
1040
1041/* l4_abe -> dmic */
1042static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
1043 .master = &omap44xx_l4_abe_hwmod,
1044 .slave = &omap44xx_dmic_hwmod,
1045 .clk = "ocp_abe_iclk",
1046 .addr = omap44xx_dmic_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001047 .user = OCP_USER_MPU,
1048};
1049
1050static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
1051 {
1052 .pa_start = 0x4902e000,
1053 .pa_end = 0x4902e07f,
1054 .flags = ADDR_TYPE_RT
1055 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001056 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001057};
1058
1059/* l4_abe -> dmic (dma) */
1060static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
1061 .master = &omap44xx_l4_abe_hwmod,
1062 .slave = &omap44xx_dmic_hwmod,
1063 .clk = "ocp_abe_iclk",
1064 .addr = omap44xx_dmic_dma_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001065 .user = OCP_USER_SDMA,
1066};
1067
1068/* dmic slave ports */
1069static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
1070 &omap44xx_l4_abe__dmic,
1071 &omap44xx_l4_abe__dmic_dma,
1072};
1073
1074static struct omap_hwmod omap44xx_dmic_hwmod = {
1075 .name = "dmic",
1076 .class = &omap44xx_dmic_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001077 .clkdm_name = "abe_clkdm",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001078 .mpu_irqs = omap44xx_dmic_irqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001079 .sdma_reqs = omap44xx_dmic_sdma_reqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001080 .main_clk = "dmic_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06001081 .prcm = {
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001082 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001083 .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001084 .context_offs = OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001085 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001086 },
1087 },
1088 .slaves = omap44xx_dmic_slaves,
1089 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001090};
1091
1092/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001093 * 'dsp' class
1094 * dsp sub-system
1095 */
1096
1097static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001098 .name = "dsp",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001099};
1100
1101/* dsp */
1102static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
1103 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001104 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001105};
1106
1107static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
1108 { .name = "mmu_cache", .rst_shift = 1 },
1109};
1110
1111static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
1112 { .name = "dsp", .rst_shift = 0 },
1113};
1114
1115/* dsp -> iva */
1116static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1117 .master = &omap44xx_dsp_hwmod,
1118 .slave = &omap44xx_iva_hwmod,
1119 .clk = "dpll_iva_m5x2_ck",
1120};
1121
1122/* dsp master ports */
1123static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
1124 &omap44xx_dsp__l3_main_1,
1125 &omap44xx_dsp__l4_abe,
1126 &omap44xx_dsp__iva,
1127};
1128
1129/* l4_cfg -> dsp */
1130static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1131 .master = &omap44xx_l4_cfg_hwmod,
1132 .slave = &omap44xx_dsp_hwmod,
1133 .clk = "l4_div_ck",
1134 .user = OCP_USER_MPU | OCP_USER_SDMA,
1135};
1136
1137/* dsp slave ports */
1138static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
1139 &omap44xx_l4_cfg__dsp,
1140};
1141
1142/* Pseudo hwmod for reset control purpose only */
1143static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
1144 .name = "dsp_c0",
1145 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001146 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001147 .flags = HWMOD_INIT_NO_RESET,
1148 .rst_lines = omap44xx_dsp_c0_resets,
1149 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
1150 .prcm = {
1151 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06001152 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001153 },
1154 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001155};
1156
1157static struct omap_hwmod omap44xx_dsp_hwmod = {
1158 .name = "dsp",
1159 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001160 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001161 .mpu_irqs = omap44xx_dsp_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001162 .rst_lines = omap44xx_dsp_resets,
1163 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
1164 .main_clk = "dsp_fck",
1165 .prcm = {
1166 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001167 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06001168 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001169 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001170 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001171 },
1172 },
1173 .slaves = omap44xx_dsp_slaves,
1174 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
1175 .masters = omap44xx_dsp_masters,
1176 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001177};
1178
1179/*
Benoit Coussond63bd742011-01-27 11:17:03 +00001180 * 'dss' class
1181 * display sub-system
1182 */
1183
1184static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
1185 .rev_offs = 0x0000,
1186 .syss_offs = 0x0014,
1187 .sysc_flags = SYSS_HAS_RESET_STATUS,
1188};
1189
1190static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
1191 .name = "dss",
1192 .sysc = &omap44xx_dss_sysc,
Tomi Valkeinen13662dc2011-11-08 03:16:13 -07001193 .reset = omap_dss_reset,
Benoit Coussond63bd742011-01-27 11:17:03 +00001194};
1195
1196/* dss */
1197/* dss master ports */
1198static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
1199 &omap44xx_dss__l3_main_1,
1200};
1201
1202static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
1203 {
1204 .pa_start = 0x58000000,
1205 .pa_end = 0x5800007f,
1206 .flags = ADDR_TYPE_RT
1207 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001208 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001209};
1210
1211/* l3_main_2 -> dss */
1212static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1213 .master = &omap44xx_l3_main_2_hwmod,
1214 .slave = &omap44xx_dss_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001215 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001216 .addr = omap44xx_dss_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001217 .user = OCP_USER_SDMA,
1218};
1219
1220static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
1221 {
1222 .pa_start = 0x48040000,
1223 .pa_end = 0x4804007f,
1224 .flags = ADDR_TYPE_RT
1225 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001226 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001227};
1228
1229/* l4_per -> dss */
1230static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1231 .master = &omap44xx_l4_per_hwmod,
1232 .slave = &omap44xx_dss_hwmod,
1233 .clk = "l4_div_ck",
1234 .addr = omap44xx_dss_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001235 .user = OCP_USER_MPU,
1236};
1237
1238/* dss slave ports */
1239static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
1240 &omap44xx_l3_main_2__dss,
1241 &omap44xx_l4_per__dss,
1242};
1243
1244static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1245 { .role = "sys_clk", .clk = "dss_sys_clk" },
1246 { .role = "tv_clk", .clk = "dss_tv_clk" },
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001247 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
Benoit Coussond63bd742011-01-27 11:17:03 +00001248};
1249
1250static struct omap_hwmod omap44xx_dss_hwmod = {
1251 .name = "dss_core",
Tomi Valkeinen37ad0852011-11-08 03:16:11 -07001252 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001253 .class = &omap44xx_dss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001254 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001255 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001256 .prcm = {
1257 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001258 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001259 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001260 },
1261 },
1262 .opt_clks = dss_opt_clks,
1263 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1264 .slaves = omap44xx_dss_slaves,
1265 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
1266 .masters = omap44xx_dss_masters,
1267 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
Benoit Coussond63bd742011-01-27 11:17:03 +00001268};
1269
1270/*
1271 * 'dispc' class
1272 * display controller
1273 */
1274
1275static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
1276 .rev_offs = 0x0000,
1277 .sysc_offs = 0x0010,
1278 .syss_offs = 0x0014,
1279 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1280 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
1281 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1282 SYSS_HAS_RESET_STATUS),
1283 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1284 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1285 .sysc_fields = &omap_hwmod_sysc_type1,
1286};
1287
1288static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
1289 .name = "dispc",
1290 .sysc = &omap44xx_dispc_sysc,
1291};
1292
1293/* dss_dispc */
1294static struct omap_hwmod omap44xx_dss_dispc_hwmod;
1295static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
1296 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001297 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001298};
1299
1300static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
1301 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001302 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001303};
1304
1305static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
1306 {
1307 .pa_start = 0x58001000,
1308 .pa_end = 0x58001fff,
1309 .flags = ADDR_TYPE_RT
1310 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001311 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001312};
1313
1314/* l3_main_2 -> dss_dispc */
1315static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1316 .master = &omap44xx_l3_main_2_hwmod,
1317 .slave = &omap44xx_dss_dispc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001318 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001319 .addr = omap44xx_dss_dispc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001320 .user = OCP_USER_SDMA,
1321};
1322
1323static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
1324 {
1325 .pa_start = 0x48041000,
1326 .pa_end = 0x48041fff,
1327 .flags = ADDR_TYPE_RT
1328 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001329 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001330};
1331
Archit Tanejab923d402011-10-06 18:04:08 -06001332static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
1333 .manager_count = 3,
1334 .has_framedonetv_irq = 1
1335};
1336
Benoit Coussond63bd742011-01-27 11:17:03 +00001337/* l4_per -> dss_dispc */
1338static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1339 .master = &omap44xx_l4_per_hwmod,
1340 .slave = &omap44xx_dss_dispc_hwmod,
1341 .clk = "l4_div_ck",
1342 .addr = omap44xx_dss_dispc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001343 .user = OCP_USER_MPU,
1344};
1345
1346/* dss_dispc slave ports */
1347static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
1348 &omap44xx_l3_main_2__dss_dispc,
1349 &omap44xx_l4_per__dss_dispc,
1350};
1351
1352static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
1353 .name = "dss_dispc",
1354 .class = &omap44xx_dispc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001355 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001356 .mpu_irqs = omap44xx_dss_dispc_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001357 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001358 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001359 .prcm = {
1360 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001361 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001362 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001363 },
1364 },
1365 .slaves = omap44xx_dss_dispc_slaves,
1366 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
Archit Tanejab923d402011-10-06 18:04:08 -06001367 .dev_attr = &omap44xx_dss_dispc_dev_attr
Benoit Coussond63bd742011-01-27 11:17:03 +00001368};
1369
1370/*
1371 * 'dsi' class
1372 * display serial interface controller
1373 */
1374
1375static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1376 .rev_offs = 0x0000,
1377 .sysc_offs = 0x0010,
1378 .syss_offs = 0x0014,
1379 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1380 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1381 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1382 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1383 .sysc_fields = &omap_hwmod_sysc_type1,
1384};
1385
1386static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1387 .name = "dsi",
1388 .sysc = &omap44xx_dsi_sysc,
1389};
1390
1391/* dss_dsi1 */
1392static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1393static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1394 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001395 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001396};
1397
1398static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1399 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001400 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001401};
1402
1403static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1404 {
1405 .pa_start = 0x58004000,
1406 .pa_end = 0x580041ff,
1407 .flags = ADDR_TYPE_RT
1408 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001409 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001410};
1411
1412/* l3_main_2 -> dss_dsi1 */
1413static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1414 .master = &omap44xx_l3_main_2_hwmod,
1415 .slave = &omap44xx_dss_dsi1_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001416 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001417 .addr = omap44xx_dss_dsi1_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001418 .user = OCP_USER_SDMA,
1419};
1420
1421static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1422 {
1423 .pa_start = 0x48044000,
1424 .pa_end = 0x480441ff,
1425 .flags = ADDR_TYPE_RT
1426 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001427 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001428};
1429
1430/* l4_per -> dss_dsi1 */
1431static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1432 .master = &omap44xx_l4_per_hwmod,
1433 .slave = &omap44xx_dss_dsi1_hwmod,
1434 .clk = "l4_div_ck",
1435 .addr = omap44xx_dss_dsi1_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001436 .user = OCP_USER_MPU,
1437};
1438
1439/* dss_dsi1 slave ports */
1440static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1441 &omap44xx_l3_main_2__dss_dsi1,
1442 &omap44xx_l4_per__dss_dsi1,
1443};
1444
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001445static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
1446 { .role = "sys_clk", .clk = "dss_sys_clk" },
1447};
1448
Benoit Coussond63bd742011-01-27 11:17:03 +00001449static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1450 .name = "dss_dsi1",
1451 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001452 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001453 .mpu_irqs = omap44xx_dss_dsi1_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001454 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001455 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001456 .prcm = {
1457 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001458 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001459 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001460 },
1461 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001462 .opt_clks = dss_dsi1_opt_clks,
1463 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001464 .slaves = omap44xx_dss_dsi1_slaves,
1465 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001466};
1467
1468/* dss_dsi2 */
1469static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1470static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1471 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001472 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001473};
1474
1475static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1476 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001477 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001478};
1479
1480static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1481 {
1482 .pa_start = 0x58005000,
1483 .pa_end = 0x580051ff,
1484 .flags = ADDR_TYPE_RT
1485 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001486 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001487};
1488
1489/* l3_main_2 -> dss_dsi2 */
1490static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1491 .master = &omap44xx_l3_main_2_hwmod,
1492 .slave = &omap44xx_dss_dsi2_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001493 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001494 .addr = omap44xx_dss_dsi2_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001495 .user = OCP_USER_SDMA,
1496};
1497
1498static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1499 {
1500 .pa_start = 0x48045000,
1501 .pa_end = 0x480451ff,
1502 .flags = ADDR_TYPE_RT
1503 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001504 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001505};
1506
1507/* l4_per -> dss_dsi2 */
1508static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1509 .master = &omap44xx_l4_per_hwmod,
1510 .slave = &omap44xx_dss_dsi2_hwmod,
1511 .clk = "l4_div_ck",
1512 .addr = omap44xx_dss_dsi2_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001513 .user = OCP_USER_MPU,
1514};
1515
1516/* dss_dsi2 slave ports */
1517static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1518 &omap44xx_l3_main_2__dss_dsi2,
1519 &omap44xx_l4_per__dss_dsi2,
1520};
1521
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001522static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
1523 { .role = "sys_clk", .clk = "dss_sys_clk" },
1524};
1525
Benoit Coussond63bd742011-01-27 11:17:03 +00001526static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1527 .name = "dss_dsi2",
1528 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001529 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001530 .mpu_irqs = omap44xx_dss_dsi2_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001531 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001532 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001533 .prcm = {
1534 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001535 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001536 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001537 },
1538 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001539 .opt_clks = dss_dsi2_opt_clks,
1540 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001541 .slaves = omap44xx_dss_dsi2_slaves,
1542 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001543};
1544
1545/*
1546 * 'hdmi' class
1547 * hdmi controller
1548 */
1549
1550static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1551 .rev_offs = 0x0000,
1552 .sysc_offs = 0x0010,
1553 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1554 SYSC_HAS_SOFTRESET),
1555 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1556 SIDLE_SMART_WKUP),
1557 .sysc_fields = &omap_hwmod_sysc_type2,
1558};
1559
1560static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1561 .name = "hdmi",
1562 .sysc = &omap44xx_hdmi_sysc,
1563};
1564
1565/* dss_hdmi */
1566static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1567static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1568 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001569 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001570};
1571
1572static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1573 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001574 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001575};
1576
1577static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1578 {
1579 .pa_start = 0x58006000,
1580 .pa_end = 0x58006fff,
1581 .flags = ADDR_TYPE_RT
1582 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001583 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001584};
1585
1586/* l3_main_2 -> dss_hdmi */
1587static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1588 .master = &omap44xx_l3_main_2_hwmod,
1589 .slave = &omap44xx_dss_hdmi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001590 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001591 .addr = omap44xx_dss_hdmi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001592 .user = OCP_USER_SDMA,
1593};
1594
1595static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1596 {
1597 .pa_start = 0x48046000,
1598 .pa_end = 0x48046fff,
1599 .flags = ADDR_TYPE_RT
1600 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001601 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001602};
1603
1604/* l4_per -> dss_hdmi */
1605static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1606 .master = &omap44xx_l4_per_hwmod,
1607 .slave = &omap44xx_dss_hdmi_hwmod,
1608 .clk = "l4_div_ck",
1609 .addr = omap44xx_dss_hdmi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001610 .user = OCP_USER_MPU,
1611};
1612
1613/* dss_hdmi slave ports */
1614static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1615 &omap44xx_l3_main_2__dss_hdmi,
1616 &omap44xx_l4_per__dss_hdmi,
1617};
1618
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001619static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
1620 { .role = "sys_clk", .clk = "dss_sys_clk" },
1621};
1622
Benoit Coussond63bd742011-01-27 11:17:03 +00001623static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1624 .name = "dss_hdmi",
1625 .class = &omap44xx_hdmi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001626 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001627 .mpu_irqs = omap44xx_dss_hdmi_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001628 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001629 .main_clk = "dss_48mhz_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001630 .prcm = {
1631 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001632 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001633 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001634 },
1635 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001636 .opt_clks = dss_hdmi_opt_clks,
1637 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001638 .slaves = omap44xx_dss_hdmi_slaves,
1639 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001640};
1641
1642/*
1643 * 'rfbi' class
1644 * remote frame buffer interface
1645 */
1646
1647static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1648 .rev_offs = 0x0000,
1649 .sysc_offs = 0x0010,
1650 .syss_offs = 0x0014,
1651 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1652 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1653 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1654 .sysc_fields = &omap_hwmod_sysc_type1,
1655};
1656
1657static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1658 .name = "rfbi",
1659 .sysc = &omap44xx_rfbi_sysc,
1660};
1661
1662/* dss_rfbi */
1663static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1664static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1665 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001666 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001667};
1668
1669static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1670 {
1671 .pa_start = 0x58002000,
1672 .pa_end = 0x580020ff,
1673 .flags = ADDR_TYPE_RT
1674 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001675 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001676};
1677
1678/* l3_main_2 -> dss_rfbi */
1679static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1680 .master = &omap44xx_l3_main_2_hwmod,
1681 .slave = &omap44xx_dss_rfbi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001682 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001683 .addr = omap44xx_dss_rfbi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001684 .user = OCP_USER_SDMA,
1685};
1686
1687static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1688 {
1689 .pa_start = 0x48042000,
1690 .pa_end = 0x480420ff,
1691 .flags = ADDR_TYPE_RT
1692 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001693 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001694};
1695
1696/* l4_per -> dss_rfbi */
1697static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1698 .master = &omap44xx_l4_per_hwmod,
1699 .slave = &omap44xx_dss_rfbi_hwmod,
1700 .clk = "l4_div_ck",
1701 .addr = omap44xx_dss_rfbi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001702 .user = OCP_USER_MPU,
1703};
1704
1705/* dss_rfbi slave ports */
1706static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1707 &omap44xx_l3_main_2__dss_rfbi,
1708 &omap44xx_l4_per__dss_rfbi,
1709};
1710
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001711static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
1712 { .role = "ick", .clk = "dss_fck" },
1713};
1714
Benoit Coussond63bd742011-01-27 11:17:03 +00001715static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1716 .name = "dss_rfbi",
1717 .class = &omap44xx_rfbi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001718 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001719 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001720 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001721 .prcm = {
1722 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001723 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001724 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001725 },
1726 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001727 .opt_clks = dss_rfbi_opt_clks,
1728 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001729 .slaves = omap44xx_dss_rfbi_slaves,
1730 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001731};
1732
1733/*
1734 * 'venc' class
1735 * video encoder
1736 */
1737
1738static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1739 .name = "venc",
1740};
1741
1742/* dss_venc */
1743static struct omap_hwmod omap44xx_dss_venc_hwmod;
1744static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1745 {
1746 .pa_start = 0x58003000,
1747 .pa_end = 0x580030ff,
1748 .flags = ADDR_TYPE_RT
1749 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001750 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001751};
1752
1753/* l3_main_2 -> dss_venc */
1754static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1755 .master = &omap44xx_l3_main_2_hwmod,
1756 .slave = &omap44xx_dss_venc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001757 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001758 .addr = omap44xx_dss_venc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001759 .user = OCP_USER_SDMA,
1760};
1761
1762static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1763 {
1764 .pa_start = 0x48043000,
1765 .pa_end = 0x480430ff,
1766 .flags = ADDR_TYPE_RT
1767 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001768 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001769};
1770
1771/* l4_per -> dss_venc */
1772static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1773 .master = &omap44xx_l4_per_hwmod,
1774 .slave = &omap44xx_dss_venc_hwmod,
1775 .clk = "l4_div_ck",
1776 .addr = omap44xx_dss_venc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001777 .user = OCP_USER_MPU,
1778};
1779
1780/* dss_venc slave ports */
1781static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1782 &omap44xx_l3_main_2__dss_venc,
1783 &omap44xx_l4_per__dss_venc,
1784};
1785
1786static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1787 .name = "dss_venc",
1788 .class = &omap44xx_venc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001789 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinen4d0698d2011-11-08 03:16:12 -07001790 .main_clk = "dss_tv_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001791 .prcm = {
1792 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001793 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001794 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001795 },
1796 },
1797 .slaves = omap44xx_dss_venc_slaves,
1798 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
Benoit Coussond63bd742011-01-27 11:17:03 +00001799};
1800
1801/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001802 * 'gpio' class
1803 * general purpose io module
1804 */
1805
1806static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1807 .rev_offs = 0x0000,
1808 .sysc_offs = 0x0010,
1809 .syss_offs = 0x0114,
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001810 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1811 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1812 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001813 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1814 SIDLE_SMART_WKUP),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001815 .sysc_fields = &omap_hwmod_sysc_type1,
1816};
1817
1818static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001819 .name = "gpio",
1820 .sysc = &omap44xx_gpio_sysc,
1821 .rev = 2,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001822};
1823
1824/* gpio dev_attr */
1825static struct omap_gpio_dev_attr gpio_dev_attr = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001826 .bank_width = 32,
1827 .dbck_flag = true,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001828};
1829
1830/* gpio1 */
1831static struct omap_hwmod omap44xx_gpio1_hwmod;
1832static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1833 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001834 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001835};
1836
1837static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1838 {
1839 .pa_start = 0x4a310000,
1840 .pa_end = 0x4a3101ff,
1841 .flags = ADDR_TYPE_RT
1842 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001843 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001844};
1845
1846/* l4_wkup -> gpio1 */
1847static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1848 .master = &omap44xx_l4_wkup_hwmod,
1849 .slave = &omap44xx_gpio1_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001850 .clk = "l4_wkup_clk_mux_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001851 .addr = omap44xx_gpio1_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001852 .user = OCP_USER_MPU | OCP_USER_SDMA,
1853};
1854
1855/* gpio1 slave ports */
1856static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1857 &omap44xx_l4_wkup__gpio1,
1858};
1859
1860static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001861 { .role = "dbclk", .clk = "gpio1_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001862};
1863
1864static struct omap_hwmod omap44xx_gpio1_hwmod = {
1865 .name = "gpio1",
1866 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001867 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001868 .mpu_irqs = omap44xx_gpio1_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001869 .main_clk = "gpio1_ick",
1870 .prcm = {
1871 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001872 .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001873 .context_offs = OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001874 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001875 },
1876 },
1877 .opt_clks = gpio1_opt_clks,
1878 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1879 .dev_attr = &gpio_dev_attr,
1880 .slaves = omap44xx_gpio1_slaves,
1881 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001882};
1883
1884/* gpio2 */
1885static struct omap_hwmod omap44xx_gpio2_hwmod;
1886static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1887 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001888 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001889};
1890
1891static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1892 {
1893 .pa_start = 0x48055000,
1894 .pa_end = 0x480551ff,
1895 .flags = ADDR_TYPE_RT
1896 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001897 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001898};
1899
1900/* l4_per -> gpio2 */
1901static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1902 .master = &omap44xx_l4_per_hwmod,
1903 .slave = &omap44xx_gpio2_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001904 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001905 .addr = omap44xx_gpio2_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001906 .user = OCP_USER_MPU | OCP_USER_SDMA,
1907};
1908
1909/* gpio2 slave ports */
1910static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1911 &omap44xx_l4_per__gpio2,
1912};
1913
1914static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001915 { .role = "dbclk", .clk = "gpio2_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001916};
1917
1918static struct omap_hwmod omap44xx_gpio2_hwmod = {
1919 .name = "gpio2",
1920 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001921 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001922 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001923 .mpu_irqs = omap44xx_gpio2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001924 .main_clk = "gpio2_ick",
1925 .prcm = {
1926 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001927 .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001928 .context_offs = OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001929 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001930 },
1931 },
1932 .opt_clks = gpio2_opt_clks,
1933 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1934 .dev_attr = &gpio_dev_attr,
1935 .slaves = omap44xx_gpio2_slaves,
1936 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001937};
1938
1939/* gpio3 */
1940static struct omap_hwmod omap44xx_gpio3_hwmod;
1941static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1942 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001943 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001944};
1945
1946static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1947 {
1948 .pa_start = 0x48057000,
1949 .pa_end = 0x480571ff,
1950 .flags = ADDR_TYPE_RT
1951 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001952 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001953};
1954
1955/* l4_per -> gpio3 */
1956static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1957 .master = &omap44xx_l4_per_hwmod,
1958 .slave = &omap44xx_gpio3_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001959 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001960 .addr = omap44xx_gpio3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001961 .user = OCP_USER_MPU | OCP_USER_SDMA,
1962};
1963
1964/* gpio3 slave ports */
1965static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1966 &omap44xx_l4_per__gpio3,
1967};
1968
1969static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001970 { .role = "dbclk", .clk = "gpio3_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001971};
1972
1973static struct omap_hwmod omap44xx_gpio3_hwmod = {
1974 .name = "gpio3",
1975 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001976 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001977 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001978 .mpu_irqs = omap44xx_gpio3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001979 .main_clk = "gpio3_ick",
1980 .prcm = {
1981 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001982 .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001983 .context_offs = OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06001984 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001985 },
1986 },
1987 .opt_clks = gpio3_opt_clks,
1988 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1989 .dev_attr = &gpio_dev_attr,
1990 .slaves = omap44xx_gpio3_slaves,
1991 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001992};
1993
1994/* gpio4 */
1995static struct omap_hwmod omap44xx_gpio4_hwmod;
1996static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1997 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001998 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001999};
2000
2001static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
2002 {
2003 .pa_start = 0x48059000,
2004 .pa_end = 0x480591ff,
2005 .flags = ADDR_TYPE_RT
2006 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002007 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002008};
2009
2010/* l4_per -> gpio4 */
2011static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
2012 .master = &omap44xx_l4_per_hwmod,
2013 .slave = &omap44xx_gpio4_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002014 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002015 .addr = omap44xx_gpio4_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002016 .user = OCP_USER_MPU | OCP_USER_SDMA,
2017};
2018
2019/* gpio4 slave ports */
2020static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
2021 &omap44xx_l4_per__gpio4,
2022};
2023
2024static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002025 { .role = "dbclk", .clk = "gpio4_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002026};
2027
2028static struct omap_hwmod omap44xx_gpio4_hwmod = {
2029 .name = "gpio4",
2030 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002031 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002032 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002033 .mpu_irqs = omap44xx_gpio4_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002034 .main_clk = "gpio4_ick",
2035 .prcm = {
2036 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002037 .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002038 .context_offs = OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002039 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002040 },
2041 },
2042 .opt_clks = gpio4_opt_clks,
2043 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
2044 .dev_attr = &gpio_dev_attr,
2045 .slaves = omap44xx_gpio4_slaves,
2046 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002047};
2048
2049/* gpio5 */
2050static struct omap_hwmod omap44xx_gpio5_hwmod;
2051static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
2052 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002053 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002054};
2055
2056static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
2057 {
2058 .pa_start = 0x4805b000,
2059 .pa_end = 0x4805b1ff,
2060 .flags = ADDR_TYPE_RT
2061 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002062 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002063};
2064
2065/* l4_per -> gpio5 */
2066static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
2067 .master = &omap44xx_l4_per_hwmod,
2068 .slave = &omap44xx_gpio5_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002069 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002070 .addr = omap44xx_gpio5_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002071 .user = OCP_USER_MPU | OCP_USER_SDMA,
2072};
2073
2074/* gpio5 slave ports */
2075static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
2076 &omap44xx_l4_per__gpio5,
2077};
2078
2079static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002080 { .role = "dbclk", .clk = "gpio5_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002081};
2082
2083static struct omap_hwmod omap44xx_gpio5_hwmod = {
2084 .name = "gpio5",
2085 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002086 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002087 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002088 .mpu_irqs = omap44xx_gpio5_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002089 .main_clk = "gpio5_ick",
2090 .prcm = {
2091 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002092 .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002093 .context_offs = OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002094 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002095 },
2096 },
2097 .opt_clks = gpio5_opt_clks,
2098 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2099 .dev_attr = &gpio_dev_attr,
2100 .slaves = omap44xx_gpio5_slaves,
2101 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002102};
2103
2104/* gpio6 */
2105static struct omap_hwmod omap44xx_gpio6_hwmod;
2106static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
2107 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002108 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002109};
2110
2111static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
2112 {
2113 .pa_start = 0x4805d000,
2114 .pa_end = 0x4805d1ff,
2115 .flags = ADDR_TYPE_RT
2116 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002117 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002118};
2119
2120/* l4_per -> gpio6 */
2121static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
2122 .master = &omap44xx_l4_per_hwmod,
2123 .slave = &omap44xx_gpio6_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002124 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002125 .addr = omap44xx_gpio6_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002126 .user = OCP_USER_MPU | OCP_USER_SDMA,
2127};
2128
2129/* gpio6 slave ports */
2130static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
2131 &omap44xx_l4_per__gpio6,
2132};
2133
2134static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002135 { .role = "dbclk", .clk = "gpio6_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002136};
2137
2138static struct omap_hwmod omap44xx_gpio6_hwmod = {
2139 .name = "gpio6",
2140 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002141 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002142 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002143 .mpu_irqs = omap44xx_gpio6_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002144 .main_clk = "gpio6_ick",
2145 .prcm = {
2146 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002147 .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002148 .context_offs = OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002149 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002150 },
2151 },
2152 .opt_clks = gpio6_opt_clks,
2153 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2154 .dev_attr = &gpio_dev_attr,
2155 .slaves = omap44xx_gpio6_slaves,
2156 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002157};
2158
2159/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002160 * 'hsi' class
2161 * mipi high-speed synchronous serial interface (multichannel and full-duplex
2162 * serial if)
2163 */
2164
2165static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
2166 .rev_offs = 0x0000,
2167 .sysc_offs = 0x0010,
2168 .syss_offs = 0x0014,
2169 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
2170 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2171 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2172 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2173 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002174 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002175 .sysc_fields = &omap_hwmod_sysc_type1,
2176};
2177
2178static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
2179 .name = "hsi",
2180 .sysc = &omap44xx_hsi_sysc,
2181};
2182
2183/* hsi */
2184static struct omap_hwmod_irq_info omap44xx_hsi_irqs[] = {
2185 { .name = "mpu_p1", .irq = 67 + OMAP44XX_IRQ_GIC_START },
2186 { .name = "mpu_p2", .irq = 68 + OMAP44XX_IRQ_GIC_START },
2187 { .name = "mpu_dma", .irq = 71 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002188 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002189};
2190
2191/* hsi master ports */
2192static struct omap_hwmod_ocp_if *omap44xx_hsi_masters[] = {
2193 &omap44xx_hsi__l3_main_2,
2194};
2195
2196static struct omap_hwmod_addr_space omap44xx_hsi_addrs[] = {
2197 {
2198 .pa_start = 0x4a058000,
2199 .pa_end = 0x4a05bfff,
2200 .flags = ADDR_TYPE_RT
2201 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002202 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002203};
2204
2205/* l4_cfg -> hsi */
2206static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
2207 .master = &omap44xx_l4_cfg_hwmod,
2208 .slave = &omap44xx_hsi_hwmod,
2209 .clk = "l4_div_ck",
2210 .addr = omap44xx_hsi_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002211 .user = OCP_USER_MPU | OCP_USER_SDMA,
2212};
2213
2214/* hsi slave ports */
2215static struct omap_hwmod_ocp_if *omap44xx_hsi_slaves[] = {
2216 &omap44xx_l4_cfg__hsi,
2217};
2218
2219static struct omap_hwmod omap44xx_hsi_hwmod = {
2220 .name = "hsi",
2221 .class = &omap44xx_hsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002222 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002223 .mpu_irqs = omap44xx_hsi_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002224 .main_clk = "hsi_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002225 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002226 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002227 .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002228 .context_offs = OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002229 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002230 },
2231 },
2232 .slaves = omap44xx_hsi_slaves,
2233 .slaves_cnt = ARRAY_SIZE(omap44xx_hsi_slaves),
2234 .masters = omap44xx_hsi_masters,
2235 .masters_cnt = ARRAY_SIZE(omap44xx_hsi_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002236};
2237
2238/*
Benoit Coussonf7764712010-09-21 19:37:14 +05302239 * 'i2c' class
2240 * multimaster high-speed i2c controller
2241 */
2242
2243static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
2244 .sysc_offs = 0x0010,
2245 .syss_offs = 0x0090,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002246 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2247 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07002248 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07002249 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2250 SIDLE_SMART_WKUP),
Benoit Coussonf7764712010-09-21 19:37:14 +05302251 .sysc_fields = &omap_hwmod_sysc_type1,
2252};
2253
2254static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002255 .name = "i2c",
2256 .sysc = &omap44xx_i2c_sysc,
Andy Greendb791a72011-07-10 05:27:15 -06002257 .rev = OMAP_I2C_IP_VERSION_2,
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002258 .reset = &omap_i2c_reset,
Benoit Coussonf7764712010-09-21 19:37:14 +05302259};
2260
Andy Green4d4441a2011-07-10 05:27:16 -06002261static struct omap_i2c_dev_attr i2c_dev_attr = {
2262 .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
2263};
2264
Benoit Coussonf7764712010-09-21 19:37:14 +05302265/* i2c1 */
2266static struct omap_hwmod omap44xx_i2c1_hwmod;
2267static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
2268 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002269 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302270};
2271
2272static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
2273 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
2274 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002275 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302276};
2277
2278static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
2279 {
2280 .pa_start = 0x48070000,
2281 .pa_end = 0x480700ff,
2282 .flags = ADDR_TYPE_RT
2283 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002284 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302285};
2286
2287/* l4_per -> i2c1 */
2288static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
2289 .master = &omap44xx_l4_per_hwmod,
2290 .slave = &omap44xx_i2c1_hwmod,
2291 .clk = "l4_div_ck",
2292 .addr = omap44xx_i2c1_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302293 .user = OCP_USER_MPU | OCP_USER_SDMA,
2294};
2295
2296/* i2c1 slave ports */
2297static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
2298 &omap44xx_l4_per__i2c1,
2299};
2300
2301static struct omap_hwmod omap44xx_i2c1_hwmod = {
2302 .name = "i2c1",
2303 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002304 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002305 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302306 .mpu_irqs = omap44xx_i2c1_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302307 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302308 .main_clk = "i2c1_fck",
2309 .prcm = {
2310 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002311 .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002312 .context_offs = OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002313 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302314 },
2315 },
2316 .slaves = omap44xx_i2c1_slaves,
2317 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002318 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302319};
2320
2321/* i2c2 */
2322static struct omap_hwmod omap44xx_i2c2_hwmod;
2323static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
2324 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002325 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302326};
2327
2328static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
2329 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
2330 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002331 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302332};
2333
2334static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
2335 {
2336 .pa_start = 0x48072000,
2337 .pa_end = 0x480720ff,
2338 .flags = ADDR_TYPE_RT
2339 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002340 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302341};
2342
2343/* l4_per -> i2c2 */
2344static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
2345 .master = &omap44xx_l4_per_hwmod,
2346 .slave = &omap44xx_i2c2_hwmod,
2347 .clk = "l4_div_ck",
2348 .addr = omap44xx_i2c2_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302349 .user = OCP_USER_MPU | OCP_USER_SDMA,
2350};
2351
2352/* i2c2 slave ports */
2353static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
2354 &omap44xx_l4_per__i2c2,
2355};
2356
2357static struct omap_hwmod omap44xx_i2c2_hwmod = {
2358 .name = "i2c2",
2359 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002360 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002361 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302362 .mpu_irqs = omap44xx_i2c2_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302363 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302364 .main_clk = "i2c2_fck",
2365 .prcm = {
2366 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002367 .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002368 .context_offs = OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002369 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302370 },
2371 },
2372 .slaves = omap44xx_i2c2_slaves,
2373 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002374 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302375};
2376
2377/* i2c3 */
2378static struct omap_hwmod omap44xx_i2c3_hwmod;
2379static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
2380 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002381 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302382};
2383
2384static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
2385 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
2386 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002387 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302388};
2389
2390static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
2391 {
2392 .pa_start = 0x48060000,
2393 .pa_end = 0x480600ff,
2394 .flags = ADDR_TYPE_RT
2395 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002396 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302397};
2398
2399/* l4_per -> i2c3 */
2400static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
2401 .master = &omap44xx_l4_per_hwmod,
2402 .slave = &omap44xx_i2c3_hwmod,
2403 .clk = "l4_div_ck",
2404 .addr = omap44xx_i2c3_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302405 .user = OCP_USER_MPU | OCP_USER_SDMA,
2406};
2407
2408/* i2c3 slave ports */
2409static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
2410 &omap44xx_l4_per__i2c3,
2411};
2412
2413static struct omap_hwmod omap44xx_i2c3_hwmod = {
2414 .name = "i2c3",
2415 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002416 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002417 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302418 .mpu_irqs = omap44xx_i2c3_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302419 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302420 .main_clk = "i2c3_fck",
2421 .prcm = {
2422 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002423 .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002424 .context_offs = OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002425 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302426 },
2427 },
2428 .slaves = omap44xx_i2c3_slaves,
2429 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002430 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302431};
2432
2433/* i2c4 */
2434static struct omap_hwmod omap44xx_i2c4_hwmod;
2435static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
2436 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002437 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302438};
2439
2440static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
2441 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
2442 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002443 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302444};
2445
2446static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
2447 {
2448 .pa_start = 0x48350000,
2449 .pa_end = 0x483500ff,
2450 .flags = ADDR_TYPE_RT
2451 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002452 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302453};
2454
2455/* l4_per -> i2c4 */
2456static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
2457 .master = &omap44xx_l4_per_hwmod,
2458 .slave = &omap44xx_i2c4_hwmod,
2459 .clk = "l4_div_ck",
2460 .addr = omap44xx_i2c4_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302461 .user = OCP_USER_MPU | OCP_USER_SDMA,
2462};
2463
2464/* i2c4 slave ports */
2465static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
2466 &omap44xx_l4_per__i2c4,
2467};
2468
2469static struct omap_hwmod omap44xx_i2c4_hwmod = {
2470 .name = "i2c4",
2471 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002472 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002473 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302474 .mpu_irqs = omap44xx_i2c4_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302475 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302476 .main_clk = "i2c4_fck",
2477 .prcm = {
2478 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002479 .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002480 .context_offs = OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002481 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussonf7764712010-09-21 19:37:14 +05302482 },
2483 },
2484 .slaves = omap44xx_i2c4_slaves,
2485 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002486 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302487};
2488
2489/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002490 * 'ipu' class
2491 * imaging processor unit
2492 */
2493
2494static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
2495 .name = "ipu",
2496};
2497
2498/* ipu */
2499static struct omap_hwmod_irq_info omap44xx_ipu_irqs[] = {
2500 { .irq = 100 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002501 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002502};
2503
2504static struct omap_hwmod_rst_info omap44xx_ipu_c0_resets[] = {
2505 { .name = "cpu0", .rst_shift = 0 },
2506};
2507
2508static struct omap_hwmod_rst_info omap44xx_ipu_c1_resets[] = {
2509 { .name = "cpu1", .rst_shift = 1 },
2510};
2511
2512static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
2513 { .name = "mmu_cache", .rst_shift = 2 },
2514};
2515
2516/* ipu master ports */
2517static struct omap_hwmod_ocp_if *omap44xx_ipu_masters[] = {
2518 &omap44xx_ipu__l3_main_2,
2519};
2520
2521/* l3_main_2 -> ipu */
2522static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
2523 .master = &omap44xx_l3_main_2_hwmod,
2524 .slave = &omap44xx_ipu_hwmod,
2525 .clk = "l3_div_ck",
2526 .user = OCP_USER_MPU | OCP_USER_SDMA,
2527};
2528
2529/* ipu slave ports */
2530static struct omap_hwmod_ocp_if *omap44xx_ipu_slaves[] = {
2531 &omap44xx_l3_main_2__ipu,
2532};
2533
2534/* Pseudo hwmod for reset control purpose only */
2535static struct omap_hwmod omap44xx_ipu_c0_hwmod = {
2536 .name = "ipu_c0",
2537 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002538 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002539 .flags = HWMOD_INIT_NO_RESET,
2540 .rst_lines = omap44xx_ipu_c0_resets,
2541 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c0_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002542 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002543 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002544 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002545 },
2546 },
Benoit Cousson407a6882011-02-15 22:39:48 +01002547};
2548
2549/* Pseudo hwmod for reset control purpose only */
2550static struct omap_hwmod omap44xx_ipu_c1_hwmod = {
2551 .name = "ipu_c1",
2552 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002553 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002554 .flags = HWMOD_INIT_NO_RESET,
2555 .rst_lines = omap44xx_ipu_c1_resets,
2556 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c1_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002557 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002558 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002559 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002560 },
2561 },
Benoit Cousson407a6882011-02-15 22:39:48 +01002562};
2563
2564static struct omap_hwmod omap44xx_ipu_hwmod = {
2565 .name = "ipu",
2566 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002567 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002568 .mpu_irqs = omap44xx_ipu_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002569 .rst_lines = omap44xx_ipu_resets,
2570 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
2571 .main_clk = "ipu_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002572 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002573 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002574 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002575 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002576 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002577 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002578 },
2579 },
2580 .slaves = omap44xx_ipu_slaves,
2581 .slaves_cnt = ARRAY_SIZE(omap44xx_ipu_slaves),
2582 .masters = omap44xx_ipu_masters,
2583 .masters_cnt = ARRAY_SIZE(omap44xx_ipu_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002584};
2585
2586/*
2587 * 'iss' class
2588 * external images sensor pixel data processor
2589 */
2590
2591static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
2592 .rev_offs = 0x0000,
2593 .sysc_offs = 0x0010,
2594 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
2595 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2596 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2597 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002598 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002599 .sysc_fields = &omap_hwmod_sysc_type2,
2600};
2601
2602static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
2603 .name = "iss",
2604 .sysc = &omap44xx_iss_sysc,
2605};
2606
2607/* iss */
2608static struct omap_hwmod_irq_info omap44xx_iss_irqs[] = {
2609 { .irq = 24 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002610 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002611};
2612
2613static struct omap_hwmod_dma_info omap44xx_iss_sdma_reqs[] = {
2614 { .name = "1", .dma_req = 8 + OMAP44XX_DMA_REQ_START },
2615 { .name = "2", .dma_req = 9 + OMAP44XX_DMA_REQ_START },
2616 { .name = "3", .dma_req = 11 + OMAP44XX_DMA_REQ_START },
2617 { .name = "4", .dma_req = 12 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002618 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002619};
2620
2621/* iss master ports */
2622static struct omap_hwmod_ocp_if *omap44xx_iss_masters[] = {
2623 &omap44xx_iss__l3_main_2,
2624};
2625
2626static struct omap_hwmod_addr_space omap44xx_iss_addrs[] = {
2627 {
2628 .pa_start = 0x52000000,
2629 .pa_end = 0x520000ff,
2630 .flags = ADDR_TYPE_RT
2631 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002632 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002633};
2634
2635/* l3_main_2 -> iss */
2636static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
2637 .master = &omap44xx_l3_main_2_hwmod,
2638 .slave = &omap44xx_iss_hwmod,
2639 .clk = "l3_div_ck",
2640 .addr = omap44xx_iss_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002641 .user = OCP_USER_MPU | OCP_USER_SDMA,
2642};
2643
2644/* iss slave ports */
2645static struct omap_hwmod_ocp_if *omap44xx_iss_slaves[] = {
2646 &omap44xx_l3_main_2__iss,
2647};
2648
2649static struct omap_hwmod_opt_clk iss_opt_clks[] = {
2650 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
2651};
2652
2653static struct omap_hwmod omap44xx_iss_hwmod = {
2654 .name = "iss",
2655 .class = &omap44xx_iss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002656 .clkdm_name = "iss_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002657 .mpu_irqs = omap44xx_iss_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002658 .sdma_reqs = omap44xx_iss_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002659 .main_clk = "iss_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002660 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002661 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002662 .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002663 .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002664 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002665 },
2666 },
2667 .opt_clks = iss_opt_clks,
2668 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
2669 .slaves = omap44xx_iss_slaves,
2670 .slaves_cnt = ARRAY_SIZE(omap44xx_iss_slaves),
2671 .masters = omap44xx_iss_masters,
2672 .masters_cnt = ARRAY_SIZE(omap44xx_iss_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01002673};
2674
2675/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002676 * 'iva' class
2677 * multi-standard video encoder/decoder hardware accelerator
2678 */
2679
2680static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002681 .name = "iva",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002682};
2683
2684/* iva */
2685static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
2686 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
2687 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
2688 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002689 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002690};
2691
2692static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
2693 { .name = "logic", .rst_shift = 2 },
2694};
2695
2696static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
2697 { .name = "seq0", .rst_shift = 0 },
2698};
2699
2700static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
2701 { .name = "seq1", .rst_shift = 1 },
2702};
2703
2704/* iva master ports */
2705static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2706 &omap44xx_iva__l3_main_2,
2707 &omap44xx_iva__l3_instr,
2708};
2709
2710static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2711 {
2712 .pa_start = 0x5a000000,
2713 .pa_end = 0x5a07ffff,
2714 .flags = ADDR_TYPE_RT
2715 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002716 { }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002717};
2718
2719/* l3_main_2 -> iva */
2720static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2721 .master = &omap44xx_l3_main_2_hwmod,
2722 .slave = &omap44xx_iva_hwmod,
2723 .clk = "l3_div_ck",
2724 .addr = omap44xx_iva_addrs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002725 .user = OCP_USER_MPU,
2726};
2727
2728/* iva slave ports */
2729static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2730 &omap44xx_dsp__iva,
2731 &omap44xx_l3_main_2__iva,
2732};
2733
2734/* Pseudo hwmod for reset control purpose only */
2735static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
2736 .name = "iva_seq0",
2737 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002738 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002739 .flags = HWMOD_INIT_NO_RESET,
2740 .rst_lines = omap44xx_iva_seq0_resets,
2741 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
2742 .prcm = {
2743 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002744 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002745 },
2746 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002747};
2748
2749/* Pseudo hwmod for reset control purpose only */
2750static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
2751 .name = "iva_seq1",
2752 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002753 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002754 .flags = HWMOD_INIT_NO_RESET,
2755 .rst_lines = omap44xx_iva_seq1_resets,
2756 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
2757 .prcm = {
2758 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002759 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002760 },
2761 },
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002762};
2763
2764static struct omap_hwmod omap44xx_iva_hwmod = {
2765 .name = "iva",
2766 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002767 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002768 .mpu_irqs = omap44xx_iva_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002769 .rst_lines = omap44xx_iva_resets,
2770 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2771 .main_clk = "iva_fck",
2772 .prcm = {
2773 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002774 .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002775 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002776 .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002777 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002778 },
2779 },
2780 .slaves = omap44xx_iva_slaves,
2781 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2782 .masters = omap44xx_iva_masters,
2783 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002784};
2785
2786/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002787 * 'kbd' class
2788 * keyboard controller
2789 */
2790
2791static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
2792 .rev_offs = 0x0000,
2793 .sysc_offs = 0x0010,
2794 .syss_offs = 0x0014,
2795 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2796 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2797 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2798 SYSS_HAS_RESET_STATUS),
2799 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2800 .sysc_fields = &omap_hwmod_sysc_type1,
2801};
2802
2803static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
2804 .name = "kbd",
2805 .sysc = &omap44xx_kbd_sysc,
2806};
2807
2808/* kbd */
2809static struct omap_hwmod omap44xx_kbd_hwmod;
2810static struct omap_hwmod_irq_info omap44xx_kbd_irqs[] = {
2811 { .irq = 120 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002812 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002813};
2814
2815static struct omap_hwmod_addr_space omap44xx_kbd_addrs[] = {
2816 {
2817 .pa_start = 0x4a31c000,
2818 .pa_end = 0x4a31c07f,
2819 .flags = ADDR_TYPE_RT
2820 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002821 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002822};
2823
2824/* l4_wkup -> kbd */
2825static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
2826 .master = &omap44xx_l4_wkup_hwmod,
2827 .slave = &omap44xx_kbd_hwmod,
2828 .clk = "l4_wkup_clk_mux_ck",
2829 .addr = omap44xx_kbd_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002830 .user = OCP_USER_MPU | OCP_USER_SDMA,
2831};
2832
2833/* kbd slave ports */
2834static struct omap_hwmod_ocp_if *omap44xx_kbd_slaves[] = {
2835 &omap44xx_l4_wkup__kbd,
2836};
2837
2838static struct omap_hwmod omap44xx_kbd_hwmod = {
2839 .name = "kbd",
2840 .class = &omap44xx_kbd_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002841 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002842 .mpu_irqs = omap44xx_kbd_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002843 .main_clk = "kbd_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002844 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002845 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002846 .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002847 .context_offs = OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06002848 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01002849 },
2850 },
2851 .slaves = omap44xx_kbd_slaves,
2852 .slaves_cnt = ARRAY_SIZE(omap44xx_kbd_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01002853};
2854
2855/*
Benoit Coussonec5df922011-02-02 19:27:21 +00002856 * 'mailbox' class
2857 * mailbox module allowing communication between the on-chip processors using a
2858 * queued mailbox-interrupt mechanism.
2859 */
2860
2861static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2862 .rev_offs = 0x0000,
2863 .sysc_offs = 0x0010,
2864 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2865 SYSC_HAS_SOFTRESET),
2866 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2867 .sysc_fields = &omap_hwmod_sysc_type2,
2868};
2869
2870static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2871 .name = "mailbox",
2872 .sysc = &omap44xx_mailbox_sysc,
2873};
2874
2875/* mailbox */
2876static struct omap_hwmod omap44xx_mailbox_hwmod;
2877static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2878 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002879 { .irq = -1 }
Benoit Coussonec5df922011-02-02 19:27:21 +00002880};
2881
2882static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2883 {
2884 .pa_start = 0x4a0f4000,
2885 .pa_end = 0x4a0f41ff,
2886 .flags = ADDR_TYPE_RT
2887 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002888 { }
Benoit Coussonec5df922011-02-02 19:27:21 +00002889};
2890
2891/* l4_cfg -> mailbox */
2892static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2893 .master = &omap44xx_l4_cfg_hwmod,
2894 .slave = &omap44xx_mailbox_hwmod,
2895 .clk = "l4_div_ck",
2896 .addr = omap44xx_mailbox_addrs,
Benoit Coussonec5df922011-02-02 19:27:21 +00002897 .user = OCP_USER_MPU | OCP_USER_SDMA,
2898};
2899
2900/* mailbox slave ports */
2901static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2902 &omap44xx_l4_cfg__mailbox,
2903};
2904
2905static struct omap_hwmod omap44xx_mailbox_hwmod = {
2906 .name = "mailbox",
2907 .class = &omap44xx_mailbox_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002908 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussonec5df922011-02-02 19:27:21 +00002909 .mpu_irqs = omap44xx_mailbox_irqs,
Benoit Cousson00fe6102011-07-09 19:14:28 -06002910 .prcm = {
Benoit Coussonec5df922011-02-02 19:27:21 +00002911 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002912 .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002913 .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
Benoit Coussonec5df922011-02-02 19:27:21 +00002914 },
2915 },
2916 .slaves = omap44xx_mailbox_slaves,
2917 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
Benoit Coussonec5df922011-02-02 19:27:21 +00002918};
2919
2920/*
Benoit Cousson4ddff492011-01-31 14:50:30 +00002921 * 'mcbsp' class
2922 * multi channel buffered serial port controller
2923 */
2924
2925static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2926 .sysc_offs = 0x008c,
2927 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2928 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2929 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2930 .sysc_fields = &omap_hwmod_sysc_type1,
2931};
2932
2933static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2934 .name = "mcbsp",
2935 .sysc = &omap44xx_mcbsp_sysc,
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302936 .rev = MCBSP_CONFIG_TYPE4,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002937};
2938
2939/* mcbsp1 */
2940static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2941static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2942 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002943 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002944};
2945
2946static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2947 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2948 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002949 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002950};
2951
2952static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2953 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302954 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002955 .pa_start = 0x40122000,
2956 .pa_end = 0x401220ff,
2957 .flags = ADDR_TYPE_RT
2958 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002959 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002960};
2961
2962/* l4_abe -> mcbsp1 */
2963static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2964 .master = &omap44xx_l4_abe_hwmod,
2965 .slave = &omap44xx_mcbsp1_hwmod,
2966 .clk = "ocp_abe_iclk",
2967 .addr = omap44xx_mcbsp1_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002968 .user = OCP_USER_MPU,
2969};
2970
2971static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2972 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302973 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002974 .pa_start = 0x49022000,
2975 .pa_end = 0x490220ff,
2976 .flags = ADDR_TYPE_RT
2977 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002978 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002979};
2980
2981/* l4_abe -> mcbsp1 (dma) */
2982static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
2983 .master = &omap44xx_l4_abe_hwmod,
2984 .slave = &omap44xx_mcbsp1_hwmod,
2985 .clk = "ocp_abe_iclk",
2986 .addr = omap44xx_mcbsp1_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002987 .user = OCP_USER_SDMA,
2988};
2989
2990/* mcbsp1 slave ports */
2991static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
2992 &omap44xx_l4_abe__mcbsp1,
2993 &omap44xx_l4_abe__mcbsp1_dma,
2994};
2995
2996static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
2997 .name = "mcbsp1",
2998 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002999 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003000 .mpu_irqs = omap44xx_mcbsp1_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003001 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003002 .main_clk = "mcbsp1_fck",
3003 .prcm = {
3004 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003005 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003006 .context_offs = OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003007 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003008 },
3009 },
3010 .slaves = omap44xx_mcbsp1_slaves,
3011 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003012};
3013
3014/* mcbsp2 */
3015static struct omap_hwmod omap44xx_mcbsp2_hwmod;
3016static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
3017 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003018 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003019};
3020
3021static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
3022 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
3023 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003024 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003025};
3026
3027static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
3028 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303029 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003030 .pa_start = 0x40124000,
3031 .pa_end = 0x401240ff,
3032 .flags = ADDR_TYPE_RT
3033 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003034 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003035};
3036
3037/* l4_abe -> mcbsp2 */
3038static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
3039 .master = &omap44xx_l4_abe_hwmod,
3040 .slave = &omap44xx_mcbsp2_hwmod,
3041 .clk = "ocp_abe_iclk",
3042 .addr = omap44xx_mcbsp2_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003043 .user = OCP_USER_MPU,
3044};
3045
3046static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
3047 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303048 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003049 .pa_start = 0x49024000,
3050 .pa_end = 0x490240ff,
3051 .flags = ADDR_TYPE_RT
3052 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003053 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003054};
3055
3056/* l4_abe -> mcbsp2 (dma) */
3057static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
3058 .master = &omap44xx_l4_abe_hwmod,
3059 .slave = &omap44xx_mcbsp2_hwmod,
3060 .clk = "ocp_abe_iclk",
3061 .addr = omap44xx_mcbsp2_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003062 .user = OCP_USER_SDMA,
3063};
3064
3065/* mcbsp2 slave ports */
3066static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
3067 &omap44xx_l4_abe__mcbsp2,
3068 &omap44xx_l4_abe__mcbsp2_dma,
3069};
3070
3071static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
3072 .name = "mcbsp2",
3073 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003074 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003075 .mpu_irqs = omap44xx_mcbsp2_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003076 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003077 .main_clk = "mcbsp2_fck",
3078 .prcm = {
3079 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003080 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003081 .context_offs = OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003082 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003083 },
3084 },
3085 .slaves = omap44xx_mcbsp2_slaves,
3086 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003087};
3088
3089/* mcbsp3 */
3090static struct omap_hwmod omap44xx_mcbsp3_hwmod;
3091static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
3092 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003093 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003094};
3095
3096static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
3097 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
3098 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003099 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003100};
3101
3102static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
3103 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303104 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003105 .pa_start = 0x40126000,
3106 .pa_end = 0x401260ff,
3107 .flags = ADDR_TYPE_RT
3108 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003109 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003110};
3111
3112/* l4_abe -> mcbsp3 */
3113static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3114 .master = &omap44xx_l4_abe_hwmod,
3115 .slave = &omap44xx_mcbsp3_hwmod,
3116 .clk = "ocp_abe_iclk",
3117 .addr = omap44xx_mcbsp3_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003118 .user = OCP_USER_MPU,
3119};
3120
3121static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
3122 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303123 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003124 .pa_start = 0x49026000,
3125 .pa_end = 0x490260ff,
3126 .flags = ADDR_TYPE_RT
3127 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003128 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003129};
3130
3131/* l4_abe -> mcbsp3 (dma) */
3132static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
3133 .master = &omap44xx_l4_abe_hwmod,
3134 .slave = &omap44xx_mcbsp3_hwmod,
3135 .clk = "ocp_abe_iclk",
3136 .addr = omap44xx_mcbsp3_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003137 .user = OCP_USER_SDMA,
3138};
3139
3140/* mcbsp3 slave ports */
3141static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
3142 &omap44xx_l4_abe__mcbsp3,
3143 &omap44xx_l4_abe__mcbsp3_dma,
3144};
3145
3146static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
3147 .name = "mcbsp3",
3148 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003149 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003150 .mpu_irqs = omap44xx_mcbsp3_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003151 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003152 .main_clk = "mcbsp3_fck",
3153 .prcm = {
3154 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003155 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003156 .context_offs = OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003157 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003158 },
3159 },
3160 .slaves = omap44xx_mcbsp3_slaves,
3161 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003162};
3163
3164/* mcbsp4 */
3165static struct omap_hwmod omap44xx_mcbsp4_hwmod;
3166static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
3167 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003168 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003169};
3170
3171static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
3172 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
3173 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003174 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003175};
3176
3177static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
3178 {
3179 .pa_start = 0x48096000,
3180 .pa_end = 0x480960ff,
3181 .flags = ADDR_TYPE_RT
3182 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003183 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003184};
3185
3186/* l4_per -> mcbsp4 */
3187static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3188 .master = &omap44xx_l4_per_hwmod,
3189 .slave = &omap44xx_mcbsp4_hwmod,
3190 .clk = "l4_div_ck",
3191 .addr = omap44xx_mcbsp4_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003192 .user = OCP_USER_MPU | OCP_USER_SDMA,
3193};
3194
3195/* mcbsp4 slave ports */
3196static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
3197 &omap44xx_l4_per__mcbsp4,
3198};
3199
3200static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
3201 .name = "mcbsp4",
3202 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003203 .clkdm_name = "l4_per_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003204 .mpu_irqs = omap44xx_mcbsp4_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003205 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003206 .main_clk = "mcbsp4_fck",
3207 .prcm = {
3208 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003209 .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003210 .context_offs = OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003211 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003212 },
3213 },
3214 .slaves = omap44xx_mcbsp4_slaves,
3215 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
Benoit Cousson4ddff492011-01-31 14:50:30 +00003216};
3217
3218/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003219 * 'mcpdm' class
3220 * multi channel pdm controller (proprietary interface with phoenix power
3221 * ic)
3222 */
3223
3224static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
3225 .rev_offs = 0x0000,
3226 .sysc_offs = 0x0010,
3227 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3228 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3229 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3230 SIDLE_SMART_WKUP),
3231 .sysc_fields = &omap_hwmod_sysc_type2,
3232};
3233
3234static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
3235 .name = "mcpdm",
3236 .sysc = &omap44xx_mcpdm_sysc,
3237};
3238
3239/* mcpdm */
3240static struct omap_hwmod omap44xx_mcpdm_hwmod;
3241static struct omap_hwmod_irq_info omap44xx_mcpdm_irqs[] = {
3242 { .irq = 112 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003243 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003244};
3245
3246static struct omap_hwmod_dma_info omap44xx_mcpdm_sdma_reqs[] = {
3247 { .name = "up_link", .dma_req = 64 + OMAP44XX_DMA_REQ_START },
3248 { .name = "dn_link", .dma_req = 65 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003249 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003250};
3251
3252static struct omap_hwmod_addr_space omap44xx_mcpdm_addrs[] = {
3253 {
3254 .pa_start = 0x40132000,
3255 .pa_end = 0x4013207f,
3256 .flags = ADDR_TYPE_RT
3257 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003258 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003259};
3260
3261/* l4_abe -> mcpdm */
3262static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3263 .master = &omap44xx_l4_abe_hwmod,
3264 .slave = &omap44xx_mcpdm_hwmod,
3265 .clk = "ocp_abe_iclk",
3266 .addr = omap44xx_mcpdm_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003267 .user = OCP_USER_MPU,
3268};
3269
3270static struct omap_hwmod_addr_space omap44xx_mcpdm_dma_addrs[] = {
3271 {
3272 .pa_start = 0x49032000,
3273 .pa_end = 0x4903207f,
3274 .flags = ADDR_TYPE_RT
3275 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003276 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003277};
3278
3279/* l4_abe -> mcpdm (dma) */
3280static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
3281 .master = &omap44xx_l4_abe_hwmod,
3282 .slave = &omap44xx_mcpdm_hwmod,
3283 .clk = "ocp_abe_iclk",
3284 .addr = omap44xx_mcpdm_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003285 .user = OCP_USER_SDMA,
3286};
3287
3288/* mcpdm slave ports */
3289static struct omap_hwmod_ocp_if *omap44xx_mcpdm_slaves[] = {
3290 &omap44xx_l4_abe__mcpdm,
3291 &omap44xx_l4_abe__mcpdm_dma,
3292};
3293
3294static struct omap_hwmod omap44xx_mcpdm_hwmod = {
3295 .name = "mcpdm",
3296 .class = &omap44xx_mcpdm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003297 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003298 .mpu_irqs = omap44xx_mcpdm_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003299 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003300 .main_clk = "mcpdm_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003301 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003302 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003303 .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003304 .context_offs = OMAP4_RM_ABE_PDM_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003305 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003306 },
3307 },
3308 .slaves = omap44xx_mcpdm_slaves,
3309 .slaves_cnt = ARRAY_SIZE(omap44xx_mcpdm_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003310};
3311
3312/*
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303313 * 'mcspi' class
3314 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3315 * bus
3316 */
3317
3318static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
3319 .rev_offs = 0x0000,
3320 .sysc_offs = 0x0010,
3321 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3322 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3323 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3324 SIDLE_SMART_WKUP),
3325 .sysc_fields = &omap_hwmod_sysc_type2,
3326};
3327
3328static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
3329 .name = "mcspi",
3330 .sysc = &omap44xx_mcspi_sysc,
Benoit Cousson905a74d2011-02-18 14:01:06 +01003331 .rev = OMAP4_MCSPI_REV,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303332};
3333
3334/* mcspi1 */
3335static struct omap_hwmod omap44xx_mcspi1_hwmod;
3336static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
3337 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003338 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303339};
3340
3341static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
3342 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
3343 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
3344 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
3345 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
3346 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
3347 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
3348 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
3349 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003350 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303351};
3352
3353static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
3354 {
3355 .pa_start = 0x48098000,
3356 .pa_end = 0x480981ff,
3357 .flags = ADDR_TYPE_RT
3358 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003359 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303360};
3361
3362/* l4_per -> mcspi1 */
3363static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3364 .master = &omap44xx_l4_per_hwmod,
3365 .slave = &omap44xx_mcspi1_hwmod,
3366 .clk = "l4_div_ck",
3367 .addr = omap44xx_mcspi1_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303368 .user = OCP_USER_MPU | OCP_USER_SDMA,
3369};
3370
3371/* mcspi1 slave ports */
3372static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
3373 &omap44xx_l4_per__mcspi1,
3374};
3375
Benoit Cousson905a74d2011-02-18 14:01:06 +01003376/* mcspi1 dev_attr */
3377static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
3378 .num_chipselect = 4,
3379};
3380
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303381static struct omap_hwmod omap44xx_mcspi1_hwmod = {
3382 .name = "mcspi1",
3383 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003384 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303385 .mpu_irqs = omap44xx_mcspi1_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303386 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303387 .main_clk = "mcspi1_fck",
3388 .prcm = {
3389 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003390 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003391 .context_offs = OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003392 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303393 },
3394 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003395 .dev_attr = &mcspi1_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303396 .slaves = omap44xx_mcspi1_slaves,
3397 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303398};
3399
3400/* mcspi2 */
3401static struct omap_hwmod omap44xx_mcspi2_hwmod;
3402static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
3403 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003404 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303405};
3406
3407static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
3408 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
3409 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
3410 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
3411 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003412 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303413};
3414
3415static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
3416 {
3417 .pa_start = 0x4809a000,
3418 .pa_end = 0x4809a1ff,
3419 .flags = ADDR_TYPE_RT
3420 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003421 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303422};
3423
3424/* l4_per -> mcspi2 */
3425static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3426 .master = &omap44xx_l4_per_hwmod,
3427 .slave = &omap44xx_mcspi2_hwmod,
3428 .clk = "l4_div_ck",
3429 .addr = omap44xx_mcspi2_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303430 .user = OCP_USER_MPU | OCP_USER_SDMA,
3431};
3432
3433/* mcspi2 slave ports */
3434static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
3435 &omap44xx_l4_per__mcspi2,
3436};
3437
Benoit Cousson905a74d2011-02-18 14:01:06 +01003438/* mcspi2 dev_attr */
3439static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
3440 .num_chipselect = 2,
3441};
3442
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303443static struct omap_hwmod omap44xx_mcspi2_hwmod = {
3444 .name = "mcspi2",
3445 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003446 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303447 .mpu_irqs = omap44xx_mcspi2_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303448 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303449 .main_clk = "mcspi2_fck",
3450 .prcm = {
3451 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003452 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003453 .context_offs = OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003454 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303455 },
3456 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003457 .dev_attr = &mcspi2_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303458 .slaves = omap44xx_mcspi2_slaves,
3459 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303460};
3461
3462/* mcspi3 */
3463static struct omap_hwmod omap44xx_mcspi3_hwmod;
3464static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
3465 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003466 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303467};
3468
3469static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
3470 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
3471 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
3472 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
3473 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003474 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303475};
3476
3477static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
3478 {
3479 .pa_start = 0x480b8000,
3480 .pa_end = 0x480b81ff,
3481 .flags = ADDR_TYPE_RT
3482 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003483 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303484};
3485
3486/* l4_per -> mcspi3 */
3487static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3488 .master = &omap44xx_l4_per_hwmod,
3489 .slave = &omap44xx_mcspi3_hwmod,
3490 .clk = "l4_div_ck",
3491 .addr = omap44xx_mcspi3_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303492 .user = OCP_USER_MPU | OCP_USER_SDMA,
3493};
3494
3495/* mcspi3 slave ports */
3496static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
3497 &omap44xx_l4_per__mcspi3,
3498};
3499
Benoit Cousson905a74d2011-02-18 14:01:06 +01003500/* mcspi3 dev_attr */
3501static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
3502 .num_chipselect = 2,
3503};
3504
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303505static struct omap_hwmod omap44xx_mcspi3_hwmod = {
3506 .name = "mcspi3",
3507 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003508 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303509 .mpu_irqs = omap44xx_mcspi3_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303510 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303511 .main_clk = "mcspi3_fck",
3512 .prcm = {
3513 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003514 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003515 .context_offs = OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003516 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303517 },
3518 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003519 .dev_attr = &mcspi3_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303520 .slaves = omap44xx_mcspi3_slaves,
3521 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303522};
3523
3524/* mcspi4 */
3525static struct omap_hwmod omap44xx_mcspi4_hwmod;
3526static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
3527 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003528 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303529};
3530
3531static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
3532 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
3533 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003534 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303535};
3536
3537static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
3538 {
3539 .pa_start = 0x480ba000,
3540 .pa_end = 0x480ba1ff,
3541 .flags = ADDR_TYPE_RT
3542 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003543 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303544};
3545
3546/* l4_per -> mcspi4 */
3547static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3548 .master = &omap44xx_l4_per_hwmod,
3549 .slave = &omap44xx_mcspi4_hwmod,
3550 .clk = "l4_div_ck",
3551 .addr = omap44xx_mcspi4_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303552 .user = OCP_USER_MPU | OCP_USER_SDMA,
3553};
3554
3555/* mcspi4 slave ports */
3556static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
3557 &omap44xx_l4_per__mcspi4,
3558};
3559
Benoit Cousson905a74d2011-02-18 14:01:06 +01003560/* mcspi4 dev_attr */
3561static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
3562 .num_chipselect = 1,
3563};
3564
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303565static struct omap_hwmod omap44xx_mcspi4_hwmod = {
3566 .name = "mcspi4",
3567 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003568 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303569 .mpu_irqs = omap44xx_mcspi4_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303570 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303571 .main_clk = "mcspi4_fck",
3572 .prcm = {
3573 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003574 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003575 .context_offs = OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003576 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303577 },
3578 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003579 .dev_attr = &mcspi4_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303580 .slaves = omap44xx_mcspi4_slaves,
3581 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303582};
3583
3584/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003585 * 'mmc' class
3586 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
3587 */
3588
3589static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
3590 .rev_offs = 0x0000,
3591 .sysc_offs = 0x0010,
3592 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
3593 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
3594 SYSC_HAS_SOFTRESET),
3595 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3596 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02003597 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01003598 .sysc_fields = &omap_hwmod_sysc_type2,
3599};
3600
3601static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
3602 .name = "mmc",
3603 .sysc = &omap44xx_mmc_sysc,
3604};
3605
3606/* mmc1 */
3607static struct omap_hwmod_irq_info omap44xx_mmc1_irqs[] = {
3608 { .irq = 83 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003609 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003610};
3611
3612static struct omap_hwmod_dma_info omap44xx_mmc1_sdma_reqs[] = {
3613 { .name = "tx", .dma_req = 60 + OMAP44XX_DMA_REQ_START },
3614 { .name = "rx", .dma_req = 61 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003615 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003616};
3617
3618/* mmc1 master ports */
3619static struct omap_hwmod_ocp_if *omap44xx_mmc1_masters[] = {
3620 &omap44xx_mmc1__l3_main_1,
3621};
3622
3623static struct omap_hwmod_addr_space omap44xx_mmc1_addrs[] = {
3624 {
3625 .pa_start = 0x4809c000,
3626 .pa_end = 0x4809c3ff,
3627 .flags = ADDR_TYPE_RT
3628 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003629 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003630};
3631
3632/* l4_per -> mmc1 */
3633static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3634 .master = &omap44xx_l4_per_hwmod,
3635 .slave = &omap44xx_mmc1_hwmod,
3636 .clk = "l4_div_ck",
3637 .addr = omap44xx_mmc1_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003638 .user = OCP_USER_MPU | OCP_USER_SDMA,
3639};
3640
3641/* mmc1 slave ports */
3642static struct omap_hwmod_ocp_if *omap44xx_mmc1_slaves[] = {
3643 &omap44xx_l4_per__mmc1,
3644};
3645
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003646/* mmc1 dev_attr */
3647static struct omap_mmc_dev_attr mmc1_dev_attr = {
3648 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3649};
3650
Benoit Cousson407a6882011-02-15 22:39:48 +01003651static struct omap_hwmod omap44xx_mmc1_hwmod = {
3652 .name = "mmc1",
3653 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003654 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003655 .mpu_irqs = omap44xx_mmc1_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003656 .sdma_reqs = omap44xx_mmc1_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003657 .main_clk = "mmc1_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003658 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003659 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003660 .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003661 .context_offs = OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003662 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003663 },
3664 },
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003665 .dev_attr = &mmc1_dev_attr,
Benoit Cousson407a6882011-02-15 22:39:48 +01003666 .slaves = omap44xx_mmc1_slaves,
3667 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc1_slaves),
3668 .masters = omap44xx_mmc1_masters,
3669 .masters_cnt = ARRAY_SIZE(omap44xx_mmc1_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01003670};
3671
3672/* mmc2 */
3673static struct omap_hwmod_irq_info omap44xx_mmc2_irqs[] = {
3674 { .irq = 86 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003675 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003676};
3677
3678static struct omap_hwmod_dma_info omap44xx_mmc2_sdma_reqs[] = {
3679 { .name = "tx", .dma_req = 46 + OMAP44XX_DMA_REQ_START },
3680 { .name = "rx", .dma_req = 47 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003681 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003682};
3683
3684/* mmc2 master ports */
3685static struct omap_hwmod_ocp_if *omap44xx_mmc2_masters[] = {
3686 &omap44xx_mmc2__l3_main_1,
3687};
3688
3689static struct omap_hwmod_addr_space omap44xx_mmc2_addrs[] = {
3690 {
3691 .pa_start = 0x480b4000,
3692 .pa_end = 0x480b43ff,
3693 .flags = ADDR_TYPE_RT
3694 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003695 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003696};
3697
3698/* l4_per -> mmc2 */
3699static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3700 .master = &omap44xx_l4_per_hwmod,
3701 .slave = &omap44xx_mmc2_hwmod,
3702 .clk = "l4_div_ck",
3703 .addr = omap44xx_mmc2_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003704 .user = OCP_USER_MPU | OCP_USER_SDMA,
3705};
3706
3707/* mmc2 slave ports */
3708static struct omap_hwmod_ocp_if *omap44xx_mmc2_slaves[] = {
3709 &omap44xx_l4_per__mmc2,
3710};
3711
3712static struct omap_hwmod omap44xx_mmc2_hwmod = {
3713 .name = "mmc2",
3714 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003715 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003716 .mpu_irqs = omap44xx_mmc2_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003717 .sdma_reqs = omap44xx_mmc2_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003718 .main_clk = "mmc2_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003719 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003720 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003721 .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003722 .context_offs = OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003723 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003724 },
3725 },
3726 .slaves = omap44xx_mmc2_slaves,
3727 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc2_slaves),
3728 .masters = omap44xx_mmc2_masters,
3729 .masters_cnt = ARRAY_SIZE(omap44xx_mmc2_masters),
Benoit Cousson407a6882011-02-15 22:39:48 +01003730};
3731
3732/* mmc3 */
3733static struct omap_hwmod omap44xx_mmc3_hwmod;
3734static struct omap_hwmod_irq_info omap44xx_mmc3_irqs[] = {
3735 { .irq = 94 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003736 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003737};
3738
3739static struct omap_hwmod_dma_info omap44xx_mmc3_sdma_reqs[] = {
3740 { .name = "tx", .dma_req = 76 + OMAP44XX_DMA_REQ_START },
3741 { .name = "rx", .dma_req = 77 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003742 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003743};
3744
3745static struct omap_hwmod_addr_space omap44xx_mmc3_addrs[] = {
3746 {
3747 .pa_start = 0x480ad000,
3748 .pa_end = 0x480ad3ff,
3749 .flags = ADDR_TYPE_RT
3750 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003751 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003752};
3753
3754/* l4_per -> mmc3 */
3755static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3756 .master = &omap44xx_l4_per_hwmod,
3757 .slave = &omap44xx_mmc3_hwmod,
3758 .clk = "l4_div_ck",
3759 .addr = omap44xx_mmc3_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003760 .user = OCP_USER_MPU | OCP_USER_SDMA,
3761};
3762
3763/* mmc3 slave ports */
3764static struct omap_hwmod_ocp_if *omap44xx_mmc3_slaves[] = {
3765 &omap44xx_l4_per__mmc3,
3766};
3767
3768static struct omap_hwmod omap44xx_mmc3_hwmod = {
3769 .name = "mmc3",
3770 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003771 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003772 .mpu_irqs = omap44xx_mmc3_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003773 .sdma_reqs = omap44xx_mmc3_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003774 .main_clk = "mmc3_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003775 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003776 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003777 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003778 .context_offs = OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003779 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003780 },
3781 },
3782 .slaves = omap44xx_mmc3_slaves,
3783 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc3_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003784};
3785
3786/* mmc4 */
3787static struct omap_hwmod omap44xx_mmc4_hwmod;
3788static struct omap_hwmod_irq_info omap44xx_mmc4_irqs[] = {
3789 { .irq = 96 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003790 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003791};
3792
3793static struct omap_hwmod_dma_info omap44xx_mmc4_sdma_reqs[] = {
3794 { .name = "tx", .dma_req = 56 + OMAP44XX_DMA_REQ_START },
3795 { .name = "rx", .dma_req = 57 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003796 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003797};
3798
3799static struct omap_hwmod_addr_space omap44xx_mmc4_addrs[] = {
3800 {
3801 .pa_start = 0x480d1000,
3802 .pa_end = 0x480d13ff,
3803 .flags = ADDR_TYPE_RT
3804 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003805 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003806};
3807
3808/* l4_per -> mmc4 */
3809static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3810 .master = &omap44xx_l4_per_hwmod,
3811 .slave = &omap44xx_mmc4_hwmod,
3812 .clk = "l4_div_ck",
3813 .addr = omap44xx_mmc4_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003814 .user = OCP_USER_MPU | OCP_USER_SDMA,
3815};
3816
3817/* mmc4 slave ports */
3818static struct omap_hwmod_ocp_if *omap44xx_mmc4_slaves[] = {
3819 &omap44xx_l4_per__mmc4,
3820};
3821
3822static struct omap_hwmod omap44xx_mmc4_hwmod = {
3823 .name = "mmc4",
3824 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003825 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003826 .mpu_irqs = omap44xx_mmc4_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003827
Benoit Cousson407a6882011-02-15 22:39:48 +01003828 .sdma_reqs = omap44xx_mmc4_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003829 .main_clk = "mmc4_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003830 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003831 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003832 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003833 .context_offs = OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003834 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003835 },
3836 },
3837 .slaves = omap44xx_mmc4_slaves,
3838 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc4_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003839};
3840
3841/* mmc5 */
3842static struct omap_hwmod omap44xx_mmc5_hwmod;
3843static struct omap_hwmod_irq_info omap44xx_mmc5_irqs[] = {
3844 { .irq = 59 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003845 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003846};
3847
3848static struct omap_hwmod_dma_info omap44xx_mmc5_sdma_reqs[] = {
3849 { .name = "tx", .dma_req = 58 + OMAP44XX_DMA_REQ_START },
3850 { .name = "rx", .dma_req = 59 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003851 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003852};
3853
3854static struct omap_hwmod_addr_space omap44xx_mmc5_addrs[] = {
3855 {
3856 .pa_start = 0x480d5000,
3857 .pa_end = 0x480d53ff,
3858 .flags = ADDR_TYPE_RT
3859 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003860 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003861};
3862
3863/* l4_per -> mmc5 */
3864static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3865 .master = &omap44xx_l4_per_hwmod,
3866 .slave = &omap44xx_mmc5_hwmod,
3867 .clk = "l4_div_ck",
3868 .addr = omap44xx_mmc5_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003869 .user = OCP_USER_MPU | OCP_USER_SDMA,
3870};
3871
3872/* mmc5 slave ports */
3873static struct omap_hwmod_ocp_if *omap44xx_mmc5_slaves[] = {
3874 &omap44xx_l4_per__mmc5,
3875};
3876
3877static struct omap_hwmod omap44xx_mmc5_hwmod = {
3878 .name = "mmc5",
3879 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003880 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003881 .mpu_irqs = omap44xx_mmc5_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003882 .sdma_reqs = omap44xx_mmc5_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003883 .main_clk = "mmc5_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003884 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003885 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003886 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003887 .context_offs = OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06003888 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson407a6882011-02-15 22:39:48 +01003889 },
3890 },
3891 .slaves = omap44xx_mmc5_slaves,
3892 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc5_slaves),
Benoit Cousson407a6882011-02-15 22:39:48 +01003893};
3894
3895/*
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003896 * 'mpu' class
3897 * mpu sub-system
3898 */
3899
3900static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003901 .name = "mpu",
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003902};
3903
3904/* mpu */
3905static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
3906 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
3907 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
3908 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003909 { .irq = -1 }
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003910};
3911
3912/* mpu master ports */
3913static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
3914 &omap44xx_mpu__l3_main_1,
3915 &omap44xx_mpu__l4_abe,
3916 &omap44xx_mpu__dmm,
3917};
3918
3919static struct omap_hwmod omap44xx_mpu_hwmod = {
3920 .name = "mpu",
3921 .class = &omap44xx_mpu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003922 .clkdm_name = "mpuss_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06003923 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003924 .mpu_irqs = omap44xx_mpu_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003925 .main_clk = "dpll_mpu_m2_ck",
3926 .prcm = {
3927 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003928 .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003929 .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003930 },
3931 },
3932 .masters = omap44xx_mpu_masters,
3933 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003934};
3935
Benoit Cousson92b18d12010-09-23 20:02:41 +05303936/*
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003937 * 'smartreflex' class
3938 * smartreflex module (monitor silicon performance and outputs a measure of
3939 * performance error)
3940 */
3941
3942/* The IP is not compliant to type1 / type2 scheme */
3943static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
3944 .sidle_shift = 24,
3945 .enwkup_shift = 26,
3946};
3947
3948static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
3949 .sysc_offs = 0x0038,
3950 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
3951 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3952 SIDLE_SMART_WKUP),
3953 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
3954};
3955
3956static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003957 .name = "smartreflex",
3958 .sysc = &omap44xx_smartreflex_sysc,
3959 .rev = 2,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003960};
3961
3962/* smartreflex_core */
3963static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
3964static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
3965 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003966 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003967};
3968
3969static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
3970 {
3971 .pa_start = 0x4a0dd000,
3972 .pa_end = 0x4a0dd03f,
3973 .flags = ADDR_TYPE_RT
3974 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003975 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003976};
3977
3978/* l4_cfg -> smartreflex_core */
3979static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3980 .master = &omap44xx_l4_cfg_hwmod,
3981 .slave = &omap44xx_smartreflex_core_hwmod,
3982 .clk = "l4_div_ck",
3983 .addr = omap44xx_smartreflex_core_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003984 .user = OCP_USER_MPU | OCP_USER_SDMA,
3985};
3986
3987/* smartreflex_core slave ports */
3988static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
3989 &omap44xx_l4_cfg__smartreflex_core,
3990};
3991
3992static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
3993 .name = "smartreflex_core",
3994 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003995 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003996 .mpu_irqs = omap44xx_smartreflex_core_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003997
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003998 .main_clk = "smartreflex_core_fck",
3999 .vdd_name = "core",
4000 .prcm = {
4001 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004002 .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004003 .context_offs = OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004004 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004005 },
4006 },
4007 .slaves = omap44xx_smartreflex_core_slaves,
4008 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004009};
4010
4011/* smartreflex_iva */
4012static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
4013static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
4014 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004015 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004016};
4017
4018static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
4019 {
4020 .pa_start = 0x4a0db000,
4021 .pa_end = 0x4a0db03f,
4022 .flags = ADDR_TYPE_RT
4023 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004024 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004025};
4026
4027/* l4_cfg -> smartreflex_iva */
4028static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
4029 .master = &omap44xx_l4_cfg_hwmod,
4030 .slave = &omap44xx_smartreflex_iva_hwmod,
4031 .clk = "l4_div_ck",
4032 .addr = omap44xx_smartreflex_iva_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004033 .user = OCP_USER_MPU | OCP_USER_SDMA,
4034};
4035
4036/* smartreflex_iva slave ports */
4037static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
4038 &omap44xx_l4_cfg__smartreflex_iva,
4039};
4040
4041static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
4042 .name = "smartreflex_iva",
4043 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004044 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004045 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004046 .main_clk = "smartreflex_iva_fck",
4047 .vdd_name = "iva",
4048 .prcm = {
4049 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004050 .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004051 .context_offs = OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004052 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004053 },
4054 },
4055 .slaves = omap44xx_smartreflex_iva_slaves,
4056 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004057};
4058
4059/* smartreflex_mpu */
4060static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
4061static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
4062 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004063 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004064};
4065
4066static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
4067 {
4068 .pa_start = 0x4a0d9000,
4069 .pa_end = 0x4a0d903f,
4070 .flags = ADDR_TYPE_RT
4071 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004072 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004073};
4074
4075/* l4_cfg -> smartreflex_mpu */
4076static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
4077 .master = &omap44xx_l4_cfg_hwmod,
4078 .slave = &omap44xx_smartreflex_mpu_hwmod,
4079 .clk = "l4_div_ck",
4080 .addr = omap44xx_smartreflex_mpu_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004081 .user = OCP_USER_MPU | OCP_USER_SDMA,
4082};
4083
4084/* smartreflex_mpu slave ports */
4085static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
4086 &omap44xx_l4_cfg__smartreflex_mpu,
4087};
4088
4089static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
4090 .name = "smartreflex_mpu",
4091 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004092 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004093 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004094 .main_clk = "smartreflex_mpu_fck",
4095 .vdd_name = "mpu",
4096 .prcm = {
4097 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004098 .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004099 .context_offs = OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004100 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004101 },
4102 },
4103 .slaves = omap44xx_smartreflex_mpu_slaves,
4104 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004105};
4106
4107/*
Benoit Coussond11c2172011-02-02 12:04:36 +00004108 * 'spinlock' class
4109 * spinlock provides hardware assistance for synchronizing the processes
4110 * running on multiple processors
4111 */
4112
4113static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
4114 .rev_offs = 0x0000,
4115 .sysc_offs = 0x0010,
4116 .syss_offs = 0x0014,
4117 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4118 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
4119 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4120 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4121 SIDLE_SMART_WKUP),
4122 .sysc_fields = &omap_hwmod_sysc_type1,
4123};
4124
4125static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
4126 .name = "spinlock",
4127 .sysc = &omap44xx_spinlock_sysc,
4128};
4129
4130/* spinlock */
4131static struct omap_hwmod omap44xx_spinlock_hwmod;
4132static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
4133 {
4134 .pa_start = 0x4a0f6000,
4135 .pa_end = 0x4a0f6fff,
4136 .flags = ADDR_TYPE_RT
4137 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004138 { }
Benoit Coussond11c2172011-02-02 12:04:36 +00004139};
4140
4141/* l4_cfg -> spinlock */
4142static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
4143 .master = &omap44xx_l4_cfg_hwmod,
4144 .slave = &omap44xx_spinlock_hwmod,
4145 .clk = "l4_div_ck",
4146 .addr = omap44xx_spinlock_addrs,
Benoit Coussond11c2172011-02-02 12:04:36 +00004147 .user = OCP_USER_MPU | OCP_USER_SDMA,
4148};
4149
4150/* spinlock slave ports */
4151static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
4152 &omap44xx_l4_cfg__spinlock,
4153};
4154
4155static struct omap_hwmod omap44xx_spinlock_hwmod = {
4156 .name = "spinlock",
4157 .class = &omap44xx_spinlock_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004158 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond11c2172011-02-02 12:04:36 +00004159 .prcm = {
4160 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004161 .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004162 .context_offs = OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET,
Benoit Coussond11c2172011-02-02 12:04:36 +00004163 },
4164 },
4165 .slaves = omap44xx_spinlock_slaves,
4166 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
Benoit Coussond11c2172011-02-02 12:04:36 +00004167};
4168
4169/*
Benoit Cousson35d1a662011-02-11 11:17:14 +00004170 * 'timer' class
4171 * general purpose timer module with accurate 1ms tick
4172 * This class contains several variants: ['timer_1ms', 'timer']
4173 */
4174
4175static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
4176 .rev_offs = 0x0000,
4177 .sysc_offs = 0x0010,
4178 .syss_offs = 0x0014,
4179 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4180 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
4181 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4182 SYSS_HAS_RESET_STATUS),
4183 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
4184 .sysc_fields = &omap_hwmod_sysc_type1,
4185};
4186
4187static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
4188 .name = "timer",
4189 .sysc = &omap44xx_timer_1ms_sysc,
4190};
4191
4192static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
4193 .rev_offs = 0x0000,
4194 .sysc_offs = 0x0010,
4195 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
4196 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
4197 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4198 SIDLE_SMART_WKUP),
4199 .sysc_fields = &omap_hwmod_sysc_type2,
4200};
4201
4202static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
4203 .name = "timer",
4204 .sysc = &omap44xx_timer_sysc,
4205};
4206
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304207/* always-on timers dev attribute */
4208static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
4209 .timer_capability = OMAP_TIMER_ALWON,
4210};
4211
4212/* pwm timers dev attribute */
4213static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
4214 .timer_capability = OMAP_TIMER_HAS_PWM,
4215};
4216
Benoit Cousson35d1a662011-02-11 11:17:14 +00004217/* timer1 */
4218static struct omap_hwmod omap44xx_timer1_hwmod;
4219static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
4220 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004221 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004222};
4223
4224static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
4225 {
4226 .pa_start = 0x4a318000,
4227 .pa_end = 0x4a31807f,
4228 .flags = ADDR_TYPE_RT
4229 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004230 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004231};
4232
4233/* l4_wkup -> timer1 */
4234static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
4235 .master = &omap44xx_l4_wkup_hwmod,
4236 .slave = &omap44xx_timer1_hwmod,
4237 .clk = "l4_wkup_clk_mux_ck",
4238 .addr = omap44xx_timer1_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004239 .user = OCP_USER_MPU | OCP_USER_SDMA,
4240};
4241
4242/* timer1 slave ports */
4243static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
4244 &omap44xx_l4_wkup__timer1,
4245};
4246
4247static struct omap_hwmod omap44xx_timer1_hwmod = {
4248 .name = "timer1",
4249 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004250 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004251 .mpu_irqs = omap44xx_timer1_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004252 .main_clk = "timer1_fck",
4253 .prcm = {
4254 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004255 .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004256 .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004257 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004258 },
4259 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304260 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004261 .slaves = omap44xx_timer1_slaves,
4262 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004263};
4264
4265/* timer2 */
4266static struct omap_hwmod omap44xx_timer2_hwmod;
4267static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
4268 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004269 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004270};
4271
4272static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
4273 {
4274 .pa_start = 0x48032000,
4275 .pa_end = 0x4803207f,
4276 .flags = ADDR_TYPE_RT
4277 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004278 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004279};
4280
4281/* l4_per -> timer2 */
4282static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
4283 .master = &omap44xx_l4_per_hwmod,
4284 .slave = &omap44xx_timer2_hwmod,
4285 .clk = "l4_div_ck",
4286 .addr = omap44xx_timer2_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004287 .user = OCP_USER_MPU | OCP_USER_SDMA,
4288};
4289
4290/* timer2 slave ports */
4291static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
4292 &omap44xx_l4_per__timer2,
4293};
4294
4295static struct omap_hwmod omap44xx_timer2_hwmod = {
4296 .name = "timer2",
4297 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004298 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004299 .mpu_irqs = omap44xx_timer2_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004300 .main_clk = "timer2_fck",
4301 .prcm = {
4302 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004303 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004304 .context_offs = OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004305 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004306 },
4307 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304308 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004309 .slaves = omap44xx_timer2_slaves,
4310 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004311};
4312
4313/* timer3 */
4314static struct omap_hwmod omap44xx_timer3_hwmod;
4315static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
4316 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004317 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004318};
4319
4320static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
4321 {
4322 .pa_start = 0x48034000,
4323 .pa_end = 0x4803407f,
4324 .flags = ADDR_TYPE_RT
4325 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004326 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004327};
4328
4329/* l4_per -> timer3 */
4330static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
4331 .master = &omap44xx_l4_per_hwmod,
4332 .slave = &omap44xx_timer3_hwmod,
4333 .clk = "l4_div_ck",
4334 .addr = omap44xx_timer3_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004335 .user = OCP_USER_MPU | OCP_USER_SDMA,
4336};
4337
4338/* timer3 slave ports */
4339static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
4340 &omap44xx_l4_per__timer3,
4341};
4342
4343static struct omap_hwmod omap44xx_timer3_hwmod = {
4344 .name = "timer3",
4345 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004346 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004347 .mpu_irqs = omap44xx_timer3_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004348 .main_clk = "timer3_fck",
4349 .prcm = {
4350 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004351 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004352 .context_offs = OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004353 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004354 },
4355 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304356 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004357 .slaves = omap44xx_timer3_slaves,
4358 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004359};
4360
4361/* timer4 */
4362static struct omap_hwmod omap44xx_timer4_hwmod;
4363static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
4364 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004365 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004366};
4367
4368static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
4369 {
4370 .pa_start = 0x48036000,
4371 .pa_end = 0x4803607f,
4372 .flags = ADDR_TYPE_RT
4373 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004374 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004375};
4376
4377/* l4_per -> timer4 */
4378static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
4379 .master = &omap44xx_l4_per_hwmod,
4380 .slave = &omap44xx_timer4_hwmod,
4381 .clk = "l4_div_ck",
4382 .addr = omap44xx_timer4_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004383 .user = OCP_USER_MPU | OCP_USER_SDMA,
4384};
4385
4386/* timer4 slave ports */
4387static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
4388 &omap44xx_l4_per__timer4,
4389};
4390
4391static struct omap_hwmod omap44xx_timer4_hwmod = {
4392 .name = "timer4",
4393 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004394 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004395 .mpu_irqs = omap44xx_timer4_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004396 .main_clk = "timer4_fck",
4397 .prcm = {
4398 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004399 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004400 .context_offs = OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004401 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004402 },
4403 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304404 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004405 .slaves = omap44xx_timer4_slaves,
4406 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004407};
4408
4409/* timer5 */
4410static struct omap_hwmod omap44xx_timer5_hwmod;
4411static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
4412 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004413 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004414};
4415
4416static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
4417 {
4418 .pa_start = 0x40138000,
4419 .pa_end = 0x4013807f,
4420 .flags = ADDR_TYPE_RT
4421 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004422 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004423};
4424
4425/* l4_abe -> timer5 */
4426static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
4427 .master = &omap44xx_l4_abe_hwmod,
4428 .slave = &omap44xx_timer5_hwmod,
4429 .clk = "ocp_abe_iclk",
4430 .addr = omap44xx_timer5_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004431 .user = OCP_USER_MPU,
4432};
4433
4434static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
4435 {
4436 .pa_start = 0x49038000,
4437 .pa_end = 0x4903807f,
4438 .flags = ADDR_TYPE_RT
4439 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004440 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004441};
4442
4443/* l4_abe -> timer5 (dma) */
4444static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
4445 .master = &omap44xx_l4_abe_hwmod,
4446 .slave = &omap44xx_timer5_hwmod,
4447 .clk = "ocp_abe_iclk",
4448 .addr = omap44xx_timer5_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004449 .user = OCP_USER_SDMA,
4450};
4451
4452/* timer5 slave ports */
4453static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
4454 &omap44xx_l4_abe__timer5,
4455 &omap44xx_l4_abe__timer5_dma,
4456};
4457
4458static struct omap_hwmod omap44xx_timer5_hwmod = {
4459 .name = "timer5",
4460 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004461 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004462 .mpu_irqs = omap44xx_timer5_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004463 .main_clk = "timer5_fck",
4464 .prcm = {
4465 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004466 .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004467 .context_offs = OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004468 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004469 },
4470 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304471 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004472 .slaves = omap44xx_timer5_slaves,
4473 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004474};
4475
4476/* timer6 */
4477static struct omap_hwmod omap44xx_timer6_hwmod;
4478static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
4479 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004480 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004481};
4482
4483static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
4484 {
4485 .pa_start = 0x4013a000,
4486 .pa_end = 0x4013a07f,
4487 .flags = ADDR_TYPE_RT
4488 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004489 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004490};
4491
4492/* l4_abe -> timer6 */
4493static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4494 .master = &omap44xx_l4_abe_hwmod,
4495 .slave = &omap44xx_timer6_hwmod,
4496 .clk = "ocp_abe_iclk",
4497 .addr = omap44xx_timer6_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004498 .user = OCP_USER_MPU,
4499};
4500
4501static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
4502 {
4503 .pa_start = 0x4903a000,
4504 .pa_end = 0x4903a07f,
4505 .flags = ADDR_TYPE_RT
4506 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004507 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004508};
4509
4510/* l4_abe -> timer6 (dma) */
4511static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
4512 .master = &omap44xx_l4_abe_hwmod,
4513 .slave = &omap44xx_timer6_hwmod,
4514 .clk = "ocp_abe_iclk",
4515 .addr = omap44xx_timer6_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004516 .user = OCP_USER_SDMA,
4517};
4518
4519/* timer6 slave ports */
4520static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
4521 &omap44xx_l4_abe__timer6,
4522 &omap44xx_l4_abe__timer6_dma,
4523};
4524
4525static struct omap_hwmod omap44xx_timer6_hwmod = {
4526 .name = "timer6",
4527 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004528 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004529 .mpu_irqs = omap44xx_timer6_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06004530
Benoit Cousson35d1a662011-02-11 11:17:14 +00004531 .main_clk = "timer6_fck",
4532 .prcm = {
4533 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004534 .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004535 .context_offs = OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004536 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004537 },
4538 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304539 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004540 .slaves = omap44xx_timer6_slaves,
4541 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004542};
4543
4544/* timer7 */
4545static struct omap_hwmod omap44xx_timer7_hwmod;
4546static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
4547 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004548 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004549};
4550
4551static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
4552 {
4553 .pa_start = 0x4013c000,
4554 .pa_end = 0x4013c07f,
4555 .flags = ADDR_TYPE_RT
4556 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004557 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004558};
4559
4560/* l4_abe -> timer7 */
4561static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4562 .master = &omap44xx_l4_abe_hwmod,
4563 .slave = &omap44xx_timer7_hwmod,
4564 .clk = "ocp_abe_iclk",
4565 .addr = omap44xx_timer7_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004566 .user = OCP_USER_MPU,
4567};
4568
4569static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
4570 {
4571 .pa_start = 0x4903c000,
4572 .pa_end = 0x4903c07f,
4573 .flags = ADDR_TYPE_RT
4574 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004575 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004576};
4577
4578/* l4_abe -> timer7 (dma) */
4579static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
4580 .master = &omap44xx_l4_abe_hwmod,
4581 .slave = &omap44xx_timer7_hwmod,
4582 .clk = "ocp_abe_iclk",
4583 .addr = omap44xx_timer7_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004584 .user = OCP_USER_SDMA,
4585};
4586
4587/* timer7 slave ports */
4588static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
4589 &omap44xx_l4_abe__timer7,
4590 &omap44xx_l4_abe__timer7_dma,
4591};
4592
4593static struct omap_hwmod omap44xx_timer7_hwmod = {
4594 .name = "timer7",
4595 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004596 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004597 .mpu_irqs = omap44xx_timer7_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004598 .main_clk = "timer7_fck",
4599 .prcm = {
4600 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004601 .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004602 .context_offs = OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004603 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004604 },
4605 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304606 .dev_attr = &capability_alwon_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004607 .slaves = omap44xx_timer7_slaves,
4608 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004609};
4610
4611/* timer8 */
4612static struct omap_hwmod omap44xx_timer8_hwmod;
4613static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
4614 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004615 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004616};
4617
4618static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
4619 {
4620 .pa_start = 0x4013e000,
4621 .pa_end = 0x4013e07f,
4622 .flags = ADDR_TYPE_RT
4623 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004624 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004625};
4626
4627/* l4_abe -> timer8 */
4628static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4629 .master = &omap44xx_l4_abe_hwmod,
4630 .slave = &omap44xx_timer8_hwmod,
4631 .clk = "ocp_abe_iclk",
4632 .addr = omap44xx_timer8_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004633 .user = OCP_USER_MPU,
4634};
4635
4636static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
4637 {
4638 .pa_start = 0x4903e000,
4639 .pa_end = 0x4903e07f,
4640 .flags = ADDR_TYPE_RT
4641 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004642 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004643};
4644
4645/* l4_abe -> timer8 (dma) */
4646static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
4647 .master = &omap44xx_l4_abe_hwmod,
4648 .slave = &omap44xx_timer8_hwmod,
4649 .clk = "ocp_abe_iclk",
4650 .addr = omap44xx_timer8_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004651 .user = OCP_USER_SDMA,
4652};
4653
4654/* timer8 slave ports */
4655static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
4656 &omap44xx_l4_abe__timer8,
4657 &omap44xx_l4_abe__timer8_dma,
4658};
4659
4660static struct omap_hwmod omap44xx_timer8_hwmod = {
4661 .name = "timer8",
4662 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004663 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004664 .mpu_irqs = omap44xx_timer8_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004665 .main_clk = "timer8_fck",
4666 .prcm = {
4667 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004668 .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004669 .context_offs = OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004670 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004671 },
4672 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304673 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004674 .slaves = omap44xx_timer8_slaves,
4675 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004676};
4677
4678/* timer9 */
4679static struct omap_hwmod omap44xx_timer9_hwmod;
4680static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
4681 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004682 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004683};
4684
4685static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
4686 {
4687 .pa_start = 0x4803e000,
4688 .pa_end = 0x4803e07f,
4689 .flags = ADDR_TYPE_RT
4690 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004691 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004692};
4693
4694/* l4_per -> timer9 */
4695static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4696 .master = &omap44xx_l4_per_hwmod,
4697 .slave = &omap44xx_timer9_hwmod,
4698 .clk = "l4_div_ck",
4699 .addr = omap44xx_timer9_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004700 .user = OCP_USER_MPU | OCP_USER_SDMA,
4701};
4702
4703/* timer9 slave ports */
4704static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
4705 &omap44xx_l4_per__timer9,
4706};
4707
4708static struct omap_hwmod omap44xx_timer9_hwmod = {
4709 .name = "timer9",
4710 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004711 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004712 .mpu_irqs = omap44xx_timer9_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004713 .main_clk = "timer9_fck",
4714 .prcm = {
4715 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004716 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004717 .context_offs = OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004718 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004719 },
4720 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304721 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004722 .slaves = omap44xx_timer9_slaves,
4723 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004724};
4725
4726/* timer10 */
4727static struct omap_hwmod omap44xx_timer10_hwmod;
4728static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
4729 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004730 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004731};
4732
4733static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
4734 {
4735 .pa_start = 0x48086000,
4736 .pa_end = 0x4808607f,
4737 .flags = ADDR_TYPE_RT
4738 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004739 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004740};
4741
4742/* l4_per -> timer10 */
4743static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4744 .master = &omap44xx_l4_per_hwmod,
4745 .slave = &omap44xx_timer10_hwmod,
4746 .clk = "l4_div_ck",
4747 .addr = omap44xx_timer10_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004748 .user = OCP_USER_MPU | OCP_USER_SDMA,
4749};
4750
4751/* timer10 slave ports */
4752static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
4753 &omap44xx_l4_per__timer10,
4754};
4755
4756static struct omap_hwmod omap44xx_timer10_hwmod = {
4757 .name = "timer10",
4758 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004759 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004760 .mpu_irqs = omap44xx_timer10_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004761 .main_clk = "timer10_fck",
4762 .prcm = {
4763 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004764 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004765 .context_offs = OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004766 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004767 },
4768 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304769 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004770 .slaves = omap44xx_timer10_slaves,
4771 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004772};
4773
4774/* timer11 */
4775static struct omap_hwmod omap44xx_timer11_hwmod;
4776static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
4777 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004778 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004779};
4780
4781static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
4782 {
4783 .pa_start = 0x48088000,
4784 .pa_end = 0x4808807f,
4785 .flags = ADDR_TYPE_RT
4786 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004787 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004788};
4789
4790/* l4_per -> timer11 */
4791static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4792 .master = &omap44xx_l4_per_hwmod,
4793 .slave = &omap44xx_timer11_hwmod,
4794 .clk = "l4_div_ck",
4795 .addr = omap44xx_timer11_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004796 .user = OCP_USER_MPU | OCP_USER_SDMA,
4797};
4798
4799/* timer11 slave ports */
4800static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
4801 &omap44xx_l4_per__timer11,
4802};
4803
4804static struct omap_hwmod omap44xx_timer11_hwmod = {
4805 .name = "timer11",
4806 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004807 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004808 .mpu_irqs = omap44xx_timer11_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004809 .main_clk = "timer11_fck",
4810 .prcm = {
4811 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004812 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004813 .context_offs = OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004814 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004815 },
4816 },
Tarun Kanti DebBarmac345c8b2011-09-20 17:00:18 +05304817 .dev_attr = &capability_pwm_dev_attr,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004818 .slaves = omap44xx_timer11_slaves,
4819 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
Benoit Cousson35d1a662011-02-11 11:17:14 +00004820};
4821
4822/*
Benoit Coussondb12ba52010-09-27 20:19:19 +05304823 * 'uart' class
4824 * universal asynchronous receiver/transmitter (uart)
4825 */
4826
4827static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
4828 .rev_offs = 0x0050,
4829 .sysc_offs = 0x0054,
4830 .syss_offs = 0x0058,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07004831 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07004832 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4833 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07004834 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4835 SIDLE_SMART_WKUP),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304836 .sysc_fields = &omap_hwmod_sysc_type1,
4837};
4838
4839static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00004840 .name = "uart",
4841 .sysc = &omap44xx_uart_sysc,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304842};
4843
4844/* uart1 */
4845static struct omap_hwmod omap44xx_uart1_hwmod;
4846static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
4847 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004848 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304849};
4850
4851static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
4852 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
4853 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004854 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304855};
4856
4857static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
4858 {
4859 .pa_start = 0x4806a000,
4860 .pa_end = 0x4806a0ff,
4861 .flags = ADDR_TYPE_RT
4862 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004863 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304864};
4865
4866/* l4_per -> uart1 */
4867static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4868 .master = &omap44xx_l4_per_hwmod,
4869 .slave = &omap44xx_uart1_hwmod,
4870 .clk = "l4_div_ck",
4871 .addr = omap44xx_uart1_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304872 .user = OCP_USER_MPU | OCP_USER_SDMA,
4873};
4874
4875/* uart1 slave ports */
4876static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
4877 &omap44xx_l4_per__uart1,
4878};
4879
4880static struct omap_hwmod omap44xx_uart1_hwmod = {
4881 .name = "uart1",
4882 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004883 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304884 .mpu_irqs = omap44xx_uart1_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304885 .sdma_reqs = omap44xx_uart1_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304886 .main_clk = "uart1_fck",
4887 .prcm = {
4888 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004889 .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004890 .context_offs = OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004891 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304892 },
4893 },
4894 .slaves = omap44xx_uart1_slaves,
4895 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304896};
4897
4898/* uart2 */
4899static struct omap_hwmod omap44xx_uart2_hwmod;
4900static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
4901 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004902 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304903};
4904
4905static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
4906 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
4907 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004908 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304909};
4910
4911static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
4912 {
4913 .pa_start = 0x4806c000,
4914 .pa_end = 0x4806c0ff,
4915 .flags = ADDR_TYPE_RT
4916 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004917 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304918};
4919
4920/* l4_per -> uart2 */
4921static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4922 .master = &omap44xx_l4_per_hwmod,
4923 .slave = &omap44xx_uart2_hwmod,
4924 .clk = "l4_div_ck",
4925 .addr = omap44xx_uart2_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304926 .user = OCP_USER_MPU | OCP_USER_SDMA,
4927};
4928
4929/* uart2 slave ports */
4930static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
4931 &omap44xx_l4_per__uart2,
4932};
4933
4934static struct omap_hwmod omap44xx_uart2_hwmod = {
4935 .name = "uart2",
4936 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004937 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304938 .mpu_irqs = omap44xx_uart2_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304939 .sdma_reqs = omap44xx_uart2_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304940 .main_clk = "uart2_fck",
4941 .prcm = {
4942 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004943 .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004944 .context_offs = OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06004945 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304946 },
4947 },
4948 .slaves = omap44xx_uart2_slaves,
4949 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304950};
4951
4952/* uart3 */
4953static struct omap_hwmod omap44xx_uart3_hwmod;
4954static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
4955 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004956 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304957};
4958
4959static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
4960 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
4961 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004962 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304963};
4964
4965static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
4966 {
4967 .pa_start = 0x48020000,
4968 .pa_end = 0x480200ff,
4969 .flags = ADDR_TYPE_RT
4970 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004971 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304972};
4973
4974/* l4_per -> uart3 */
4975static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4976 .master = &omap44xx_l4_per_hwmod,
4977 .slave = &omap44xx_uart3_hwmod,
4978 .clk = "l4_div_ck",
4979 .addr = omap44xx_uart3_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304980 .user = OCP_USER_MPU | OCP_USER_SDMA,
4981};
4982
4983/* uart3 slave ports */
4984static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
4985 &omap44xx_l4_per__uart3,
4986};
4987
4988static struct omap_hwmod omap44xx_uart3_hwmod = {
4989 .name = "uart3",
4990 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004991 .clkdm_name = "l4_per_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06004992 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304993 .mpu_irqs = omap44xx_uart3_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304994 .sdma_reqs = omap44xx_uart3_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304995 .main_clk = "uart3_fck",
4996 .prcm = {
4997 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004998 .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004999 .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005000 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305001 },
5002 },
5003 .slaves = omap44xx_uart3_slaves,
5004 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05305005};
5006
5007/* uart4 */
5008static struct omap_hwmod omap44xx_uart4_hwmod;
5009static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
5010 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005011 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305012};
5013
5014static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
5015 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
5016 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06005017 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305018};
5019
5020static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
5021 {
5022 .pa_start = 0x4806e000,
5023 .pa_end = 0x4806e0ff,
5024 .flags = ADDR_TYPE_RT
5025 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005026 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305027};
5028
5029/* l4_per -> uart4 */
5030static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
5031 .master = &omap44xx_l4_per_hwmod,
5032 .slave = &omap44xx_uart4_hwmod,
5033 .clk = "l4_div_ck",
5034 .addr = omap44xx_uart4_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305035 .user = OCP_USER_MPU | OCP_USER_SDMA,
5036};
5037
5038/* uart4 slave ports */
5039static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
5040 &omap44xx_l4_per__uart4,
5041};
5042
5043static struct omap_hwmod omap44xx_uart4_hwmod = {
5044 .name = "uart4",
5045 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005046 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05305047 .mpu_irqs = omap44xx_uart4_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305048 .sdma_reqs = omap44xx_uart4_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305049 .main_clk = "uart4_fck",
5050 .prcm = {
5051 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005052 .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005053 .context_offs = OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005054 .modulemode = MODULEMODE_SWCTRL,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305055 },
5056 },
5057 .slaves = omap44xx_uart4_slaves,
5058 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
Benoit Coussondb12ba52010-09-27 20:19:19 +05305059};
5060
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005061/*
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005062 * 'usb_otg_hs' class
5063 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
5064 */
5065
5066static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
5067 .rev_offs = 0x0400,
5068 .sysc_offs = 0x0404,
5069 .syss_offs = 0x0408,
5070 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
5071 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
5072 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
5073 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5074 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
5075 MSTANDBY_SMART),
5076 .sysc_fields = &omap_hwmod_sysc_type1,
5077};
5078
5079static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
Benoit Cousson00fe6102011-07-09 19:14:28 -06005080 .name = "usb_otg_hs",
5081 .sysc = &omap44xx_usb_otg_hs_sysc,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005082};
5083
5084/* usb_otg_hs */
5085static struct omap_hwmod_irq_info omap44xx_usb_otg_hs_irqs[] = {
5086 { .name = "mc", .irq = 92 + OMAP44XX_IRQ_GIC_START },
5087 { .name = "dma", .irq = 93 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005088 { .irq = -1 }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005089};
5090
5091/* usb_otg_hs master ports */
5092static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_masters[] = {
5093 &omap44xx_usb_otg_hs__l3_main_2,
5094};
5095
5096static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = {
5097 {
5098 .pa_start = 0x4a0ab000,
5099 .pa_end = 0x4a0ab003,
5100 .flags = ADDR_TYPE_RT
5101 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005102 { }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005103};
5104
5105/* l4_cfg -> usb_otg_hs */
5106static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
5107 .master = &omap44xx_l4_cfg_hwmod,
5108 .slave = &omap44xx_usb_otg_hs_hwmod,
5109 .clk = "l4_div_ck",
5110 .addr = omap44xx_usb_otg_hs_addrs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005111 .user = OCP_USER_MPU | OCP_USER_SDMA,
5112};
5113
5114/* usb_otg_hs slave ports */
5115static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_slaves[] = {
5116 &omap44xx_l4_cfg__usb_otg_hs,
5117};
5118
5119static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
5120 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
5121};
5122
5123static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
5124 .name = "usb_otg_hs",
5125 .class = &omap44xx_usb_otg_hs_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005126 .clkdm_name = "l3_init_clkdm",
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005127 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
5128 .mpu_irqs = omap44xx_usb_otg_hs_irqs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005129 .main_clk = "usb_otg_hs_ick",
5130 .prcm = {
5131 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005132 .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005133 .context_offs = OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005134 .modulemode = MODULEMODE_HWCTRL,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005135 },
5136 },
5137 .opt_clks = usb_otg_hs_opt_clks,
Benoit Cousson00fe6102011-07-09 19:14:28 -06005138 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005139 .slaves = omap44xx_usb_otg_hs_slaves,
5140 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_slaves),
5141 .masters = omap44xx_usb_otg_hs_masters,
5142 .masters_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_masters),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005143};
5144
5145/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005146 * 'wd_timer' class
5147 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
5148 * overflow condition
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005149 */
5150
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005151static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005152 .rev_offs = 0x0000,
5153 .sysc_offs = 0x0010,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005154 .syss_offs = 0x0014,
5155 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07005156 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07005157 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5158 SIDLE_SMART_WKUP),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005159 .sysc_fields = &omap_hwmod_sysc_type1,
5160};
5161
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005162static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
5163 .name = "wd_timer",
5164 .sysc = &omap44xx_wd_timer_sysc,
Benoit Coussonfe134712010-12-23 22:30:32 +00005165 .pre_shutdown = &omap2_wd_timer_disable,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005166};
5167
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005168/* wd_timer2 */
5169static struct omap_hwmod omap44xx_wd_timer2_hwmod;
5170static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
5171 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005172 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005173};
5174
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005175static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005176 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005177 .pa_start = 0x4a314000,
5178 .pa_end = 0x4a31407f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005179 .flags = ADDR_TYPE_RT
5180 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005181 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005182};
5183
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005184/* l4_wkup -> wd_timer2 */
5185static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005186 .master = &omap44xx_l4_wkup_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005187 .slave = &omap44xx_wd_timer2_hwmod,
5188 .clk = "l4_wkup_clk_mux_ck",
5189 .addr = omap44xx_wd_timer2_addrs,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005190 .user = OCP_USER_MPU | OCP_USER_SDMA,
5191};
5192
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005193/* wd_timer2 slave ports */
5194static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
5195 &omap44xx_l4_wkup__wd_timer2,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005196};
5197
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005198static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
5199 .name = "wd_timer2",
5200 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005201 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005202 .mpu_irqs = omap44xx_wd_timer2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005203 .main_clk = "wd_timer2_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005204 .prcm = {
5205 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005206 .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005207 .context_offs = OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005208 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005209 },
5210 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005211 .slaves = omap44xx_wd_timer2_slaves,
5212 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005213};
5214
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005215/* wd_timer3 */
5216static struct omap_hwmod omap44xx_wd_timer3_hwmod;
5217static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
5218 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005219 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005220};
5221
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005222static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005223 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005224 .pa_start = 0x40130000,
5225 .pa_end = 0x4013007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005226 .flags = ADDR_TYPE_RT
5227 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005228 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005229};
5230
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005231/* l4_abe -> wd_timer3 */
5232static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
5233 .master = &omap44xx_l4_abe_hwmod,
5234 .slave = &omap44xx_wd_timer3_hwmod,
5235 .clk = "ocp_abe_iclk",
5236 .addr = omap44xx_wd_timer3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005237 .user = OCP_USER_MPU,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005238};
5239
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005240static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005241 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005242 .pa_start = 0x49030000,
5243 .pa_end = 0x4903007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005244 .flags = ADDR_TYPE_RT
5245 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005246 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005247};
5248
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005249/* l4_abe -> wd_timer3 (dma) */
5250static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5251 .master = &omap44xx_l4_abe_hwmod,
5252 .slave = &omap44xx_wd_timer3_hwmod,
5253 .clk = "ocp_abe_iclk",
5254 .addr = omap44xx_wd_timer3_dma_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005255 .user = OCP_USER_SDMA,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005256};
5257
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005258/* wd_timer3 slave ports */
5259static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
5260 &omap44xx_l4_abe__wd_timer3,
5261 &omap44xx_l4_abe__wd_timer3_dma,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005262};
5263
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005264static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
5265 .name = "wd_timer3",
5266 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005267 .clkdm_name = "abe_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005268 .mpu_irqs = omap44xx_wd_timer3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005269 .main_clk = "wd_timer3_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005270 .prcm = {
5271 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005272 .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005273 .context_offs = OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET,
Benoit Cousson03fdefe52011-07-10 05:56:32 -06005274 .modulemode = MODULEMODE_SWCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005275 },
5276 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005277 .slaves = omap44xx_wd_timer3_slaves,
5278 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005279};
5280
Benoit Coussonaf88fa92011-12-15 23:15:18 -07005281/*
5282 * 'usb_host_hs' class
5283 * high-speed multi-port usb host controller
5284 */
5285static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
5286 .master = &omap44xx_usb_host_hs_hwmod,
5287 .slave = &omap44xx_l3_main_2_hwmod,
5288 .clk = "l3_div_ck",
5289 .user = OCP_USER_MPU | OCP_USER_SDMA,
5290};
5291
5292static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
5293 .rev_offs = 0x0000,
5294 .sysc_offs = 0x0010,
5295 .syss_offs = 0x0014,
5296 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
5297 SYSC_HAS_SOFTRESET),
5298 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5299 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
5300 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
5301 .sysc_fields = &omap_hwmod_sysc_type2,
5302};
5303
5304static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
5305 .name = "usb_host_hs",
5306 .sysc = &omap44xx_usb_host_hs_sysc,
5307};
5308
5309static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = {
5310 &omap44xx_usb_host_hs__l3_main_2,
5311};
5312
5313static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = {
5314 {
5315 .name = "uhh",
5316 .pa_start = 0x4a064000,
5317 .pa_end = 0x4a0647ff,
5318 .flags = ADDR_TYPE_RT
5319 },
5320 {
5321 .name = "ohci",
5322 .pa_start = 0x4a064800,
5323 .pa_end = 0x4a064bff,
5324 },
5325 {
5326 .name = "ehci",
5327 .pa_start = 0x4a064c00,
5328 .pa_end = 0x4a064fff,
5329 },
5330 {}
5331};
5332
5333static struct omap_hwmod_irq_info omap44xx_usb_host_hs_irqs[] = {
5334 { .name = "ohci-irq", .irq = 76 + OMAP44XX_IRQ_GIC_START },
5335 { .name = "ehci-irq", .irq = 77 + OMAP44XX_IRQ_GIC_START },
5336 { .irq = -1 }
5337};
5338
5339static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
5340 .master = &omap44xx_l4_cfg_hwmod,
5341 .slave = &omap44xx_usb_host_hs_hwmod,
5342 .clk = "l4_div_ck",
5343 .addr = omap44xx_usb_host_hs_addrs,
5344 .user = OCP_USER_MPU | OCP_USER_SDMA,
5345};
5346
5347static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_slaves[] = {
5348 &omap44xx_l4_cfg__usb_host_hs,
5349};
5350
5351static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
5352 .name = "usb_host_hs",
5353 .class = &omap44xx_usb_host_hs_hwmod_class,
5354 .clkdm_name = "l3_init_clkdm",
5355 .main_clk = "usb_host_hs_fck",
5356 .prcm = {
5357 .omap4 = {
5358 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
5359 .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
5360 .modulemode = MODULEMODE_SWCTRL,
5361 },
5362 },
5363 .mpu_irqs = omap44xx_usb_host_hs_irqs,
5364 .slaves = omap44xx_usb_host_hs_slaves,
5365 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_slaves),
5366 .masters = omap44xx_usb_host_hs_masters,
5367 .masters_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_masters),
5368
5369 /*
5370 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
5371 * id: i660
5372 *
5373 * Description:
5374 * In the following configuration :
5375 * - USBHOST module is set to smart-idle mode
5376 * - PRCM asserts idle_req to the USBHOST module ( This typically
5377 * happens when the system is going to a low power mode : all ports
5378 * have been suspended, the master part of the USBHOST module has
5379 * entered the standby state, and SW has cut the functional clocks)
5380 * - an USBHOST interrupt occurs before the module is able to answer
5381 * idle_ack, typically a remote wakeup IRQ.
5382 * Then the USB HOST module will enter a deadlock situation where it
5383 * is no more accessible nor functional.
5384 *
5385 * Workaround:
5386 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
5387 */
5388
5389 /*
5390 * Errata: USB host EHCI may stall when entering smart-standby mode
5391 * Id: i571
5392 *
5393 * Description:
5394 * When the USBHOST module is set to smart-standby mode, and when it is
5395 * ready to enter the standby state (i.e. all ports are suspended and
5396 * all attached devices are in suspend mode), then it can wrongly assert
5397 * the Mstandby signal too early while there are still some residual OCP
5398 * transactions ongoing. If this condition occurs, the internal state
5399 * machine may go to an undefined state and the USB link may be stuck
5400 * upon the next resume.
5401 *
5402 * Workaround:
5403 * Don't use smart standby; use only force standby,
5404 * hence HWMOD_SWSUP_MSTANDBY
5405 */
5406
5407 /*
5408 * During system boot; If the hwmod framework resets the module
5409 * the module will have smart idle settings; which can lead to deadlock
5410 * (above Errata Id:i660); so, dont reset the module during boot;
5411 * Use HWMOD_INIT_NO_RESET.
5412 */
5413
5414 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
5415 HWMOD_INIT_NO_RESET,
5416};
5417
5418/*
5419 * 'usb_tll_hs' class
5420 * usb_tll_hs module is the adapter on the usb_host_hs ports
5421 */
5422static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
5423 .rev_offs = 0x0000,
5424 .sysc_offs = 0x0010,
5425 .syss_offs = 0x0014,
5426 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
5427 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
5428 SYSC_HAS_AUTOIDLE),
5429 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
5430 .sysc_fields = &omap_hwmod_sysc_type1,
5431};
5432
5433static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
5434 .name = "usb_tll_hs",
5435 .sysc = &omap44xx_usb_tll_hs_sysc,
5436};
5437
5438static struct omap_hwmod_irq_info omap44xx_usb_tll_hs_irqs[] = {
5439 { .name = "tll-irq", .irq = 78 + OMAP44XX_IRQ_GIC_START },
5440 { .irq = -1 }
5441};
5442
5443static struct omap_hwmod_addr_space omap44xx_usb_tll_hs_addrs[] = {
5444 {
5445 .name = "tll",
5446 .pa_start = 0x4a062000,
5447 .pa_end = 0x4a063fff,
5448 .flags = ADDR_TYPE_RT
5449 },
5450 {}
5451};
5452
5453static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
5454 .master = &omap44xx_l4_cfg_hwmod,
5455 .slave = &omap44xx_usb_tll_hs_hwmod,
5456 .clk = "l4_div_ck",
5457 .addr = omap44xx_usb_tll_hs_addrs,
5458 .user = OCP_USER_MPU | OCP_USER_SDMA,
5459};
5460
5461static struct omap_hwmod_ocp_if *omap44xx_usb_tll_hs_slaves[] = {
5462 &omap44xx_l4_cfg__usb_tll_hs,
5463};
5464
5465static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
5466 .name = "usb_tll_hs",
5467 .class = &omap44xx_usb_tll_hs_hwmod_class,
5468 .clkdm_name = "l3_init_clkdm",
5469 .main_clk = "usb_tll_hs_ick",
5470 .prcm = {
5471 .omap4 = {
5472 .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
5473 .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
5474 .modulemode = MODULEMODE_HWCTRL,
5475 },
5476 },
5477 .mpu_irqs = omap44xx_usb_tll_hs_irqs,
5478 .slaves = omap44xx_usb_tll_hs_slaves,
5479 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_slaves),
5480};
5481
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005482static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
Benoit Coussonfe134712010-12-23 22:30:32 +00005483
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005484 /* dmm class */
5485 &omap44xx_dmm_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005486
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005487 /* emif_fw class */
5488 &omap44xx_emif_fw_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005489
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005490 /* l3 class */
5491 &omap44xx_l3_instr_hwmod,
5492 &omap44xx_l3_main_1_hwmod,
5493 &omap44xx_l3_main_2_hwmod,
5494 &omap44xx_l3_main_3_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005495
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005496 /* l4 class */
5497 &omap44xx_l4_abe_hwmod,
5498 &omap44xx_l4_cfg_hwmod,
5499 &omap44xx_l4_per_hwmod,
5500 &omap44xx_l4_wkup_hwmod,
Benoit Cousson531ce0d2010-12-20 18:27:19 -08005501
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005502 /* mpu_bus class */
5503 &omap44xx_mpu_private_hwmod,
5504
Benoit Cousson407a6882011-02-15 22:39:48 +01005505 /* aess class */
5506/* &omap44xx_aess_hwmod, */
5507
5508 /* bandgap class */
5509 &omap44xx_bandgap_hwmod,
5510
5511 /* counter class */
5512/* &omap44xx_counter_32k_hwmod, */
5513
Benoit Coussond7cf5f32010-12-23 22:30:31 +00005514 /* dma class */
5515 &omap44xx_dma_system_hwmod,
5516
Benoit Cousson8ca476d2011-01-25 22:01:00 +00005517 /* dmic class */
5518 &omap44xx_dmic_hwmod,
5519
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005520 /* dsp class */
5521 &omap44xx_dsp_hwmod,
5522 &omap44xx_dsp_c0_hwmod,
5523
Benoit Coussond63bd742011-01-27 11:17:03 +00005524 /* dss class */
5525 &omap44xx_dss_hwmod,
5526 &omap44xx_dss_dispc_hwmod,
5527 &omap44xx_dss_dsi1_hwmod,
5528 &omap44xx_dss_dsi2_hwmod,
5529 &omap44xx_dss_hdmi_hwmod,
5530 &omap44xx_dss_rfbi_hwmod,
5531 &omap44xx_dss_venc_hwmod,
5532
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005533 /* gpio class */
5534 &omap44xx_gpio1_hwmod,
5535 &omap44xx_gpio2_hwmod,
5536 &omap44xx_gpio3_hwmod,
5537 &omap44xx_gpio4_hwmod,
5538 &omap44xx_gpio5_hwmod,
5539 &omap44xx_gpio6_hwmod,
5540
Benoit Cousson407a6882011-02-15 22:39:48 +01005541 /* hsi class */
5542/* &omap44xx_hsi_hwmod, */
5543
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005544 /* i2c class */
5545 &omap44xx_i2c1_hwmod,
5546 &omap44xx_i2c2_hwmod,
5547 &omap44xx_i2c3_hwmod,
5548 &omap44xx_i2c4_hwmod,
5549
Benoit Cousson407a6882011-02-15 22:39:48 +01005550 /* ipu class */
5551 &omap44xx_ipu_hwmod,
5552 &omap44xx_ipu_c0_hwmod,
5553 &omap44xx_ipu_c1_hwmod,
5554
5555 /* iss class */
5556/* &omap44xx_iss_hwmod, */
5557
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005558 /* iva class */
5559 &omap44xx_iva_hwmod,
5560 &omap44xx_iva_seq0_hwmod,
5561 &omap44xx_iva_seq1_hwmod,
5562
Benoit Cousson407a6882011-02-15 22:39:48 +01005563 /* kbd class */
Shubhrajyoti D4998b2452011-05-04 14:57:44 -07005564 &omap44xx_kbd_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005565
Benoit Coussonec5df922011-02-02 19:27:21 +00005566 /* mailbox class */
5567 &omap44xx_mailbox_hwmod,
5568
Benoit Cousson4ddff492011-01-31 14:50:30 +00005569 /* mcbsp class */
5570 &omap44xx_mcbsp1_hwmod,
5571 &omap44xx_mcbsp2_hwmod,
5572 &omap44xx_mcbsp3_hwmod,
5573 &omap44xx_mcbsp4_hwmod,
5574
Benoit Cousson407a6882011-02-15 22:39:48 +01005575 /* mcpdm class */
Peter Ujfalusid05e2ea2011-05-01 19:33:15 +01005576 &omap44xx_mcpdm_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005577
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05305578 /* mcspi class */
5579 &omap44xx_mcspi1_hwmod,
5580 &omap44xx_mcspi2_hwmod,
5581 &omap44xx_mcspi3_hwmod,
5582 &omap44xx_mcspi4_hwmod,
5583
Benoit Cousson407a6882011-02-15 22:39:48 +01005584 /* mmc class */
Anand Gadiyar17203bd2011-03-01 13:12:56 -08005585 &omap44xx_mmc1_hwmod,
5586 &omap44xx_mmc2_hwmod,
5587 &omap44xx_mmc3_hwmod,
5588 &omap44xx_mmc4_hwmod,
5589 &omap44xx_mmc5_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005590
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005591 /* mpu class */
5592 &omap44xx_mpu_hwmod,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305593
Benoit Cousson1f6a7172010-12-23 22:30:30 +00005594 /* smartreflex class */
5595 &omap44xx_smartreflex_core_hwmod,
5596 &omap44xx_smartreflex_iva_hwmod,
5597 &omap44xx_smartreflex_mpu_hwmod,
5598
Benoit Coussond11c2172011-02-02 12:04:36 +00005599 /* spinlock class */
5600 &omap44xx_spinlock_hwmod,
5601
Benoit Cousson35d1a662011-02-11 11:17:14 +00005602 /* timer class */
5603 &omap44xx_timer1_hwmod,
5604 &omap44xx_timer2_hwmod,
5605 &omap44xx_timer3_hwmod,
5606 &omap44xx_timer4_hwmod,
5607 &omap44xx_timer5_hwmod,
5608 &omap44xx_timer6_hwmod,
5609 &omap44xx_timer7_hwmod,
5610 &omap44xx_timer8_hwmod,
5611 &omap44xx_timer9_hwmod,
5612 &omap44xx_timer10_hwmod,
5613 &omap44xx_timer11_hwmod,
5614
Benoit Coussondb12ba52010-09-27 20:19:19 +05305615 /* uart class */
5616 &omap44xx_uart1_hwmod,
5617 &omap44xx_uart2_hwmod,
5618 &omap44xx_uart3_hwmod,
5619 &omap44xx_uart4_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005620
Benoit Coussonaf88fa92011-12-15 23:15:18 -07005621 /* usb host class */
5622 &omap44xx_usb_host_hs_hwmod,
5623 &omap44xx_usb_tll_hs_hwmod,
5624
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005625 /* usb_otg_hs class */
5626 &omap44xx_usb_otg_hs_hwmod,
5627
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005628 /* wd_timer class */
5629 &omap44xx_wd_timer2_hwmod,
5630 &omap44xx_wd_timer3_hwmod,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005631 NULL,
5632};
5633
5634int __init omap44xx_hwmod_init(void)
5635{
Paul Walmsley550c8092011-02-28 11:58:14 -07005636 return omap_hwmod_register(omap44xx_hwmods);
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005637}
5638