]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge branch 'for_2.6.36' of git://git.pwsan.com/linux-2.6 into omap-for-linus
authorTony Lindgren <tony@atomide.com>
Wed, 4 Aug 2010 05:46:24 +0000 (08:46 +0300)
committerTony Lindgren <tony@atomide.com>
Wed, 4 Aug 2010 05:46:24 +0000 (08:46 +0300)
1  2 
arch/arm/mach-omap1/Kconfig
arch/arm/mach-omap1/clock_data.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/io.c

index c911cdbf886f3cdd6779e4429f6031de2ca9785b,b9f0c4c46bbbad9ea6f656f46995a63ea15bde65..3b02d3b944af401cbe3f41918a45fec3a982b266
@@@ -1,7 -1,3 +1,7 @@@
 +if ARCH_OMAP1
 +
 +menu "TI OMAP1 specific features"
 +
  comment "OMAP Core Type"
        depends on ARCH_OMAP1
  
@@@ -228,6 -224,12 +228,12 @@@ config OMAP_ARM_120MH
        help
            Enable 120MHz clock for OMAP CPU. If unsure, say N.
  
+ config OMAP_ARM_96MHZ
+       bool "OMAP ARM 96 MHz CPU"
+       depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_OMAP850)
+       help
+           Enable 96MHz clock for OMAP CPU. If unsure, say N.
  config OMAP_ARM_60MHZ
        bool "OMAP ARM 60 MHz CPU"
        depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_OMAP850)
@@@ -241,6 -243,3 +247,6 @@@ config OMAP_ARM_30MH
        help
            Enable 30MHz clock for OMAP CPU. If unsure, say N.
  
 +endmenu
 +
 +endif
index 9240bc1026a3d24b622f1144d100200abd4ed9a0,ca4bd862033c48f57a6ab63ec7b213ac6bfd2123..af54114b8f08660c447a35fbc2d4fbbb2482df69
@@@ -8,6 -8,10 +8,10 @@@
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
+  *
+  * To do:
+  * - Clocks that are only available on some chips should be marked with the
+  *   chips that they are present on.
   */
  
  #include <linux/kernel.h>
  
  #include "clock.h"
  
- /*------------------------------------------------------------------------
+ /* Some ARM_IDLECT1 bit shifts - used in struct arm_idlect1_clk */
+ #define IDL_CLKOUT_ARM_SHIFT                  12
+ #define IDLTIM_ARM_SHIFT                      9
+ #define IDLAPI_ARM_SHIFT                      8
+ #define IDLIF_ARM_SHIFT                               6
+ #define IDLLB_ARM_SHIFT                               4       /* undocumented? */
+ #define OMAP1510_IDLLCD_ARM_SHIFT             3       /* undocumented? */
+ #define IDLPER_ARM_SHIFT                      2
+ #define IDLXORP_ARM_SHIFT                     1
+ #define IDLWDT_ARM_SHIFT                      0
+ /* Some MOD_CONF_CTRL_0 bit shifts - used in struct clk.enable_bit */
+ #define CONF_MOD_UART3_CLK_MODE_R             31
+ #define CONF_MOD_UART2_CLK_MODE_R             30
+ #define CONF_MOD_UART1_CLK_MODE_R             29
+ #define CONF_MOD_MMC_SD_CLK_REQ_R             23
+ #define CONF_MOD_MCBSP3_AUXON                 20
+ /* Some MOD_CONF_CTRL_1 bit shifts - used in struct clk.enable_bit */
+ #define CONF_MOD_SOSSI_CLK_EN_R                       16
+ /* Some OTG_SYSCON_2-specific bit fields */
+ #define OTG_SYSCON_2_UHOST_EN_SHIFT           8
+ /* Some SOFT_REQ_REG bit fields - used in struct clk.enable_bit */
+ #define SOFT_MMC2_DPLL_REQ_SHIFT      13
+ #define SOFT_MMC_DPLL_REQ_SHIFT               12
+ #define SOFT_UART3_DPLL_REQ_SHIFT     11
+ #define SOFT_UART2_DPLL_REQ_SHIFT     10
+ #define SOFT_UART1_DPLL_REQ_SHIFT     9
+ #define SOFT_USB_OTG_DPLL_REQ_SHIFT   8
+ #define SOFT_CAM_DPLL_REQ_SHIFT               7
+ #define SOFT_COM_MCKO_REQ_SHIFT               6
+ #define SOFT_PERIPH_REQ_SHIFT         5       /* sys_ck gate for UART2 ? */
+ #define USB_REQ_EN_SHIFT              4
+ #define SOFT_USB_REQ_SHIFT            3       /* sys_ck gate for USB host? */
+ #define SOFT_SDW_REQ_SHIFT            2       /* sys_ck gate for Bluetooth? */
+ #define SOFT_COM_REQ_SHIFT            1       /* sys_ck gate for com proc? */
+ #define SOFT_DPLL_REQ_SHIFT           0
+ /*
   * Omap1 clocks
-  *-------------------------------------------------------------------------*/
+  */
  
  static struct clk ck_ref = {
        .name           = "ck_ref",
@@@ -54,7 -98,7 +98,7 @@@ static struct arm_idlect1_clk ck_dpll1o
                .enable_bit     = EN_CKOUT_ARM,
                .recalc         = &followparent_recalc,
        },
