diff options
Diffstat (limited to 'arch/arm/mach-omap2/gpio.c')
-rw-r--r-- | arch/arm/mach-omap2/gpio.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c index 9529842ae05..2765cdc3152 100644 --- a/arch/arm/mach-omap2/gpio.c +++ b/arch/arm/mach-omap2/gpio.c | |||
@@ -61,13 +61,45 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | |||
61 | pdata->dbck_flag = dev_attr->dbck_flag; | 61 | pdata->dbck_flag = dev_attr->dbck_flag; |
62 | pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1); | 62 | pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1); |
63 | 63 | ||
64 | pdata->regs = kzalloc(sizeof(struct omap_gpio_reg_offs), GFP_KERNEL); | ||
65 | if (!pdata) { | ||
66 | pr_err("gpio%d: Memory allocation failed\n", id); | ||
67 | return -ENOMEM; | ||
68 | } | ||
69 | |||
64 | switch (oh->class->rev) { | 70 | switch (oh->class->rev) { |
65 | case 0: | 71 | case 0: |
66 | case 1: | 72 | case 1: |
67 | pdata->bank_type = METHOD_GPIO_24XX; | 73 | pdata->bank_type = METHOD_GPIO_24XX; |
74 | pdata->regs->revision = OMAP24XX_GPIO_REVISION; | ||
75 | pdata->regs->direction = OMAP24XX_GPIO_OE; | ||
76 | pdata->regs->datain = OMAP24XX_GPIO_DATAIN; | ||
77 | pdata->regs->dataout = OMAP24XX_GPIO_DATAOUT; | ||
78 | pdata->regs->set_dataout = OMAP24XX_GPIO_SETDATAOUT; | ||
79 | pdata->regs->clr_dataout = OMAP24XX_GPIO_CLEARDATAOUT; | ||
80 | pdata->regs->irqstatus = OMAP24XX_GPIO_IRQSTATUS1; | ||
81 | pdata->regs->irqstatus2 = OMAP24XX_GPIO_IRQSTATUS2; | ||
82 | pdata->regs->irqenable = OMAP24XX_GPIO_IRQENABLE1; | ||
83 | pdata->regs->set_irqenable = OMAP24XX_GPIO_SETIRQENABLE1; | ||
84 | pdata->regs->clr_irqenable = OMAP24XX_GPIO_CLEARIRQENABLE1; | ||
85 | pdata->regs->debounce = OMAP24XX_GPIO_DEBOUNCE_VAL; | ||
86 | pdata->regs->debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN; | ||
68 | break; | 87 | break; |
69 | case 2: | 88 | case 2: |
70 | pdata->bank_type = METHOD_GPIO_44XX; | 89 | pdata->bank_type = METHOD_GPIO_44XX; |
90 | pdata->regs->revision = OMAP4_GPIO_REVISION; | ||
91 | pdata->regs->direction = OMAP4_GPIO_OE; | ||
92 | pdata->regs->datain = OMAP4_GPIO_DATAIN; | ||
93 | pdata->regs->dataout = OMAP4_GPIO_DATAOUT; | ||
94 | pdata->regs->set_dataout = OMAP4_GPIO_SETDATAOUT; | ||
95 | pdata->regs->clr_dataout = OMAP4_GPIO_CLEARDATAOUT; | ||
96 | pdata->regs->irqstatus = OMAP4_GPIO_IRQSTATUS0; | ||
97 | pdata->regs->irqstatus2 = OMAP4_GPIO_IRQSTATUS1; | ||
98 | pdata->regs->irqenable = OMAP4_GPIO_IRQSTATUSSET0; | ||
99 | pdata->regs->set_irqenable = OMAP4_GPIO_IRQSTATUSSET0; | ||
100 | pdata->regs->clr_irqenable = OMAP4_GPIO_IRQSTATUSCLR0; | ||
101 | pdata->regs->debounce = OMAP4_GPIO_DEBOUNCINGTIME; | ||
102 | pdata->regs->debounce_en = OMAP4_GPIO_DEBOUNCENABLE; | ||
71 | break; | 103 | break; |
72 | default: | 104 | default: |
73 | WARN(1, "Invalid gpio bank_type\n"); | 105 | WARN(1, "Invalid gpio bank_type\n"); |
@@ -87,6 +119,8 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) | |||
87 | return PTR_ERR(od); | 119 | return PTR_ERR(od); |
88 | } | 120 | } |
89 | 121 | ||
122 | omap_device_disable_idle_on_suspend(od); | ||
123 | |||
90 | gpio_bank_count++; | 124 | gpio_bank_count++; |
91 | return 0; | 125 | return 0; |
92 | } | 126 | } |