162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * omap_hwmod_2420_data.c - hardware modules present on the OMAP2420 chips
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2009-2011 Nokia Corporation
662306a36Sopenharmony_ci * Copyright (C) 2012 Texas Instruments, Inc.
762306a36Sopenharmony_ci * Paul Walmsley
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * XXX handle crossbar/shared link difference for L3?
1062306a36Sopenharmony_ci * XXX these should be marked initdata for multi-OMAP kernels
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/platform_data/i2c-omap.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "omap_hwmod.h"
1662306a36Sopenharmony_ci#include "l3_2xxx.h"
1762306a36Sopenharmony_ci#include "l4_2xxx.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include "omap_hwmod_common_data.h"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#include "cm-regbits-24xx.h"
2262306a36Sopenharmony_ci#include "prm-regbits-24xx.h"
2362306a36Sopenharmony_ci#include "i2c.h"
2462306a36Sopenharmony_ci#include "mmc.h"
2562306a36Sopenharmony_ci#include "wd_timer.h"
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci/*
2862306a36Sopenharmony_ci * OMAP2420 hardware module integration data
2962306a36Sopenharmony_ci *
3062306a36Sopenharmony_ci * All of the data in this section should be autogeneratable from the
3162306a36Sopenharmony_ci * TI hardware database or other technical documentation.  Data that
3262306a36Sopenharmony_ci * is driver-specific or driver-kernel integration-specific belongs
3362306a36Sopenharmony_ci * elsewhere.
3462306a36Sopenharmony_ci */
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci/*
3762306a36Sopenharmony_ci * IP blocks
3862306a36Sopenharmony_ci */
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci/* IVA1 (IVA1) */
4162306a36Sopenharmony_cistatic struct omap_hwmod_class iva1_hwmod_class = {
4262306a36Sopenharmony_ci	.name		= "iva1",
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic struct omap_hwmod_rst_info omap2420_iva_resets[] = {
4662306a36Sopenharmony_ci	{ .name = "iva", .rst_shift = 8 },
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistatic struct omap_hwmod omap2420_iva_hwmod = {
5062306a36Sopenharmony_ci	.name		= "iva",
5162306a36Sopenharmony_ci	.class		= &iva1_hwmod_class,
5262306a36Sopenharmony_ci	.clkdm_name	= "iva1_clkdm",
5362306a36Sopenharmony_ci	.rst_lines	= omap2420_iva_resets,
5462306a36Sopenharmony_ci	.rst_lines_cnt	= ARRAY_SIZE(omap2420_iva_resets),
5562306a36Sopenharmony_ci	.main_clk	= "iva1_ifck",
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/* DSP */
5962306a36Sopenharmony_cistatic struct omap_hwmod_class dsp_hwmod_class = {
6062306a36Sopenharmony_ci	.name		= "dsp",
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_cistatic struct omap_hwmod_rst_info omap2420_dsp_resets[] = {
6462306a36Sopenharmony_ci	{ .name = "logic", .rst_shift = 0 },
6562306a36Sopenharmony_ci	{ .name = "mmu", .rst_shift = 1 },
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cistatic struct omap_hwmod omap2420_dsp_hwmod = {
6962306a36Sopenharmony_ci	.name		= "dsp",
7062306a36Sopenharmony_ci	.class		= &dsp_hwmod_class,
7162306a36Sopenharmony_ci	.clkdm_name	= "dsp_clkdm",
7262306a36Sopenharmony_ci	.rst_lines	= omap2420_dsp_resets,
7362306a36Sopenharmony_ci	.rst_lines_cnt	= ARRAY_SIZE(omap2420_dsp_resets),
7462306a36Sopenharmony_ci	.main_clk	= "dsp_fck",
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/* I2C common */
7862306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig i2c_sysc = {
7962306a36Sopenharmony_ci	.rev_offs	= 0x00,
8062306a36Sopenharmony_ci	.sysc_offs	= 0x20,
8162306a36Sopenharmony_ci	.syss_offs	= 0x10,
8262306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
8362306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
8462306a36Sopenharmony_ci};
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cistatic struct omap_hwmod_class i2c_class = {
8762306a36Sopenharmony_ci	.name		= "i2c",
8862306a36Sopenharmony_ci	.sysc		= &i2c_sysc,
8962306a36Sopenharmony_ci	.reset		= &omap_i2c_reset,
9062306a36Sopenharmony_ci};
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci/* I2C1 */
9362306a36Sopenharmony_cistatic struct omap_hwmod omap2420_i2c1_hwmod = {
9462306a36Sopenharmony_ci	.name		= "i2c1",
9562306a36Sopenharmony_ci	.main_clk	= "i2c1_fck",
9662306a36Sopenharmony_ci	.prcm		= {
9762306a36Sopenharmony_ci		.omap2 = {
9862306a36Sopenharmony_ci			.module_offs = CORE_MOD,
9962306a36Sopenharmony_ci			.idlest_reg_id = 1,
10062306a36Sopenharmony_ci			.idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
10162306a36Sopenharmony_ci		},
10262306a36Sopenharmony_ci	},
10362306a36Sopenharmony_ci	.class		= &i2c_class,
10462306a36Sopenharmony_ci	/*
10562306a36Sopenharmony_ci	 * From mach-omap2/pm24xx.c: "Putting MPU into the WFI state
10662306a36Sopenharmony_ci	 * while a transfer is active seems to cause the I2C block to
10762306a36Sopenharmony_ci	 * timeout. Why? Good question."
10862306a36Sopenharmony_ci	 */
10962306a36Sopenharmony_ci	.flags		= (HWMOD_16BIT_REG | HWMOD_BLOCK_WFI),
11062306a36Sopenharmony_ci};
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci/* I2C2 */
11362306a36Sopenharmony_cistatic struct omap_hwmod omap2420_i2c2_hwmod = {
11462306a36Sopenharmony_ci	.name		= "i2c2",
11562306a36Sopenharmony_ci	.main_clk	= "i2c2_fck",
11662306a36Sopenharmony_ci	.prcm		= {
11762306a36Sopenharmony_ci		.omap2 = {
11862306a36Sopenharmony_ci			.module_offs = CORE_MOD,
11962306a36Sopenharmony_ci			.idlest_reg_id = 1,
12062306a36Sopenharmony_ci			.idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
12162306a36Sopenharmony_ci		},
12262306a36Sopenharmony_ci	},
12362306a36Sopenharmony_ci	.class		= &i2c_class,
12462306a36Sopenharmony_ci	.flags		= HWMOD_16BIT_REG,
12562306a36Sopenharmony_ci};
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci/* mailbox */
12862306a36Sopenharmony_cistatic struct omap_hwmod omap2420_mailbox_hwmod = {
12962306a36Sopenharmony_ci	.name		= "mailbox",
13062306a36Sopenharmony_ci	.class		= &omap2xxx_mailbox_hwmod_class,
13162306a36Sopenharmony_ci	.main_clk	= "mailboxes_ick",
13262306a36Sopenharmony_ci	.prcm		= {
13362306a36Sopenharmony_ci		.omap2 = {
13462306a36Sopenharmony_ci			.module_offs = CORE_MOD,
13562306a36Sopenharmony_ci			.idlest_reg_id = 1,
13662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
13762306a36Sopenharmony_ci		},
13862306a36Sopenharmony_ci	},
13962306a36Sopenharmony_ci};
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci/*
14262306a36Sopenharmony_ci * 'mcbsp' class
14362306a36Sopenharmony_ci * multi channel buffered serial port controller
14462306a36Sopenharmony_ci */
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_cistatic struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
14762306a36Sopenharmony_ci	.name = "mcbsp",
14862306a36Sopenharmony_ci};
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk mcbsp_opt_clks[] = {
15162306a36Sopenharmony_ci	{ .role = "pad_fck", .clk = "mcbsp_clks" },
15262306a36Sopenharmony_ci	{ .role = "prcm_fck", .clk = "func_96m_ck" },
15362306a36Sopenharmony_ci};
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci/* mcbsp1 */
15662306a36Sopenharmony_cistatic struct omap_hwmod omap2420_mcbsp1_hwmod = {
15762306a36Sopenharmony_ci	.name		= "mcbsp1",
15862306a36Sopenharmony_ci	.class		= &omap2420_mcbsp_hwmod_class,
15962306a36Sopenharmony_ci	.main_clk	= "mcbsp1_fck",
16062306a36Sopenharmony_ci	.prcm		= {
16162306a36Sopenharmony_ci		.omap2 = {
16262306a36Sopenharmony_ci			.module_offs = CORE_MOD,
16362306a36Sopenharmony_ci			.idlest_reg_id = 1,
16462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
16562306a36Sopenharmony_ci		},
16662306a36Sopenharmony_ci	},
16762306a36Sopenharmony_ci	.opt_clks	= mcbsp_opt_clks,
16862306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
16962306a36Sopenharmony_ci};
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci/* mcbsp2 */
17262306a36Sopenharmony_cistatic struct omap_hwmod omap2420_mcbsp2_hwmod = {
17362306a36Sopenharmony_ci	.name		= "mcbsp2",
17462306a36Sopenharmony_ci	.class		= &omap2420_mcbsp_hwmod_class,
17562306a36Sopenharmony_ci	.main_clk	= "mcbsp2_fck",
17662306a36Sopenharmony_ci	.prcm		= {
17762306a36Sopenharmony_ci		.omap2 = {
17862306a36Sopenharmony_ci			.module_offs = CORE_MOD,
17962306a36Sopenharmony_ci			.idlest_reg_id = 1,
18062306a36Sopenharmony_ci			.idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
18162306a36Sopenharmony_ci		},
18262306a36Sopenharmony_ci	},
18362306a36Sopenharmony_ci	.opt_clks	= mcbsp_opt_clks,
18462306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
18562306a36Sopenharmony_ci};
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap2420_msdi_sysc = {
18862306a36Sopenharmony_ci	.rev_offs	= 0x3c,
18962306a36Sopenharmony_ci	.sysc_offs	= 0x64,
19062306a36Sopenharmony_ci	.syss_offs	= 0x68,
19162306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
19262306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
19362306a36Sopenharmony_ci};
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cistatic struct omap_hwmod_class omap2420_msdi_hwmod_class = {
19662306a36Sopenharmony_ci	.name	= "msdi",
19762306a36Sopenharmony_ci	.sysc	= &omap2420_msdi_sysc,
19862306a36Sopenharmony_ci	.reset	= &omap_msdi_reset,
19962306a36Sopenharmony_ci};
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci/* msdi1 */
20262306a36Sopenharmony_cistatic struct omap_hwmod omap2420_msdi1_hwmod = {
20362306a36Sopenharmony_ci	.name		= "msdi1",
20462306a36Sopenharmony_ci	.class		= &omap2420_msdi_hwmod_class,
20562306a36Sopenharmony_ci	.main_clk	= "mmc_fck",
20662306a36Sopenharmony_ci	.prcm		= {
20762306a36Sopenharmony_ci		.omap2 = {
20862306a36Sopenharmony_ci			.module_offs = CORE_MOD,
20962306a36Sopenharmony_ci			.idlest_reg_id = 1,
21062306a36Sopenharmony_ci			.idlest_idle_bit = OMAP2420_ST_MMC_SHIFT,
21162306a36Sopenharmony_ci		},
21262306a36Sopenharmony_ci	},
21362306a36Sopenharmony_ci	.flags		= HWMOD_16BIT_REG,
21462306a36Sopenharmony_ci};
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci/* HDQ1W/1-wire */
21762306a36Sopenharmony_cistatic struct omap_hwmod omap2420_hdq1w_hwmod = {
21862306a36Sopenharmony_ci	.name		= "hdq1w",
21962306a36Sopenharmony_ci	.main_clk	= "hdq_fck",
22062306a36Sopenharmony_ci	.prcm		= {
22162306a36Sopenharmony_ci		.omap2 = {
22262306a36Sopenharmony_ci			.module_offs = CORE_MOD,
22362306a36Sopenharmony_ci			.idlest_reg_id = 1,
22462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT,
22562306a36Sopenharmony_ci		},
22662306a36Sopenharmony_ci	},
22762306a36Sopenharmony_ci	.class		= &omap2_hdq1w_class,
22862306a36Sopenharmony_ci};
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci/*
23162306a36Sopenharmony_ci * interfaces
23262306a36Sopenharmony_ci */
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci/* L4 CORE -> I2C1 interface */
23562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = {
23662306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
23762306a36Sopenharmony_ci	.slave		= &omap2420_i2c1_hwmod,
23862306a36Sopenharmony_ci	.clk		= "i2c1_ick",
23962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
24062306a36Sopenharmony_ci};
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci/* L4 CORE -> I2C2 interface */
24362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = {
24462306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
24562306a36Sopenharmony_ci	.slave		= &omap2420_i2c2_hwmod,
24662306a36Sopenharmony_ci	.clk		= "i2c2_ick",
24762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
24862306a36Sopenharmony_ci};
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ci/* IVA <- L3 interface */
25162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l3__iva = {
25262306a36Sopenharmony_ci	.master		= &omap2xxx_l3_main_hwmod,
25362306a36Sopenharmony_ci	.slave		= &omap2420_iva_hwmod,
25462306a36Sopenharmony_ci	.clk		= "core_l3_ck",
25562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
25662306a36Sopenharmony_ci};
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci/* DSP <- L3 interface */
25962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l3__dsp = {
26062306a36Sopenharmony_ci	.master		= &omap2xxx_l3_main_hwmod,
26162306a36Sopenharmony_ci	.slave		= &omap2420_dsp_hwmod,
26262306a36Sopenharmony_ci	.clk		= "dsp_ick",
26362306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
26462306a36Sopenharmony_ci};
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci/* l4_wkup -> wd_timer2 */
26762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
26862306a36Sopenharmony_ci	.master		= &omap2xxx_l4_wkup_hwmod,
26962306a36Sopenharmony_ci	.slave		= &omap2xxx_wd_timer2_hwmod,
27062306a36Sopenharmony_ci	.clk		= "mpu_wdt_ick",
27162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
27262306a36Sopenharmony_ci};
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci/* l4_wkup -> gpio1 */
27562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
27662306a36Sopenharmony_ci	.master		= &omap2xxx_l4_wkup_hwmod,
27762306a36Sopenharmony_ci	.slave		= &omap2xxx_gpio1_hwmod,
27862306a36Sopenharmony_ci	.clk		= "gpios_ick",
27962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
28062306a36Sopenharmony_ci};
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ci/* l4_wkup -> gpio2 */
28362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
28462306a36Sopenharmony_ci	.master		= &omap2xxx_l4_wkup_hwmod,
28562306a36Sopenharmony_ci	.slave		= &omap2xxx_gpio2_hwmod,
28662306a36Sopenharmony_ci	.clk		= "gpios_ick",
28762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
28862306a36Sopenharmony_ci};
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ci/* l4_wkup -> gpio3 */
29162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
29262306a36Sopenharmony_ci	.master		= &omap2xxx_l4_wkup_hwmod,
29362306a36Sopenharmony_ci	.slave		= &omap2xxx_gpio3_hwmod,
29462306a36Sopenharmony_ci	.clk		= "gpios_ick",
29562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
29662306a36Sopenharmony_ci};
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci/* l4_wkup -> gpio4 */
29962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
30062306a36Sopenharmony_ci	.master		= &omap2xxx_l4_wkup_hwmod,
30162306a36Sopenharmony_ci	.slave		= &omap2xxx_gpio4_hwmod,
30262306a36Sopenharmony_ci	.clk		= "gpios_ick",
30362306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
30462306a36Sopenharmony_ci};
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci/* l4_core -> mailbox */
30762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
30862306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
30962306a36Sopenharmony_ci	.slave		= &omap2420_mailbox_hwmod,
31062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
31162306a36Sopenharmony_ci};
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci/* l4_core -> mcbsp1 */
31462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
31562306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
31662306a36Sopenharmony_ci	.slave		= &omap2420_mcbsp1_hwmod,
31762306a36Sopenharmony_ci	.clk		= "mcbsp1_ick",
31862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
31962306a36Sopenharmony_ci};
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci/* l4_core -> mcbsp2 */
32262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
32362306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
32462306a36Sopenharmony_ci	.slave		= &omap2420_mcbsp2_hwmod,
32562306a36Sopenharmony_ci	.clk		= "mcbsp2_ick",
32662306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
32762306a36Sopenharmony_ci};
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci/* l4_core -> msdi1 */
33062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__msdi1 = {
33162306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
33262306a36Sopenharmony_ci	.slave		= &omap2420_msdi1_hwmod,
33362306a36Sopenharmony_ci	.clk		= "mmc_ick",
33462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
33562306a36Sopenharmony_ci};
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_ci/* l4_core -> hdq1w interface */
33862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l4_core__hdq1w = {
33962306a36Sopenharmony_ci	.master		= &omap2xxx_l4_core_hwmod,
34062306a36Sopenharmony_ci	.slave		= &omap2420_hdq1w_hwmod,
34162306a36Sopenharmony_ci	.clk		= "hdq_ick",
34262306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
34362306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
34462306a36Sopenharmony_ci};
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap2420_l3__gpmc = {
34762306a36Sopenharmony_ci	.master		= &omap2xxx_l3_main_hwmod,
34862306a36Sopenharmony_ci	.slave		= &omap2xxx_gpmc_hwmod,
34962306a36Sopenharmony_ci	.clk		= "core_l3_ck",
35062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
35162306a36Sopenharmony_ci};
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {
35462306a36Sopenharmony_ci	&omap2xxx_l3_main__l4_core,
35562306a36Sopenharmony_ci	&omap2xxx_mpu__l3_main,
35662306a36Sopenharmony_ci	&omap2xxx_dss__l3,
35762306a36Sopenharmony_ci	&omap2xxx_l4_core__mcspi1,
35862306a36Sopenharmony_ci	&omap2xxx_l4_core__mcspi2,
35962306a36Sopenharmony_ci	&omap2xxx_l4_core__l4_wkup,
36062306a36Sopenharmony_ci	&omap2_l4_core__uart1,
36162306a36Sopenharmony_ci	&omap2_l4_core__uart2,
36262306a36Sopenharmony_ci	&omap2_l4_core__uart3,
36362306a36Sopenharmony_ci	&omap2420_l4_core__i2c1,
36462306a36Sopenharmony_ci	&omap2420_l4_core__i2c2,
36562306a36Sopenharmony_ci	&omap2420_l3__iva,
36662306a36Sopenharmony_ci	&omap2420_l3__dsp,
36762306a36Sopenharmony_ci	&omap2xxx_l4_core__timer3,
36862306a36Sopenharmony_ci	&omap2xxx_l4_core__timer4,
36962306a36Sopenharmony_ci	&omap2xxx_l4_core__timer5,
37062306a36Sopenharmony_ci	&omap2xxx_l4_core__timer6,
37162306a36Sopenharmony_ci	&omap2xxx_l4_core__timer7,
37262306a36Sopenharmony_ci	&omap2xxx_l4_core__timer8,
37362306a36Sopenharmony_ci	&omap2xxx_l4_core__timer9,
37462306a36Sopenharmony_ci	&omap2xxx_l4_core__timer10,
37562306a36Sopenharmony_ci	&omap2xxx_l4_core__timer11,
37662306a36Sopenharmony_ci	&omap2xxx_l4_core__timer12,
37762306a36Sopenharmony_ci	&omap2420_l4_wkup__wd_timer2,
37862306a36Sopenharmony_ci	&omap2xxx_l4_core__dss,
37962306a36Sopenharmony_ci	&omap2xxx_l4_core__dss_dispc,
38062306a36Sopenharmony_ci	&omap2xxx_l4_core__dss_rfbi,
38162306a36Sopenharmony_ci	&omap2xxx_l4_core__dss_venc,
38262306a36Sopenharmony_ci	&omap2420_l4_wkup__gpio1,
38362306a36Sopenharmony_ci	&omap2420_l4_wkup__gpio2,
38462306a36Sopenharmony_ci	&omap2420_l4_wkup__gpio3,
38562306a36Sopenharmony_ci	&omap2420_l4_wkup__gpio4,
38662306a36Sopenharmony_ci	&omap2420_l4_core__mailbox,
38762306a36Sopenharmony_ci	&omap2420_l4_core__mcbsp1,
38862306a36Sopenharmony_ci	&omap2420_l4_core__mcbsp2,
38962306a36Sopenharmony_ci	&omap2420_l4_core__msdi1,
39062306a36Sopenharmony_ci	&omap2xxx_l4_core__rng,
39162306a36Sopenharmony_ci	&omap2xxx_l4_core__sham,
39262306a36Sopenharmony_ci	&omap2xxx_l4_core__aes,
39362306a36Sopenharmony_ci	&omap2420_l4_core__hdq1w,
39462306a36Sopenharmony_ci	&omap2420_l3__gpmc,
39562306a36Sopenharmony_ci	NULL,
39662306a36Sopenharmony_ci};
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ciint __init omap2420_hwmod_init(void)
39962306a36Sopenharmony_ci{
40062306a36Sopenharmony_ci	omap_hwmod_init();
40162306a36Sopenharmony_ci	return omap_hwmod_register_links(omap2420_hwmod_ocp_ifs);
40262306a36Sopenharmony_ci}
403