}
 
        intel_encoder = &intel_dvo->base;
+       drm_encoder_init(dev, &intel_encoder->base,
+                        &intel_dvo_enc_funcs, encoder_type);
 
        /* Set up the DDC bus */
        intel_encoder->ddc_bus = intel_i2c_create(intel_encoder,
                connector->interlace_allowed = false;
                connector->doublescan_allowed = false;
 
-               drm_encoder_init(dev, &intel_encoder->base,
-                                &intel_dvo_enc_funcs, encoder_type);
                drm_encoder_helper_add(&intel_encoder->base,
                                       &intel_dvo_helper_funcs);
 
        if (i2cbus != NULL)
                intel_i2c_destroy(i2cbus);
 free_intel:
+       drm_encoder_cleanup(&intel_encoder->base);
        kfree(intel_dvo);
        kfree(intel_connector);
 }
 
        }
 
        intel_encoder = &intel_hdmi->base;
+       drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
+                        DRM_MODE_ENCODER_TMDS);
+
        connector = &intel_connector->base;
        drm_connector_init(dev, connector, &intel_hdmi_connector_funcs,
                           DRM_MODE_CONNECTOR_HDMIA);
 
        intel_hdmi->sdvox_reg = sdvox_reg;
 
-       drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
-                        DRM_MODE_ENCODER_TMDS);
        drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
 
        intel_connector_attach_encoder(intel_connector, intel_encoder);
        return;
 
 err_connector:
+       drm_encoder_cleanup(&intel_encoder->base);
        drm_connector_cleanup(connector);
        kfree(intel_hdmi);
        kfree(intel_connector);
 
 
        intel_encoder = &intel_sdvo->base;
        intel_encoder->type = INTEL_OUTPUT_SDVO;
+       /* encoder type will be decided later */
+       drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0);
 
        if (HAS_PCH_SPLIT(dev)) {
                i2c_reg = PCH_GPIOE;
        /* Wrap with our custom algo which switches to DDC mode */
        intel_encoder->ddc_bus->algo = &intel_sdvo_i2c_bit_algo;
 
-       /* encoder type will be decided later */
-       drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0);
        drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);
 
        /* In default case sdvo lvds is false */
        if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps))
-               goto err_enc;
+               goto err_i2c;
 
        if (intel_sdvo_output_setup(intel_sdvo,
                                    intel_sdvo->caps.output_flags) != true) {
                DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n",
                              IS_SDVOB(sdvo_reg) ? 'B' : 'C');
-               goto err_enc;
+               goto err_i2c;
        }
 
        intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo, sdvo_reg);
 
        /* Set the input timing to the screen. Assume always input 0. */
        if (!intel_sdvo_set_target_input(intel_sdvo))
-               goto err_enc;
+               goto err_i2c;
 
        if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,
                                                    &intel_sdvo->pixel_clock_min,
                                                    &intel_sdvo->pixel_clock_max))
-               goto err_enc;
+               goto err_i2c;
 
        DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
                        "clock range %dMHz - %dMHz, "
                        (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');
        return true;
 
-err_enc:
-       drm_encoder_cleanup(&intel_encoder->base);
 err_i2c:
        if (intel_encoder->ddc_bus != NULL)
                intel_i2c_destroy(intel_encoder->ddc_bus);
        if (intel_encoder->i2c_bus != NULL)
                intel_i2c_destroy(intel_encoder->i2c_bus);
 err_inteloutput:
+       drm_encoder_cleanup(&intel_encoder->base);
        kfree(intel_sdvo);
 
        return false;