-       .idlect_shift   = 12,
+       .idlect_shift   = IDL_CLKOUT_ARM_SHIFT,
  };
  
  static struct clk sossi_ck = {
        .parent         = &ck_dpll1out.clk,
        .flags          = CLOCK_NO_IDLE_PARENT | ENABLE_REG_32BIT,
        .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_1),
-       .enable_bit     = 16,
+       .enable_bit     = CONF_MOD_SOSSI_CLK_EN_R,
        .recalc         = &omap1_sossi_recalc,
        .set_rate       = &omap1_set_sossi_rate,
  };
@@@ -91,7 -135,7 +135,7 @@@ static struct arm_idlect1_clk armper_c
                .round_rate     = omap1_clk_round_rate_ckctl_arm,
                .set_rate       = omap1_clk_set_rate_ckctl_arm,
        },
-       .idlect_shift   = 2,
+       .idlect_shift   = IDLPER_ARM_SHIFT,
  };
  
  /*
@@@ -118,7 -162,7 +162,7 @@@ static struct arm_idlect1_clk armxor_c
                .enable_bit     = EN_XORPCK,
                .recalc         = &followparent_recalc,
        },
-       .idlect_shift   = 1,
+       .idlect_shift   = IDLXORP_ARM_SHIFT,
  };
  
  static struct arm_idlect1_clk armtim_ck = {
                .enable_bit     = EN_TIMCK,
                .recalc         = &followparent_recalc,
        },
-       .idlect_shift   = 9,
+       .idlect_shift   = IDLTIM_ARM_SHIFT,
  };
  
  static struct arm_idlect1_clk armwdt_ck = {
                .fixed_div      = 14,
                .recalc         = &omap_fixed_divisor_recalc,
        },
-       .idlect_shift   = 0,
+       .idlect_shift   = IDLWDT_ARM_SHIFT,
  };
  
  static struct clk arminth_ck16xx = {
@@@ -212,7 -256,6 +256,6 @@@ static struct clk dsptim_ck = 
        .recalc         = &followparent_recalc,
  };
  
- /* Tie ARM_IDLECT1:IDLIF_ARM to this logical clock structure */
  static struct arm_idlect1_clk tc_ck = {
        .clk = {
                .name           = "tc_ck",
                .round_rate     = omap1_clk_round_rate_ckctl_arm,
                .set_rate       = omap1_clk_set_rate_ckctl_arm,
        },
-       .idlect_shift   = 6,
+       .idlect_shift   = IDLIF_ARM_SHIFT,
  };
  
  static struct clk arminth_ck1510 = {
@@@ -304,7 -347,7 +347,7 @@@ static struct arm_idlect1_clk api_ck = 
                .enable_bit     = EN_APICK,
                .recalc         = &followparent_recalc,
        },
