pdata->regs->dataout = OMAP4_GPIO_DATAOUT;
                pdata->regs->set_dataout = OMAP4_GPIO_SETDATAOUT;
                pdata->regs->clr_dataout = OMAP4_GPIO_CLEARDATAOUT;
+               pdata->regs->irqstatus_raw0 = OMAP4_GPIO_IRQSTATUSRAW0;
+               pdata->regs->irqstatus_raw1 = OMAP4_GPIO_IRQSTATUSRAW1;
                pdata->regs->irqstatus = OMAP4_GPIO_IRQSTATUS0;
                pdata->regs->irqstatus2 = OMAP4_GPIO_IRQSTATUS1;
                pdata->regs->irqenable = OMAP4_GPIO_IRQSTATUSSET0;
 
                old0 = __raw_readl(bank->base + bank->regs->leveldetect0);
                old1 = __raw_readl(bank->base + bank->regs->leveldetect1);
 
-               if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
+               if (!bank->regs->irqstatus_raw0) {
                        __raw_writel(old0 | gen, bank->base +
                                                bank->regs->leveldetect0);
                        __raw_writel(old1 | gen, bank->base +
                                                bank->regs->leveldetect1);
                }
 
-               if (cpu_is_omap44xx()) {
+               if (bank->regs->irqstatus_raw0) {
                        __raw_writel(old0 | l, bank->base +
                                                bank->regs->leveldetect0);
                        __raw_writel(old1 | l, bank->base +