pin_bank->grange.id = bank;
                pin_bank->grange.pin_base = drvdata->pin_base
                                                + pin_bank->pin_base;
-               pin_bank->grange.base = pin_bank->gpio_chip.base;
+               pin_bank->grange.base = pin_bank->grange.pin_base;
                pin_bank->grange.npins = pin_bank->gpio_chip.ngpio;
                pin_bank->grange.gc = &pin_bank->gpio_chip;
                pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange);
        return 0;
 }
 
+/* unregister the pinctrl interface with the pinctrl subsystem */
+static int samsung_pinctrl_unregister(struct platform_device *pdev,
+                                     struct samsung_pinctrl_drv_data *drvdata)
+{
+       struct samsung_pin_bank *bank = drvdata->pin_banks;
+       int i;
+
+       for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
+               pinctrl_remove_gpio_range(drvdata->pctl_dev, &bank->grange);
+
+       return 0;
+}
+
 static const struct gpio_chip samsung_gpiolib_chip = {
        .request = gpiochip_generic_request,
        .free = gpiochip_generic_free,
                bank->gpio_chip = samsung_gpiolib_chip;
 
                gc = &bank->gpio_chip;
-               gc->base = drvdata->pin_base + bank->pin_base;
+               gc->base = bank->grange.base;
                gc->ngpio = bank->nr_pins;
                gc->parent = &pdev->dev;
                gc->of_node = bank->of_node;
        return ret;
 }
 
-/* unregister the gpiolib interface with the gpiolib subsystem */
-static int samsung_gpiolib_unregister(struct platform_device *pdev,
-                                     struct samsung_pinctrl_drv_data *drvdata)
-{
-       struct samsung_pin_bank *bank = drvdata->pin_banks;
-       int i;
-
-       for (i = 0; i < drvdata->nr_banks; ++i, ++bank)
-               gpiochip_remove(&bank->gpio_chip);
-
-       return 0;
-}
-
 /* retrieve the soc specific data */
 static const struct samsung_pin_ctrl *
 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
                        return PTR_ERR(drvdata->retention_ctrl);
        }
 
-       ret = samsung_gpiolib_register(pdev, drvdata);
+       ret = samsung_pinctrl_register(pdev, drvdata);
        if (ret)
                return ret;
 
-       ret = samsung_pinctrl_register(pdev, drvdata);
+       ret = samsung_gpiolib_register(pdev, drvdata);
        if (ret) {
-               samsung_gpiolib_unregister(pdev, drvdata);
+               samsung_pinctrl_unregister(pdev, drvdata);
                return ret;
        }