-       .idlect_shift   = 8,
+       .idlect_shift   = IDLAPI_ARM_SHIFT,
  };
  
  static struct arm_idlect1_clk lb_ck = {
                .enable_bit     = EN_LBCK,
                .recalc         = &followparent_recalc,
        },
-       .idlect_shift   = 4,
+       .idlect_shift   = IDLLB_ARM_SHIFT,
  };
  
  static struct clk rhea1_ck = {
@@@ -359,9 -402,15 +402,15 @@@ static struct arm_idlect1_clk lcd_ck_15
                .round_rate     = omap1_clk_round_rate_ckctl_arm,
                .set_rate       = omap1_clk_set_rate_ckctl_arm,
        },
-       .idlect_shift   = 3,
+       .idlect_shift   = OMAP1510_IDLLCD_ARM_SHIFT,
  };
  
+ /*
+  * XXX The enable_bit here is misused - it simply switches between 12MHz
+  * and 48MHz.  Reimplement with clksel.
+  *
+  * XXX does this need SYSC register handling?
+  */
  static struct clk uart1_1510 = {
        .name           = "uart1_ck",
        .ops            = &clkops_null,
        .rate           = 12000000,
        .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
        .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-       .enable_bit     = 29,   /* Chooses between 12MHz and 48MHz */
+       .enable_bit     = CONF_MOD_UART1_CLK_MODE_R,
        .set_rate       = &omap1_set_uart_rate,
        .recalc         = &omap1_uart_recalc,
  };
  
+ /*
+  * XXX The enable_bit here is misused - it simply switches between 12MHz
+  * and 48MHz.  Reimplement with clksel.
+  *
+  * XXX SYSC register handling does not belong in the clock framework
+  */
  static struct uart_clk uart1_16xx = {
        .clk    = {
                .name           = "uart1_ck",
-               .ops            = &clkops_uart,
+               .ops            = &clkops_uart_16xx,
                /* Direct from ULPD, no real parent */
                .parent         = &armper_ck.clk,
                .rate           = 48000000,
                .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
                .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-               .enable_bit     = 29,
+               .enable_bit     = CONF_MOD_UART1_CLK_MODE_R,
        },
        .sysc_addr      = 0xfffb0054,
  };
  
+ /*
+  * XXX The enable_bit here is misused - it simply switches between 12MHz
+  * and 48MHz.  Reimplement with clksel.
+  *
+  * XXX does this need SYSC register handling?
+  */
  static struct clk uart2_ck = {
        .name           = "uart2_ck",
        .ops            = &clkops_null,
        .rate           = 12000000,
        .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
        .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-       .enable_bit     = 30,   /* Chooses between 12MHz and 48MHz */
+       .enable_bit     = CONF_MOD_UART2_CLK_MODE_R,
        .set_rate       = &omap1_set_uart_rate,
        .recalc         = &omap1_uart_recalc,
  };
  
+ /*
+  * XXX The enable_bit here is misused - it simply switches between 12MHz
+  * and 48MHz.  Reimplement with clksel.
+  *
+  * XXX does this need SYSC register handling?
+  */
  static struct clk uart3_1510 = {
        .name           = "uart3_ck",
        .ops            = &clkops_null,
        .rate           = 12000000,
        .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
        .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-       .enable_bit     = 31,   /* Chooses between 12MHz and 48MHz */
+       .enable_bit     = CONF_MOD_UART3_CLK_MODE_R,
        .set_rate       = &omap1_set_uart_rate,
        .recalc         = &omap1_uart_recalc,
  };
  
+ /*
+  * XXX The enable_bit here is misused - it simply switches between 12MHz
+  * and 48MHz.  Reimplement with clksel.
+  *
+  * XXX SYSC register handling does not belong in the clock framework
+  */
  static struct uart_clk uart3_16xx = {
        .clk    = {
                .name           = "uart3_ck",
-               .ops            = &clkops_uart,
+               .ops            = &clkops_uart_16xx,
                /* Direct from ULPD, no real parent */
                .parent         = &armper_ck.clk,
                .rate           = 48000000,
                .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
                .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-               .enable_bit     = 31,
+               .enable_bit     = CONF_MOD_UART3_CLK_MODE_R,
        },
        .sysc_addr      = 0xfffb9854,
  };
