void *data)
 {
        struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component);
-       int ret = -ENOTSUPP;
 
        if (hcp->hcd.ops->hook_plugged_cb) {
                hcp->jack = jack;
-               ret = hcp->hcd.ops->hook_plugged_cb(component->dev->parent,
-                                                   hcp->hcd.data,
-                                                   plugged_cb,
-                                                   component->dev);
-               if (ret)
-                       hcp->jack = NULL;
+               return 0;
        }
-       return ret;
+
+       return -ENOTSUPP;
 }
 
 static int hdmi_dai_spdif_probe(struct snd_soc_dai *dai)
        return ret;
 }
 
+static int hdmi_probe(struct snd_soc_component *component)
+{
+       struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component);
+       int ret = 0;
+
+       if (hcp->hcd.ops->hook_plugged_cb) {
+               ret = hcp->hcd.ops->hook_plugged_cb(component->dev->parent,
+                                                   hcp->hcd.data,
+                                                   plugged_cb,
+                                                   component->dev);
+       }
+
+       return ret;
+}
+
 static void hdmi_remove(struct snd_soc_component *component)
 {
        struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component);
 }
 
 static const struct snd_soc_component_driver hdmi_driver = {
+       .probe                  = hdmi_probe,
        .remove                 = hdmi_remove,
        .dapm_widgets           = hdmi_widgets,
        .num_dapm_widgets       = ARRAY_SIZE(hdmi_widgets),