struct cdn_dp_device *dp;
        struct extcon_dev *extcon;
        struct phy *phy;
+       int ret;
        int i;
 
        dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL);
        mutex_init(&dp->lock);
        dev_set_drvdata(dev, dp);
 
-       cdn_dp_audio_codec_init(dp, dev);
+       ret = cdn_dp_audio_codec_init(dp, dev);
+       if (ret)
+               return ret;
+
+       ret = component_add(dev, &cdn_dp_component_ops);
+       if (ret)
+               goto err_audio_deinit;
 
-       return component_add(dev, &cdn_dp_component_ops);
+       return 0;
+
+err_audio_deinit:
+       platform_device_unregister(dp->audio_pdev);
+       return ret;
 }
 
 static void cdn_dp_remove(struct platform_device *pdev)