return 0;
 }
 
-static int sh_pfc_remove(struct platform_device *pdev)
-{
-#ifdef CONFIG_PINCTRL_SH_PFC_GPIO
-       sh_pfc_unregister_gpiochip(platform_get_drvdata(pdev));
-#endif
-
-       return 0;
-}
-
 static const struct platform_device_id sh_pfc_id_table[] = {
 #ifdef CONFIG_PINCTRL_PFC_SH7203
        { "pfc-sh7203", (kernel_ulong_t)&sh7203_pinmux_info },
 
 static struct platform_driver sh_pfc_driver = {
        .probe          = sh_pfc_probe,
-       .remove         = sh_pfc_remove,
        .id_table       = sh_pfc_id_table,
        .driver         = {
                .name   = DRV_NAME,
 
 };
 
 int sh_pfc_register_gpiochip(struct sh_pfc *pfc);
-int sh_pfc_unregister_gpiochip(struct sh_pfc *pfc);
 
 int sh_pfc_register_pinctrl(struct sh_pfc *pfc);
 
 
        if (ret < 0)
                return ERR_PTR(ret);
 
-       ret = gpiochip_add_data(&chip->gpio_chip, chip);
+       ret = devm_gpiochip_add_data(pfc->dev, &chip->gpio_chip, chip);
        if (unlikely(ret < 0))
                return ERR_PTR(ret);
 
        chip = sh_pfc_add_gpiochip(pfc, gpio_function_setup, NULL);
        if (IS_ERR(chip))
                return PTR_ERR(chip);
-
-       pfc->func = chip;
 #endif /* CONFIG_SUPERH */
 
        return 0;
 }
-
-int sh_pfc_unregister_gpiochip(struct sh_pfc *pfc)
-{
-       gpiochip_remove(&pfc->gpio->gpio_chip);
-#ifdef CONFIG_SUPERH
-       gpiochip_remove(&pfc->func->gpio_chip);
-#endif
-       return 0;
-}
 
        unsigned int nr_gpio_pins;
 
        struct sh_pfc_chip *gpio;
-#ifdef CONFIG_SUPERH
-       struct sh_pfc_chip *func;
-#endif
 };
 
 struct sh_pfc_soc_operations {