raw_spin_lock_init(&pc->irq_lock[i]);
        }
 
+       pc->pctl_desc = *pdata->pctl_desc;
+       pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc);
+       if (IS_ERR(pc->pctl_dev)) {
+               gpiochip_remove(&pc->gpio_chip);
+               return PTR_ERR(pc->pctl_dev);
+       }
+
+       pc->gpio_range = *pdata->gpio_range;
+       pc->gpio_range.base = pc->gpio_chip.base;
+       pc->gpio_range.gc = &pc->gpio_chip;
+       pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
+
        girq = &pc->gpio_chip.irq;
        girq->chip = &bcm2835_gpio_irq_chip;
        girq->parent_handler = bcm2835_gpio_irq_handler;
        girq->parents = devm_kcalloc(dev, BCM2835_NUM_IRQS,
                                     sizeof(*girq->parents),
                                     GFP_KERNEL);
-       if (!girq->parents)
+       if (!girq->parents) {
+               pinctrl_remove_gpio_range(pc->pctl_dev, &pc->gpio_range);
                return -ENOMEM;
+       }
 
        if (is_7211) {
                pc->wake_irq = devm_kcalloc(dev, BCM2835_NUM_IRQS,
        err = gpiochip_add_data(&pc->gpio_chip, pc);
        if (err) {
                dev_err(dev, "could not add GPIO chip\n");
+               pinctrl_remove_gpio_range(pc->pctl_dev, &pc->gpio_range);
                return err;
        }
 
-       pc->pctl_desc = *pdata->pctl_desc;
-       pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc);
-       if (IS_ERR(pc->pctl_dev)) {
-               gpiochip_remove(&pc->gpio_chip);
-               return PTR_ERR(pc->pctl_dev);
-       }
-
-       pc->gpio_range = *pdata->gpio_range;
-       pc->gpio_range.base = pc->gpio_chip.base;
-       pc->gpio_range.gc = &pc->gpio_chip;
-       pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
-
        return 0;
 }