@@@ -457,7 -530,7 +530,7 @@@ static struct clk usb_hhc_ck16xx = 
        /* OTG_SYSCON_2.OTG_PADEN == 0 (not 1510-compatible) */
        .flags          = ENABLE_REG_32BIT,
        .enable_reg     = OMAP1_IO_ADDRESS(OTG_BASE + 0x08), /* OTG_SYSCON_2 */
-       .enable_bit     = 8 /* UHOST_EN */,
+       .enable_bit     = OTG_SYSCON_2_UHOST_EN_SHIFT
  };
  
  static struct clk usb_dc_ck = {
        /* Direct from ULPD, no parent */
        .rate           = 48000000,
        .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
-       .enable_bit     = 4,
+       .enable_bit     = USB_REQ_EN_SHIFT,
  };
  
  static struct clk usb_dc_ck7xx = {
        /* Direct from ULPD, no parent */
        .rate           = 48000000,
        .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
-       .enable_bit     = 8,
+       .enable_bit     = SOFT_USB_OTG_DPLL_REQ_SHIFT,
  };
  
 +static struct clk uart1_7xx = {
 +      .name           = "uart1_ck",
 +      .ops            = &clkops_generic,
 +      /* Direct from ULPD, no parent */
 +      .rate           = 12000000,
 +      .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
 +      .enable_bit     = 9,
 +};
 +
 +static struct clk uart2_7xx = {
 +      .name           = "uart2_ck",
 +      .ops            = &clkops_generic,
 +      /* Direct from ULPD, no parent */
 +      .rate           = 12000000,
 +      .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
 +      .enable_bit     = 11,
 +};
 +
  static struct clk mclk_1510 = {
        .name           = "mclk",
        .ops            = &clkops_generic,
        /* Direct from ULPD, no parent. May be enabled by ext hardware. */
        .rate           = 12000000,
        .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
-       .enable_bit     = 6,
+       .enable_bit     = SOFT_COM_MCKO_REQ_SHIFT,
  };
  
  static struct clk mclk_16xx = {
@@@ -542,9 -597,13 +615,13 @@@ static struct clk mmc1_ck = 
        .rate           = 48000000,
        .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
        .enable_reg     = OMAP1_IO_ADDRESS(MOD_CONF_CTRL_0),
-       .enable_bit     = 23,
+       .enable_bit     = CONF_MOD_MMC_SD_CLK_REQ_R,
  };
  
