Merge remote branch 'remotes/origin/voltage_split_2.6.39' into tmp-integration-2...
authorPaul Walmsley <paul@pwsan.com>
Fri, 11 Mar 2011 05:43:32 +0000 (22:43 -0700)
committerPaul Walmsley <paul@pwsan.com>
Fri, 11 Mar 2011 05:43:32 +0000 (22:43 -0700)
Conflicts:
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c

1  2 
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/smartreflex.c
arch/arm/plat-omap/include/plat/omap_hwmod.h

@@@ -59,10 -59,10 +59,10 @@@ endi
  # Power Management
  ifeq ($(CONFIG_PM),y)
  obj-$(CONFIG_ARCH_OMAP2)              += pm24xx.o
- obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o pm_bus.o voltage.o
- obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o voltage.o \
+ obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o pm_bus.o
+ obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o \
                                           cpuidle34xx.o pm_bus.o
- obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o voltage.o pm_bus.o
+ obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o pm_bus.o
  obj-$(CONFIG_PM_DEBUG)                        += pm-debug.o
  obj-$(CONFIG_OMAP_SMARTREFLEX)          += sr_device.o smartreflex.o
  obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o
@@@ -78,13 -78,25 +78,25 @@@ endi
  
  # PRCM
  obj-$(CONFIG_ARCH_OMAP2)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
- obj-$(CONFIG_ARCH_OMAP3)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
+ obj-$(CONFIG_ARCH_OMAP3)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o \
+                                          vc3xxx_data.o vp3xxx_data.o
  # XXX The presence of cm2xxx_3xxx.o on the line below is temporary and
  # will be removed once the OMAP4 part of the codebase is converted to
  # use OMAP4-specific PRCM functions.
  obj-$(CONFIG_ARCH_OMAP4)              += prcm.o cm2xxx_3xxx.o cminst44xx.o \
                                           cm44xx.o prcm_mpu44xx.o \
-                                          prminst44xx.o
+                                          prminst44xx.o vc44xx_data.o \
+                                          vp44xx_data.o
+ # OMAP voltage domains
+ ifeq ($(CONFIG_PM),y)
+ voltagedomain-common                  := voltage.o
+ obj-$(CONFIG_ARCH_OMAP2)              += $(voltagedomain-common)
+ obj-$(CONFIG_ARCH_OMAP3)              += $(voltagedomain-common) \
+                                          voltagedomains3xxx_data.o
+ obj-$(CONFIG_ARCH_OMAP4)              += $(voltagedomain-common) \
+                                          voltagedomains44xx_data.o
+ endif
  
  # OMAP powerdomain framework
  powerdomain-common                    += powerdomain.o powerdomain-common.o
@@@ -141,10 -153,6 +153,10 @@@ obj-$(CONFIG_ARCH_OMAP4)         += omap_hwmod
  # EMU peripherals
  obj-$(CONFIG_OMAP3_EMU)                       += emu.o
  
 +# L3 interconnect
 +obj-$(CONFIG_ARCH_OMAP3)              += omap_l3_smx.o
 +obj-$(CONFIG_ARCH_OMAP4)              += omap_l3_noc.o
 +
  obj-$(CONFIG_OMAP_MBOX_FWK)           += mailbox_mach.o
  mailbox_mach-objs                     := mailbox.o
  
@@@ -255,6 -263,3 +267,6 @@@ obj-y                                      += $(smc91x-m) $(smc91x-y
  smsc911x-$(CONFIG_SMSC911X)           := gpmc-smsc911x.o
  obj-y                                 += $(smsc911x-m) $(smsc911x-y)
  obj-$(CONFIG_ARCH_OMAP4)              += hwspinlock.o
 +
 +disp-$(CONFIG_OMAP2_DSS)              := display.o
 +obj-y                                 += $(disp-m) $(disp-y)
  #include <plat/l4_3xxx.h>
  #include <plat/i2c.h>
  #include <plat/gpio.h>
- #include <plat/smartreflex.h>
 +#include <plat/mmc.h>
 +#include <plat/mcbsp.h>
  #include <plat/mcspi.h>
 +#include <plat/dmtimer.h>
  
  #include "omap_hwmod_common_data.h"
  
@@@ -71,21 -67,10 +70,21 @@@ static struct omap_hwmod omap34xx_mcspi
  static struct omap_hwmod omap34xx_mcspi2;
  static struct omap_hwmod omap34xx_mcspi3;
  static struct omap_hwmod omap34xx_mcspi4;
 +static struct omap_hwmod omap3xxx_mmc1_hwmod;
 +static struct omap_hwmod omap3xxx_mmc2_hwmod;
 +static struct omap_hwmod omap3xxx_mmc3_hwmod;
  static struct omap_hwmod am35xx_usbhsotg_hwmod;
  
  static struct omap_hwmod omap3xxx_dma_system_hwmod;
  
 +static struct omap_hwmod omap3xxx_mcbsp1_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp2_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp3_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp4_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp5_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod;
 +static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod;
 +
  /* L3 -> L4_CORE interface */
  static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
        .master = &omap3xxx_l3_main_hwmod,
@@@ -100,26 -85,10 +99,26 @@@ static struct omap_hwmod_ocp_if omap3xx
        .user   = OCP_USER_MPU | OCP_USER_SDMA,
  };
  
 +/* L3 taret configuration and error log registers */
 +static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = {
 +      { .irq = INT_34XX_L3_DBG_IRQ },
 +      { .irq = INT_34XX_L3_APP_IRQ },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = {
 +      {
 +              .pa_start       = 0x68000000,
 +              .pa_end         = 0x6800ffff,
 +              .flags          = ADDR_TYPE_RT,
 +      },
 +};
 +
  /* MPU -> L3 interface */
  static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
 -      .master = &omap3xxx_mpu_hwmod,
 -      .slave  = &omap3xxx_l3_main_hwmod,
 +      .master   = &omap3xxx_mpu_hwmod,
 +      .slave    = &omap3xxx_l3_main_hwmod,
 +      .addr     = omap3xxx_l3_main_addrs,
 +      .addr_cnt = ARRAY_SIZE(omap3xxx_l3_main_addrs),
        .user   = OCP_USER_MPU,
  };
  
@@@ -151,8 -120,6 +150,8 @@@ static struct omap_hwmod_ocp_if *omap3x
  static struct omap_hwmod omap3xxx_l3_main_hwmod = {
        .name           = "l3_main",
        .class          = &l3_hwmod_class,
 +      .mpu_irqs       = omap3xxx_l3_main_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_l3_main_irqs),
        .masters        = omap3xxx_l3_main_masters,
        .masters_cnt    = ARRAY_SIZE(omap3xxx_l3_main_masters),
        .slaves         = omap3xxx_l3_main_slaves,
