info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
        if (!info) {
                dev_err(&pdev->dev, "Failed to allocate memory\n");
-               ret = -ENOMEM;
-               goto err;
+               return -ENOMEM;
        }
 
        info->micvdd = devm_regulator_get(arizona->dev, "MICVDD");
        if (IS_ERR(info->micvdd)) {
                ret = PTR_ERR(info->micvdd);
                dev_err(arizona->dev, "Failed to get MICVDD: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        mutex_init(&info->lock);
        info->edev.dev.parent = arizona->dev;
        info->edev.supported_cable = arizona_cable;
 
-       ret = extcon_dev_register(&info->edev);
+       ret = devm_extcon_dev_register(&pdev->dev, &info->edev);
        if (ret < 0) {
                dev_err(arizona->dev, "extcon_dev_register() failed: %d\n",
                        ret);
-               goto err;
+               return ret;
        }
 
        info->input = devm_input_allocate_device(&pdev->dev);
 err_input:
 err_register:
        pm_runtime_disable(&pdev->dev);
-       extcon_dev_unregister(&info->edev);
-err:
        return ret;
 }
 
        regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_ANALOGUE,
                           ARIZONA_JD1_ENA, 0);
        arizona_clk32k_disable(arizona);
-       extcon_dev_unregister(&info->edev);
 
        return 0;
 }