+ /*
+  * XXX MOD_CONF_CTRL_0 bit 20 is defined in the 1510 TRM as
+  * CONF_MOD_MCBSP3_AUXON ??
+  */
  static struct clk mmc2_ck = {
        .name           = "mmc2_ck",
        .ops            = &clkops_generic,
@@@ -564,7 -623,7 +641,7 @@@ static struct clk mmc3_ck = 
        .rate           = 48000000,
        .flags          = ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
        .enable_reg     = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
-       .enable_bit     = 12,
+       .enable_bit     = SOFT_MMC_DPLL_REQ_SHIFT,
  };
  
  static struct clk virtual_ck_mpu = {
@@@ -638,9 -697,7 +715,9 @@@ static struct omap_clk omap_clks[] = 
        /* ULPD clocks */
        CLK(NULL,       "uart1_ck",     &uart1_1510,    CK_1510 | CK_310),
        CLK(NULL,       "uart1_ck",     &uart1_16xx.clk, CK_16XX),
 +      CLK(NULL,       "uart1_ck",     &uart1_7xx,     CK_7XX),
        CLK(NULL,       "uart2_ck",     &uart2_ck,      CK_16XX | CK_1510 | CK_310),
 +      CLK(NULL,       "uart2_ck",     &uart2_7xx,     CK_7XX),
        CLK(NULL,       "uart3_ck",     &uart3_1510,    CK_1510 | CK_310),
        CLK(NULL,       "uart3_ck",     &uart3_16xx.clk, CK_16XX),
        CLK(NULL,       "usb_clko",     &usb_clko,      CK_16XX | CK_1510 | CK_310),
index a5266fab6177e565f7870f0b7022abc786ecc215,d543896744869e4fa324f2ac84327fd43e84f478..63b2d8859c3c291af8e8af729f63d8302ad4915e
@@@ -3,7 -3,7 +3,7 @@@
  #
  
  # Common support
- obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o
+ obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o
  
  omap-2-3-common                               = irq.o sdrc.o
  hwmod-common                          = omap_hwmod.o \
@@@ -15,14 -15,13 +15,14 @@@ clock-common                               = clock.o clock_common_
  
  obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(hwmod-common)
  obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(hwmod-common)
- obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common)
+ obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common) $(hwmod-common)
  
  obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
  
  # SMP support ONLY available for OMAP4
  obj-$(CONFIG_SMP)                     += omap-smp.o omap-headsmp.o
  obj-$(CONFIG_LOCAL_TIMERS)            += timer-mpu.o
 +obj-$(CONFIG_HOTPLUG_CPU)             += omap-hotplug.o
  obj-$(CONFIG_ARCH_OMAP4)              += omap44xx-smc.o omap4-common.o
  
  AFLAGS_omap44xx-smc.o                 :=-Wa,-march=armv7-a
@@@ -37,8 -36,6 +37,8 @@@ AFLAGS_sram243x.o                     :=-Wa,-march=armv
  AFLAGS_sram34xx.o                     :=-Wa,-march=armv7-a
  
  # Pin multiplexing
 +obj-$(CONFIG_ARCH_OMAP2420)           += mux2420.o
 +obj-$(CONFIG_ARCH_OMAP2430)           += mux2430.o
  obj-$(CONFIG_ARCH_OMAP3)              += mux34xx.o
  
  # SMS/SDRC