@@@ -190,63 -157,6 +189,63 @@@ static struct omap_hwmod_ocp_if omap3xx
        .user   = OCP_USER_MPU | OCP_USER_SDMA,
  };
  
 +/* L4 CORE -> MMC1 interface */
 +static struct omap_hwmod_addr_space omap3xxx_mmc1_addr_space[] = {
 +      {
 +              .pa_start       = 0x4809c000,
 +              .pa_end         = 0x4809c1ff,
 +              .flags          = ADDR_TYPE_RT,
 +      },
 +};
 +
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc1 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mmc1_hwmod,
 +      .clk            = "mmchs1_ick",
 +      .addr           = omap3xxx_mmc1_addr_space,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mmc1_addr_space),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +      .flags          = OMAP_FIREWALL_L4
 +};
 +
 +/* L4 CORE -> MMC2 interface */
 +static struct omap_hwmod_addr_space omap3xxx_mmc2_addr_space[] = {
 +      {
 +              .pa_start       = 0x480b4000,
 +              .pa_end         = 0x480b41ff,
 +              .flags          = ADDR_TYPE_RT,
 +      },
 +};
 +
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc2 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mmc2_hwmod,
 +      .clk            = "mmchs2_ick",
 +      .addr           = omap3xxx_mmc2_addr_space,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mmc2_addr_space),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +      .flags          = OMAP_FIREWALL_L4
 +};
 +
 +/* L4 CORE -> MMC3 interface */
 +static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = {
 +      {
 +              .pa_start       = 0x480ad000,
 +              .pa_end         = 0x480ad1ff,
 +              .flags          = ADDR_TYPE_RT,
 +      },
 +};
 +
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mmc3_hwmod,
 +      .clk            = "mmchs3_ick",
 +      .addr           = omap3xxx_mmc3_addr_space,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mmc3_addr_space),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +      .flags          = OMAP_FIREWALL_L4
 +};
 +
  /* L4 CORE -> UART1 interface */
  static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
        {
@@@ -491,12 -401,26 +490,12 @@@ static struct omap_hwmod_ocp_if *am35xx
  /* Slave interfaces on the L4_CORE interconnect */
  static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
        &omap3xxx_l3_main__l4_core,
 -      &omap3_l4_core__sr1,
 -      &omap3_l4_core__sr2,
 -};
 -
 -/* Master interfaces on the L4_CORE interconnect */
 -static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = {
 -      &omap3xxx_l4_core__l4_wkup,
 -      &omap3_l4_core__uart1,
 -      &omap3_l4_core__uart2,
 -      &omap3_l4_core__i2c1,
 -      &omap3_l4_core__i2c2,
 -      &omap3_l4_core__i2c3,
  };
  
  /* L4 CORE */
  static struct omap_hwmod omap3xxx_l4_core_hwmod = {
        .name           = "l4_core",
        .class          = &l4_hwmod_class,
 -      .masters        = omap3xxx_l4_core_masters,
 -      .masters_cnt    = ARRAY_SIZE(omap3xxx_l4_core_masters),
        .slaves         = omap3xxx_l4_core_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap3xxx_l4_core_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@@ -508,10 -432,18 +507,10 @@@ static struct omap_hwmod_ocp_if *omap3x
        &omap3xxx_l3_main__l4_per,
  };
  
 -/* Master interfaces on the L4_PER interconnect */
 -static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = {
 -      &omap3_l4_per__uart3,
 -      &omap3_l4_per__uart4,
 -};
 -
  /* L4 PER */
  static struct omap_hwmod omap3xxx_l4_per_hwmod = {
        .name           = "l4_per",
        .class          = &l4_hwmod_class,
 -      .masters        = omap3xxx_l4_per_masters,
 -      .masters_cnt    = ARRAY_SIZE(omap3xxx_l4_per_masters),
        .slaves         = omap3xxx_l4_per_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap3xxx_l4_per_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@@ -523,10 -455,16 +522,10 @@@ static struct omap_hwmod_ocp_if *omap3x
        &omap3xxx_l4_core__l4_wkup,
  };
  
 -/* Master interfaces on the L4_WKUP interconnect */
 -static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = {
 -};
 -
  /* L4 WKUP */
  static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
        .name           = "l4_wkup",
        .class          = &l4_hwmod_class,
 -      .masters        = omap3xxx_l4_wkup_masters,
 -      .masters_cnt    = ARRAY_SIZE(omap3xxx_l4_wkup_masters),
        .slaves         = omap3xxx_l4_wkup_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@@ -576,640 -514,6 +575,640 @@@ static struct omap_hwmod omap3xxx_iva_h
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
  };
  
 +/* timer class */
 +static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
 +      .rev_offs       = 0x0000,
 +      .sysc_offs      = 0x0010,
 +      .syss_offs      = 0x0014,
 +      .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 +                              SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 +                              SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
 +      .name = "timer",
 +      .sysc = &omap3xxx_timer_1ms_sysc,
 +      .rev = OMAP_TIMER_IP_VERSION_1,
 +};
 +
 +static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
 +      .rev_offs       = 0x0000,
 +      .sysc_offs      = 0x0010,
 +      .syss_offs      = 0x0014,
 +      .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
 +                         SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
 +      .name = "timer",
 +      .sysc = &omap3xxx_timer_sysc,
 +      .rev =  OMAP_TIMER_IP_VERSION_1,
 +};
 +
 +/* timer1 */
 +static struct omap_hwmod omap3xxx_timer1_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer1_mpu_irqs[] = {
 +      { .irq = 37, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
 +      {
 +              .pa_start       = 0x48318000,
 +              .pa_end         = 0x48318000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_wkup -> timer1 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
 +      .master         = &omap3xxx_l4_wkup_hwmod,
 +      .slave          = &omap3xxx_timer1_hwmod,
 +      .clk            = "gpt1_ick",
 +      .addr           = omap3xxx_timer1_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer1_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer1 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer1_slaves[] = {
 +      &omap3xxx_l4_wkup__timer1,
 +};
 +
 +/* timer1 hwmod */
 +static struct omap_hwmod omap3xxx_timer1_hwmod = {
 +      .name           = "timer1",
 +      .mpu_irqs       = omap3xxx_timer1_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer1_mpu_irqs),
 +      .main_clk       = "gpt1_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT1_SHIFT,
 +                      .module_offs = WKUP_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer1_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer1_slaves),
 +      .class          = &omap3xxx_timer_1ms_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer2 */
 +static struct omap_hwmod omap3xxx_timer2_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer2_mpu_irqs[] = {
 +      { .irq = 38, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
 +      {
 +              .pa_start       = 0x49032000,
 +              .pa_end         = 0x49032000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer2 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer2_hwmod,
 +      .clk            = "gpt2_ick",
 +      .addr           = omap3xxx_timer2_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer2_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer2 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer2_slaves[] = {
 +      &omap3xxx_l4_per__timer2,
 +};
 +
 +/* timer2 hwmod */
 +static struct omap_hwmod omap3xxx_timer2_hwmod = {
 +      .name           = "timer2",
 +      .mpu_irqs       = omap3xxx_timer2_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer2_mpu_irqs),
 +      .main_clk       = "gpt2_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT2_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer2_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer2_slaves),
 +      .class          = &omap3xxx_timer_1ms_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer3 */
 +static struct omap_hwmod omap3xxx_timer3_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer3_mpu_irqs[] = {
 +      { .irq = 39, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
 +      {
 +              .pa_start       = 0x49034000,
 +              .pa_end         = 0x49034000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer3 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer3_hwmod,
 +      .clk            = "gpt3_ick",
 +      .addr           = omap3xxx_timer3_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer3_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer3 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer3_slaves[] = {
 +      &omap3xxx_l4_per__timer3,
 +};
 +
 +/* timer3 hwmod */
 +static struct omap_hwmod omap3xxx_timer3_hwmod = {
 +      .name           = "timer3",
 +      .mpu_irqs       = omap3xxx_timer3_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer3_mpu_irqs),
 +      .main_clk       = "gpt3_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT3_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer3_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer3_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer4 */
 +static struct omap_hwmod omap3xxx_timer4_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer4_mpu_irqs[] = {
 +      { .irq = 40, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
 +      {
 +              .pa_start       = 0x49036000,
 +              .pa_end         = 0x49036000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer4 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer4_hwmod,
 +      .clk            = "gpt4_ick",
 +      .addr           = omap3xxx_timer4_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer4_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer4 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer4_slaves[] = {
 +      &omap3xxx_l4_per__timer4,
 +};
 +
 +/* timer4 hwmod */
 +static struct omap_hwmod omap3xxx_timer4_hwmod = {
 +      .name           = "timer4",
 +      .mpu_irqs       = omap3xxx_timer4_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer4_mpu_irqs),
 +      .main_clk       = "gpt4_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT4_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer4_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer4_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer5 */
 +static struct omap_hwmod omap3xxx_timer5_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer5_mpu_irqs[] = {
 +      { .irq = 41, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
 +      {
 +              .pa_start       = 0x49038000,
 +              .pa_end         = 0x49038000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer5 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer5_hwmod,
 +      .clk            = "gpt5_ick",
 +      .addr           = omap3xxx_timer5_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer5_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer5 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer5_slaves[] = {
 +      &omap3xxx_l4_per__timer5,
 +};
 +
 +/* timer5 hwmod */
 +static struct omap_hwmod omap3xxx_timer5_hwmod = {
 +      .name           = "timer5",
 +      .mpu_irqs       = omap3xxx_timer5_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer5_mpu_irqs),
 +      .main_clk       = "gpt5_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT5_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer5_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer5_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer6 */
 +static struct omap_hwmod omap3xxx_timer6_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer6_mpu_irqs[] = {
 +      { .irq = 42, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
 +      {
 +              .pa_start       = 0x4903A000,
 +              .pa_end         = 0x4903A000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer6 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer6_hwmod,
 +      .clk            = "gpt6_ick",
 +      .addr           = omap3xxx_timer6_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer6_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer6 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer6_slaves[] = {
 +      &omap3xxx_l4_per__timer6,
 +};
 +
 +/* timer6 hwmod */
 +static struct omap_hwmod omap3xxx_timer6_hwmod = {
 +      .name           = "timer6",
 +      .mpu_irqs       = omap3xxx_timer6_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer6_mpu_irqs),
 +      .main_clk       = "gpt6_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT6_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer6_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer6_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer7 */
 +static struct omap_hwmod omap3xxx_timer7_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer7_mpu_irqs[] = {
 +      { .irq = 43, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
 +      {
 +              .pa_start       = 0x4903C000,
 +              .pa_end         = 0x4903C000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer7 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer7_hwmod,
 +      .clk            = "gpt7_ick",
 +      .addr           = omap3xxx_timer7_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer7_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer7 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer7_slaves[] = {
 +      &omap3xxx_l4_per__timer7,
 +};
 +
 +/* timer7 hwmod */
 +static struct omap_hwmod omap3xxx_timer7_hwmod = {
 +      .name           = "timer7",
 +      .mpu_irqs       = omap3xxx_timer7_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer7_mpu_irqs),
 +      .main_clk       = "gpt7_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT7_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer7_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer7_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer8 */
 +static struct omap_hwmod omap3xxx_timer8_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer8_mpu_irqs[] = {
 +      { .irq = 44, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
 +      {
 +              .pa_start       = 0x4903E000,
 +              .pa_end         = 0x4903E000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer8 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer8_hwmod,
 +      .clk            = "gpt8_ick",
 +      .addr           = omap3xxx_timer8_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer8_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer8 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer8_slaves[] = {
 +      &omap3xxx_l4_per__timer8,
 +};
 +
 +/* timer8 hwmod */
 +static struct omap_hwmod omap3xxx_timer8_hwmod = {
 +      .name           = "timer8",
 +      .mpu_irqs       = omap3xxx_timer8_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer8_mpu_irqs),
 +      .main_clk       = "gpt8_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT8_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer8_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer8_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer9 */
 +static struct omap_hwmod omap3xxx_timer9_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer9_mpu_irqs[] = {
 +      { .irq = 45, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
 +      {
 +              .pa_start       = 0x49040000,
 +              .pa_end         = 0x49040000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> timer9 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_timer9_hwmod,
 +      .clk            = "gpt9_ick",
 +      .addr           = omap3xxx_timer9_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer9_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer9 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer9_slaves[] = {
 +      &omap3xxx_l4_per__timer9,
 +};
 +
 +/* timer9 hwmod */
 +static struct omap_hwmod omap3xxx_timer9_hwmod = {
 +      .name           = "timer9",
 +      .mpu_irqs       = omap3xxx_timer9_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer9_mpu_irqs),
 +      .main_clk       = "gpt9_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT9_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer9_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer9_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer10 */
 +static struct omap_hwmod omap3xxx_timer10_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer10_mpu_irqs[] = {
 +      { .irq = 46, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer10_addrs[] = {
 +      {
 +              .pa_start       = 0x48086000,
 +              .pa_end         = 0x48086000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_core -> timer10 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_timer10_hwmod,
 +      .clk            = "gpt10_ick",
 +      .addr           = omap3xxx_timer10_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer10_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer10 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer10_slaves[] = {
 +      &omap3xxx_l4_core__timer10,
 +};
 +
 +/* timer10 hwmod */
 +static struct omap_hwmod omap3xxx_timer10_hwmod = {
 +      .name           = "timer10",
 +      .mpu_irqs       = omap3xxx_timer10_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer10_mpu_irqs),
 +      .main_clk       = "gpt10_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT10_SHIFT,
 +                      .module_offs = CORE_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer10_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer10_slaves),
 +      .class          = &omap3xxx_timer_1ms_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer11 */
 +static struct omap_hwmod omap3xxx_timer11_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer11_mpu_irqs[] = {
 +      { .irq = 47, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer11_addrs[] = {
 +      {
 +              .pa_start       = 0x48088000,
 +              .pa_end         = 0x48088000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_core -> timer11 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_timer11_hwmod,
 +      .clk            = "gpt11_ick",
 +      .addr           = omap3xxx_timer11_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer11_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer11 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer11_slaves[] = {
 +      &omap3xxx_l4_core__timer11,
 +};
 +
 +/* timer11 hwmod */
 +static struct omap_hwmod omap3xxx_timer11_hwmod = {
 +      .name           = "timer11",
 +      .mpu_irqs       = omap3xxx_timer11_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer11_mpu_irqs),
 +      .main_clk       = "gpt11_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT11_SHIFT,
 +                      .module_offs = CORE_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer11_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer11_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
 +/* timer12*/
 +static struct omap_hwmod omap3xxx_timer12_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
 +      { .irq = 95, },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
 +      {
 +              .pa_start       = 0x48304000,
 +              .pa_end         = 0x48304000 + SZ_1K - 1,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_core -> timer12 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer12 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_timer12_hwmod,
 +      .clk            = "gpt12_ick",
 +      .addr           = omap3xxx_timer12_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_timer12_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* timer12 slave port */
 +static struct omap_hwmod_ocp_if *omap3xxx_timer12_slaves[] = {
 +      &omap3xxx_l4_core__timer12,
 +};
 +
 +/* timer12 hwmod */
 +static struct omap_hwmod omap3xxx_timer12_hwmod = {
 +      .name           = "timer12",
 +      .mpu_irqs       = omap3xxx_timer12_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_timer12_mpu_irqs),
 +      .main_clk       = "gpt12_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPT12_SHIFT,
 +                      .module_offs = WKUP_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_timer12_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_timer12_slaves),
 +      .class          = &omap3xxx_timer_hwmod_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 +};
 +
  /* l4_wkup -> wd_timer2 */
  static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
        {
@@@ -1240,8 -544,7 +1239,8 @@@ static struct omap_hwmod_class_sysconfi
        .syss_offs      = 0x0014,
        .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 -                         SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY),
 +                         SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 +                         SYSS_HAS_RESET_STATUS),
        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
        .sysc_fields    = &omap_hwmod_sysc_type1,
  };
@@@ -1253,7 -556,7 +1252,7 @@@ static struct omap_hwmod_class_sysconfi
        .syss_offs      = 0x10,
        .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 -                         SYSC_HAS_AUTOIDLE),
 +                         SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
        .sysc_fields    = &omap_hwmod_sysc_type1,
  };
@@@ -1285,11 -588,6 +1284,11 @@@ static struct omap_hwmod omap3xxx_wd_ti
        .slaves         = omap3xxx_wd_timer2_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +      /*
 +       * XXX: Use software supervised mode, HW supervised smartidle seems to
 +       * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
 +       */
 +      .flags          = HWMOD_SWSUP_SIDLE,
  };
  
  /* UART common */
@@@ -1300,7 -598,7 +1299,7 @@@ static struct omap_hwmod_class_sysconfi
        .syss_offs      = 0x58,
        .sysc_flags     = (SYSC_HAS_SIDLEMODE |
                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 -                         SYSC_HAS_AUTOIDLE),
 +                         SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
        .sysc_fields    = &omap_hwmod_sysc_type1,
  };
@@@ -1840,7 -1138,6 +1839,7 @@@ static struct omap_hwmod_ocp_if omap3xx
                        .flags  = OMAP_FIREWALL_L4,
                }
        },
 +      .flags          = OCPIF_SWSUP_IDLE,
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
  };
  
@@@ -2106,8 -1403,7 +2105,8 @@@ static struct omap_hwmod_class_sysconfi
        .sysc_offs      = 0x0010,
        .syss_offs      = 0x0014,
        .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
 -                         SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
 +                         SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
 +                         SYSS_HAS_RESET_STATUS),
        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
        .sysc_fields    = &omap_hwmod_sysc_type1,
  };
@@@ -2268,602 -1564,170 +2267,602 @@@ static struct omap_hwmod omap3xxx_gpio4
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  };
  
 -/* gpio5 */
 -static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
 -      { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
 +/* gpio5 */
 +static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
 +      { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
 +};
 +
 +static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
 +      { .role = "dbclk", .clk = "gpio5_dbck", },
 +};
 +
 +static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
 +      &omap3xxx_l4_per__gpio5,
 +};
 +
 +static struct omap_hwmod omap3xxx_gpio5_hwmod = {
 +      .name           = "gpio5",
 +      .mpu_irqs       = omap3xxx_gpio5_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_gpio5_irqs),
 +      .main_clk       = "gpio5_ick",
 +      .opt_clks       = gpio5_opt_clks,
 +      .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPIO5_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_gpio5_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_gpio5_slaves),
 +      .class          = &omap3xxx_gpio_hwmod_class,
 +      .dev_attr       = &gpio_dev_attr,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* gpio6 */
 +static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
 +      { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
 +};
 +
 +static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
 +      { .role = "dbclk", .clk = "gpio6_dbck", },
 +};
 +
 +static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
 +      &omap3xxx_l4_per__gpio6,
 +};
 +
 +static struct omap_hwmod omap3xxx_gpio6_hwmod = {
 +      .name           = "gpio6",
 +      .mpu_irqs       = omap3xxx_gpio6_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_gpio6_irqs),
 +      .main_clk       = "gpio6_ick",
 +      .opt_clks       = gpio6_opt_clks,
 +      .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_GPIO6_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_gpio6_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_gpio6_slaves),
 +      .class          = &omap3xxx_gpio_hwmod_class,
 +      .dev_attr       = &gpio_dev_attr,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* dma_system -> L3 */
 +static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
 +      .master         = &omap3xxx_dma_system_hwmod,
 +      .slave          = &omap3xxx_l3_main_hwmod,
 +      .clk            = "core_l3_ick",
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* dma attributes */
 +static struct omap_dma_dev_attr dma_dev_attr = {
 +      .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
 +                              IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
 +      .lch_count = 32,
 +};
 +
 +static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
 +      .rev_offs       = 0x0000,
 +      .sysc_offs      = 0x002c,
 +      .syss_offs      = 0x0028,
 +      .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 +                         SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 +                         SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
 +                         SYSS_HAS_RESET_STATUS),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 +                         MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
 +      .name = "dma",
 +      .sysc = &omap3xxx_dma_sysc,
 +};
 +
 +/* dma_system */
 +static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
 +      { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
 +      { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
 +      { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
 +      { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
 +      {
 +              .pa_start       = 0x48056000,
 +              .pa_end         = 0x4a0560ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* dma_system master ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
 +      &omap3xxx_dma_system__l3,
 +};
 +
 +/* l4_cfg -> dma_system */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_dma_system_hwmod,
 +      .clk            = "core_l4_ick",
 +      .addr           = omap3xxx_dma_system_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_dma_system_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* dma_system slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
 +      &omap3xxx_l4_core__dma_system,
 +};
 +
 +static struct omap_hwmod omap3xxx_dma_system_hwmod = {
 +      .name           = "dma",
 +      .class          = &omap3xxx_dma_hwmod_class,
 +      .mpu_irqs       = omap3xxx_dma_system_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_dma_system_irqs),
 +      .main_clk       = "core_l3_ick",
 +      .prcm = {
 +              .omap2 = {
 +                      .module_offs            = CORE_MOD,
 +                      .prcm_reg_id            = 1,
 +                      .module_bit             = OMAP3430_ST_SDMA_SHIFT,
 +                      .idlest_reg_id          = 1,
 +                      .idlest_idle_bit        = OMAP3430_ST_SDMA_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_dma_system_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_dma_system_slaves),
 +      .masters        = omap3xxx_dma_system_masters,
 +      .masters_cnt    = ARRAY_SIZE(omap3xxx_dma_system_masters),
 +      .dev_attr       = &dma_dev_attr,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +      .flags          = HWMOD_NO_IDLEST,
 +};
 +
 +/*
 + * 'mcbsp' class
 + * multi channel buffered serial port controller
 + */
 +
 +static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
 +      .sysc_offs      = 0x008c,
 +      .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
 +                         SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +      .clockact       = 0x2,
 +};
 +
 +static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
 +      .name = "mcbsp",
 +      .sysc = &omap3xxx_mcbsp_sysc,
 +      .rev  = MCBSP_CONFIG_TYPE3,
 +};
 +
 +/* mcbsp1 */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {
 +      { .name = "irq", .irq = 16 },
 +      { .name = "tx", .irq = 59 },
 +      { .name = "rx", .irq = 60 },
 +};
 +
 +static struct omap_hwmod_dma_info omap3xxx_mcbsp1_sdma_chs[] = {
 +      { .name = "rx", .dma_req = 32 },
 +      { .name = "tx", .dma_req = 31 },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = {
 +      {
 +              .name           = "mpu",
 +              .pa_start       = 0x48074000,
 +              .pa_end         = 0x480740ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_core -> mcbsp1 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mcbsp1_hwmod,
 +      .clk            = "mcbsp1_ick",
 +      .addr           = omap3xxx_mcbsp1_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp1_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* mcbsp1 slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp1_slaves[] = {
 +      &omap3xxx_l4_core__mcbsp1,
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
 +      .name           = "mcbsp1",
 +      .class          = &omap3xxx_mcbsp_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp1_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp1_irqs),
 +      .sdma_reqs      = omap3xxx_mcbsp1_sdma_chs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap3xxx_mcbsp1_sdma_chs),
 +      .main_clk       = "mcbsp1_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MCBSP1_SHIFT,
 +                      .module_offs = CORE_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mcbsp1_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp1_slaves),
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* mcbsp2 */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = {
 +      { .name = "irq", .irq = 17 },
 +      { .name = "tx", .irq = 62 },
 +      { .name = "rx", .irq = 63 },
 +};
 +
 +static struct omap_hwmod_dma_info omap3xxx_mcbsp2_sdma_chs[] = {
 +      { .name = "rx", .dma_req = 34 },
 +      { .name = "tx", .dma_req = 33 },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = {
 +      {
 +              .name           = "mpu",
 +              .pa_start       = 0x49022000,
 +              .pa_end         = 0x490220ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> mcbsp2 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_mcbsp2_hwmod,
 +      .clk            = "mcbsp2_ick",
 +      .addr           = omap3xxx_mcbsp2_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp2_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* mcbsp2 slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_slaves[] = {
 +      &omap3xxx_l4_per__mcbsp2,
 +};
 +
 +static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = {
 +      .sidetone       = "mcbsp2_sidetone",
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
 +      .name           = "mcbsp2",
 +      .class          = &omap3xxx_mcbsp_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp2_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp2_irqs),
 +      .sdma_reqs      = omap3xxx_mcbsp2_sdma_chs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap3xxx_mcbsp2_sdma_chs),
 +      .main_clk       = "mcbsp2_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mcbsp2_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp2_slaves),
 +      .dev_attr       = &omap34xx_mcbsp2_dev_attr,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* mcbsp3 */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = {
 +      { .name = "irq", .irq = 22 },
 +      { .name = "tx", .irq = 89 },
 +      { .name = "rx", .irq = 90 },
 +};
 +
 +static struct omap_hwmod_dma_info omap3xxx_mcbsp3_sdma_chs[] = {
 +      { .name = "rx", .dma_req = 18 },
 +      { .name = "tx", .dma_req = 17 },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = {
 +      {
 +              .name           = "mpu",
 +              .pa_start       = 0x49024000,
 +              .pa_end         = 0x490240ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
 +};
 +
 +/* l4_per -> mcbsp3 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_mcbsp3_hwmod,
 +      .clk            = "mcbsp3_ick",
 +      .addr           = omap3xxx_mcbsp3_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp3_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* mcbsp3 slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_slaves[] = {
 +      &omap3xxx_l4_per__mcbsp3,
 +};
 +
 +static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = {
 +      .sidetone       = "mcbsp3_sidetone",
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
 +      .name           = "mcbsp3",
 +      .class          = &omap3xxx_mcbsp_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp3_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp3_irqs),
 +      .sdma_reqs      = omap3xxx_mcbsp3_sdma_chs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap3xxx_mcbsp3_sdma_chs),
 +      .main_clk       = "mcbsp3_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mcbsp3_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp3_slaves),
 +      .dev_attr       = &omap34xx_mcbsp3_dev_attr,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* mcbsp4 */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = {
 +      { .name = "irq", .irq = 23 },
 +      { .name = "tx", .irq = 54 },
 +      { .name = "rx", .irq = 55 },
 +};
 +
 +static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = {
 +      { .name = "rx", .dma_req = 20 },
 +      { .name = "tx", .dma_req = 19 },
  };
  
 -static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
 -      { .role = "dbclk", .clk = "gpio5_dbck", },
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = {
 +      {
 +              .name           = "mpu",
 +              .pa_start       = 0x49026000,
 +              .pa_end         = 0x490260ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
  };
  
 -static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
 -      &omap3xxx_l4_per__gpio5,
 +/* l4_per -> mcbsp4 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_mcbsp4_hwmod,
 +      .clk            = "mcbsp4_ick",
 +      .addr           = omap3xxx_mcbsp4_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp4_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
  };
  
 -static struct omap_hwmod omap3xxx_gpio5_hwmod = {
 -      .name           = "gpio5",
 -      .mpu_irqs       = omap3xxx_gpio5_irqs,
 -      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_gpio5_irqs),
 -      .main_clk       = "gpio5_ick",
 -      .opt_clks       = gpio5_opt_clks,
 -      .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
 +/* mcbsp4 slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp4_slaves[] = {
 +      &omap3xxx_l4_per__mcbsp4,
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
 +      .name           = "mcbsp4",
 +      .class          = &omap3xxx_mcbsp_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp4_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp4_irqs),
 +      .sdma_reqs      = omap3xxx_mcbsp4_sdma_chs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap3xxx_mcbsp4_sdma_chs),
 +      .main_clk       = "mcbsp4_fck",
        .prcm           = {
                .omap2 = {
                        .prcm_reg_id = 1,
 -                      .module_bit = OMAP3430_EN_GPIO5_SHIFT,
 +                      .module_bit = OMAP3430_EN_MCBSP4_SHIFT,
                        .module_offs = OMAP3430_PER_MOD,
                        .idlest_reg_id = 1,
 -                      .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
                },
        },
 -      .slaves         = omap3xxx_gpio5_slaves,
 -      .slaves_cnt     = ARRAY_SIZE(omap3xxx_gpio5_slaves),
 -      .class          = &omap3xxx_gpio_hwmod_class,
 -      .dev_attr       = &gpio_dev_attr,
 +      .slaves         = omap3xxx_mcbsp4_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp4_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  };
  
 -/* gpio6 */
 -static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
 -      { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
 +/* mcbsp5 */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = {
 +      { .name = "irq", .irq = 27 },
 +      { .name = "tx", .irq = 81 },
 +      { .name = "rx", .irq = 82 },
  };
  
 -static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
 -      { .role = "dbclk", .clk = "gpio6_dbck", },
 +static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = {
 +      { .name = "rx", .dma_req = 22 },
 +      { .name = "tx", .dma_req = 21 },
  };
  
 -static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
 -      &omap3xxx_l4_per__gpio6,
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = {
 +      {
 +              .name           = "mpu",
 +              .pa_start       = 0x48096000,
 +              .pa_end         = 0x480960ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
  };
  
 -static struct omap_hwmod omap3xxx_gpio6_hwmod = {
 -      .name           = "gpio6",
 -      .mpu_irqs       = omap3xxx_gpio6_irqs,
 -      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_gpio6_irqs),
 -      .main_clk       = "gpio6_ick",
 -      .opt_clks       = gpio6_opt_clks,
 -      .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
 +/* l4_core -> mcbsp5 */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mcbsp5_hwmod,
 +      .clk            = "mcbsp5_ick",
 +      .addr           = omap3xxx_mcbsp5_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp5_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* mcbsp5 slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp5_slaves[] = {
 +      &omap3xxx_l4_core__mcbsp5,
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
 +      .name           = "mcbsp5",
 +      .class          = &omap3xxx_mcbsp_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp5_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp5_irqs),
 +      .sdma_reqs      = omap3xxx_mcbsp5_sdma_chs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap3xxx_mcbsp5_sdma_chs),
 +      .main_clk       = "mcbsp5_fck",
        .prcm           = {
                .omap2 = {
                        .prcm_reg_id = 1,
 -                      .module_bit = OMAP3430_EN_GPIO6_SHIFT,
 -                      .module_offs = OMAP3430_PER_MOD,
 +                      .module_bit = OMAP3430_EN_MCBSP5_SHIFT,
 +                      .module_offs = CORE_MOD,
                        .idlest_reg_id = 1,
 -                      .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
                },
        },
 -      .slaves         = omap3xxx_gpio6_slaves,
 -      .slaves_cnt     = ARRAY_SIZE(omap3xxx_gpio6_slaves),
 -      .class          = &omap3xxx_gpio_hwmod_class,
 -      .dev_attr       = &gpio_dev_attr,
 +      .slaves         = omap3xxx_mcbsp5_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp5_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  };
 +/* 'mcbsp sidetone' class */
  
 -/* dma_system -> L3 */
 -static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
 -      .master         = &omap3xxx_dma_system_hwmod,
 -      .slave          = &omap3xxx_l3_main_hwmod,
 -      .clk            = "core_l3_ick",
 -      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
 +      .sysc_offs      = 0x0010,
 +      .sysc_flags     = SYSC_HAS_AUTOIDLE,
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
  };
  
 -/* dma attributes */
 -static struct omap_dma_dev_attr dma_dev_attr = {
 -      .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
 -                              IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
 -      .lch_count = 32,
 +static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
 +      .name = "mcbsp_sidetone",
 +      .sysc = &omap3xxx_mcbsp_sidetone_sysc,
  };
  
 -static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
 -      .rev_offs       = 0x0000,
 -      .sysc_offs      = 0x002c,
 -      .syss_offs      = 0x0028,
 -      .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 -                         SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 -                         SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
 -      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 -                         MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 -      .sysc_fields    = &omap_hwmod_sysc_type1,
 +/* mcbsp2_sidetone */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = {
 +      { .name = "irq", .irq = 4 },
  };
  
 -static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
 -      .name = "dma",
 -      .sysc = &omap3xxx_dma_sysc,
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = {
 +      {
 +              .name           = "sidetone",
 +              .pa_start       = 0x49028000,
 +              .pa_end         = 0x490280ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
  };
  
 -/* dma_system */
 -static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
 -      { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
 -      { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
 -      { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
 -      { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
 +/* l4_per -> mcbsp2_sidetone */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_mcbsp2_sidetone_hwmod,
 +      .clk            = "mcbsp2_ick",
 +      .addr           = omap3xxx_mcbsp2_sidetone_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_addrs),
 +      .user           = OCP_USER_MPU,
  };
  
 -static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
 -      {
 -              .pa_start       = 0x48056000,
 -              .pa_end         = 0x4a0560ff,
 -              .flags          = ADDR_TYPE_RT
 +/* mcbsp2_sidetone slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_sidetone_slaves[] = {
 +      &omap3xxx_l4_per__mcbsp2_sidetone,
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
 +      .name           = "mcbsp2_sidetone",
 +      .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp2_sidetone_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_irqs),
 +      .main_clk       = "mcbsp2_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                       .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
 +              },
        },
 +      .slaves         = omap3xxx_mcbsp2_sidetone_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_slaves),
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  };
  
 -/* dma_system master ports */
 -static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
 -      &omap3xxx_dma_system__l3,
 +/* mcbsp3_sidetone */
 +static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = {
 +      { .name = "irq", .irq = 5 },
  };
  
 -/* l4_cfg -> dma_system */
 -static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
 -      .master         = &omap3xxx_l4_core_hwmod,
 -      .slave          = &omap3xxx_dma_system_hwmod,
 -      .clk            = "core_l4_ick",
 -      .addr           = omap3xxx_dma_system_addrs,
 -      .addr_cnt       = ARRAY_SIZE(omap3xxx_dma_system_addrs),
 -      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = {
 +      {
 +              .name           = "sidetone",
 +              .pa_start       = 0x4902A000,
 +              .pa_end         = 0x4902A0ff,
 +              .flags          = ADDR_TYPE_RT
 +      },
  };
  
 -/* dma_system slave ports */
 -static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
 -      &omap3xxx_l4_core__dma_system,
 +/* l4_per -> mcbsp3_sidetone */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
 +      .master         = &omap3xxx_l4_per_hwmod,
 +      .slave          = &omap3xxx_mcbsp3_sidetone_hwmod,
 +      .clk            = "mcbsp3_ick",
 +      .addr           = omap3xxx_mcbsp3_sidetone_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_addrs),
 +      .user           = OCP_USER_MPU,
  };
  
 -static struct omap_hwmod omap3xxx_dma_system_hwmod = {
 -      .name           = "dma",
 -      .class          = &omap3xxx_dma_hwmod_class,
 -      .mpu_irqs       = omap3xxx_dma_system_irqs,
 -      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_dma_system_irqs),
 -      .main_clk       = "core_l3_ick",
 -      .prcm = {
 +/* mcbsp3_sidetone slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_sidetone_slaves[] = {
 +      &omap3xxx_l4_per__mcbsp3_sidetone,
 +};
 +
 +static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
 +      .name           = "mcbsp3_sidetone",
 +      .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mcbsp3_sidetone_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_irqs),
 +      .main_clk       = "mcbsp3_fck",
 +      .prcm           = {
                .omap2 = {
 -                      .module_offs            = CORE_MOD,
 -                      .prcm_reg_id            = 1,
 -                      .module_bit             = OMAP3430_ST_SDMA_SHIFT,
 -                      .idlest_reg_id          = 1,
 -                      .idlest_idle_bit        = OMAP3430_ST_SDMA_SHIFT,
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
 +                      .module_offs = OMAP3430_PER_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
                },
        },
 -      .slaves         = omap3xxx_dma_system_slaves,
 -      .slaves_cnt     = ARRAY_SIZE(omap3xxx_dma_system_slaves),
 -      .masters        = omap3xxx_dma_system_masters,
 -      .masters_cnt    = ARRAY_SIZE(omap3xxx_dma_system_masters),
 -      .dev_attr       = &dma_dev_attr,
 +      .slaves         = omap3xxx_mcbsp3_sidetone_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 -      .flags          = HWMOD_NO_IDLEST,
  };
  
 +
  /* SR common */
  static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
        .clkact_shift   = 20,
@@@ -2993,74 -1857,6 +2992,74 @@@ static struct omap_hwmod omap36xx_sr2_h
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
  };
  
 +/*
 + * 'mailbox' class
 + * mailbox module allowing communication between the on-chip processors
 + * using a queued mailbox-interrupt mechanism.
 + */
 +
 +static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
 +      .rev_offs       = 0x000,
 +      .sysc_offs      = 0x010,
 +      .syss_offs      = 0x014,
 +      .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
 +                              SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
 +      .name = "mailbox",
 +      .sysc = &omap3xxx_mailbox_sysc,
 +};
 +
 +static struct omap_hwmod omap3xxx_mailbox_hwmod;
 +static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
 +      { .irq = 26 },
 +};
 +
 +static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
 +      {
 +              .pa_start       = 0x48094000,
 +              .pa_end         = 0x480941ff,
 +              .flags          = ADDR_TYPE_RT,
 +      },
 +};
 +
 +/* l4_core -> mailbox */
 +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
 +      .master         = &omap3xxx_l4_core_hwmod,
 +      .slave          = &omap3xxx_mailbox_hwmod,
 +      .addr           = omap3xxx_mailbox_addrs,
 +      .addr_cnt       = ARRAY_SIZE(omap3xxx_mailbox_addrs),
 +      .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +/* mailbox slave ports */
 +static struct omap_hwmod_ocp_if *omap3xxx_mailbox_slaves[] = {
 +      &omap3xxx_l4_core__mailbox,
 +};
 +
 +static struct omap_hwmod omap3xxx_mailbox_hwmod = {
 +      .name           = "mailbox",
 +      .class          = &omap3xxx_mailbox_hwmod_class,
 +      .mpu_irqs       = omap3xxx_mailbox_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_mailbox_irqs),
 +      .main_clk       = "mailboxes_ick",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MAILBOXES_SHIFT,
 +                      .module_offs = CORE_MOD,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mailbox_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mailbox_slaves),
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
  /* l4 core -> mcspi1 interface */
  static struct omap_hwmod_addr_space omap34xx_mcspi1_addr_space[] = {
        {
@@@ -3415,181 -2211,13 +3414,181 @@@ static struct omap_hwmod am35xx_usbhsot
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES3_1)
  };
  
 +/* MMC/SD/SDIO common */
 +
 +static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
 +      .rev_offs       = 0x1fc,
 +      .sysc_offs      = 0x10,
 +      .syss_offs      = 0x14,
 +      .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
 +                         SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 +                         SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
 +      .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 +      .sysc_fields    = &omap_hwmod_sysc_type1,
 +};
 +
 +static struct omap_hwmod_class omap34xx_mmc_class = {
 +      .name = "mmc",
 +      .sysc = &omap34xx_mmc_sysc,
 +};
 +
 +/* MMC/SD/SDIO1 */
 +
 +static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = {
 +      { .irq = 83, },
 +};
 +
 +static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = {
 +      { .name = "tx", .dma_req = 61, },
 +      { .name = "rx", .dma_req = 62, },
 +};
 +
 +static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
 +      { .role = "dbck", .clk = "omap_32k_fck", },
 +};
 +
 +static struct omap_hwmod_ocp_if *omap3xxx_mmc1_slaves[] = {
 +      &omap3xxx_l4_core__mmc1,
 +};
 +
 +static struct omap_mmc_dev_attr mmc1_dev_attr = {
 +      .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
 +};
 +
 +static struct omap_hwmod omap3xxx_mmc1_hwmod = {
 +      .name           = "mmc1",
 +      .mpu_irqs       = omap34xx_mmc1_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap34xx_mmc1_mpu_irqs),
 +      .sdma_reqs      = omap34xx_mmc1_sdma_reqs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap34xx_mmc1_sdma_reqs),
 +      .opt_clks       = omap34xx_mmc1_opt_clks,
 +      .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
 +      .main_clk       = "mmchs1_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .module_offs = CORE_MOD,
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MMC1_SHIFT,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
 +              },
 +      },
 +      .dev_attr       = &mmc1_dev_attr,
 +      .slaves         = omap3xxx_mmc1_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mmc1_slaves),
 +      .class          = &omap34xx_mmc_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* MMC/SD/SDIO2 */
 +
 +static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = {
 +      { .irq = INT_24XX_MMC2_IRQ, },
 +};
 +
 +static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = {
 +      { .name = "tx", .dma_req = 47, },
 +      { .name = "rx", .dma_req = 48, },
 +};
 +
 +static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
 +      { .role = "dbck", .clk = "omap_32k_fck", },
 +};
 +
 +static struct omap_hwmod_ocp_if *omap3xxx_mmc2_slaves[] = {
 +      &omap3xxx_l4_core__mmc2,
 +};
 +
 +static struct omap_hwmod omap3xxx_mmc2_hwmod = {
 +      .name           = "mmc2",
 +      .mpu_irqs       = omap34xx_mmc2_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap34xx_mmc2_mpu_irqs),
 +      .sdma_reqs      = omap34xx_mmc2_sdma_reqs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap34xx_mmc2_sdma_reqs),
 +      .opt_clks       = omap34xx_mmc2_opt_clks,
 +      .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
 +      .main_clk       = "mmchs2_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .module_offs = CORE_MOD,
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MMC2_SHIFT,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mmc2_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mmc2_slaves),
 +      .class          = &omap34xx_mmc_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
 +/* MMC/SD/SDIO3 */
 +
 +static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = {
 +      { .irq = 94, },
 +};
 +
 +static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = {
 +      { .name = "tx", .dma_req = 77, },
 +      { .name = "rx", .dma_req = 78, },
 +};
 +
 +static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
 +      { .role = "dbck", .clk = "omap_32k_fck", },
 +};
 +
 +static struct omap_hwmod_ocp_if *omap3xxx_mmc3_slaves[] = {
 +      &omap3xxx_l4_core__mmc3,
 +};
 +
 +static struct omap_hwmod omap3xxx_mmc3_hwmod = {
 +      .name           = "mmc3",
 +      .mpu_irqs       = omap34xx_mmc3_mpu_irqs,
 +      .mpu_irqs_cnt   = ARRAY_SIZE(omap34xx_mmc3_mpu_irqs),
 +      .sdma_reqs      = omap34xx_mmc3_sdma_reqs,
 +      .sdma_reqs_cnt  = ARRAY_SIZE(omap34xx_mmc3_sdma_reqs),
 +      .opt_clks       = omap34xx_mmc3_opt_clks,
 +      .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc3_opt_clks),
 +      .main_clk       = "mmchs3_fck",
 +      .prcm           = {
 +              .omap2 = {
 +                      .prcm_reg_id = 1,
 +                      .module_bit = OMAP3430_EN_MMC3_SHIFT,
 +                      .idlest_reg_id = 1,
 +                      .idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
 +              },
 +      },
 +      .slaves         = omap3xxx_mmc3_slaves,
 +      .slaves_cnt     = ARRAY_SIZE(omap3xxx_mmc3_slaves),
 +      .class          = &omap34xx_mmc_class,
 +      .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 +};
 +
  static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
        &omap3xxx_l3_main_hwmod,
        &omap3xxx_l4_core_hwmod,
        &omap3xxx_l4_per_hwmod,
        &omap3xxx_l4_wkup_hwmod,
 +      &omap3xxx_mmc1_hwmod,
 +      &omap3xxx_mmc2_hwmod,
 +      &omap3xxx_mmc3_hwmod,
        &omap3xxx_mpu_hwmod,
        &omap3xxx_iva_hwmod,
 +
 +      &omap3xxx_timer1_hwmod,
 +      &omap3xxx_timer2_hwmod,
 +      &omap3xxx_timer3_hwmod,
 +      &omap3xxx_timer4_hwmod,
 +      &omap3xxx_timer5_hwmod,
 +      &omap3xxx_timer6_hwmod,
 +      &omap3xxx_timer7_hwmod,
 +      &omap3xxx_timer8_hwmod,
 +      &omap3xxx_timer9_hwmod,
 +      &omap3xxx_timer10_hwmod,
 +      &omap3xxx_timer11_hwmod,
 +      &omap3xxx_timer12_hwmod,
 +
        &omap3xxx_wd_timer2_hwmod,
        &omap3xxx_uart1_hwmod,
        &omap3xxx_uart2_hwmod,
        /* dma_system class*/
        &omap3xxx_dma_system_hwmod,
  
 +      /* mcbsp class */
 +      &omap3xxx_mcbsp1_hwmod,
 +      &omap3xxx_mcbsp2_hwmod,
 +      &omap3xxx_mcbsp3_hwmod,
 +      &omap3xxx_mcbsp4_hwmod,
 +      &omap3xxx_mcbsp5_hwmod,
 +      &omap3xxx_mcbsp2_sidetone_hwmod,
 +      &omap3xxx_mcbsp3_sidetone_hwmod,
 +
 +      /* mailbox class */
 +      &omap3xxx_mailbox_hwmod,
 +
        /* mcspi class */
        &omap34xx_mcspi1,
        &omap34xx_mcspi2,
  
  int __init omap3xxx_hwmod_init(void)
  {
 -      return omap_hwmod_init(omap3xxx_hwmods);
 +      return omap_hwmod_register(omap3xxx_hwmods);
  }
@@@ -26,9 -26,9 +26,9 @@@
  #include <linux/pm_runtime.h>
  
  #include <plat/common.h>
- #include <plat/smartreflex.h>
  
  #include "pm.h"
+ #include "smartreflex.h"
  
  #define SMARTREFLEX_NAME_LEN  16
  #define NVALUE_NAME_LEN               40
@@@ -900,7 -900,7 +900,7 @@@ static int __init omap_sr_probe(struct 
                return PTR_ERR(dbg_dir);
        }
  
 -      (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUGO, dbg_dir,
 +      (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir,
                                (void *)sr_info, &pm_sr_fops);
        (void) debugfs_create_x32("errweight", S_IRUGO, dbg_dir,
                        &sr_info->err_weight);
                strcpy(name, "volt_");
                sprintf(volt_name, "%d", volt_data[i].volt_nominal);
                strcat(name, volt_name);
 -              (void) debugfs_create_x32(name, S_IRUGO | S_IWUGO, nvalue_dir,
 +              (void) debugfs_create_x32(name, S_IRUGO | S_IWUSR, nvalue_dir,
                                &(sr_info->nvalue_table[i].nvalue));
        }
  
@@@ -1,7 -1,7 +1,7 @@@
  /*
   * omap_hwmod macros, structures
   *
 - * Copyright (C) 2009-2010 Nokia Corporation
 + * Copyright (C) 2009-2011 Nokia Corporation
   * Paul Walmsley
   *
   * Created in collaboration with (alphabetical order): BenoĆ®t Cousson,
  #define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_HWMOD_H
  
  #include <linux/kernel.h>
 +#include <linux/init.h>
  #include <linux/list.h>
  #include <linux/ioport.h>
  #include <linux/spinlock.h>
  #include <plat/cpu.h>
- #include <plat/voltage.h>
  
  struct omap_device;
  
@@@ -125,7 -123,6 +124,7 @@@ struct omap_hwmod_dma_info 
   * struct omap_hwmod_rst_info - IPs reset lines use by hwmod
   * @name: name of the reset line (module local name)
   * @rst_shift: Offset of the reset bit
 + * @st_shift: Offset of the reset status bit (OMAP2/3 only)
   *
   * @name should be something short, e.g., "cpu0" or "rst". It is defined
   * locally to the hwmod.
  struct omap_hwmod_rst_info {
        const char      *name;
        u8              rst_shift;
 +      u8              st_shift;
  };
  
  /**
@@@ -181,8 -177,7 +180,8 @@@ struct omap_hwmod_omap2_firewall 
  #define ADDR_TYPE_RT          (1 << 1)
  
  /**
 - * struct omap_hwmod_addr_space - MPU address space handled by the hwmod
 + * struct omap_hwmod_addr_space - address space handled by the hwmod
 + * @name: name of the address space
   * @pa_start: starting physical address
   * @pa_end: ending physical address
   * @flags: (see omap_hwmod_addr_space.flags macros above)
   * structure.  GPMC is one example.
   */
  struct omap_hwmod_addr_space {
 +      const char *name;
        u32 pa_start;
        u32 pa_end;
        u8 flags;
@@@ -375,11 -369,9 +374,11 @@@ struct omap_hwmod_omap4_prcm 
   *     of standby, rather than relying on module smart-standby
   * HWMOD_INIT_NO_RESET: don't reset this module at boot - important for
   *     SDRAM controller, etc. XXX probably belongs outside the main hwmod file
 + *     XXX Should be HWMOD_SETUP_NO_RESET
   * HWMOD_INIT_NO_IDLE: don't idle this module at boot - important for SDRAM
   *     controller, etc. XXX probably belongs outside the main hwmod file
 - * HWMOD_NO_AUTOIDLE: disable module autoidle (OCP_SYSCONFIG.AUTOIDLE)
 + *     XXX Should be HWMOD_SETUP_NO_IDLE
 + * HWMOD_NO_OCP_AUTOIDLE: disable module autoidle (OCP_SYSCONFIG.AUTOIDLE)
   *     when module is enabled, rather than the default, which is to
   *     enable autoidle
   * HWMOD_SET_DEFAULT_CLOCKACT: program CLOCKACTIVITY bits at startup
@@@ -542,13 -534,11 +541,13 @@@ struct omap_hwmod 
        const struct omap_chip_id       omap_chip;
  };
  
 -int omap_hwmod_init(struct omap_hwmod **ohs);
 +int omap_hwmod_register(struct omap_hwmod **ohs);
  struct omap_hwmod *omap_hwmod_lookup(const char *name);
  int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
                        void *data);
  
 +int __init omap_hwmod_setup_one(const char *name);
 +
  int omap_hwmod_enable(struct omap_hwmod *oh);
  int _omap_hwmod_enable(struct omap_hwmod *oh);
  int omap_hwmod_idle(struct omap_hwmod *oh);
@@@ -563,7 -553,6 +562,7 @@@ int omap_hwmod_enable_clocks(struct oma
  int omap_hwmod_disable_clocks(struct omap_hwmod *oh);
  
  int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode);
 +int omap_hwmod_set_ocp_autoidle(struct omap_hwmod *oh, u8 autoidle);
  
  int omap_hwmod_reset(struct omap_hwmod *oh);
  void omap_hwmod_ocp_barrier(struct omap_hwmod *oh);
@@@ -598,8 -587,6 +597,8 @@@ int omap_hwmod_for_each_by_class(const 
  int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state);
  u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh);
  
 +int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);
 +
  /*
   * Chip variant-specific hwmod init routines - XXX should be converted
   * to use initcalls once the initial boot ordering is straightened out