.remove                 = wm5102_component_remove,
        .set_sysclk             = arizona_set_sysclk,
        .set_pll                = wm5102_set_fll,
+       .set_jack               = arizona_jack_set_jack,
        .name                   = DRV_NAME,
        .compress_ops           = &wm5102_compress_ops,
        .controls               = wm5102_snd_controls,
        if (ret != 0)
                return ret;
 
+       /* This may return -EPROBE_DEFER, so do this early on */
+       ret = arizona_jack_codec_dev_probe(&wm5102->core, &pdev->dev);
+       if (ret)
+               return ret;
+
        for (i = 0; i < ARRAY_SIZE(wm5102->fll); i++)
                wm5102->fll[i].vco_mult = 1;
 
                                  wm5102);
        if (ret != 0) {
                dev_err(&pdev->dev, "Failed to request DSP IRQ: %d\n", ret);
-               return ret;
+               goto err_jack_codec_dev;
        }
 
        ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
 err_dsp_irq:
        arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
        arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
+err_jack_codec_dev:
+       arizona_jack_codec_dev_remove(&wm5102->core);
 
        return ret;
 }
        arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
        arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
 
+       arizona_jack_codec_dev_remove(&wm5102->core);
+
        return 0;
 }
 
 
        .remove                 = wm5110_component_remove,
        .set_sysclk             = arizona_set_sysclk,
        .set_pll                = wm5110_set_fll,
+       .set_jack               = arizona_jack_set_jack,
        .name                   = DRV_NAME,
        .compress_ops           = &wm5110_compress_ops,
        .controls               = wm5110_snd_controls,
                        return ret;
        }
 
+       /* This may return -EPROBE_DEFER, so do this early on */
+       ret = arizona_jack_codec_dev_probe(&wm5110->core, &pdev->dev);
+       if (ret)
+               return ret;
+
        for (i = 0; i < ARRAY_SIZE(wm5110->fll); i++)
                wm5110->fll[i].vco_mult = 3;
 
                                  wm5110);
        if (ret != 0) {
                dev_err(&pdev->dev, "Failed to request DSP IRQ: %d\n", ret);
-               return ret;
+               goto err_jack_codec_dev;
        }
 
        ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
 err_dsp_irq:
        arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
        arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
+err_jack_codec_dev:
+       arizona_jack_codec_dev_remove(&wm5110->core);
 
        return ret;
 }
        arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
        arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
 
+       arizona_jack_codec_dev_remove(&wm5110->core);
+
        return 0;
 }
 
 
        .remove                 = wm8997_component_remove,
        .set_sysclk             = arizona_set_sysclk,
        .set_pll                = wm8997_set_fll,
+       .set_jack               = arizona_jack_set_jack,
        .controls               = wm8997_snd_controls,
        .num_controls           = ARRAY_SIZE(wm8997_snd_controls),
        .dapm_widgets           = wm8997_dapm_widgets,
 
        arizona_init_dvfs(&wm8997->core);
 
+       /* This may return -EPROBE_DEFER, so do this early on */
+       ret = arizona_jack_codec_dev_probe(&wm8997->core, &pdev->dev);
+       if (ret)
+               return ret;
+
        for (i = 0; i < ARRAY_SIZE(wm8997->fll); i++)
                wm8997->fll[i].vco_mult = 1;
 
 
        ret = arizona_init_vol_limit(arizona);
        if (ret < 0)
-               return ret;
+               goto err_jack_codec_dev;
        ret = arizona_init_spk_irqs(arizona);
        if (ret < 0)
-               return ret;
+               goto err_jack_codec_dev;
 
        ret = devm_snd_soc_register_component(&pdev->dev,
                                              &soc_component_dev_wm8997,
 
 err_spk_irqs:
        arizona_free_spk_irqs(arizona);
+err_jack_codec_dev:
+       arizona_jack_codec_dev_remove(&wm8997->core);
 
        return ret;
 }
 
        arizona_free_spk_irqs(arizona);
 
+       arizona_jack_codec_dev_remove(&wm8997->core);
+
        return 0;
 }
 
 
        .remove                 = wm8998_component_remove,
        .set_sysclk             = arizona_set_sysclk,
        .set_pll                = wm8998_set_fll,
+       .set_jack               = arizona_jack_set_jack,
        .controls               = wm8998_snd_controls,
        .num_controls           = ARRAY_SIZE(wm8998_snd_controls),
        .dapm_widgets           = wm8998_dapm_widgets,
        wm8998->core.arizona = arizona;
        wm8998->core.num_inputs = 3;    /* IN1L, IN1R, IN2 */
 
+       /* This may return -EPROBE_DEFER, so do this early on */
+       ret = arizona_jack_codec_dev_probe(&wm8998->core, &pdev->dev);
+       if (ret)
+               return ret;
+
        for (i = 0; i < ARRAY_SIZE(wm8998->fll); i++)
                wm8998->fll[i].vco_mult = 1;
 
        arizona_free_spk_irqs(arizona);
 err_pm_disable:
        pm_runtime_disable(&pdev->dev);
+       arizona_jack_codec_dev_remove(&wm8998->core);
 
        return ret;
 }
 
        arizona_free_spk_irqs(arizona);
 
+       arizona_jack_codec_dev_remove(&wm8998->core);
+
        return 0;
 }