* OMAP4 CM instance functions
  *
  * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2011 Texas Instruments, Inc.
  * Paul Walmsley
  *
  * This program is free software; you can redistribute it and/or modify
 #include "prm44xx.h"
 #include "prcm_mpu44xx.h"
 
+/*
+ * CLKCTRL_IDLEST_*: possible values for the CM_*_CLKCTRL.IDLEST bitfield:
+ *
+ *   0x0 func:     Module is fully functional, including OCP
+ *   0x1 trans:    Module is performing transition: wakeup, or sleep, or sleep
+ *                 abortion
+ *   0x2 idle:     Module is in Idle mode (only OCP part). It is functional if
+ *                 using separate functional clock
+ *   0x3 disabled: Module is disabled and cannot be accessed
+ *
+ */
+#define CLKCTRL_IDLEST_FUNCTIONAL              0x0
+#define CLKCTRL_IDLEST_INTRANSITION            0x1
+#define CLKCTRL_IDLEST_INTERFACE_IDLE          0x2
+#define CLKCTRL_IDLEST_DISABLED                        0x3
+
 static u32 _cm_bases[OMAP4_MAX_PRCM_PARTITIONS] = {
        [OMAP4430_INVALID_PRCM_PARTITION]       = 0,
        [OMAP4430_PRM_PARTITION]                = OMAP4430_PRM_BASE,
        [OMAP4430_PRCM_MPU_PARTITION]           = OMAP4430_PRCM_MPU_BASE,
 };
 
+/* Private functions */
+
+/**
+ * _clkctrl_idlest - read a CM_*_CLKCTRL register; mask & shift IDLEST bitfield
+ * @part: PRCM partition ID that the CM_CLKCTRL register exists in
+ * @inst: CM instance register offset (*_INST macro)
+ * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
+ * @clkctrl_offs: Module clock control register offset (*_CLKCTRL macro)
+ *
+ * Return the IDLEST bitfield of a CM_*_CLKCTRL register, shifted down to
+ * bit 0.
+ */
+static u32 _clkctrl_idlest(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_offs)
+{
+       u32 v = omap4_cminst_read_inst_reg(part, inst, clkctrl_offs);
+       v &= OMAP4430_IDLEST_MASK;
+       v >>= OMAP4430_IDLEST_SHIFT;
+       return v;
+}
+
+/**
+ * _is_module_ready - can module registers be accessed without causing an abort?
+ * @part: PRCM partition ID that the CM_CLKCTRL register exists in
+ * @inst: CM instance register offset (*_INST macro)
+ * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
+ * @clkctrl_offs: Module clock control register offset (*_CLKCTRL macro)
+ *
+ * Returns true if the module's CM_*_CLKCTRL.IDLEST bitfield is either
+ * *FUNCTIONAL or *INTERFACE_IDLE; false otherwise.
+ */
+static bool _is_module_ready(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_offs)
+{
+       u32 v;
+
+       v = _clkctrl_idlest(part, inst, cdoffs, clkctrl_offs);
+
+       return (v == CLKCTRL_IDLEST_FUNCTIONAL ||
+               v == CLKCTRL_IDLEST_INTERFACE_IDLE) ? true : false;
+}
+
+/* Public functions */
+
 /* Read a register in a CM instance */
 u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx)
 {
  */
 
 /**
- * omap4_cm_wait_module_ready - wait for a module to be in 'func' state
- * @clkctrl_reg: CLKCTRL module address
+ * omap4_cminst_wait_module_ready - wait for a module to be in 'func' state
+ * @part: PRCM partition ID that the CM_CLKCTRL register exists in
+ * @inst: CM instance register offset (*_INST macro)
+ * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
+ * @clkctrl_offs: Module clock control register offset (*_CLKCTRL macro)
  *
  * Wait for the module IDLEST to be functional. If the idle state is in any
  * the non functional state (trans, idle or disabled), module and thus the
  * sysconfig cannot be accessed and will probably lead to an "imprecise
  * external abort"
- *
- * Module idle state:
- *   0x0 func:     Module is fully functional, including OCP
- *   0x1 trans:    Module is performing transition: wakeup, or sleep, or sleep
- *                 abortion
- *   0x2 idle:     Module is in Idle mode (only OCP part). It is functional if
- *                 using separate functional clock
- *   0x3 disabled: Module is disabled and cannot be accessed
- *
  */
-int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg)
+int omap4_cminst_wait_module_ready(u8 part, u16 inst, s16 cdoffs,
+                                  u16 clkctrl_offs)
 {
        int i = 0;
 
-       if (!clkctrl_reg)
+       if (!clkctrl_offs)
                return 0;
 
-       omap_test_timeout((
-               ((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) == 0) ||
-                (((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) >>
-                 OMAP4430_IDLEST_SHIFT) == 0x2)),
-               MAX_MODULE_READY_TIME, i);
+       omap_test_timeout(_is_module_ready(part, inst, cdoffs, clkctrl_offs),
+                         MAX_MODULE_READY_TIME, i);
 
        return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
 }
 
        .name           = "dmm",
        .class          = &omap44xx_dmm_hwmod_class,
        .clkdm_name     = "l3_emif_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_dmm_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_dmm_slaves),
        .mpu_irqs       = omap44xx_dmm_irqs,
        .name           = "emif_fw",
        .class          = &omap44xx_emif_fw_hwmod_class,
        .clkdm_name     = "l3_emif_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_emif_fw_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_emif_fw_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l3_instr",
        .class          = &omap44xx_l3_hwmod_class,
        .clkdm_name     = "l3_instr_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l3_instr_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l3_instr_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .class          = &omap44xx_l3_hwmod_class,
        .clkdm_name     = "l3_1_clkdm",
        .mpu_irqs       = omap44xx_l3_main_1_irqs,
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l3_main_1_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l3_main_2",
        .class          = &omap44xx_l3_hwmod_class,
        .clkdm_name     = "l3_2_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l3_main_2_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l3_main_3",
        .class          = &omap44xx_l3_hwmod_class,
        .clkdm_name     = "l3_instr_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l3_main_3_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l4_abe",
        .class          = &omap44xx_l4_hwmod_class,
        .clkdm_name     = "abe_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l4_abe_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l4_abe_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l4_cfg",
        .class          = &omap44xx_l4_hwmod_class,
        .clkdm_name     = "l4_cfg_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l4_cfg_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l4_per",
        .class          = &omap44xx_l4_hwmod_class,
        .clkdm_name     = "l4_per_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l4_per_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l4_per_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .name           = "l4_wkup",
        .class          = &omap44xx_l4_hwmod_class,
        .clkdm_name     = "l4_wkup_clkdm",
