|
@@ -944,3 +944,177 @@ static struct omap_hwmod_class am33xx_gpio_hwmod_class = {
|
|
|
.sysc = &am33xx_gpio_sysc,
|
|
|
.rev = 2,
|
|
|
};
|
|
|
+
|
|
|
+static struct omap_gpio_dev_attr gpio_dev_attr = {
|
|
|
+ .bank_width = 32,
|
|
|
+ .dbck_flag = true,
|
|
|
+};
|
|
|
+
|
|
|
+/* gpio0 */
|
|
|
+static struct omap_hwmod_opt_clk gpio0_opt_clks[] = {
|
|
|
+ { .role = "dbclk", .clk = "gpio0_dbclk" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_irq_info am33xx_gpio0_irqs[] = {
|
|
|
+ { .irq = 96 + OMAP_INTC_START, },
|
|
|
+ { .irq = -1 },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod am33xx_gpio0_hwmod = {
|
|
|
+ .name = "gpio1",
|
|
|
+ .class = &am33xx_gpio_hwmod_class,
|
|
|
+ .clkdm_name = "l4_wkup_clkdm",
|
|
|
+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
|
|
|
+ .mpu_irqs = am33xx_gpio0_irqs,
|
|
|
+ .main_clk = "dpll_core_m4_div2_ck",
|
|
|
+ .prcm = {
|
|
|
+ .omap4 = {
|
|
|
+ .clkctrl_offs = AM33XX_CM_WKUP_GPIO0_CLKCTRL_OFFSET,
|
|
|
+ .modulemode = MODULEMODE_SWCTRL,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ .opt_clks = gpio0_opt_clks,
|
|
|
+ .opt_clks_cnt = ARRAY_SIZE(gpio0_opt_clks),
|
|
|
+ .dev_attr = &gpio_dev_attr,
|
|
|
+};
|
|
|
+
|
|
|
+/* gpio1 */
|
|
|
+static struct omap_hwmod_irq_info am33xx_gpio1_irqs[] = {
|
|
|
+ { .irq = 98 + OMAP_INTC_START, },
|
|
|
+ { .irq = -1 },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
|
|
|
+ { .role = "dbclk", .clk = "gpio1_dbclk" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod am33xx_gpio1_hwmod = {
|
|
|
+ .name = "gpio2",
|
|
|
+ .class = &am33xx_gpio_hwmod_class,
|
|
|
+ .clkdm_name = "l4ls_clkdm",
|
|
|
+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
|
|
|
+ .mpu_irqs = am33xx_gpio1_irqs,
|
|
|
+ .main_clk = "l4ls_gclk",
|
|
|
+ .prcm = {
|
|
|
+ .omap4 = {
|
|
|
+ .clkctrl_offs = AM33XX_CM_PER_GPIO1_CLKCTRL_OFFSET,
|
|
|
+ .modulemode = MODULEMODE_SWCTRL,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ .opt_clks = gpio1_opt_clks,
|
|
|
+ .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
|
|
|
+ .dev_attr = &gpio_dev_attr,
|
|
|
+};
|
|
|
+
|
|
|
+/* gpio2 */
|
|
|
+static struct omap_hwmod_irq_info am33xx_gpio2_irqs[] = {
|
|
|
+ { .irq = 32 + OMAP_INTC_START, },
|
|
|
+ { .irq = -1 },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
|
|
|
+ { .role = "dbclk", .clk = "gpio2_dbclk" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod am33xx_gpio2_hwmod = {
|
|
|
+ .name = "gpio3",
|
|
|
+ .class = &am33xx_gpio_hwmod_class,
|
|
|
+ .clkdm_name = "l4ls_clkdm",
|
|
|
+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
|
|
|
+ .mpu_irqs = am33xx_gpio2_irqs,
|
|
|
+ .main_clk = "l4ls_gclk",
|
|
|
+ .prcm = {
|
|
|
+ .omap4 = {
|
|
|
+ .clkctrl_offs = AM33XX_CM_PER_GPIO2_CLKCTRL_OFFSET,
|
|
|
+ .modulemode = MODULEMODE_SWCTRL,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ .opt_clks = gpio2_opt_clks,
|
|
|
+ .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
|
|
|
+ .dev_attr = &gpio_dev_attr,
|
|
|
+};
|
|
|
+
|
|
|
+/* gpio3 */
|
|
|
+static struct omap_hwmod_irq_info am33xx_gpio3_irqs[] = {
|
|
|
+ { .irq = 62 + OMAP_INTC_START, },
|
|
|
+ { .irq = -1 },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
|
|
|
+ { .role = "dbclk", .clk = "gpio3_dbclk" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod am33xx_gpio3_hwmod = {
|
|
|
+ .name = "gpio4",
|
|
|
+ .class = &am33xx_gpio_hwmod_class,
|
|
|
+ .clkdm_name = "l4ls_clkdm",
|
|
|
+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
|
|
|
+ .mpu_irqs = am33xx_gpio3_irqs,
|
|
|
+ .main_clk = "l4ls_gclk",
|
|
|
+ .prcm = {
|
|
|
+ .omap4 = {
|
|
|
+ .clkctrl_offs = AM33XX_CM_PER_GPIO3_CLKCTRL_OFFSET,
|
|
|
+ .modulemode = MODULEMODE_SWCTRL,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ .opt_clks = gpio3_opt_clks,
|
|
|
+ .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
|
|
|
+ .dev_attr = &gpio_dev_attr,
|
|
|
+};
|
|
|
+
|
|
|
+/* gpmc */
|
|
|
+static struct omap_hwmod_class_sysconfig gpmc_sysc = {
|
|
|
+ .rev_offs = 0x0,
|
|
|
+ .sysc_offs = 0x10,
|
|
|
+ .syss_offs = 0x14,
|
|
|
+ .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
|
|
|
+ SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
|
|
|
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
|
|
|
+ .sysc_fields = &omap_hwmod_sysc_type1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_class am33xx_gpmc_hwmod_class = {
|
|
|
+ .name = "gpmc",
|
|
|
+ .sysc = &gpmc_sysc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_irq_info am33xx_gpmc_irqs[] = {
|
|
|
+ { .irq = 100 + OMAP_INTC_START, },
|
|
|
+ { .irq = -1 },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod am33xx_gpmc_hwmod = {
|
|
|
+ .name = "gpmc",
|
|
|
+ .class = &am33xx_gpmc_hwmod_class,
|
|
|
+ .clkdm_name = "l3s_clkdm",
|
|
|
+ .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
|
|
|
+ .mpu_irqs = am33xx_gpmc_irqs,
|
|
|
+ .main_clk = "l3s_gclk",
|
|
|
+ .prcm = {
|
|
|
+ .omap4 = {
|
|
|
+ .clkctrl_offs = AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET,
|
|
|
+ .modulemode = MODULEMODE_SWCTRL,
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/* 'i2c' class */
|
|
|
+static struct omap_hwmod_class_sysconfig am33xx_i2c_sysc = {
|
|
|
+ .sysc_offs = 0x0010,
|
|
|
+ .syss_offs = 0x0090,
|
|
|
+ .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
|
|
|
+ SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
|
|
|
+ SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
|
|
|
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
|
|
+ SIDLE_SMART_WKUP),
|
|
|
+ .sysc_fields = &omap_hwmod_sysc_type1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_hwmod_class i2c_class = {
|
|
|
+ .name = "i2c",
|
|
|
+ .sysc = &am33xx_i2c_sysc,
|
|
|
+ .rev = OMAP_I2C_IP_VERSION_2,
|
|
|
+ .reset = &omap_i2c_reset,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_i2c_dev_attr i2c_dev_attr = {
|