const char **group_names;
        const struct of_device_id *match;
        int i, ret;
-       struct resource *res;
        struct atmel_pioctrl *atmel_pioctrl;
        const struct atmel_pioctrl_data *atmel_pioctrl_data;
 
 
        /* There is one controller but each bank has its own irq line. */
        for (i = 0; i < atmel_pioctrl->nbanks; i++) {
-               res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
-               if (!res) {
-                       dev_err(dev, "missing irq resource for group %c\n",
+               ret = platform_get_irq(pdev, i);
+               if (ret < 0) {
+                       dev_dbg(dev, "missing irq resource for group %c\n",
                                'A' + i);
-                       return -EINVAL;
+                       return ret;
                }
-               atmel_pioctrl->irqs[i] = res->start;
-               irq_set_chained_handler_and_data(res->start,
-                       atmel_gpio_irq_handler, atmel_pioctrl);
-               dev_dbg(dev, "bank %i: irq=%pr\n", i, res);
+               atmel_pioctrl->irqs[i] = ret;
+               irq_set_chained_handler_and_data(ret, atmel_gpio_irq_handler, atmel_pioctrl);
+               dev_dbg(dev, "bank %i: irq=%d\n", i, ret);
        }
 
        atmel_pioctrl->irq_domain = irq_domain_add_linear(dev->of_node,