@@@ -50,7 -47,6 +50,7 @@@ ifeq ($(CONFIG_PM),y
  obj-$(CONFIG_ARCH_OMAP2)              += pm24xx.o
  obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o
  obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o cpuidle34xx.o
 +obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o
  obj-$(CONFIG_PM_DEBUG)                        += pm-debug.o
  
  AFLAGS_sleep24xx.o                    :=-Wa,-march=armv6
@@@ -93,10 -89,7 +93,10 @@@ obj-$(CONFIG_OMAP3_EMU)                     += emu.
  obj-$(CONFIG_OMAP_MBOX_FWK)           += mailbox_mach.o
  mailbox_mach-objs                     := mailbox.o
  
 -obj-$(CONFIG_OMAP_IOMMU)              := iommu2.o omap-iommu.o
 +obj-$(CONFIG_OMAP_IOMMU)              += iommu2.o
 +
 +iommu-$(CONFIG_OMAP_IOMMU)            := omap-iommu.o
 +obj-y                                 += $(iommu-m) $(iommu-y)
  
  i2c-omap-$(CONFIG_I2C_OMAP)           := i2c.o
  obj-y                                 += $(i2c-omap-m) $(i2c-omap-y)
@@@ -112,7 -105,6 +112,7 @@@ obj-$(CONFIG_MACH_OMAP3_BEAGLE)            += boa
  obj-$(CONFIG_MACH_DEVKIT8000)         += board-devkit8000.o \
                                             hsmmc.o
  obj-$(CONFIG_MACH_OMAP_LDP)           += board-ldp.o \
 +                                         board-flash.o \
                                           hsmmc.o
  obj-$(CONFIG_MACH_OVERO)              += board-overo.o \
                                           hsmmc.o
@@@ -122,7 -114,7 +122,7 @@@ obj-$(CONFIG_MACH_OMAP3_PANDORA)   += boa
                                           hsmmc.o
  obj-$(CONFIG_MACH_OMAP_3430SDP)               += board-3430sdp.o \
                                           hsmmc.o \
 -                                         board-sdp-flash.o
 +                                         board-flash.o
  obj-$(CONFIG_MACH_NOKIA_N8X0)         += board-n8x0.o
  obj-$(CONFIG_MACH_NOKIA_RX51)         += board-rx51.o \
                                           board-rx51-sdram.o \
                                           hsmmc.o
  obj-$(CONFIG_MACH_OMAP_ZOOM2)         += board-zoom2.o \
                                           board-zoom-peripherals.o \
 +                                         board-flash.o \
                                           hsmmc.o \
                                           board-zoom-debugboard.o
  obj-$(CONFIG_MACH_OMAP_ZOOM3)         += board-zoom3.o \
                                           board-zoom-peripherals.o \
 +                                         board-flash.o \
                                           hsmmc.o \
                                           board-zoom-debugboard.o
  obj-$(CONFIG_MACH_OMAP_3630SDP)               += board-3630sdp.o \
                                           board-zoom-peripherals.o \
 +                                         board-flash.o \
                                           hsmmc.o
  obj-$(CONFIG_MACH_CM_T35)             += board-cm-t35.o \
                                           hsmmc.o
@@@ -151,16 -140,12 +151,16 @@@ obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK)      += b
                                           hsmmc.o
  obj-$(CONFIG_MACH_OMAP_4430SDP)               += board-4430sdp.o \
                                           hsmmc.o
 +obj-$(CONFIG_MACH_OMAP4_PANDA)                += board-omap4panda.o \
 +                                         hsmmc.o
  
  obj-$(CONFIG_MACH_OMAP3517EVM)                += board-am3517evm.o
  
  obj-$(CONFIG_MACH_SBC3530)            += board-omap3stalker.o \
                                           hsmmc.o
  # Platform specific device init code
 +usbfs-$(CONFIG_ARCH_OMAP_OTG)         := usb-fs.o
 +obj-y                                 += $(usbfs-m) $(usbfs-y)
  obj-y                                 += usb-musb.o
  obj-$(CONFIG_MACH_OMAP2_TUSB6010)     += usb-tusb6010.o
  obj-y                                 += usb-ehci.o
diff --combined arch/arm/mach-omap2/io.c
index b12d715dee5b0806af16ad88cb782d00f76d4eab,d1906c73aec1264a7089e40b3cf050c8f432dabc..210de9d292fbc98182535921d7e1b6dfd41b2cd8
@@@ -28,6 -28,7 +28,6 @@@
  
  #include <asm/mach/map.h>
  
 -#include <plat/mux.h>
  #include <plat/sram.h>
  #include <plat/sdrc.h>
  #include <plat/gpmc.h>
@@@ -44,6 -45,7 +44,7 @@@
  
  #include <plat/clockdomain.h>
  #include "clockdomains.h"
  #include <plat/omap_hwmod.h>
  
  /*
@@@ -315,6 -317,8 +316,8 @@@ static int __init _omap2_init_reprogram
  void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
                                 struct omap_sdrc_params *sdrc_cs1)
  {
+       u8 skip_setup_idle = 0;
        pwrdm_init(powerdomains_omap);
        clkdm_init(clockdomains_omap, clkdm_autodeps);
        if (cpu_is_omap242x())
                omap2430_hwmod_init();
        else if (cpu_is_omap34xx())
                omap3xxx_hwmod_init();
 -      omap2_mux_init();
        /* The OPP tables have to be registered before a clk init */
        omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps);
  
                pr_err("Could not init clock framework - unknown CPU\n");
  
        omap_serial_early_init();
+ #ifndef CONFIG_PM_RUNTIME
+       skip_setup_idle = 1;
+ #endif
        if (cpu_is_omap24xx() || cpu_is_omap34xx())   /* FIXME: OMAP4 */
-               omap_hwmod_late_init();
-       omap_pm_if_init();
+               omap_hwmod_late_init(skip_setup_idle);
        if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
                omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
                _omap2_init_reprogram_sdrc();