+       .prcm = {
+               .omap4 = {
+                       .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
+               },
+       },
        .slaves         = omap44xx_l4_wkup_slaves,
        .slaves_cnt     = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
        .main_clk       = "aess_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_aess_slaves,
        .clkdm_name     = "l4_wkup_clkdm",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = bandgap_opt_clks,
        .main_clk       = "sys_32k_ck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_SYNCTIMER_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_counter_32k_slaves,
        .main_clk       = "l3_div_ck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &dma_dev_attr,
        .main_clk       = "dmic_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_dmic_slaves,
        .main_clk       = "dsp_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
                        .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
                },
        },
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_dispc_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_dsi1_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_dsi2_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_hdmi_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = dss_rfbi_opt_clks,
        .main_clk       = "dss_dss_clk",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_dss_venc_slaves,
        .main_clk       = "gpio1_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio1_opt_clks,
        .main_clk       = "gpio2_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio2_opt_clks,
        .main_clk       = "gpio3_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio3_opt_clks,
        .main_clk       = "gpio4_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio4_opt_clks,
        .main_clk       = "gpio5_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio5_opt_clks,
        .main_clk       = "gpio6_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = gpio6_opt_clks,
        .main_clk       = "hsi_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_hsi_slaves,
        .main_clk       = "i2c1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_i2c1_slaves,
        .main_clk       = "i2c2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_i2c2_slaves,
        .main_clk       = "i2c3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_i2c3_slaves,
        .main_clk       = "i2c4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_i2c4_slaves,
        .main_clk       = "ipu_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
                        .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
                },
        },
        .main_clk       = "iss_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = iss_opt_clks,
        .main_clk       = "iva_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
                        .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
                },
        },
        .main_clk       = "kbd_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_kbd_slaves,
        .mpu_irqs       = omap44xx_mailbox_irqs,
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mailbox_slaves,
        .main_clk       = "mcbsp1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mcbsp1_slaves,
        .main_clk       = "mcbsp2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mcbsp2_slaves,
        .main_clk       = "mcbsp3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mcbsp3_slaves,
        .main_clk       = "mcbsp4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mcbsp4_slaves,
        .main_clk       = "mcpdm_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mcpdm_slaves,
        .main_clk       = "mcspi1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &mcspi1_dev_attr,
        .main_clk       = "mcspi2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &mcspi2_dev_attr,
        .main_clk       = "mcspi3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &mcspi3_dev_attr,
        .main_clk       = "mcspi4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &mcspi4_dev_attr,
        .main_clk       = "mmc1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
                },
        },
        .dev_attr       = &mmc1_dev_attr,
        .main_clk       = "mmc2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mmc2_slaves,
        .main_clk       = "mmc3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mmc3_slaves,
        .main_clk       = "mmc4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mmc4_slaves,
        .main_clk       = "mmc5_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD5_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_mmc5_slaves,
        .main_clk       = "dpll_mpu_m2_ck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
                },
        },
        .masters        = omap44xx_mpu_masters,
        .vdd_name       = "core",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_smartreflex_core_slaves,
        .vdd_name       = "iva",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_smartreflex_iva_slaves,
        .vdd_name       = "mpu",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_smartreflex_mpu_slaves,
        .clkdm_name     = "l4_cfg_clkdm",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_spinlock_slaves,
        .main_clk       = "timer1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer1_slaves,
        .main_clk       = "timer2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer2_slaves,
        .main_clk       = "timer3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer3_slaves,
        .main_clk       = "timer4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer4_slaves,
        .main_clk       = "timer5_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer5_slaves,
        .main_clk       = "timer6_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer6_slaves,
        .main_clk       = "timer7_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer7_slaves,
        .main_clk       = "timer8_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer8_slaves,
        .main_clk       = "timer9_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer9_slaves,
        .main_clk       = "timer10_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer10_slaves,
        .main_clk       = "timer11_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_timer11_slaves,
        .main_clk       = "uart1_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_uart1_slaves,
        .main_clk       = "uart2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_uart2_slaves,
        .main_clk       = "uart3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_uart3_slaves,
        .main_clk       = "uart4_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_uart4_slaves,
        .main_clk       = "usb_otg_hs_ick",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
                },
        },
        .opt_clks       = usb_otg_hs_opt_clks,
        .main_clk       = "wd_timer2_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_wd_timer2_slaves,
        .main_clk       = "wd_timer3_fck",
        .prcm = {
                .omap4 = {
-                       .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
+                       .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
                },
        },
        .slaves         = omap44xx_wd_timer3_slaves,